diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilRadar.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilRadar.java index 9444efb9b..83c71933f 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilRadar.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilRadar.java @@ -86,7 +86,7 @@ public class UtilRadar UtilTextTop.display(text, player); - if(bossBar) + if (bossBar) { UtilTextTop.display(text, player); } @@ -111,4 +111,4 @@ public class UtilRadar } } } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java index 43338451f..3d07b269d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java @@ -572,18 +572,6 @@ public enum Achievement new int[]{80}, AchievementCategory.CHAMPIONS), - CHAMPIONS_FLAWLESS_VICTORY("Flawless Victory", 800, - new String[]{"Champions TDM.FlawlessVictory"}, - new String[]{"Win TDM without losing a player"}, - new int[]{1}, - AchievementCategory.CHAMPIONS), - - CHAMPIONS_ACE("Ace", 2000, - new String[]{"Champions TDM.Ace"}, - new String[]{"Kill all enemies in a game of TDM"}, - new int[]{1}, - AchievementCategory.CHAMPIONS), - CHAMPIONS_ASSASSINATION("Assassination", 1000, new String[]{"Champions Domination.Assassination", "Champions TDM.Assassination", "Champions CTF.Assassination"}, new String[]{"Kill 40 players with Backstab without", "taking any damage from them"}, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ArrowEffectGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ArrowEffectGadget.java index 1ed567538..8e0c4192b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ArrowEffectGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/ArrowEffectGadget.java @@ -68,10 +68,13 @@ public abstract class ArrowEffectGadget extends Gadget { if (!_arrows.remove(event.getEntity())) return; - + + if (Manager.hideParticles()) + return; + doHitEffect((Arrow)event.getEntity()); } public abstract void doTrail(Arrow arrow); public abstract void doHitEffect(Arrow arrow); -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java b/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java index b3a9fee7f..d4b455cbc 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java @@ -546,7 +546,7 @@ public class NewNPCManager extends MiniPlugin * @param entity The entity you want to check. * @return true if the entity is a {@link NPC}. */ - private boolean isNPC(Entity entity) + public boolean isNPC(Entity entity) { return getNPC(entity) != null; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/packethandler/PacketHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/packethandler/PacketHandler.java index 9b874b74a..8368defde 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/packethandler/PacketHandler.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/packethandler/PacketHandler.java @@ -1,16 +1,5 @@ package mineplex.core.packethandler; -import com.mineplex.spigot.PacketProcessor; -import mineplex.core.MiniPlugin; -import mineplex.core.ReflectivelyCreateMiniPlugin; -import net.minecraft.server.v1_8_R3.Packet; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -21,6 +10,20 @@ import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; +import net.minecraft.server.v1_8_R3.Packet; + +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import com.mineplex.spigot.PacketProcessor; + +import mineplex.core.MiniPlugin; +import mineplex.core.ReflectivelyCreateMiniPlugin; + @ReflectivelyCreateMiniPlugin public class PacketHandler extends MiniPlugin { 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 9e0687908..2073f7093 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 @@ -371,7 +371,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat itemIgnore.add("Proximity Explosive"); itemIgnore.add("Proximity Zapper"); - ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, _damageManager, energy, fire, _projectileManager, itemIgnore); + ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, _damageManager, energy, fire, _projectileManager, this, itemIgnore); SkillFactory skillManager = new SkillFactory(plugin, _damageManager, this, _combatManager, _condition, _projectileManager, _disguiseManager, blockRestore, fire, new Movement(plugin), teleport, energy); skillManager.RemoveSkill("Dwarf Toss", "Block Toss"); skillManager.removeSkill("Whirlwind Axe"); @@ -400,7 +400,11 @@ public class ClansManager extends MiniClientPlugin implements IRelat return true; }); ((Blink)skillManager.GetSkill("Blink")).setAllowTrapping(true); - ((Flash)skillManager.GetSkill("Flash")).setAllowTrapping(true); + + Flash flashSkill = (Flash) skillManager.GetSkill("Flash"); + flashSkill.setAllowTrapping(true); + flashSkill.setStartWithCharges(false); + registerEvents(new Listener() { @EventHandler diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 2bea97ea7..543dbacc8 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -42,7 +42,6 @@ import mineplex.core.movement.Movement; import mineplex.core.npc.NpcManager; import mineplex.core.packethandler.PacketHandler; import mineplex.core.party.PartyManager; -import mineplex.core.personalServer.PersonalServerManager; import mineplex.core.pet.PetManager; import mineplex.core.poll.PollManager; import mineplex.core.portal.GenericServer; @@ -180,7 +179,7 @@ public class Hub extends JavaPlugin implements IRelation Energy energy = new Energy(this); energy.setEnabled(false); - ItemFactory itemFactory = new ItemFactory(this, blockRestore, conditionManager, damage, energy, fire, throwManager); + ItemFactory itemFactory = new ItemFactory(this, blockRestore, conditionManager, damage, energy, fire, throwManager, this); SkillFactory skillManager = new SkillFactory(this, damage, this, combatManager, conditionManager, throwManager, disguiseManager, blockRestore, fire, new Movement(this), teleport, energy); ClassManager classManager = new ClassManager(this, clientManager, donationManager, hubManager.GetGadget(), skillManager, itemFactory); itemFactory.deregisterSelf(); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java index 14342ca36..28137b528 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClassManager.java @@ -173,7 +173,7 @@ public class ClassManager extends MiniClientPlugin implements IClas customBuild.Name = "Default Build"; customBuild.SwordSkill = "Evade"; - customBuild.SwordSkillLevel = 2; + customBuild.SwordSkillLevel = 1; customBuild.AxeSkill = "Leap"; customBuild.AxeSkillLevel = 3; customBuild.BowSkill = "Smoke Arrow"; @@ -195,16 +195,16 @@ public class ClassManager extends MiniClientPlugin implements IClas CustomBuildToken customBuild = new CustomBuildToken(ClassType.Mage); customBuild.Name = "Default Build"; - customBuild.SwordSkill = "Blizzard"; + customBuild.SwordSkill = "Inferno"; customBuild.SwordSkillLevel = 3; - customBuild.AxeSkill = "Ice Prison"; + customBuild.AxeSkill = "Fire Blast"; customBuild.AxeSkillLevel = 3; customBuild.BowSkill = ""; - customBuild.ClassPassiveASkill = "Arctic Armor"; - customBuild.ClassPassiveASkillLevel = 2; - customBuild.ClassPassiveBSkill = "Glacial Blade"; + customBuild.ClassPassiveASkill = "Immolate"; + customBuild.ClassPassiveASkillLevel = 1; + customBuild.ClassPassiveBSkill = "Magma Blade"; customBuild.ClassPassiveBSkillLevel = 2; - customBuild.GlobalPassiveSkill = "Mana Pool"; + customBuild.GlobalPassiveSkill = "Break Fall"; customBuild.GlobalPassiveSkillLevel = 2; AddClass(new PvpClass(this, 4, ClassType.Mage, customBuild, new String[] { "Trained in the ancient arts.", @@ -226,7 +226,7 @@ public class ClassManager extends MiniClientPlugin implements IClas customBuild.ClassPassiveASkill = "Stampede"; customBuild.ClassPassiveASkillLevel = 2; customBuild.ClassPassiveBSkill = "Crippling Blow"; - customBuild.ClassPassiveBSkillLevel = 2; + customBuild.ClassPassiveBSkillLevel = 1; customBuild.GlobalPassiveSkill = "Recharge"; customBuild.GlobalPassiveSkillLevel = 1; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java index df0516404..4d10e679e 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/ClientClass.java @@ -579,7 +579,7 @@ public class ClientClass return false; } - if (!skillName.isEmpty() && (skill == null || skill.GetSkillType() != expectedType || (!skill.IsFree() && !_donor.ownsUnknownSalesPackage("Champions " + skillName) && !_client.hasPermission(ClassShopManager.Perm.SKILL_UNLOCK_LEGACY) && !_donor.ownsUnknownSalesPackage("Competitive ULTRA")))) + if (!skillName.isEmpty() && (skill.GetSkillType() != expectedType || !skill.IsFree() && !_donor.ownsUnknownSalesPackage("Champions " + skillName) && !_client.hasPermission(ClassShopManager.Perm.SKILL_UNLOCK_LEGACY) && !_donor.ownsUnknownSalesPackage("Competitive ULTRA"))) { return false; } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java index 06f4183d8..54234d3f2 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Class/repository/token/CustomBuildToken.java @@ -11,8 +11,8 @@ import mineplex.minecraft.game.classcombat.item.Item; public class CustomBuildToken { - public static int MAX_SKILL_TOKENS = 12; - public static int MAX_ITEM_TOKENS = 12; + public static final int MAX_SKILL_TOKENS = 12; + public static final int MAX_ITEM_TOKENS = 12; public int CustomBuildId; @@ -42,7 +42,7 @@ public class CustomBuildToken public String GlobalPassiveSkill = ""; public Integer GlobalPassiveSkillLevel = 0; - public List Slots = new ArrayList(9); + public final List Slots = new ArrayList<>(9); public int SkillTokens = MAX_SKILL_TOKENS; public int ItemTokens = 1; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Assassin.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Assassin.java index ce716640a..1830339d5 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Assassin.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Assassin.java @@ -1,5 +1,6 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; +import org.bukkit.entity.Arrow; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -23,7 +24,8 @@ public class Assassin extends Skill SetDesc(new String[] { "Permanent Speed II.", - "Fall damage reduced by 1.5." + "Fall damage reduced by 1.5.", + "Arrows deal 37.5% less damage." }); } @@ -69,25 +71,39 @@ public class Assassin extends Skill if (level == 0) return; event.SetKnockback(false); - event.AddMod(damager.getName(), "Assassin Class", 0, false); + event.AddMod(damager.getName(), GetName(), 0, false); } @EventHandler(priority = EventPriority.HIGH) public void FallDamage(CustomDamageEvent event) { if (event.IsCancelled()) + { return; - - if (event.GetCause() != DamageCause.FALL) - return; + } Player player = event.GetDamageePlayer(); - if (player == null) return; + + if (player == null) + { + return; + } int level = getLevel(player); - if (level == 0) return; - event.AddMod(null, GetName(), -1.5, false); + if (level == 0) + { + return; + } + + if (event.GetCause() == DamageCause.FALL) + { + event.AddMod(null, GetName(), -1.5, false); + } + else if (event.GetCause() == DamageCause.PROJECTILE && event.GetProjectile() instanceof Arrow) + { + event.AddMod(null, GetName(), -event.GetDamage() * 0.375, false); + } } @EventHandler diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/BackStab.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/BackStab.java index 1830b15e5..b9e7c9d57 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/BackStab.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/BackStab.java @@ -9,6 +9,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; +import mineplex.core.recharge.Recharge; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.minecraft.game.classcombat.Skill.Skill; @@ -23,7 +24,7 @@ public class BackStab extends Skill SetDesc(new String[] { "Attacks from behind opponents", - "deal #1#1 additional damage.", + "deal #1.5#1.5 additional damage.", }); } @@ -57,30 +58,12 @@ public class BackStab extends Skill if (check.subtract(from).length() < 0.8) { //Damage - event.AddMod(damager.getName(), GetName(), 1 + level, true); + event.AddMod(damager.getName(), GetName(), 1.5 + 1.5 * level, true); //Effect damagee.getWorld().playSound(damagee.getLocation(), Sound.HURT_FLESH, 1f, 2f); damagee.getWorld().playEffect(damagee.getLocation(), Effect.STEP_SOUND, 55); - return; } - - /* - check = new Vector(look.getZ() * -1, 0, look.getX()); - if (check.subtract(from).length() < 0.7) - { - //Damage - event.AddMod(damager.getName(), "Sidestab", level * 1, true); - return; - } - - check = new Vector(look.getZ(), 0, look.getX() * -1); - if (check.subtract(from).length() < 0.7) - { - //Damage - event.AddMod(damager.getName(), "Sidestab", level * 1, true); - return; - }*/ } @Override @@ -88,4 +71,4 @@ public class BackStab extends Skill { } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java index 1f4add66d..4d54cff6e 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Blink.java @@ -18,6 +18,7 @@ import org.bukkit.util.Vector; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; @@ -58,7 +59,7 @@ public class Blink extends SkillActive "Instantly teleport forwards #9#3 Blocks.", "Cannot be used while Slowed.", "", - "Using again within 5 seconds De-Blinks,", + "Using again within #6#-1 seconds De-Blinks,", "returning you to your original location.", "Cannot be used while Slowed." }); @@ -73,7 +74,7 @@ public class Blink extends SkillActive UtilPlayer.message(player, F.main(GetClassType().name(), "You cannot use " + F.skill(GetName()) + " while Slowed.")); return false; } - else if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + else if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -89,10 +90,12 @@ public class Blink extends SkillActive //Deblink if (_loc.containsKey(player) && _blinkTime.containsKey(player)) { - if (!UtilTime.elapsed(_blinkTime.get(player), 5000)) + long time = _blinkTime.get(player); + + if (!UtilTime.elapsed(time, 6000 - (1000 * level))) { //Require 500ms after blink to deblink - if (UtilTime.elapsed(_blinkTime.get(player), 500)) + if (UtilTime.elapsed(time, 500)) Deblink(player, level); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ComboAttack.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ComboAttack.java index 6bfbd3d85..b85c3e0a5 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ComboAttack.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ComboAttack.java @@ -1,26 +1,30 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.WeakHashMap; import org.bukkit.Sound; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +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; public class ComboAttack extends Skill { - private WeakHashMap _repeat = new WeakHashMap(); - private WeakHashMap _last = new WeakHashMap(); + private final Map _repeat = new WeakHashMap<>(); + private final Map _last = new WeakHashMap<>(); + private final Map _lastTarget = new WeakHashMap<>(); public ComboAttack(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { @@ -48,13 +52,25 @@ public class ComboAttack extends Skill //Damager Player damager = event.GetDamagerPlayer(false); - if (damager == null) return; + if (damager == null) return; int level = getLevel(damager); if (level == 0) return; + + LivingEntity target = event.GetDamageeEntity(); + if (target == null) return; + + Integer lastId = _lastTarget.put(damager, target.getEntityId()); + if (lastId == null || lastId != target.getEntityId()) + { + _repeat.remove(damager); + _last.remove(damager); + } if (!_repeat.containsKey(damager)) + { _repeat.put(damager, 0.5f); + } //Damage event.AddMod(damager.getName(), GetName(), _repeat.get(damager), true); @@ -73,16 +89,21 @@ public class ComboAttack extends Skill if (event.getType() != UpdateType.FAST) return; - HashSet remove = new HashSet(); + Set remove = new HashSet<>(); for (Player cur : _repeat.keySet()) + { if (UtilTime.elapsed(_last.get(cur), 2000)) + { remove.add(cur); + } + } for (Player cur : remove) { _repeat.remove(cur); _last.remove(cur); + _lastTarget.remove(cur); } } @@ -91,5 +112,6 @@ public class ComboAttack extends Skill { _repeat.remove(player); _last.remove(player); + _lastTarget.remove(player); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java index 128ee2a11..9f5e36ced 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Evade.java @@ -1,8 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; +import java.util.Map; import org.bukkit.Effect; import org.bukkit.Location; @@ -16,26 +16,27 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class Evade extends SkillActive { - private HashMap _active = new HashMap(); + + private final Map _active = new HashMap<>(); public Evade(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -63,7 +64,7 @@ public class Evade extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -120,30 +121,37 @@ public class Evade extends SkillActive damagee.getWorld().playEffect(damagee.getLocation(), Effect.SMOKE, 5); //Location - Location target = null; - if (damagee.isSneaking()) target = FindLocationBack(damager, damagee); - else target = FindLocationBehind(damager, damagee); + Location target; + if (damagee.isSneaking()) + { + target = FindLocationBack(damager, damagee); + } + else + { + target = FindLocationBehind(damager, damagee); + } + if (target == null) return; //Effect - UtilParticle.PlayParticle(ParticleType.LARGE_SMOKE, damagee.getLocation(), - (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10, - ViewDist.NORMAL, UtilServer.getPlayers()); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_SMOKE, damagee.getLocation(), (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 10, ViewDist.NORMAL); //Action damagee.teleport(target); //Cloak if (damagee.isSneaking()) + { Factory.Condition().Factory().Cloak(GetName(), damagee, damagee, 0.1, false, false); + } - //Invul/Cloak - Factory.Condition().Factory().Invulnerable(GetName(), damagee, damagee, 0.5, false, false); + event.SetCancelled("Evaded"); //Inform UtilPlayer.message(damagee, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); UtilPlayer.message(damager, F.main(GetClassType().name(), F.name(damagee.getName()) +" used " + F.skill(GetName(level)) + ".")); + Recharge.Instance.useForce(damagee, GetName(), 250, true); } private Location FindLocationBehind(LivingEntity damager, Player damagee) @@ -218,7 +226,7 @@ public class Evade extends SkillActive { activeIter.remove(); UtilPlayer.message(player, F.main(GetClassType().name(), "You failed to " + F.skill(GetName()) + ".")); - Recharge.Instance.useForce(player, GetName(), 10000l, true); + Recharge.Instance.useForce(player, GetName(), 16000, true); } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java index 6ace97598..eaa8f88f2 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Flash.java @@ -3,6 +3,9 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; import java.util.HashMap; import java.util.Map; +import net.minecraft.server.v1_8_R3.AxisAlignedBB; +import net.minecraft.server.v1_8_R3.Entity; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -17,57 +20,57 @@ import org.bukkit.util.Vector; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilItem; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.classcombat.Skill.event.SkillTeleportEvent; -import net.minecraft.server.v1_8_R3.AxisAlignedBB; -import net.minecraft.server.v1_8_R3.Entity; public class Flash extends SkillActive { - private Map _flash = new HashMap<>(); - private boolean _allowTrapping = false; - public Flash(SkillFactory skills, String name, ClassType classType, SkillType skillType, - int cost, int levels, - int energy, int energyMod, - long recharge, long rechargeMod, boolean rechargeInform, - Material[] itemArray, - Action[] actionArray) + private final Map _flash = new HashMap<>(); + private boolean _allowTrapping = false, _startWithCharges = true; + + public Flash(SkillFactory skills, String name, ClassType classType, SkillType skillType, + int cost, int levels, + int energy, int energyMod, + long recharge, long rechargeMod, boolean rechargeInform, + Material[] itemArray, + Action[] actionArray) { super(skills, name, classType, skillType, cost, levels, - energy, energyMod, - recharge, rechargeMod, rechargeInform, + energy, energyMod, + recharge, rechargeMod, rechargeInform, itemArray, actionArray); - SetDesc(new String[] + SetDesc(new String[] { - "Teleport forwards 6 Blocks.", - "Store up to #1#1 Flash Charges.", - "Cannot be used while Slowed." + "Teleport forwards 6 Blocks.", + "Store up to #1#1 Flash Charges.", + "Cannot be used while Slowed." }); } - + @Override public String GetRechargeString() { - return "Recharge: #8#-1 Seconds per Charge"; + return "Recharge: 4 Seconds per Charge"; } @SuppressWarnings("deprecation") @Override - public boolean CustomCheck(Player player, int level) + public boolean CustomCheck(Player player, int level) { if (player.hasPotionEffect(PotionEffectType.SLOW)) { @@ -75,21 +78,23 @@ public class Flash extends SkillActive return false; } - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; } - + // Check to see if teleporting event is valid Location destination = getDestination(player, getMaxRange(player)); SkillTeleportEvent teleportEvent = new SkillTeleportEvent(player, destination); Bukkit.getPluginManager().callEvent(teleportEvent); - - if (teleportEvent.isCancelled()) return false; // Teleport cancelled + + if (teleportEvent.isCancelled()) return false; // Teleport cancelled //No Flash - if (!_flash.containsKey(player) || _flash.get(player) == 0) + _flash.putIfAbsent(player, _startWithCharges ? 1 + level : 1); + + if (_flash.get(player) == 0) { UtilPlayer.message(player, F.main("Skill", "You have no " + F.skill(GetName() + " Charges") + ".")); return false; @@ -101,34 +106,32 @@ public class Flash extends SkillActive @EventHandler public void recharge(UpdateEvent event) { - for (Player cur : GetUsers()) + if (event.getType() != UpdateType.TICK) { - if (!_flash.containsKey(cur)) - { - _flash.put(cur, 0); - } - else - { - int charges = _flash.get(cur); - int level = getLevel(cur); - - if (charges >= 1 + level) - continue; - - if (!Recharge.Instance.use(cur, "Flash Recharge", 8000 - (1000 * level), false, false)) - continue; - - _flash.put(cur, charges + 1); - - //Inform - UtilPlayer.message(cur, F.main(GetClassType().name(), "Flash Charges: " + F.elem((charges + 1) + ""))); - } + return; } + + _flash.entrySet().forEach(entry -> + { + Player cur = entry.getKey(); + int charges = entry.getValue(); + int level = getLevel(cur); + + if (charges >= 1 + level || !Recharge.Instance.use(cur, "Flash Recharge", 4000, false, false)) + { + return; + } + + entry.setValue(charges + 1); + + //Inform + UtilPlayer.message(cur, F.main(GetClassType().name(), "Flash Charges: " + F.elem((charges + 1) + ""))); + }); } @SuppressWarnings("deprecation") @Override - public void Skill(Player player, int level) + public void Skill(Player player, int level) { //Use Recharge Recharge.Instance.use(player, "Flash Recharge", 8000, false, false); @@ -137,17 +140,18 @@ public class Flash extends SkillActive //Inform UtilPlayer.message(player, F.main(GetClassType().name(), "Flash Charges: " + F.elem(_flash.get(player) + ""))); - + Location start = player.getLocation().add(new Vector(0, 0.2, 0)); - Location test = null; + Location test; Location end = start.clone(); Vector dir = player.getLocation().getDirection(); - AxisAlignedBB box = null; - Entity ent = ((CraftEntity)player).getHandle(); + AxisAlignedBB box; + Entity ent = ((CraftEntity) player).getHandle(); double maxRange = getMaxRange(player); double range = 0; - - rangeLoop: while (range <= maxRange) + + rangeLoop: + while (range <= maxRange) { test = start.clone().add(dir.clone().multiply(range)); float halfWidth = ent.width / 2; @@ -163,9 +167,9 @@ public class Flash extends SkillActive { bottom = true; } - + boolean locIsBottom = (Math.max(test.getY(), b.getY()) - Math.min(test.getY(), b.getY())) < 0.5; - + if (bottom == locIsBottom) { break rangeLoop; @@ -183,49 +187,48 @@ public class Flash extends SkillActive break rangeLoop; } } - + range += 0.1; end = test.clone(); //Smoke Trail - UtilParticle.PlayParticle(ParticleType.FIREWORKS_SPARK, end.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, - ViewDist.LONGER, UtilServer.getPlayers()); + UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, end.clone().add(0, 0.5, 0), 0, 0, 0, 0, 1, ViewDist.LONG); } - + if (range > 0) { player.teleport(end); } - + player.setFallDistance(0); - + //Effect player.getWorld().playSound(player.getLocation(), Sound.WITHER_SHOOT, 0.4f, 1.2f); player.getWorld().playSound(player.getLocation(), Sound.SILVERFISH_KILL, 1f, 1.6f); } @Override - public void Reset(Player player) + public void Reset(Player player) { _flash.remove(player); } - + private double getMaxRange(Player player) { return 6; } - + private Location getDestination(Player player, double range) { return player.getLocation().add(player.getLocation().getDirection().multiply(range).add(new Vector(0, 0.4, 0))); } - - public boolean isAllowTrapping() - { - return _allowTrapping; - } - + public void setAllowTrapping(boolean allowTrapping) { _allowTrapping = allowTrapping; } + + public void setStartWithCharges(boolean startWithCharges) + { + _startWithCharges = startWithCharges; + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java index 8c6261db8..58b997422 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Illusion.java @@ -7,7 +7,6 @@ import java.util.UUID; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Skeleton; @@ -17,20 +16,23 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; +import com.mojang.authlib.GameProfile; + import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.disguise.disguises.DisguisePlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.core.utils.UtilGameProfile; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.classcombat.event.ClassCombatCreatureAllowSpawnEvent; @@ -75,7 +77,7 @@ public class Illusion extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -115,11 +117,21 @@ public class Illusion extends SkillActive inRange.add(other.getUniqueId()); //Disguise - DisguisePlayer disguise = new DisguisePlayer(skel, ((CraftPlayer)player).getHandle().getProfile()); - Factory.Disguise().disguise(disguise, attempted -> inRange.contains(attempted.getUniqueId())); + GameProfile profile = UtilGameProfile.getGameProfile(player); + + try + { + UtilGameProfile.changeId(profile, UUID.randomUUID()); + DisguisePlayer disguise = new DisguisePlayer(skel, profile); + Factory.Disguise().disguise(disguise, attempted -> inRange.contains(attempted.getUniqueId())); + } + catch (ReflectiveOperationException ex) + { + ex.printStackTrace(); + } //Invis - Factory.Condition().Factory().Cloak(GetName(), player, player, 2 + 1*level, false, true); + Factory.Condition().Factory().untrueCloak(GetName(), player, player, 2 + 1*level, false); _active.put(player, skel); @@ -140,7 +152,7 @@ public class Illusion extends SkillActive Skeleton skel = _active.get(cur); - if (Factory.Condition().GetActiveCondition(cur, ConditionType.CLOAK) == null || + if (Factory.Condition().GetActiveCondition(cur, ConditionType.UNTRUE_CLOAK) == null || !UtilPlayer.isBlocking(cur) || //!Factory.Energy().Use(cur, getName(), 0.625 - (getLevel(cur) * 0.025), true, true) || skel == null || @@ -190,6 +202,11 @@ public class Illusion extends SkillActive { if (cur.equals(player)) continue; + + if (cur instanceof Player && !Factory.Relation().canHurt(player, (Player)cur)) + { + continue; + } //Condition Factory.Condition().Factory().Slow(GetName(), cur, player, 4 * targets.get(cur), 1, false, false, false, false); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Leap.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Leap.java index 06bdda17a..62bddb491 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Leap.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Leap.java @@ -5,19 +5,24 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; 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.entity.EntityDamageEvent.DamageCause; import org.bukkit.potion.PotionEffectType; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; +import mineplex.core.recharge.Recharge; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class Leap extends SkillActive { @@ -41,7 +46,8 @@ public class Leap extends SkillActive "", "Wall Kick by using Leap with your", "back against a wall. This doesn't", - "trigger Leaps Recharge.", + "trigger Leaps Recharge but has a cooldown", + "of 1.5 seconds.", "", "Cannot be used while Slowed." }); @@ -50,7 +56,7 @@ public class Leap extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -108,7 +114,7 @@ public class Leap extends SkillActive if (level == 0) return false; //Recharge & Energy - if (!mineplex.core.recharge.Recharge.Instance.use(player, "Wall Kick", 1500, false, false)) + if (!Recharge.Instance.use(player, "Wall Kick", 1500, false, false)) return false; //Direction @@ -180,10 +186,28 @@ public class Leap extends SkillActive return false; } + + @EventHandler(priority = EventPriority.HIGH) + public void Damage(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + if (event.GetCause() != DamageCause.FALL) + return; + + Player player = event.GetDamageePlayer(); + if (player == null) return; + + int level = getLevel(player); + if (level == 0) return; + + event.AddMod(null, GetName(), -2, false); + } @Override public void Reset(Player player) { } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java index e2ec6e686..d524cfb88 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/MarkedForDeath.java @@ -1,8 +1,7 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; +import java.util.Map; import org.bukkit.Material; import org.bukkit.Sound; @@ -14,58 +13,57 @@ import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerQuitEvent; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class MarkedForDeath extends SkillActive { - private HashSet _arrows = new HashSet(); - private HashSet _active = new HashSet(); - private HashMap _markedTime = new HashMap(); - private HashMap _markedDamage = new HashMap(); - public MarkedForDeath(SkillFactory skills, String name, ClassType classType, SkillType skillType, - int cost, int levels, - int energy, int energyMod, - long recharge, long rechargeMod, boolean rechargeInform, - Material[] itemArray, - Action[] actionArray) + private final Map _data = new HashMap<>(); + + public MarkedForDeath(SkillFactory skills, String name, ClassType classType, SkillType skillType, + int cost, int levels, + int energy, int energyMod, + long recharge, long rechargeMod, boolean rechargeInform, + Material[] itemArray, + Action[] actionArray) { - super(skills, name, classType, skillType, + super(skills, name, classType, skillType, cost, levels, - energy, energyMod, - recharge, rechargeMod, rechargeInform, + energy, energyMod, + recharge, rechargeMod, rechargeInform, itemArray, actionArray); - SetDesc(new String[] + SetDesc(new String[] { - "Your next arrow will mark players,", - "making them take #2.5#1.5 more damage", - "from the next melee attack.", - "", - "Lasts for #3#1 seconds." + "Your next arrow will mark players,", + "making them take #2.5#1.5 more damage", + "from the next melee attack.", + "", + "Lasts for #3#1 seconds." }); } @Override - public boolean CustomCheck(Player player, int level) + public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main(GetClassType().name(), "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -75,10 +73,9 @@ public class MarkedForDeath extends SkillActive } @Override - public void Skill(Player player, int level) + public void Skill(Player player, int level) { - //Action - _active.add(player); + _data.put(player, new MarkedData(player)); //Inform UtilPlayer.message(player, F.main(GetClassType().name(), "You prepared " + F.skill(GetName(level)) + ".")); @@ -90,144 +87,152 @@ public class MarkedForDeath extends SkillActive @EventHandler public void ShootBow(EntityShootBowEvent event) { - if (!(event.getEntity() instanceof Player)) + if (!(event.getEntity() instanceof Player) || !(event.getProjectile() instanceof Arrow)) + { return; + } - if (!(event.getProjectile() instanceof Arrow)) - return; - - Player player = (Player)event.getEntity(); - - if (!_active.remove(player)) + Player player = (Player) event.getEntity(); + MarkedData data = _data.get(player); + + if (data == null || data.Arrow != null) + { return; + } //Inform UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(getLevel(player))) + ".")); - - _arrows.add(event.getProjectile()); + data.Arrow = event.getProjectile(); } @EventHandler(priority = EventPriority.HIGH) public void DamageMark(CustomDamageEvent event) { if (event.IsCancelled()) + { return; - - if (event.GetCause() != DamageCause.PROJECTILE) - return; + } Projectile projectile = event.GetProjectile(); - if (projectile == null) return; - if (!_arrows.contains((Entity)projectile)) + if (projectile == null) + { return; - - LivingEntity damagee = event.GetDamageeEntity(); - if (damagee == null) return; + } Player damager = event.GetDamagerPlayer(true); - if (damager == null) return; - - //Level + MarkedData data = _data.get(damager); int level = getLevel(damager); - if (level == 0) return; + + if (damager == null || data == null || level == 0 || !projectile.equals(data.Arrow)) + { + return; + } + + LivingEntity damagee = event.GetDamageeEntity(); //Effect damagee.getWorld().playSound(damagee.getLocation(), Sound.BLAZE_BREATH, 2.5f, 2.0f); //Inform - UtilPlayer.message(event.GetDamageePlayer(), F.main(GetClassType().name(), F.name(damager.getName()) +" hit you with " + F.skill(GetName(level)) + ".")); - UtilPlayer.message(damager, F.main(GetClassType().name(), "You hit " + F.name(UtilEnt.getName(damagee)) +" with " + F.skill(GetName(level)) + ".")); - + UtilPlayer.message(event.GetDamageePlayer(), F.main(GetClassType().name(), F.name(damager.getName()) + " hit you with " + F.skill(GetName(level)) + ".")); + UtilPlayer.message(damager, F.main(GetClassType().name(), "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(GetName(level)) + ".")); + //Mark - _markedTime.put(damagee, System.currentTimeMillis() + (3000 + 1000 * level)); - _markedDamage.put(damagee, 2.5 + 1.5 * level); - + data.Timeout = System.currentTimeMillis() + (3000 + 1000 * level); + data.Damage = 2.5 + 1.5 * level; + data.Marked = damagee; + //Remove projectile.remove(); } - + @EventHandler(priority = EventPriority.HIGH) public void DamageAmplify(CustomDamageEvent event) { - if (event.IsCancelled()) - return; - - if (event.GetCause() != DamageCause.ENTITY_ATTACK) + if (event.IsCancelled() || event.GetCause() != DamageCause.ENTITY_ATTACK) + { return; + } - LivingEntity damagee = event.GetDamageeEntity(); - if (damagee == null) return; + Player damager = event.GetDamagerPlayer(false); - if (!_markedTime.containsKey(damagee) || !_markedDamage.containsKey(damagee)) + if (damager == null) + { return; - - long time = _markedTime.remove(damagee); - double damage = _markedDamage.remove(damagee); - - if (System.currentTimeMillis() > time) + } + + MarkedData data = _data.get(damager); + + if (data == null || !event.GetDamageeEntity().equals(data.Marked) || data.isExpired()) + { return; - - event.AddMod(GetName(), GetName(), damage, true); + } + + _data.remove(damager); + event.AddMod(GetName(), GetName(), data.Damage, true); + } + + @EventHandler + public void playerDeath(PlayerDeathEvent event) + { + Player killed = event.getEntity(), killer = killed.getKiller(); + MarkedData data = _data.get(killer); + + if (data == null || !killed.equals(data.Marked)) + { + return; + } + + UtilPlayer.health(killer, 2 + getLevel(killer)); } @EventHandler public void Particle(UpdateEvent event) { if (event.getType() != UpdateType.TICK) + { return; - - for (Entity ent : _arrows) - { - UtilParticle.PlayParticle(ParticleType.MOB_SPELL, ent.getLocation(), 0, 0, 0, 0, 1, - ViewDist.MAX, UtilServer.getPlayers()); } - } - - @EventHandler - public void Clean(UpdateEvent event) - { - if (event.getType() != UpdateType.SEC) - return; - - for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) + + _data.values().forEach(data -> { - Entity arrow = arrowIterator.next(); - - if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround()) - arrowIterator.remove(); - } - - for (Iterator activeIterator = _active.iterator(); activeIterator.hasNext();) - { - Player player = activeIterator.next(); - - if (!player.isOnline()) - activeIterator.remove(); - } - - for (Iterator markedTimeIterator = _markedTime.keySet().iterator(); markedTimeIterator.hasNext();) - { - LivingEntity markedTime = markedTimeIterator.next(); - - if (markedTime.isDead() || !markedTime.isValid()) - markedTimeIterator.remove(); - } - - for (Iterator markedDamageIterator = _markedDamage.keySet().iterator(); markedDamageIterator.hasNext();) - { - LivingEntity markedDamage = markedDamageIterator.next(); - - if (markedDamage.isDead() || !markedDamage.isValid()) - markedDamageIterator.remove(); - } + if (data.Arrow != null && data.Arrow.isValid()) + { + UtilParticle.PlayParticleToAll(ParticleType.MOB_SPELL, data.Arrow.getLocation(), null, 0, 1, ViewDist.LONG); + } + }); } @Override - public void Reset(Player player) + public void Reset(Player player) { - _active.remove(player); - _markedTime.remove(player); - _markedDamage.remove(player); + _data.remove(player); + } + + @EventHandler + public void playerQuit(PlayerQuitEvent event) + { + Reset(event.getPlayer()); + } + + private class MarkedData + { + + final Player Shooter; + LivingEntity Marked; + Entity Arrow; + double Damage; + long Timeout; + + MarkedData(Player shooter) + { + Shooter = shooter; + } + + boolean isExpired() + { + return Timeout > 0 && System.currentTimeMillis() > Timeout; + } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java index f293f5c7f..ee5f07b5d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/Recall.java @@ -2,26 +2,25 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; import java.util.HashMap; import java.util.LinkedList; +import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Sound; -import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCrafting; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.potion.PotionEffectType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -32,8 +31,10 @@ import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; public class Recall extends Skill { - private HashMap> _locMap = new HashMap>(); - private HashMap> _healthMap = new HashMap>(); + + private final Map> _mainLocMap = new HashMap<>(); + private final Map> _secondaryLocMap = new HashMap<>(); + private final Map> _secondaryHealthMap = new HashMap<>(); public Recall(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { @@ -43,16 +44,21 @@ public class Recall extends Skill { "Drop Axe/Sword to Use.", "", - "Go back in time #2#2 seconds,", + "Go back in time #3#1 seconds,", "restoring your location and", - "up to #3#1 health." + "regeneration 3 for #2#+1 seconds", + "Cannot be used while Slowed.", + "", + "Hold shift when using to go", + "back 2 seconds, restoring your", + "location and up to #1.5#0.5 health.", }); } @Override public String GetRechargeString() { - return "Recharge: #60#-10 Seconds"; + return "Recharge: #35#-5 Seconds"; } @EventHandler @@ -68,13 +74,21 @@ public class Recall extends Skill return; event.setCancelled(true); - - if (UtilBlock.water(player.getLocation().getBlock())) + + boolean secondary = player.isSneaking(); + + if (!secondary && player.hasPotionEffect(PotionEffectType.SLOW)) { - UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); + UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " while Slowed.")); return; } - + + if (UtilEnt.isInWater(player)) + { + player.sendMessage(F.main("Skill", "You cannot use " + F.skill(GetName()) +" while in water.")); + return; + } + //Check Allowed SkillTriggerEvent trigger = new SkillTriggerEvent(player, GetName(), GetClassType()); Bukkit.getServer().getPluginManager().callEvent(trigger); @@ -82,29 +96,34 @@ public class Recall extends Skill if (trigger.IsCancelled()) return; - if (!Recharge.Instance.use(player, GetName(), GetName(level), 60000 - (level * 10000), true, false)) + if (!Recharge.Instance.use(player, GetName(), GetName(level), secondary ? 18000 - (level * 2000) : 35000 - (level * 5000), true, false)) return; - LinkedList locs = _locMap.remove(player); + LinkedList locs = secondary ? _secondaryLocMap.remove(player) : _mainLocMap.remove(player); if (locs == null) return; - LinkedList health = _healthMap.remove(player); + LinkedList health = _secondaryHealthMap.remove(player); if (health == null) return; - Factory.runSync(() -> { - if (player.isDead()) + Factory.runSync(() -> + { + if (player.isDead() || !player.getWorld().equals(locs.getLast().getWorld())) { return; } - if (!player.getWorld().equals(locs.getLast().getWorld())) + + if (secondary) { - return; + //Heal + double newHealth = Math.min(health.getLast(), player.getHealth() + 1.5 + (level / 2D)); + player.setHealth(newHealth); + } + else + { + Factory.Condition().Factory().Regen(GetName(), player, player, 1 + level, 2, false, true, false); } - //Heal - double newHealth = Math.min(health.getLast(), player.getHealth() + 3 + level); - player.setHealth(newHealth); //Effect player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 2f); @@ -116,21 +135,19 @@ public class Recall extends Skill player.teleport(target); //Inform - UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); + UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill((secondary ? "Secondary " : "") + GetName(level)) + ".")); //Effect player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 2f, 2f); - while (UtilMath.offset(current, target) > 0.5) + while (UtilMath.offsetSquared(current, target) > 0.25) { - UtilParticle.PlayParticle(ParticleType.WITCH_MAGIC, current, 0, 1f, 0, 0, 1, - ViewDist.LONGER, UtilServer.getPlayers()); + UtilParticle.PlayParticleToAll(ParticleType.WITCH_MAGIC, current, 0, 1f, 0, 0, 1, ViewDist.LONG); current = current.add(UtilAlg.getTrajectory(current, target).multiply(0.1)); } }); } - @EventHandler public void storeLocation(UpdateEvent event) { @@ -139,32 +156,39 @@ public class Recall extends Skill for (Player cur : GetUsers()) { - //Create - if (!_locMap.containsKey(cur)) - _locMap.put(cur, new LinkedList()); - - if (!_healthMap.containsKey(cur)) - _healthMap.put(cur, new LinkedList()); - //Store - _locMap.get(cur).addFirst(cur.getLocation()); - _healthMap.get(cur).addFirst(cur.getHealth()); + _mainLocMap.computeIfAbsent(cur, (key) -> new LinkedList<>()).addFirst(cur.getLocation()); + _secondaryLocMap.computeIfAbsent(cur, (key) -> new LinkedList<>()).addFirst(cur.getLocation()); + _secondaryHealthMap.computeIfAbsent(cur, (key) -> new LinkedList<>()).addFirst(cur.getHealth()); int level = getLevel(cur); - //Cull - if (_locMap.get(cur).size() > (2 + 2 * level) * 20) - _locMap.get(cur).removeLast(); + long maxMainSize = (3 + level) * 20; + long maxSecondarySize = 2 * 20; - if (_healthMap.get(cur).size() > (2 + 2 * level) * 20) - _healthMap.get(cur).removeLast(); + //Cull + if (_mainLocMap.get(cur).size() > maxMainSize) + { + _mainLocMap.get(cur).removeLast(); + } + + if (_secondaryLocMap.get(cur).size() > maxSecondarySize) + { + _secondaryLocMap.get(cur).removeLast(); + } + + if (_secondaryHealthMap.get(cur).size() > maxSecondarySize) + { + _secondaryHealthMap.get(cur).removeLast(); + } } } @Override public void Reset(Player player) { - _locMap.remove(player); - _healthMap.remove(player); + _mainLocMap.remove(player); + _secondaryLocMap.remove(player); + _secondaryHealthMap.remove(player); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ShockingStrikes.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ShockingStrikes.java index f0bbda382..c339794b7 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ShockingStrikes.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ShockingStrikes.java @@ -1,5 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; +import java.util.Map; +import java.util.WeakHashMap; + import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -7,13 +10,17 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.core.common.util.UtilGear; +import mineplex.core.recharge.Recharge; 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.core.damage.CustomDamageEvent; public class ShockingStrikes extends Skill { + + private final Map _combos = new WeakHashMap<>(); + public ShockingStrikes(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { super(skills, name, classType, skillType, cost, levels); @@ -21,8 +28,10 @@ public class ShockingStrikes extends Skill SetDesc(new String[] { "Your attacks shock targets for", - "#0#1 seconds, giving them Slow 1 and", - "Screen-Shake." + "#0#1 seconds, giving them:", + "Slow 1: Every third hit", + "Blindness: Every #6#-1 seconds", + "Screen-Shake: Every time", }); } @@ -47,17 +56,49 @@ public class ShockingStrikes extends Skill LivingEntity damagee = event.GetDamageeEntity(); if (damagee == null) return; - //Confuse + ComboData data = _combos.get(damager); + + if (data == null || data.Amount > 0 && !damagee.equals(data.Damagee)) + { + data = new ComboData(damagee); + _combos.put(damager, data); + } + + data.Amount++; + Factory.Condition().Factory().Shock(GetName(), damagee, damager, level, false, false); - Factory.Condition().Factory().Slow(GetName(), damagee, damager, level, 0, false, false, true, false); + + if (data.Amount % 3 == 0) + { + Factory.Condition().Factory().Slow(GetName(), damagee, damager, level, 0, false, false, true, false); + } //Damage event.AddMod(damager.getName(), GetName(), 0, true); + + String name = "Blinding Strike"; + + if (Recharge.Instance.use(damager, name, name + " " + level, 6000 + (1000 * level), false, false)) + { + Factory.Condition().Factory().Blind(name, damagee, damager, level, 1, true, true, false); + } } @Override public void Reset(Player player) { - + _combos.remove(player); } -} + + private class ComboData + { + + final LivingEntity Damagee; + int Amount; + + ComboData(LivingEntity damagee) + { + Damagee = damagee; + } + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java index 7f18fb654..5632cd2bd 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SilencingArrow.java @@ -2,6 +2,7 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; import java.util.HashSet; import java.util.Iterator; +import java.util.Set; import org.bukkit.Material; import org.bukkit.Sound; @@ -32,8 +33,9 @@ import mineplex.minecraft.game.classcombat.Skill.SkillFactory; public class SilencingArrow extends SkillActive { - private HashSet _arrows = new HashSet(); - private HashSet _silence = new HashSet(); + + private final Set _arrows = new HashSet<>(); + private final Set _silence = new HashSet<>(); public SilencingArrow(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -52,7 +54,7 @@ public class SilencingArrow extends SkillActive SetDesc(new String[] { "Your next arrow will Silence", - "target for #2#2 seconds.", + "target for 3 seconds.", "", "Silence stops skills being used." }); @@ -61,7 +63,7 @@ public class SilencingArrow extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -129,7 +131,7 @@ public class SilencingArrow extends SkillActive if (level == 0) return; //Confuse - Factory.Condition().Factory().Silence(GetName(), damagee, damager, 2 + 2*level, true, true); + Factory.Condition().Factory().Silence(GetName(), damagee, damager, 3, true, true); //Effect damagee.getWorld().playSound(damagee.getLocation(), Sound.BLAZE_BREATH, 2.5f, 2.0f); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java index 58465104e..1df20b55c 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeArrow.java @@ -59,7 +59,7 @@ public class SmokeArrow extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main(GetClassType().name(), "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java index 3552c2856..e36a095a0 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/SmokeBomb.java @@ -1,24 +1,5 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import net.minecraft.server.v1_8_R3.Material; -import mineplex.core.common.util.F; -import mineplex.core.recharge.Recharge; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; -import mineplex.core.common.util.UtilGear; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.core.common.util.UtilPlayer; -import mineplex.minecraft.game.core.condition.Condition; -import mineplex.minecraft.game.core.condition.Condition.ConditionType; -import mineplex.minecraft.game.classcombat.Skill.Skill; -import mineplex.minecraft.game.classcombat.Skill.SkillFactory; -import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; - import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Sound; @@ -30,6 +11,24 @@ import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +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.event.SkillTriggerEvent; +import mineplex.minecraft.game.core.condition.Condition; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + public class SmokeBomb extends Skill { public SmokeBomb(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) @@ -42,7 +41,7 @@ public class SmokeBomb extends Skill "", "Create a smokey explosion, giving", "Blindness to players within #2#1 Blocks", - "for #1#2 seconds.", + "for #1#1 seconds.", "", "You go invisible for #1#2 seconds." }); @@ -51,7 +50,7 @@ public class SmokeBomb extends Skill @Override public String GetRechargeString() { - return "Recharge: #60#-10 Seconds"; + return "Recharge: #45#-5 Seconds"; } @EventHandler @@ -79,26 +78,29 @@ public class SmokeBomb extends Skill if (trigger.IsCancelled()) return; - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return; } - if (!Recharge.Instance.use(player, GetName(), GetName(level), 60000 - (level * 10000), true, false)) + if (!Recharge.Instance.use(player, GetName(), GetName(level), 45000 - (level * 5000), true, false)) return; //Action - Factory.Condition().Factory().Cloak(GetName(), player, player, 1 + 2 * level, false, true); + Factory.Condition().Factory().untrueCloak(GetName(), player, player, 1 + level * 2, false); //Effect - UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1, - ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticleToAll(ParticleType.HUGE_EXPLOSION, player.getLocation(), 0, 0, 0, 0, 1, ViewDist.LONG); for (Player other : UtilPlayer.getNearby(player.getLocation(), 2 + level)) { - if (!other.equals(player)) - Factory.Condition().Factory().Blind(GetName(), other, player, 1 + 2 * level, 0, false, false, false); + if (other.equals(player) || !Factory.Relation().canHurt(player, other)) + { + continue; + } + + Factory.Condition().Factory().Blind(GetName(), other, player, 1 + level, 0, false, false, false); } for (int i=0 ; i<3 ; i++) @@ -108,17 +110,22 @@ public class SmokeBomb extends Skill UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); } - @EventHandler(priority = EventPriority.HIGH) + @EventHandler(priority = EventPriority.MONITOR) public void EndDamagee(CustomDamageEvent event) { if (event.IsCancelled()) + { return; + } Player damagee = event.GetDamageePlayer(); if (damagee == null) return; if (getLevel(damagee) == 0) return; + + if (event.GetDamage() <= 0) + return; //End Factory.Condition().EndCondition(damagee, null, GetName()); @@ -169,7 +176,7 @@ public class SmokeBomb extends Skill for (Player cur : GetUsers()) { - Condition cond = Factory.Condition().GetActiveCondition(cur, ConditionType.CLOAK); + Condition cond = Factory.Condition().GetActiveCondition(cur, ConditionType.UNTRUE_CLOAK); if (cond == null) continue; if (!cond.GetReason().equals(GetName())) @@ -186,4 +193,4 @@ public class SmokeBomb extends Skill //Remove Condition Factory.Condition().EndCondition(player, null, GetName()); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ViperStrikes.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ViperStrikes.java index 6aaaba4a2..54a1f5f46 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ViperStrikes.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Assassin/ViperStrikes.java @@ -25,7 +25,7 @@ public class ViperStrikes extends Skill { "Your attacks give", "enemies Poison 1", - "for #0#1 seconds." + "for #2#2 seconds." }); } @@ -50,8 +50,8 @@ public class ViperStrikes extends Skill LivingEntity damagee = event.GetDamageeEntity(); if (damagee == null) return; - Factory.Damage().NewDamageEvent(damagee, damager, null, DamageCause.POISON, 0, false, true, true, damager.getName(), GetName()); - damagee.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 20 * (2 + level), 0)); + Factory.Damage().NewDamageEvent(damagee, damager, null, DamageCause.CUSTOM, 0, false, true, true, damager.getName(), GetName()); + damagee.addPotionEffect(new PotionEffect(PotionEffectType.POISON, 20 * (2 + (2 * level)), 0)); //Sound damager.getWorld().playSound(damager.getLocation(), Sound.SPIDER_IDLE, 1f, 2f); @@ -62,4 +62,4 @@ public class ViperStrikes extends Skill { } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java index 10ef5490a..77ff977ed 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/BlockToss.java @@ -96,7 +96,7 @@ public class BlockToss extends SkillCharge implements IThrown @Override public String GetRechargeString() { - return "Recharge: " + "#5.5#-0.5 Seconds"; + return "Recharge: " + "1.5 Seconds"; } @EventHandler @@ -129,7 +129,7 @@ public class BlockToss extends SkillCharge implements IThrown return; //Water - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return; @@ -245,7 +245,7 @@ public class BlockToss extends SkillCharge implements IThrown } //Throw - if (!cur.isBlocking() || (_charge.containsKey(cur) && _charge.get(cur) >= 1)) + if (!cur.isBlocking()) throwSet.add(cur); //Charged Tick @@ -262,7 +262,7 @@ public class BlockToss extends SkillCharge implements IThrown for (Player cur : throwSet) { Recharge.Instance.recharge(cur, GetName()); - Recharge.Instance.use(cur, GetName(), 5500 - (500 * getLevel(cur)), false, true); + Recharge.Instance.use(cur, GetName(), 1500, false, true); FallingBlock block = _holding.remove(cur); float charge = _charge.remove(cur); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java index d4e0fd75b..cdcbbaf63 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Bloodlust.java @@ -1,5 +1,6 @@ package mineplex.minecraft.game.classcombat.Skill.Brute; +import java.util.Map; import java.util.WeakHashMap; import org.bukkit.Sound; @@ -8,26 +9,24 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import com.mysql.jdbc.Util; - -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +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.combat.event.CombatDeathEvent; public class Bloodlust extends Skill { - private WeakHashMap _time = new WeakHashMap(); - private WeakHashMap _str = new WeakHashMap(); + + private final Map _time = new WeakHashMap<>(); + private final Map _str = new WeakHashMap<>(); public Bloodlust(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { @@ -35,8 +34,9 @@ public class Bloodlust extends Skill SetDesc(new String[] { - "When you kill an enemy, you go into", - "a Bloodlust, receiving Speed 1 and", + "Killing an enemy within 4#4 blocks", + "you go into a Bloodlust,", + "receiving Speed 1 and", "Strength 1 for #4#2 seconds.", "You also heal #0#1 health.", "", @@ -117,8 +117,7 @@ public class Bloodlust extends Skill if (System.currentTimeMillis() > _time.get(player)) { int str = _str.remove(player); - UtilPlayer.message(player, F.main(GetClassType().name(), "Your " + F.skill(GetName(getLevel(player))) + - " has ended at " + F.elem("Level " + (str+1)) + ".")); + UtilPlayer.message(player, F.main(GetClassType().name(), "Your " + F.skill(GetName(getLevel(player))) + " has ended at " + F.elem("Level " + (str+1)) + ".")); _time.remove(player); return true; @@ -135,9 +134,9 @@ public class Bloodlust extends Skill for (Entity ent : _str.keySet()) { - UtilParticle.PlayParticle(ParticleType.RED_DUST, ent.getLocation(), + UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, ent.getLocation(), (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, _str.get(ent) * 2, - ViewDist.NORMAL, UtilServer.getPlayers()); + ViewDist.NORMAL); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Colossus.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Colossus.java index 4a358dfde..4e72bb8c8 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Colossus.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Colossus.java @@ -3,6 +3,7 @@ package mineplex.minecraft.game.classcombat.Skill.Brute; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -18,7 +19,9 @@ public class Colossus extends Skill SetDesc(new String[] { "You are so huge that you take", - "35% less knockback from attacks." + "33% less knockback from attacks", + "and while sneaking you take no", + "knockback." }); } @@ -26,17 +29,36 @@ public class Colossus extends Skill public void Damage(CustomDamageEvent event) { if (event.IsCancelled()) + { return; + } - Player damagee = event.GetDamageePlayer(); - if (damagee == null) return; + Player damagee = event.GetDamageePlayer(), damager = event.GetDamagerPlayer(true); - int level = getLevel(damagee); - if (level == 0) return; + if (damagee == null || damager == null) + { + return; + } - //Damage - event.AddMod(damagee.getName(), GetName(), 0, false); - event.AddKnockback(GetName(), 0.65); + int damageeeLevel = getLevel(damagee), damagerLevel = getLevel(damager); + DamageCause cause = event.GetCause(); + + if (damageeeLevel > 0 && (cause == DamageCause.ENTITY_ATTACK || cause == DamageCause.PROJECTILE)) + { + if (damagee.isSneaking()) + { + event.SetKnockback(false); + } + else + { + event.AddKnockback(GetName(), 0.66); + } + } + + if (damagerLevel > 0) + { + event.AddMod(GetName(), -0.5); + } } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java index 0c32d0503..b78df941f 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/DwarfToss.java @@ -1,8 +1,10 @@ package mineplex.minecraft.game.classcombat.Skill.Brute; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Set; -import org.bukkit.Bukkit; import org.bukkit.EntityEffect; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; @@ -15,7 +17,6 @@ import org.spigotmc.event.entity.EntityDismountEvent; import mineplex.core.Managers; import mineplex.core.common.util.F; -import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; @@ -33,13 +34,12 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class DwarfToss extends SkillActive { - private HashSet _used = new HashSet(); - private NautHashMap _holding = new NautHashMap(); - private NautHashMap _time = new NautHashMap(); - - private long _chargeTime = 2500; - public DwarfToss(SkillFactory skills, String name, ClassType classType, SkillType skillType, + private final Set _used = new HashSet<>(); + private final Map _holding = new HashMap<>(); + private final Map _time = new HashMap<>(); + + public DwarfToss(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, int energy, int energyMod, long recharge, long rechargeMod, boolean rechargeInform, @@ -68,10 +68,7 @@ public class DwarfToss extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (_used.contains(player)) - return false; - - return true; + return !_used.contains(player); } @Override @@ -94,7 +91,7 @@ public class DwarfToss extends SkillActive int level = getLevel(player); if (level == 0) return false; - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -112,11 +109,7 @@ public class DwarfToss extends SkillActive return false; //Check Energy/Recharge - if (!EnergyRechargeCheck(player, level)) - return false; - - //Allow - return true; + return EnergyRechargeCheck(player, level); } //getEntity is the vehicle @@ -126,17 +119,16 @@ public class DwarfToss extends SkillActive if (event.isCancelled()) return; - System.out.println(UtilEnt.getName(event.getDismounted())); - System.out.println(UtilEnt.getName(event.getEntity())); - if (!(event.getDismounted() instanceof Player)) return; if (!(event.getEntity() instanceof Player)) return; - if (_holding.containsKey((Player)event.getEntity()) && _holding.get((Player)event.getEntity()) == event.getDismounted()) + if (event.getDismounted().equals(_holding.get(event.getEntity()))) + { event.setCancelled(true); + } } @EventHandler @@ -179,13 +171,14 @@ public class DwarfToss extends SkillActive } //Hold Loop - if (target instanceof Player && _holding.containsKey((Player)target)) - if (_holding.get((Player)target).equals(player)) - if (target instanceof Player) - { - UtilPlayer.message(player, F.main(GetClassType().name(), F.name(((Player)target).getName()) + " is already holding you.")); - return; - } + if (target instanceof Player && _holding.containsKey(target)) + { + if (_holding.get(target).equals(player)) + { + UtilPlayer.message(player, F.main(GetClassType().name(), F.name(target.getName()) + " is already holding you.")); + return; + } + } if (_holding.containsValue(target)) { @@ -279,8 +272,8 @@ public class DwarfToss extends SkillActive if (event.getType() != UpdateType.TICK) return; - HashSet voidSet = new HashSet(); - HashSet throwSet = new HashSet(); + Set voidSet = new HashSet<>(); + Set throwSet = new HashSet<>(); for (Player cur : _holding.keySet()) { @@ -332,9 +325,11 @@ public class DwarfToss extends SkillActive //Time Reduce double timeScale = 1; - if (time < _chargeTime) + long chargeTime = 2500; + + if (time < chargeTime) { - timeScale = Math.max(0.25, ((double)time/(double)_chargeTime)); + timeScale = Math.max(0.25, ((double)time/(double) chargeTime)); } //Show! @@ -352,19 +347,15 @@ public class DwarfToss extends SkillActive Factory.Condition().Factory().Invulnerable(GetName(), target, target, 1.25, false, false); //Delay - Bukkit.getScheduler().scheduleSyncDelayedTask(Factory.getPlugin(), new Runnable() + Factory.runSyncLater(() -> { - @Override - public void run() - { - UtilAction.velocity(target, cur.getLocation().getDirection(), mult, false, 0, 0.2, 1.2, true); - - //Condition - Factory.Condition().Factory().Falling(GetName(), target, cur, 10, false, true); - - //Effect - target.playEffect(EntityEffect.HURT); - } + UtilAction.velocity(target, cur.getLocation().getDirection(), mult, false, 0, 0.2, 1.2, true); + + //Condition + Factory.Condition().Factory().Falling(GetName(), target, cur, 10, false, true); + + //Effect + target.playEffect(EntityEffect.HURT); }, 5); //Inform diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/FleshHook.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/FleshHook.java index 294d6fe22..478c61c96 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/FleshHook.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/FleshHook.java @@ -10,11 +10,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.projectile.IThrown; import mineplex.core.projectile.ProjectileUser; +import mineplex.core.recharge.Recharge; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilAction; @@ -60,7 +62,7 @@ public class FleshHook extends SkillActiveCharge implements IThrown @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -117,6 +119,7 @@ public class FleshHook extends SkillActiveCharge implements IThrown //Effect item.getWorld().playSound(item.getLocation(), Sound.IRONGOLEM_THROW, 2f, 0.8f); + Recharge.Instance.useForce(cur, GetName(), Recharge(level)); } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Intimidation.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Intimidation.java index 1f5d560b9..fa193bc9a 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Intimidation.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Intimidation.java @@ -1,60 +1,129 @@ package mineplex.minecraft.game.classcombat.Skill.Brute; -import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; +import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCrafting; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.scheduler.BukkitRunnable; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.particles.ColoredParticle; +import mineplex.core.common.util.particles.DustSpellColor; +import mineplex.core.recharge.Recharge; +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.event.SkillTriggerEvent; public class Intimidation extends Skill { + + private final Set _active = new HashSet<>(); + private final DustSpellColor _color = new DustSpellColor(Color.PURPLE); + public Intimidation(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { super(skills, name, classType, skillType, cost, levels); SetDesc(new String[] { + "Drop Axe/Sword to Use.", + "", "You intimidate nearby enemies;", - "Enemies within #4#2 blocks receive Slow 1.", + "Enemies within #10#1 blocks receive Slow 1.", + "", + "Lasts for #10#1." }); } - @EventHandler - public void Update(UpdateEvent event) + @Override + public String GetRechargeString() { - if (event.getType() != UpdateType.TICK) - return; + return "Recharge: #15#-1.5 Seconds."; + } - for (Player cur : GetUsers()) + @EventHandler + public void Use(PlayerDropItemEvent event) + { + Player player = event.getPlayer(); + + if (!(player.getOpenInventory().getTopInventory() instanceof CraftInventoryCrafting)) { - int level = getLevel(cur); - if (level == 0) continue; - - HashMap targets = UtilPlayer.getInRadius(cur.getLocation(), 3 + (level * 2)); - for (Player other : targets.keySet()) - if (!other.equals(cur)) - if (Factory.Relation().canHurt(cur, other)) - if (getLevel(other) < level) - { - double dist = targets.get(other); - int mult = 0; - //if (dist <= 1 + level) mult = 2; - //else if (dist <= 2 + (2 * level)) mult = 1; - - Factory.Condition().Factory().Slow(GetName(), other, cur, 0.9, mult, false, true, false, true); - } + return; } + + int level = getLevel(player); + + if (level == 0 || !UtilGear.isWeapon(event.getItemDrop().getItemStack()) || _active.contains(player) || !Recharge.Instance.usable(player, GetName(), true)) + { + return; + } + + event.setCancelled(true); + + //Check Allowed + SkillTriggerEvent trigger = new SkillTriggerEvent(player, GetName(), GetClassType()); + Bukkit.getServer().getPluginManager().callEvent(trigger); + + if (trigger.IsCancelled()) + { + return; + } + + _active.add(player); + player.getWorld().playSound(player.getLocation(), Sound.HORSE_SKELETON_HIT, 1, 1); + player.sendMessage(F.main("Skill", "You used " + F.skill(GetName(level)) + ".")); + + long start = System.currentTimeMillis(), length = 10000 + (level * 1000); + + Factory.runSyncTimer(new BukkitRunnable() + { + @Override + public void run() + { + if (!_active.contains(player) || UtilTime.elapsed(start, length)) + { + Recharge.Instance.use(player, GetName(), 15000 - (1500 * level), true, false); + Reset(player); + cancel(); + return; + } + + player.setExp(1 - ((System.currentTimeMillis() - start) / (float) length)); + + Location location = player.getLocation(); + + new ColoredParticle(ParticleType.RED_DUST, _color, location.clone().add(Math.random() - 0.5, Math.random() + 0.5, Math.random() - 0.5)) + .display(); + + UtilPlayer.getInRadius(location, 10 + level).forEach((other, scale) -> + { + if (other.equals(player) || !Factory.Relation().canHurt(player, other)) + { + return; + } + + Factory.Condition().Factory().Slow(GetName(), other, player, 0.9, 0, false, true, false, true); + }); + } + }, 0, 1); } @Override public void Reset(Player player) { - + _active.remove(player); + player.setExp(0); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/SeismicSlam.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/SeismicSlam.java index 2288671dc..e47fd6ab0 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/SeismicSlam.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/SeismicSlam.java @@ -88,7 +88,7 @@ public class SeismicSlam extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java index a4512e929..08ba389d5 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Stampede.java @@ -2,24 +2,6 @@ package mineplex.minecraft.game.classcombat.Skill.Brute; import java.util.WeakHashMap; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.minecraft.game.classcombat.Skill.Skill; -import mineplex.minecraft.game.classcombat.Skill.SkillFactory; -import mineplex.minecraft.game.classcombat.Skill.event.SkillEvent; - import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; @@ -29,6 +11,21 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.potion.PotionEffectType; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +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.event.SkillEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + public class Stampede extends Skill { private WeakHashMap _sprintTime = new WeakHashMap(); @@ -43,10 +40,10 @@ public class Stampede extends Skill "You slowly build up speed as you", "sprint. You gain a level of Speed", "for every #5#-1 seconds, up to a max", - "of Speed 3.", + "of Speed 2.", "", "Attacking during stampede deals", - "#0#0.5 bonus damage per speed level,", + "#0.25#0.25 bonus damage,", "and +50% knockback per speed level.", "", "Resets if you take damage." @@ -89,7 +86,7 @@ public class Stampede extends Skill _sprintTime.put(cur, System.currentTimeMillis()); - if (str < 3) + if (str < 2) { _sprintStr.put(cur, str+1); @@ -156,7 +153,7 @@ public class Stampede extends Skill damager.removePotionEffect(PotionEffectType.SPEED); //Damage - event.AddMod(damager.getName(), GetName(), str * (0.5 * level), true); + event.AddMod(damager.getName(), GetName(), 0.25 + (0.25 * level), true); event.AddKnockback(GetName(), 1 + 0.5 * str); //Inform diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java index 09faffdd8..9a35ce87c 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Takedown.java @@ -1,9 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill.Brute; import java.util.HashMap; +import java.util.Map; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; -import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Entity; @@ -14,26 +13,25 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.core.common.util.C; import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class Takedown extends SkillActive { - private HashMap _live = new HashMap(); + + private final Map _live = new HashMap<>(); public Takedown(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -53,7 +51,7 @@ public class Takedown extends SkillActive { "Hurl yourself towards an opponent.", "If you collide with them, you deal", - "#3#1 damage and take #1.5#0.5 damage.", + "#5#1 damage and take #1.5#0.5 damage.", "You both receive Slow 4 for #2.5#0.5 seconds." }); } @@ -61,7 +59,7 @@ public class Takedown extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -114,58 +112,31 @@ public class Takedown extends SkillActive _live.remove(player); } - + //Collide - for (Player player : GetUsers()) - if (_live.containsKey(player)) - for (Player other : player.getWorld().getPlayers()) - if (!UtilPlayer.isSpectator(other)) - if (!other.equals(player)) - if (Factory.Relation().canHurt(player, other)) - if (UtilMath.offset(player, other) < 2) - { - DoTakeDown(player, other); - _live.remove(player); - return; - } + _live.keySet().removeIf(entity -> + { + Player player = (Player) entity; + for (Player other : UtilPlayer.getNearby(player.getLocation(), 2)) + { + if (player.equals(other) || !Factory.Relation().canHurt(player, other)) + { + continue; + } + + DoTakeDown(player, other); + return true; + } + + return false; + }); } - /** - @EventHandler(priority = EventPriority.LOW) - public void Damage(CustomDamageEvent event) - { - if (event.IsCancelled()) - return; - - if (event.GetCause() != DamageCause.ENTITY_ATTACK) - return; - - Player damager = event.GetDamagerPlayer(false); - if (damager == null) return; - - int level = GetLevel(damager); - if (level == 0) return; - - LivingEntity damagee = event.GetDamageeEntity(); - if (damagee == null) return; - - if (UtilMath.offset(damager, damagee) > 3) - return; - - if (_live.remove(damager) == null) - return; - - event.SetCancelled("Takedown Cancel"); - - DoTakeDown(damager, damagee); - } - **/ - - public void DoTakeDown(Player damager, LivingEntity damagee) + private void DoTakeDown(Player damager, LivingEntity damagee) { int level = getLevel(damager); - int damage = 3 + (level); + int damage = 5 + level; //Damage Event CustomDamageEvent customDamageEvent = Factory.Damage().NewDamageEvent(damagee, damager, null, @@ -174,14 +145,17 @@ public class Takedown extends SkillActive if (!customDamageEvent.IsCancelled()) { - //Damage Event - Factory.Damage().NewDamageEvent(damager, damagee, null, - DamageCause.CUSTOM, damage / 2, false, true, false, - damager.getName(), GetName() + " Recoil"); - //Conditions - Factory.Condition().Factory().Slow(GetName(), damagee, damager, 2.5 + 0.5 * level, 3, false, true, true, true); - Factory.Condition().Factory().Slow(GetName(), damager, damager, 2.5 + 0.5 * level, 3, false, true, true, true); + double duration = 2.5 + (level / 2D); + + Factory.Condition().Factory().Slow(GetName(), damagee, damager, duration, 3, false, true, true, true); + Factory.Condition().Factory().Slow(GetName(), damager, damager, duration, 3, false, true, true, true); + Factory.Condition().Factory().Jump(GetName(), damagee, damager, duration, 250, false, false, false); + Factory.Condition().Factory().Jump(GetName(), damager, damager, duration, 250, false, false, false); + Factory.Damage().NewDamageEvent(damager, damagee, null, DamageCause.CUSTOM, 1.5 + (level / 2D), false, true, false, GetName(), GetName() + " Recoil"); + + UtilAction.zeroVelocity(damagee); + UtilAction.zeroVelocity(damager); //Inform UtilPlayer.message(damager, F.main(GetClassType().name(), "You hit " + F.name(UtilEnt.getName(damagee)) + " with " + F.skill(GetName(level)) + ".")); @@ -200,9 +174,9 @@ public class Takedown extends SkillActive for (Entity ent : _live.keySet()) { - UtilParticle.PlayParticle(ParticleType.CRIT, ent.getLocation(), + UtilParticle.PlayParticleToAll(ParticleType.CRIT, ent.getLocation(), (float)(Math.random() - 0.5), (float)(Math.random() * 1.4), (float)(Math.random() - 0.5), 0, 4, - ViewDist.LONG, UtilServer.getPlayers()); + ViewDist.LONG); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java index 9ac75a47a..8d554a8dd 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/Taunt.java @@ -58,7 +58,7 @@ public class Taunt extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java index 6f9282477..1cb8da875 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Brute/WhirlwindAxe.java @@ -54,7 +54,7 @@ public class WhirlwindAxe extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/BreakFall.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/BreakFall.java index 7680b9137..5dea84285 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/BreakFall.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/BreakFall.java @@ -19,7 +19,7 @@ public class BreakFall extends Skill SetDesc(new String[] { "You roll when you hit the ground;", - "Fall damage is reduced by #0#2.", + "Fall damage is reduced by #0.5#1.5 .", }); } @@ -38,7 +38,7 @@ public class BreakFall extends Skill int level = getLevel(player); if (level == 0) return; - event.AddMod(null, GetName(), -(2 * level), false); + event.AddMod(null, GetName(), -0.5 - (1.5 * level), false); } @Override @@ -46,4 +46,4 @@ public class BreakFall extends Skill { } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Pistol.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Pistol.java index f9a230fd9..6bac3bf6f 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Pistol.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Pistol.java @@ -9,6 +9,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; @@ -43,7 +44,7 @@ public class Pistol extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Resistance.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Resistance.java index c08b64e58..b61afd434 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Resistance.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Global/Resistance.java @@ -18,36 +18,42 @@ public class Resistance extends Skill SetDesc(new String[] { "Your body and mind is exceptionally resistant.", - "Durations on you are #0#25 % shorter for;", - "Slow, Fire, Shock, Confusion, Poison, Blindness." + "Durations on you are #20#15 % shorter for;", + "Slow, Fire, Shock, Confusion, Poison,", + "Blindness and Jump Prevention" }); } @EventHandler public void Resist(ConditionApplyEvent event) { - if (event.GetCondition().GetType() != ConditionType.BURNING && - event.GetCondition().GetType() != ConditionType.SLOW && - event.GetCondition().GetType() != ConditionType.SHOCK && - event.GetCondition().GetType() != ConditionType.CONFUSION && - event.GetCondition().GetType() != ConditionType.POISON && - event.GetCondition().GetType() != ConditionType.BLINDNESS) - return; - //Dont Resist Self Condition if (event.GetCondition().GetReason().equalsIgnoreCase("Hold Position")) { return; } - - - int level = getLevel(event.GetCondition().GetEnt()); - if (level <= 0) - return; - - double reduction = -(0.25f * level); - event.GetCondition().ModifyTicks((int) (event.GetCondition().GetTicksTotal() * reduction)); + ConditionType type = event.GetCondition().GetType(); + + switch (type) + { + case BURNING: + case SLOW: + case SHOCK: + case CONFUSION: + case POISON: + case BLINDNESS: + int level = getLevel(event.GetCondition().GetEnt()); + + if (level == 0) + { + return; + } + + double reduction = -0.20f - (0.15f * level); + event.GetCondition().ModifyTicks((int) (event.GetCondition().GetTicksTotal() * reduction)); + break; + } } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/AxeThrow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/AxeThrow.java index f4afb8a81..8f37a644b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/AxeThrow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/AxeThrow.java @@ -67,7 +67,7 @@ public class AxeThrow extends SkillActive implements IThrown @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java index db14f198a..6cb4c5d03 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/BullsCharge.java @@ -54,7 +54,7 @@ public class BullsCharge extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/DefensiveStance.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/DefensiveStance.java index f20fec249..3b0298e60 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/DefensiveStance.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/DefensiveStance.java @@ -40,7 +40,7 @@ public class DefensiveStance extends SkillActive SetDesc(new String[] { - "While Blocking, you take 75% less", + "While Blocking, you take 80% less", "damage from attacks infront of you." }); } @@ -111,12 +111,12 @@ public class DefensiveStance extends SkillActive if (damagee.getLocation().getDirection().subtract(from).length() > 1.4) { - //event.AddMod(damagee.getName(), getName(), -0.5 - (0.5 * level), true); return; } //Damage - event.AddMult(GetName(), GetName(), 0.25, false); + event.AddMult(GetName(), GetName(), 0.2, false); + event.SetKnockback(false); //Effect damagee.getWorld().playSound(damagee.getLocation(), Sound.ZOMBIE_METAL, 1f, 2f); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HiltSmash.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HiltSmash.java index d782d96d2..a0c33bcd7 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HiltSmash.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HiltSmash.java @@ -103,7 +103,7 @@ public class HiltSmash extends SkillActive return false; //Water - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java index 9741ea52d..816e26100 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/HoldPosition.java @@ -1,5 +1,6 @@ package mineplex.minecraft.game.classcombat.Skill.Knight; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.core.condition.events.ConditionExpireEvent; import org.bukkit.Effect; import org.bukkit.Material; @@ -57,8 +58,7 @@ public class HoldPosition extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - Material type = player.getLocation().getBlock().getType(); - if (type == Material.WATER || type == Material.STATIONARY_WATER) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -76,6 +76,7 @@ public class HoldPosition extends SkillActive Factory.Condition().Factory().Slow(GetName(), player, player, duration, 2, false, true, false, true); Factory.Condition().Factory().Protection(GetName(), player, player, duration, 2, false, false, true); Factory.Condition().Factory().ArcadeHungerDisable(GetName(), player, player, duration, false); + Factory.Condition().Factory().Jump(GetName(), player, player, duration, 250, false, false, false); //Inform UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/LevelField.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/LevelField.java index 2817ddc22..49af77f63 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/LevelField.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/LevelField.java @@ -1,141 +1,189 @@ package mineplex.minecraft.game.classcombat.Skill.Knight; -import org.bukkit.entity.LivingEntity; +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftInventoryCrafting; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.scheduler.BukkitRunnable; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.recharge.Recharge; +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.event.SkillTriggerEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class LevelField extends Skill { - public LevelField(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) + + private final Set _active = new HashSet<>(); + + public LevelField(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { super(skills, name, classType, skillType, cost, levels); - SetDesc(new String[] + SetDesc(new String[] { - /* - "For every enemy within #4#2 blocks", - "that is closer than your nearest ally,", - "you deal 1 more damage and take 1 less.", - "", - "Damage can be altered a maximum of #1#1.", - */ - - "Even the battlefield with courage!", - "You deal X more damage.", - "You take X less damage.", - "X = (Nearby Enemies) - (Nearby Allies)", - "Players within #4#2 Blocks are considered.", - "", - "Damage can be altered a maximum of #1#1.", - "", - "You can not deal less damage, or take", - "more damage via this." + "Drop Axe/Sword to Use.", + "", + "You deal X more damage.", + "You take X less damage.", + "X = (Nearby Enemies) - (Nearby Allies)", + "Players within #4#2 Blocks are considered.", + "", + "Damage can be altered a maximum of #1#1.", + "You can not deal less damage, or take", + "more damage via this.", + "", + "Lasts for #6#1." }); } - @EventHandler(priority = EventPriority.HIGH) - public void Decrease(CustomDamageEvent event) + @Override + public String GetRechargeString() { - if (event.IsCancelled()) - return; - - if (event.GetCause() != DamageCause.ENTITY_ATTACK) - return; + return "Recharge: #16#-1 Seconds"; + } - //Damager - Player damagee = event.GetDamageePlayer(); - if (damagee == null) return; + @EventHandler + public void Use(PlayerDropItemEvent event) + { + Player player = event.getPlayer(); - LivingEntity damager = event.GetDamagerEntity(false); - if (damager == null) return; - - //Level - int level = getLevel(damagee); - if (level == 0) return; - - int alt = 0; - - for (Player cur : UtilPlayer.getNearby(damagee.getLocation(), 4 + (2 * level))) + if (!(player.getOpenInventory().getTopInventory() instanceof CraftInventoryCrafting)) { - if (cur.equals(damagee)) - alt += 1; - - else if (Factory.Relation().canHurt(damagee, cur)) - alt -= 1; - - else - alt += 1; - } - - int limit = 1 + level; - - if (alt > limit) alt = limit; - if (alt < -limit) alt = -limit; - - if (alt >= 0) return; - - //Decrease Damage - event.AddMod(damagee.getName(), GetName(), alt, false); + } + + int level = getLevel(player); + + if (level == 0 || !UtilGear.isWeapon(event.getItemDrop().getItemStack()) || !Recharge.Instance.usable(player, GetName(), true)) + { + return; + } + + event.setCancelled(true); + + //Check Allowed + SkillTriggerEvent trigger = new SkillTriggerEvent(player, GetName(), GetClassType()); + UtilServer.CallEvent(trigger); + + if (trigger.IsCancelled()) + { + return; + } + + long start = System.currentTimeMillis(); + _active.add(player); + + player.sendMessage(F.main("Skill", "You used " + F.skill(GetName(level)) + ".")); + + Factory.runSyncTimer(new BukkitRunnable() + { + @Override + public void run() + { + if (!player.isOnline() || UtilTime.elapsed(start, 6000 + (1000 * level))) + { + Recharge.Instance.use(player, GetName(), 16000 - (1000 * level), true, false); + Reset(player); + cancel(); + return; + } + + UtilParticle.playParticleFor(player, ParticleType.HAPPY_VILLAGER, player.getLocation().add(0, 0.5, 0), 1, 0.3F, 1, 0, 1, ViewDist.LONG); + } + }, 0, 2); } @EventHandler(priority = EventPriority.HIGH) - public void Increase(CustomDamageEvent event) + public void alterDamage(CustomDamageEvent event) { - if (event.IsCancelled()) + if (event.IsCancelled() || event.GetCause() != DamageCause.ENTITY_ATTACK) + { return; - - if (event.GetCause() != DamageCause.ENTITY_ATTACK) + } + + Player damagee = event.GetDamageePlayer(), damager = event.GetDamagerPlayer(false); + + if (damagee == null || damager == null) + { return; + } - //Damager - Player damagee = event.GetDamageePlayer(); - if (damagee == null) return; + { + int level = getLevel(damagee); - Player damager = event.GetDamagerPlayer(false); - if (damager == null) return; + if (level == 0) + { + return; + } - //Level - int level = getLevel(damager); - if (level == 0) return; + event.AddMod(damagee.getName(), GetName(), getAlteration(damagee, level, false), false); + } + { + int level = getLevel(damager); + if (level == 0) + { + return; + } + + event.AddMod(damager.getName(), GetName(), getAlteration(damager, level, true), false); + } + } + + private int getAlteration(Player player, int level, boolean positive) + { int alt = 0; - for (Player cur : UtilPlayer.getNearby(damager.getLocation(), 4 + (2 * level))) + for (Player other : UtilPlayer.getNearby(player.getLocation(), 4 + (2 * level))) { - if (cur.equals(damager)) - alt -= 1; - - else if (Factory.Relation().canHurt(damager, cur)) - alt += 1; - + if (player.equals(other)) + { + alt--; + } + else if (Factory.Relation().canHurt(player, other)) + { + alt++; + } else - alt -= 1; + { + alt--; + } } - + int limit = 1 + level; - if (alt > limit) alt = limit; - if (alt < -limit) alt = -limit; - - if (alt <= 0) - return; + alt = Math.min(alt, limit); + alt = Math.max(alt, -limit); - //Decrease Damage - event.AddMod(damager.getName(), GetName(), alt, false); + if (positive) + { + return Math.max(0, alt); + } + else + { + return Math.min(0, -alt); + } } @Override - public void Reset(Player player) + public void Reset(Player player) { - + _active.remove(player); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/PowerChop.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/PowerChop.java index 3608c49f4..28ff6c3cd 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/PowerChop.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/PowerChop.java @@ -10,6 +10,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; @@ -51,16 +52,13 @@ public class PowerChop extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; } - - if (!mineplex.core.recharge.Recharge.Instance.use(player, GetName() + " Cooldown", 250, false, false)) - return false; - return true; + return mineplex.core.recharge.Recharge.Instance.use(player, GetName() + " Cooldown", 250, false, false); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Riposte.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Riposte.java index 50cdc4b7e..abaebc773 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Riposte.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/Riposte.java @@ -12,6 +12,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; @@ -59,7 +60,7 @@ public class Riposte extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java index 8a2a4875b..78196ab83 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Knight/ShieldSmash.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.util.Vector; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; @@ -47,7 +48,7 @@ public class ShieldSmash extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java index be5217843..bbf3b52e6 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/ArcticArmor.java @@ -1,37 +1,40 @@ package mineplex.minecraft.game.classcombat.Skill.Mage; -import java.util.HashMap; import java.util.HashSet; +import java.util.Set; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; -import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerDropItemEvent; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +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.event.SkillTriggerEvent; public class ArcticArmor extends Skill { - private HashSet _active = new HashSet(); + + private static final double DELTA_THETA = Math.PI / 10; + + private final Set _active = new HashSet<>(); public ArcticArmor(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { @@ -45,14 +48,14 @@ public class ArcticArmor extends Skill "in a #3#1 Block radius. Allies inside", "this area receive Protection 2.", "", - "You receive Protection 1." + "You receive Protection 2." }); } @Override public String GetEnergyString() { - return "Energy: #7#-1 per Second"; + return "Energy: #11#-1 per Second"; } @EventHandler @@ -90,13 +93,13 @@ public class ArcticArmor extends Skill public void Add(Player player) { _active.add(player); - UtilPlayer.message(player, F.main(GetClassType().name(), GetName() + ": " + F.oo("Enabled", true))); + UtilPlayer.message(player, F.main(GetClassType().name(), F.skill(GetName()) + ": " + F.oo("Enabled", true))); } public void Remove(Player player) { _active.remove(player); - UtilPlayer.message(player, F.main(GetClassType().name(), GetName() + ": " + F.oo("Disabled", false))); + UtilPlayer.message(player, F.main(GetClassType().name(), F.skill(GetName()) + ": " + F.oo("Disabled", false))); Factory.Condition().EndCondition(player, null, GetName()); } @@ -139,27 +142,47 @@ public class ArcticArmor extends Skill } //Energy - if (!Factory.Energy().Use(cur, GetName(), 0.35 - (level * 0.05), true, true)) + if (!Factory.Energy().Use(cur, GetName(), 0.55 - (level * 0.05), true, true)) { Remove(cur); continue; } //Blocks + Location location = cur.getLocation(); double duration = 2000; - HashMap blocks = UtilBlock.getInRadius(cur.getLocation().getBlock().getLocation(), 3d + level); - for (Block block : blocks.keySet()) - { - if (block.getType().toString().contains("BANNER") || block.getRelative(BlockFace.UP).getType().toString().contains("BANNER")) - continue; - //Freeze - if (!block.getRelative(BlockFace.UP).isLiquid()) - if (block.getLocation().getY() <= cur.getLocation().getY()) - if (block.getTypeId() == 8 || block.getTypeId() == 9 || block.getTypeId() == 79) - Factory.BlockRestore().add(block, 79, (byte) 0, (long) (duration * (1 + blocks.get(block)))); + int radius = 3 + level; - //Snow - Factory.BlockRestore().snow(block, (byte) 0, (byte) 0, (long) (duration * (1 + blocks.get(block))), 250, 0); + UtilBlock.getInRadius(location, radius).forEach((block, scale) -> + { + Block up = block.getRelative(BlockFace.UP); + + if (block.getType().toString().contains("BANNER") || up.getType().toString().contains("BANNER")) + { + return; + } + + //Freeze + if (!up.isLiquid() && block.getLocation().getY() <= cur.getLocation().getY()) + { + if (block.getTypeId() == 8 || block.getTypeId() == 9 || block.getTypeId() == 79) + { + Factory.BlockRestore().add(block, 79, (byte) 0, (long) (duration * (1 + scale))); + } + } + }); + + location.add(0, 0.1, 0); + + for (double t = 0; t < 2 * Math.PI; t += DELTA_THETA) + { + double x = radius * Math.cos(t), z = radius * Math.sin(t); + + location.add(x, 0, z); + + UtilParticle.PlayParticleToAll(ParticleType.SNOW_SHOVEL, location, 0.5F, 0.5F, 0.5F, 0, 1, ViewDist.LONG); + + location.subtract(x, 0, z); } } } @@ -168,14 +191,20 @@ public class ArcticArmor extends Skill public void ProtectionAura(UpdateEvent event) { if (event.getType() != UpdateType.FAST) + { return; + } for (Player cur : _active) - { + { //Protection for (Player other : UtilPlayer.getNearby(cur.getLocation(), 3 + getLevel(cur))) + { if (!Factory.Relation().canHurt(cur, other) || other.equals(cur)) - Factory.Condition().Factory().Protection(GetName(), other, cur, 1.9, cur.equals(other) ? 0 : 1, false, true, true); + { + Factory.Condition().Factory().Protection(GetName(), other, cur, 1.9, 1, false, true, true); + } + } } } @@ -203,9 +232,9 @@ public class ArcticArmor extends Skill if (player.equals(cur)) continue; - double dist = UtilMath.offset(player, cur); + double dist = UtilMath.offsetSquared(player, cur); - if (dist < 5 && (damager == null || dist < closest)) + if (dist < 25 && (damager == null || dist < closest)) { damager = player; closest = dist; @@ -219,20 +248,6 @@ public class ArcticArmor extends Skill } } } - - @EventHandler - public void Particle(UpdateEvent event) - { - if (event.getType() != UpdateType.TICK) - return; - - for (Entity ent : _active) - { - UtilParticle.PlayParticle(ParticleType.SNOW_SHOVEL, ent.getLocation(), - (float)(Math.random() - 0.5), 0.2f + (float)Math.random(), (float)(Math.random() - 0.5), 0, 3, - ViewDist.NORMAL, UtilServer.getPlayers()); - } - } @Override public void Reset(Player player) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Blizzard.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Blizzard.java index e27680712..ddff48e8e 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Blizzard.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Blizzard.java @@ -1,15 +1,15 @@ + package mineplex.minecraft.game.classcombat.Skill.Mage; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map.Entry; -import java.util.WeakHashMap; import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.WeakHashMap; -import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.block.Block; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -17,26 +17,26 @@ import org.bukkit.entity.Snowball; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; -import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class Blizzard extends SkillActive { - private HashSet _active = new HashSet(); - private WeakHashMap _snowball = new WeakHashMap(); + + private final Set _active = new HashSet<>(); + private final Map _snowball = new WeakHashMap<>(); public Blizzard(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -56,24 +56,20 @@ public class Blizzard extends SkillActive { "Hold Block to release a Blizzard.", "Releases #1#1 snowballs per wave", - "which push players away from you.", - "", - "Target the ground to create snow.", - "Maximum range of #7#1 Blocks.", - "Maximum height of #0#1 Blocks.", + "which push players away from you." }); } @Override public String GetEnergyString() { - return "Energy: #42#-2 per Second"; + return "Energy: 31#-1 per Second"; } @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -114,14 +110,12 @@ public class Blizzard extends SkillActive } //Energy - if (!Factory.Energy().Use(cur, GetName(), 2.1 - (0.1 * level), true, true)) + if (!Factory.Energy().Use(cur, GetName(), 1.55 - level * 0.05, true, true)) { _active.remove(cur); - continue; } } } - @EventHandler public void Snow(UpdateEvent event) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FireBlast.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FireBlast.java index f205452ae..01acd2fb2 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FireBlast.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FireBlast.java @@ -1,12 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill.Mage; -import java.util.HashMap; - import org.bukkit.Material; import org.bukkit.Sound; -import org.bukkit.entity.Item; import org.bukkit.entity.LargeFireball; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; @@ -14,14 +10,13 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; -import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; import mineplex.minecraft.game.classcombat.event.FireballHitEntityEvent; @@ -54,7 +49,7 @@ public class FireBlast extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -103,18 +98,14 @@ public class FireBlast extends SkillActive if (level == 0) return; //Velocity Players - HashMap hitMap = UtilEnt.getInRadius(proj.getLocation(), 5.5 + (0.5 * level)); - for (LivingEntity cur : hitMap.keySet()) - { - double range = hitMap.get(cur); + UtilEnt.getInRadius(proj.getLocation(), 5.5 + (0.5 * level)).forEach((cur, range) -> + { + FireballHitEntityEvent fireballEvent = new FireballHitEntityEvent(proj, cur); + UtilServer.CallEvent(fireballEvent); - FireballHitEntityEvent evt = new FireballHitEntityEvent(proj, cur); - - UtilServer.getServer().getPluginManager().callEvent(evt); - - if (evt.isCancelled()) + if (fireballEvent.isCancelled()) { - continue; + return; } //Damage Event @@ -124,9 +115,8 @@ public class FireBlast extends SkillActive Factory.Condition().Factory().Falling(GetName(), cur, player, 10, false, true); //Velocity - UtilAction.velocity(cur, UtilAlg.getTrajectory(proj.getLocation().add(0, -0.5, 0), cur.getEyeLocation()), - 1.6 * range, false, 0, 0.8 * range, 1.2, true); - } + UtilAction.velocity(cur, UtilAlg.getTrajectory(proj.getLocation().add(0, -0.5, 0), cur.getEyeLocation()), 1.6 * range, false, 0, 0.8 * range, 1.2, true); + }); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Fissure.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Fissure.java index 7c989c822..5c946ee6a 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Fissure.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Fissure.java @@ -1,6 +1,7 @@ package mineplex.minecraft.game.classcombat.Skill.Mage; import java.util.HashSet; +import java.util.Set; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -18,7 +19,8 @@ import mineplex.minecraft.game.classcombat.Skill.SkillFactory; public class Fissure extends SkillActive { - private HashSet _active = new HashSet(); + + private final Set _active = new HashSet<>(); public Fissure(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -52,7 +54,7 @@ public class Fissure extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -81,19 +83,20 @@ public class Fissure extends SkillActive public void Update(UpdateEvent event) { if (event.getType() != UpdateType.TICK) - return; - - HashSet remove = new HashSet(); - - for (FissureData data : _active) - if (data.Update()) - remove.add(data); - - for (FissureData data : remove) { - _active.remove(data); - data.Clear(); - } + return; + } + + _active.removeIf(data -> + { + if (data.Update()) + { + data.Clear(); + return true; + } + + return false; + }); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FissureData.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FissureData.java index 09cf5d30e..9694ea011 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FissureData.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FissureData.java @@ -120,11 +120,8 @@ public class FissureData Block block = _path.get(_handled); - //Cannot raise TNT/ICE/WATER - if (block.getTypeId() == 46 - || block.getTypeId() == 79 - || block.getTypeId() == 8 - || block.getTypeId() == 9) + //Cannot raise TNT/WATER + if (block.getType() == Material.TNT || block.isLiquid()) { return false; } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FreezingBlast.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FreezingBlast.java index f0147e14f..0639f5ae7 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FreezingBlast.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/FreezingBlast.java @@ -12,6 +12,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.itemstack.ItemStackFactory; @@ -54,7 +55,7 @@ public class FreezingBlast extends SkillActive implements IThrown @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java index eb975e62a..c2312caa6 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/GlacialBlade.java @@ -57,10 +57,7 @@ public class GlacialBlade extends SkillActive implements IThrown else if (Factory.Relation().canHurt(cur, player)) return false; - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) - return false; - - return true; + return !UtilEnt.isInWater(player); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/IcePrison.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/IcePrison.java index eb40b9ac9..05b53b9f5 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/IcePrison.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/IcePrison.java @@ -15,6 +15,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockFadeEvent; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; import mineplex.core.itemstack.ItemStackFactory; @@ -55,7 +56,7 @@ public class IcePrison extends SkillActive implements IThrown @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Immolate.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Immolate.java index d0f884988..b33346e88 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Immolate.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Immolate.java @@ -9,26 +9,24 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; -import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +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.event.SkillTriggerEvent; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class Immolate extends Skill { @@ -44,8 +42,7 @@ public class Immolate extends Skill "", "Ignite yourself in flaming fury.", "You receive Strength #1#1 , Speed 1,", - "Fire Resistance and take #0#1 more", - "damage from attacks.", + "Fire Resistance", "", "You leave a trail of fire, which", "ignites players for #0.25#0.25 seconds." @@ -105,25 +102,6 @@ public class Immolate extends Skill Factory.Condition().EndCondition(player, null, GetName()); Factory.Condition().Factory().FireResist(GetName(), player, player, 1.9, 0, false, true, true); } - - @EventHandler(priority = EventPriority.HIGH) - public void Damage(CustomDamageEvent event) - { - if (event.IsCancelled()) - return; - - Player damagee = event.GetDamageePlayer(); - if (damagee == null) return; - - if (!_active.contains(damagee)) - return; - - int level = getLevel(damagee); - if (level == 0) return; - - //Damage - event.AddMod(GetName(), GetName() + " Weakness", level*1, true); - } @EventHandler public void Aura(UpdateEvent event) @@ -200,6 +178,20 @@ public class Immolate extends Skill Factory.Condition().Factory().Speed(GetName(), cur, cur, 1.9, 0, false, true, true); Factory.Condition().Factory().Strength(GetName(), cur, cur, 1.9, level, false, true, true); Factory.Condition().Factory().FireResist(GetName(), cur, cur, 1.9, 0, false, true, true); + + for (Player other : UtilPlayer.getNearby(cur.getLocation(), 6)) + { + if (cur.equals(other)) + { + continue; + } + else if (Factory.Relation().canHurt(cur, other)) + { + continue; + } + + Factory.Condition().Factory().FireResist("Allied Immolate", other, cur, 2, 0, true, true, false); + } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Inferno.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Inferno.java index 0745f87ee..338ef756a 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Inferno.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Inferno.java @@ -6,6 +6,7 @@ import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; @@ -13,16 +14,19 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; -import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.condition.Condition; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; +import mineplex.minecraft.game.core.condition.events.ConditionApplyEvent; public class Inferno extends SkillActive { @@ -53,15 +57,15 @@ public class Inferno extends SkillActive @Override public String GetEnergyString() { - return "Energy: #42#-2 per Second"; + return "Energy: #34#-1 per Second"; } @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { - UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); + UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " .in water.")); return false; } @@ -100,7 +104,7 @@ public class Inferno extends SkillActive } //Energy - if (!Factory.Energy().Use(cur, GetName(), 2.1 - (0.1 * level), true, false)) + if (!Factory.Energy().Use(cur, GetName(), 1.7 - (0.05 * level), true, false)) { _active.remove(cur); continue; @@ -113,7 +117,7 @@ public class Inferno extends SkillActive itemStack.setItemMeta(meta); Item fire = cur.getWorld().dropItem(cur.getEyeLocation().add(cur.getLocation().getDirection()), itemStack); - Factory.Fire().Add(fire, cur, 0.7, 0, 0.3 + (0.1 * level), .25, GetName(), false); + Factory.Fire().Add(fire, cur, 0.7, 0, 0.3 + (0.1 * level), .375, GetName(), false); fire.teleport(cur.getEyeLocation()); double x = 0.07 - (UtilMath.r(14)/100d); @@ -126,6 +130,28 @@ public class Inferno extends SkillActive } } + @EventHandler + public void ignite(ConditionApplyEvent event) + { + Condition condition = event.GetCondition(); + LivingEntity entity = condition.GetEnt(), source = condition.GetSource(); + + if (condition.GetType() != ConditionType.BURNING || source == null) + { + return; + } + + if (!(entity instanceof Player) || !(source instanceof Player)) + { + return; + } + + if (!Factory.Relation().canHurt((Player) source, (Player) entity)) + { + event.setCancelled(true); + } + } + @Override public void Reset(Player player) { diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBonds.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBonds.java index 4ad73365d..8f7fc82ac 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBonds.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBonds.java @@ -1,38 +1,48 @@ package mineplex.minecraft.game.classcombat.Skill.Mage; import java.util.HashSet; -import java.util.Iterator; +import java.util.Set; +import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; -import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; +import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilServer; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +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.event.SkillTriggerEvent; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class LifeBonds extends Skill { - private HashSet _active = new HashSet(); - private HashSet _items = new HashSet(); - - private HashSet _hearts = new HashSet(); + + private final Set _active = new HashSet<>(); + private final Set _items = new HashSet<>(); + private final Set _hearts = new HashSet<>(); public LifeBonds(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { @@ -53,7 +63,7 @@ public class LifeBonds extends Skill @Override public String GetEnergyString() { - return "Energy: #4.5#-0.5 per Second"; + return "Energy: #9#-1 per Second"; } @EventHandler @@ -129,11 +139,10 @@ public class LifeBonds extends Skill } //Energy - if (!Factory.Energy().Use(cur, GetName(), 0.225 - (level * 0.025), true, true)) + if (!Factory.Energy().Use(cur, GetName(), 0.45 - (level * 0.05), true, true)) { _active.remove(cur); UtilPlayer.message(cur, F.main(GetClassType().name(), GetName() + ": " + F.oo("Disabled", false))); - continue; } } } @@ -209,17 +218,13 @@ public class LifeBonds extends Skill double amount = 0.5 + (0.5 * level); - amount = Math.min((double)(cur.getHealth() - lowestHp) / 2d, amount); + amount = Math.min((cur.getHealth() - lowestHp) / 2d, amount); //Steal - UtilPlayer.health(cur, -amount); + UtilPlayer.health(cur, -amount * .25); //Hearts _hearts.add(new LifeBondsData(cur.getLocation().add(0, 0.8, 0), lowest, amount)); - - //Effect - //highest.getWorld().playEffect(highest.getLocation(), Effect.STEP_SOUND, 18); - //lowest.getWorld().playEffect(lowest.getLocation(), Effect.STEP_SOUND, 18); } } @@ -228,16 +233,8 @@ public class LifeBonds extends Skill { if (event.getType() != UpdateType.FASTEST) return; - - Iterator heartIterator = _hearts.iterator(); - - while (heartIterator.hasNext()) - { - LifeBondsData data = heartIterator.next(); - - if (data.Update()) - heartIterator.remove(); - } + + _hearts.removeIf(LifeBondsData::update); } @EventHandler @@ -260,34 +257,55 @@ public class LifeBonds extends Skill if (event.getType() != UpdateType.TICK) return; - if (_items.isEmpty()) - return; - - HashSet remove = new HashSet(); - - for (Item cur : _items) - if (UtilEnt.isGrounded(cur) || cur.getTicksLived() > 40 || cur.isDead() || !cur.isValid()) - remove.add(cur); - - for (Item cur : remove) + _items.removeIf(cur -> { - Block block = cur.getLocation().getBlock(); - if (block.getTypeId() == 0) + if (UtilEnt.isGrounded(cur) || cur.getTicksLived() > 40 || cur.isDead() || !cur.isValid()) { - int below = block.getRelative(BlockFace.DOWN).getTypeId(); - if (below == 2 || below == 3) + Block block = cur.getLocation().getBlock(); + if (block.getType() == Material.AIR) { - byte data = 0; - if (cur.getItemStack().getData() != null) - data = cur.getItemStack().getData().getData(); + int below = block.getRelative(BlockFace.DOWN).getTypeId(); + if (below == 2 || below == 3) + { + byte data = 0; + if (cur.getItemStack().getData() != null) + data = cur.getItemStack().getData().getData(); - Factory.BlockRestore().add(block, cur.getItemStack().getTypeId(), data, 2000); + Factory.BlockRestore().add(block, cur.getItemStack().getTypeId(), data, 2000); + } } + + cur.remove(); + return true; } - _items.remove(cur); - cur.remove(); + return false; + }); + } + + @EventHandler(priority = EventPriority.HIGH) + public void damage(CustomDamageEvent event) + { + if (event.IsCancelled() || event.GetCause() != DamageCause.ENTITY_ATTACK) + { + return; } + + Player damagee = event.GetDamageePlayer(), damager = event.GetDamagerPlayer(false); + + if (damagee == null || damager == null) + { + return; + } + + int level = getLevel(damager); + + if (level == 0 || !_active.contains(damager)) + { + return; + } + + UtilPlayer.health(damager, 0.25 + 0.25 * level); } @Override @@ -295,4 +313,36 @@ public class LifeBonds extends Skill { _active.remove(player); } + + private class LifeBondsData + { + + Location _loc; + Player _target; + double _health; + + LifeBondsData(org.bukkit.Location loc, Player target, double amount) + { + _loc = loc; + _target = target; + _health = amount; + } + + boolean update() + { + if (!_target.isValid() || !_target.isOnline()) + return true; + + if (UtilMath.offsetSquared(_loc, _target.getLocation()) < 1) + { + UtilPlayer.health(_target, _health); + return true; + } + + _loc.add(UtilAlg.getTrajectory(_loc, _target.getLocation().add(0, 0.8, 0)).multiply(2.5)); + UtilParticle.PlayParticleToAll(ParticleType.HEART, _loc, 0, 0, 0, 0, 1, ViewDist.LONG); + return false; + } + + } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBondsData.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBondsData.java deleted file mode 100644 index c1afd55b2..000000000 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LifeBondsData.java +++ /dev/null @@ -1,44 +0,0 @@ -package mineplex.minecraft.game.classcombat.Skill.Mage; - -import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; - -import org.bukkit.Location; -import org.bukkit.entity.Player; - -public class LifeBondsData -{ - private Location _loc; - private Player _target; - private double _health; - - public LifeBondsData(org.bukkit.Location loc, Player target, double amount) - { - _loc = loc; - _target = target; - _health = amount; - } - - public boolean Update() - { - if (!_target.isValid() || !_target.isOnline()) - return true; - - if (UtilMath.offset(_loc, _target.getLocation()) < 1) - { - UtilPlayer.health(_target, _health); - return true; - } - - _loc.add(UtilAlg.getTrajectory(_loc, _target.getLocation().add(0, 0.8, 0)).multiply(0.9)); - UtilParticle.PlayParticle(ParticleType.HEART, _loc, 0, 0, 0, 0, 1, - ViewDist.LONG, UtilServer.getPlayers()); - - return false; - } -} diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LightningOrb.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LightningOrb.java index 8772aed09..b36d07c10 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LightningOrb.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/LightningOrb.java @@ -1,22 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill.Mage; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.itemstack.ItemBuilder; -import mineplex.core.projectile.IThrown; -import mineplex.core.projectile.ProjectileUser; -import mineplex.core.updater.UpdateType; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.classcombat.Skill.SkillActive; -import mineplex.minecraft.game.classcombat.Skill.SkillFactory; - import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Sound; @@ -32,6 +18,19 @@ import org.bukkit.event.block.BlockIgniteEvent.IgniteCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerEvent; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import mineplex.core.updater.UpdateType; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; +import mineplex.minecraft.game.classcombat.Skill.SkillActive; +import mineplex.minecraft.game.classcombat.Skill.SkillFactory; + public class LightningOrb extends SkillActive implements IThrown { public static class LightningOrbEvent extends PlayerEvent @@ -51,7 +50,7 @@ public class LightningOrb extends SkillActive implements IThrown private final List _struck; - public LightningOrbEvent(Player who, List struck) + LightningOrbEvent(Player who, List struck) { super(who); @@ -81,7 +80,7 @@ public class LightningOrb extends SkillActive implements IThrown SetDesc(new String[] { "Launch a lightning orb. Upon a direct", - "hit with player, or #5#-0.4 seconds, it will", + "hit with player, or 1.7 seconds, it will", "strike all enemies within #3#0.5 Blocks ", "with lightning, dealing #4#1 damage and", "giving Slow 2 for 4 seconds." @@ -91,7 +90,7 @@ public class LightningOrb extends SkillActive implements IThrown @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -106,7 +105,7 @@ public class LightningOrb extends SkillActive implements IThrown //Action Item item = player.getWorld().dropItem(player.getEyeLocation().add(player.getLocation().getDirection()),new ItemBuilder(Material.DIAMOND_BLOCK).setTitle(UtilMath.random.nextDouble() + "").build()); item.setVelocity(player.getLocation().getDirection()); - Factory.Projectile().AddThrow(item, player, this, 5000 - (400 * level), true, true, false, false, + Factory.Projectile().AddThrow(item, player, this, 1700, true, true, false, false, Sound.FIZZ, 0.6f, 1.6f, ParticleType.FIREWORKS_SPARK, UpdateType.TICK, 0.4f); //Inform @@ -119,22 +118,28 @@ public class LightningOrb extends SkillActive implements IThrown @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) { - Strike(target, data); + Strike(data); } @Override public void Idle(ProjectileUser data) { - Strike(null, data); + Strike(data); } @Override public void Expire(ProjectileUser data) { - Strike(null, data); + Strike(data); } - public void Strike(LivingEntity target, ProjectileUser data) + @Override + public void ChunkUnload(ProjectileUser data) + { + data.getThrown().remove(); + } + + public void Strike(ProjectileUser data) { //Remove data.getThrown().remove(); @@ -149,40 +154,28 @@ public class LightningOrb extends SkillActive implements IThrown int level = getLevel(player); if (level == 0) return; - - HashMap hit = UtilEnt.getInRadius(data.getThrown().getLocation(), 3 + 0.5 * level); - List struck = new ArrayList<>(); - //Lightning - for (LivingEntity cur : hit.keySet()) + UtilEnt.getInRadius(data.getThrown().getLocation(), 3 + 0.5 * level).forEach((cur, scale) -> { - if (cur.equals(player)) - continue; - + if (cur.equals(player) || (cur instanceof Player && !Factory.Relation().canHurt(player, (Player) cur))) + { + return; + } + //Inform UtilPlayer.message(cur, F.main(GetClassType().name(), F.name(player.getName()) + " hit you with " + F.skill(GetName(level)) + ".")); - + //Lightning cur.getWorld().strikeLightningEffect(cur.getLocation()); - - //Damage Event - Factory.Damage().NewDamageEvent(cur, player, null, - DamageCause.LIGHTNING, 4 + level, false, true, false, - player.getName(), GetName()); - - struck.add(cur); - } - //Apply Conditions - for (LivingEntity cur : hit.keySet()) - { - if (cur.equals(player)) - continue; - + //Damage Event + Factory.Damage().NewDamageEvent(cur, player, null, DamageCause.LIGHTNING, 4 + level, false, true, false, player.getName(), GetName()); Factory.Condition().Factory().Slow(GetName(), cur, player, 4, 1, false, true, true, true); Factory.Condition().Factory().Shock(GetName(), cur, player, 1, false, true); - } + + struck.add(cur); + }); Bukkit.getPluginManager().callEvent(new LightningOrbEvent(player, struck)); } @@ -199,10 +192,4 @@ public class LightningOrb extends SkillActive implements IThrown { } - - @Override - public void ChunkUnload(ProjectileUser data) - { - data.getThrown().remove(); - } } \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/MagmaBlade.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/MagmaBlade.java index e107aca50..d598297be 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/MagmaBlade.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/MagmaBlade.java @@ -22,7 +22,7 @@ public class MagmaBlade extends Skill SetDesc(new String[] { "Your sword deals an additional,", - "#0.25#0.25 damage to burning opponents,", + "#0#1 damage to burning opponents,", "but also extinguishes them.", }); } @@ -54,7 +54,7 @@ public class MagmaBlade extends Skill if (level == 0) return; //Damage - event.AddMod(damager.getName(), GetName(), 0.25 + 0.25 * level, true); + event.AddMod(damager.getName(), GetName(), level, true); //Effect damager.getWorld().playSound(damager.getLocation(), Sound.FIZZ, 0.8f, 0f); @@ -68,4 +68,4 @@ public class MagmaBlade extends Skill { } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/NullBlade.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/NullBlade.java index bd089020b..1d4de26de 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/NullBlade.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/NullBlade.java @@ -6,11 +6,10 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import mineplex.core.common.util.UtilGear; 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.core.damage.CustomDamageEvent; public class NullBlade extends Skill { @@ -21,7 +20,7 @@ public class NullBlade extends Skill SetDesc(new String[] { "Your attacks suck the life from", - "opponents, restoring #2#2 energy." + "opponents, restoring #4#2 energy." }); } @@ -46,7 +45,7 @@ public class NullBlade extends Skill if (damagee == null) return; //Energy - Factory.Energy().ModifyEnergy(damager, 2 + 2 * level); + Factory.Energy().ModifyEnergy(damager, 4 + 2 * level); //Damage event.AddMod(damager.getName(), GetName(), 0, false); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Rupture.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Rupture.java index 1ddd9560b..581936529 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Rupture.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Rupture.java @@ -83,7 +83,7 @@ public class Rupture extends SkillActiveCharge @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -226,13 +226,15 @@ public class Rupture extends SkillActiveCharge public boolean CanTravel(Block block) { - int id = block.getTypeId(); + return !UtilBlock.liquid(block) + //return true + /*int id = block.getTypeId(); return (id == 1 || id == 2 || id == 3 || id == 12 || - id == 13); + id == 13)*/; } public void DisplayRupture(Player cur) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java index f8e4155cc..b25fd7594 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/StaticLazer.java @@ -2,32 +2,30 @@ package mineplex.minecraft.game.classcombat.Skill.Mage; import java.util.HashMap; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.core.common.util.F; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilFirework; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.minecraft.game.classcombat.Skill.SkillChargeSword; -import mineplex.minecraft.game.classcombat.Skill.SkillFactory; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import org.bukkit.Color; +import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; import org.bukkit.Sound; -import org.bukkit.FireworkEffect.Type; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; +import mineplex.minecraft.game.classcombat.Skill.SkillChargeSword; +import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + public class StaticLazer extends SkillChargeSword { public StaticLazer(SkillFactory skills, String name, @@ -36,7 +34,7 @@ public class StaticLazer extends SkillChargeSword { super(skills, name, classType, skillType, cost, maxLevel, 0.012f, 0.004f, - 15000, -1000, true, true, + 9500, -500, true, true, false, true); SetDesc(new String[] @@ -47,7 +45,7 @@ public class StaticLazer extends SkillChargeSword GetChargeString(), "Taking damage cancels charge.", "", - "Deals #6#1 damage and travels up to", + "Deals #6#2 damage and travels up to", "#20#10 blocks.", }); @@ -59,7 +57,7 @@ public class StaticLazer extends SkillChargeSword @Override public String GetRechargeString() { - return "Recharge: " + "#12#-1 Seconds"; + return "Recharge: " + "#9#-0.5 Seconds"; } @Override @@ -77,7 +75,7 @@ public class StaticLazer extends SkillChargeSword //Action double curRange = 0; - double maxRange = 10 + 5 * level; + double maxRange = 20 + 10 * level; while (curRange <= maxRange) { Location newTarget = player.getEyeLocation().add(player.getLocation().getDirection().multiply(curRange)); @@ -115,7 +113,7 @@ public class StaticLazer extends SkillChargeSword if (other.equals(player)) continue; - double damage = 7 + 1*level; + double damage = 6 + 2 * level; //Damage Event Factory.Damage().NewDamageEvent(other, player, null, DamageCause.CUSTOM, damage * charge, true, true, false, diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Void.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Void.java index c4fcddb70..53497b7b3 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Void.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Mage/Void.java @@ -1,6 +1,7 @@ package mineplex.minecraft.game.classcombat.Skill.Mage; import java.util.HashSet; +import java.util.Set; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -8,6 +9,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerDropItemEvent; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; @@ -22,7 +24,8 @@ import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; public class Void extends Skill { - private HashSet _active = new HashSet(); + + private final Set _active = new HashSet<>(); public Void(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { @@ -37,7 +40,7 @@ public class Void extends Skill "use no energy to swing weapons.", "", "Reduces incoming damage by #1#1 , but", - "burns #11#-1 Energy per 1 damage reduced." + "burns #8#-1 Energy per 1 damage reduced." }); } @@ -117,7 +120,7 @@ public class Void extends Skill if (!_active.contains(cur)) continue; - if (cur.getLocation().getBlock().getTypeId() == 8 || cur.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(cur)) { UtilPlayer.message(cur, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); _active.remove(cur); @@ -184,7 +187,7 @@ public class Void extends Skill int level = getLevel(damagee); if (level == 0) return; - double dmgToEnergy = 11 - level; + double dmgToEnergy = 8 - level; int dmgLower = 1 + level; int currentEnergy = (int)Factory.Energy().GetCurrent(damagee); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java index c02bd39f6..0b5836035 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Agility.java @@ -11,6 +11,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.potion.PotionEffectType; +import mineplex.core.common.util.UtilEnt; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; @@ -57,7 +58,7 @@ public class Agility extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java index 4d9f9640c..3022fce1e 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/BarbedArrows.java @@ -1,27 +1,28 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; import java.util.HashSet; -import java.util.Iterator; +import java.util.Set; +import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityShootBowEvent; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; 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.core.damage.CustomDamageEvent; public class BarbedArrows extends Skill { - private HashSet _arrows = new HashSet(); - + + private final Set _arrows = new HashSet<>(); + public BarbedArrows(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels) { super(skills, name, classType, skillType, cost, levels); @@ -35,67 +36,75 @@ public class BarbedArrows extends Skill "Duration scales with arrow velocity." }); } - + @EventHandler (priority = EventPriority.MONITOR) public void bowShoot(EntityShootBowEvent event) { int level = getLevel(event.getEntity()); - if (level == 0) + + if (level == 0) + { return; - - if (!(event.getProjectile() instanceof Projectile)) - return; - - _arrows.add((Projectile)event.getProjectile()); + } + + _arrows.add(event.getProjectile()); } @EventHandler(priority = EventPriority.HIGH) public void damage(CustomDamageEvent event) { if (event.IsCancelled()) + { return; - - if (event.GetCause() != DamageCause.PROJECTILE) - return; + } Projectile projectile = event.GetProjectile(); - if (projectile == null) return; + + if (projectile == null || !_arrows.remove(projectile)) + { + return; + } LivingEntity damagee = event.GetDamageeEntity(); - if (damagee == null) return; - Player damager = event.GetDamagerPlayer(true); - if (damager == null) return; + + if (damagee == null || damager == null) + { + return; + } //Level int level = getLevel(damager); - if (level == 0) return; + if (level == 0) + { + return; + } + + //Condition + int duration = 3 + level; + + Factory.Condition().Factory().Slow(GetName(), damagee, damager, duration, 0, false, true, true, true); + Factory.Condition().Factory().Regen(GetName(), damagee, damager, duration, 0, false, false, false); + Factory.Condition().Factory().ArcadeHungerDisable(GetName(), damagee, damager, duration, false); Player damageePlayer = event.GetDamageePlayer(); if (damageePlayer != null) + { + damageePlayer.setFoodLevel(2); damageePlayer.setSprinting(false); - - //Damage - event.AddMod(damager.getName(), GetName(), 0, false); - - //Condition - Factory.Condition().Factory().Slow(GetName(), damagee, damager, (projectile.getVelocity().length() / 3) * (2 + level), 0, false, true, true, true); + } } - + @EventHandler public void clean(UpdateEvent event) { - if (event.getType() != UpdateType.SEC) - return; - - for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) + if (event.getType() != UpdateType.SLOW) { - Projectile arrow = arrowIterator.next(); - - if (arrow.isDead() || !arrow.isValid()) - arrowIterator.remove(); + return; } + + _arrows.removeIf(arrow -> !arrow.isValid()); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java index 614b3461d..e74993102 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Disengage.java @@ -61,7 +61,7 @@ public class Disengage extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java index dbc584655..d4f3476fb 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/ExplosiveShot.java @@ -3,9 +3,7 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; - - - +import java.util.Set; import org.bukkit.Location; @@ -41,8 +39,9 @@ import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class ExplosiveShot extends SkillActive { - private HashSet _arrows = new HashSet(); - private HashSet _active = new HashSet(); + + private final Set _arrows = new HashSet<>(); + private final Set _active = new HashSet<>(); public ExplosiveShot(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -74,7 +73,7 @@ public class ExplosiveShot extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java index 6d411db5b..99e99f45d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HealingShot.java @@ -1,7 +1,7 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; import java.util.HashSet; -import java.util.Iterator; +import java.util.Set; import org.bukkit.Effect; import org.bukkit.EntityEffect; @@ -9,35 +9,31 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.potion.PotionEffectType; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class HealingShot extends SkillActive { - private HashSet _arrows = new HashSet(); - private HashSet _active = new HashSet(); + + private final Set _arrows = new HashSet<>(); + private final Set _active = new HashSet<>(); public HealingShot(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -70,7 +66,7 @@ public class HealingShot extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -112,46 +108,31 @@ public class HealingShot extends SkillActive _arrows.add(event.getProjectile()); } - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.NORMAL) - public void arrowHit(EntityDamageEvent event) + @EventHandler + public void arrowHit(CustomDamageEvent event) { - if (event.getCause() != DamageCause.PROJECTILE) - return; - - if (!(event instanceof EntityDamageByEntityEvent)) - return; - - EntityDamageByEntityEvent eventEE = (EntityDamageByEntityEvent)event; - - if (!(eventEE.getDamager() instanceof Projectile)) - return; - - Projectile projectile = (Projectile)eventEE.getDamager(); + Player damager = event.GetDamagerPlayer(true); + Projectile projectile = event.GetProjectile(); - //Not Pin Down Arrow - if (!_arrows.contains((Entity)projectile)) + if (!_arrows.remove(projectile)) + { return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player damagee = (Player)event.getEntity(); - - if (projectile.getShooter() == null) - return; - - if (!(projectile.getShooter() instanceof Player)) - return; - - Player damager = (Player)projectile.getShooter(); + } //Level int level = getLevel(damager); - if (level == 0) return; + if (level == 0) + { + return; + } + + Player damagee = event.GetDamageePlayer(); + + if (damagee == null) + { + return; + } - //Remove - _arrows.remove(projectile); projectile.remove(); //Regen @@ -184,9 +165,9 @@ public class HealingShot extends SkillActive "You hit " + F.name(UtilEnt.getName(damagee)) +" with " + F.skill(GetName(level)) + ".")); //Particles - UtilParticle.PlayParticle(ParticleType.HEART, damagee.getLocation(), + UtilParticle.PlayParticleToAll(ParticleType.HEART, damagee.getLocation(), (float)(Math.random() - 0.5), (float)(Math.random() + 0.5), (float)(Math.random() - 0.5), 2f, 12, - ViewDist.MAX, UtilServer.getPlayers()); + ViewDist.LONG); //Remove projectile.remove(); @@ -200,8 +181,7 @@ public class HealingShot extends SkillActive for (Entity ent : _arrows) { - UtilParticle.PlayParticle(ParticleType.HEART, ent.getLocation(), 0, 0, 0, 0, 1, - ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticleToAll(ParticleType.HEART, ent.getLocation(), 0, 0, 0, 0, 1, ViewDist.LONG); } } @@ -210,14 +190,8 @@ public class HealingShot extends SkillActive { if (event.getType() != UpdateType.SEC) return; - - for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) - { - Entity arrow = arrowIterator.next(); - - if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround()) - arrowIterator.remove(); - } + + _arrows.removeIf(arrow -> !arrow.isValid() || arrow.isOnGround()); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java index 3c8a0dcf0..941c26e75 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/HeavyArrows.java @@ -36,11 +36,11 @@ public class HeavyArrows extends Skill SetDesc(new String[] { "Your arrows are extremely heavy,", - "moving #5#5 % slower and dealing", + "moving 20% slower and dealing", "an additional #10#10 % knockback", "as well as #1#1 additional damage.", "", - "You also receive #12#6 % reversed", + "You also receive 30% reversed", "velocity of your arrows while not", "sneaking.", }); @@ -64,13 +64,13 @@ public class HeavyArrows extends Skill //Backboost if (!player.isSneaking() && Recharge.Instance.use(player, GetName(), 750, false, false)) { - double vel = (event.getProjectile().getVelocity().length() * (0.12 + 0.06 * level)); + double vel = (event.getProjectile().getVelocity().length() * 0.30); UtilAction.velocity(player, player.getLocation().getDirection().multiply(-1), vel, false, 0, 0.3, 0.6, true); } //Decrease Speed - event.getProjectile().setVelocity(event.getProjectile().getVelocity().multiply(0.95 - (level * 0.05))); + event.getProjectile().setVelocity(event.getProjectile().getVelocity().multiply(.80)); _arrows.add(event.getProjectile()); } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java index bfa6fcadf..e7db354b0 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/IncendiaryShot.java @@ -59,7 +59,7 @@ // @Override // public boolean CustomCheck(Player player, int level) // { -// if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) +// if (UtilEnt.isInWater(player)) // { // UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(getName()) + " in water.")); // return false; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Longshot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Longshot.java index 3c8eefa85..64307552d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Longshot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Longshot.java @@ -1,19 +1,21 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; -import org.bukkit.*; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; -import org.bukkit.event.*; -import org.bukkit.event.entity.*; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.metadata.FixedMetadataValue; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.UtilMath; +import mineplex.core.recharge.Recharge; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.Skill; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; - -import org.bukkit.metadata.FixedMetadataValue; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class Longshot extends Skill { @@ -24,49 +26,66 @@ public class Longshot extends Skill SetDesc(new String[] { - "Arrows do an additional 1 damage", - "for every #4.5#-0.5 Blocks they travelled,", - "however, their base damage is", - "reduced by 5.", + "Active by default, hold sneak to not use it.", + "", + "Arrows fire 20% faster and", + "deal an additional 1 damage", + "for every #4.5#-0.5 Blocks they travelled.", "", - "Maximum of #6#6 additional damage." + "Maximum of 12 additional damage." }); } - @EventHandler + @Override + public String GetRechargeString() + { + return "Recharge: 7#-1 Seconds."; + } + + @EventHandler public void ShootBow(EntityShootBowEvent event) { - if (!(event.getEntity() instanceof Player)) - return; + int level = getLevel(event.getEntity()); - int level = getLevel((Player) event.getEntity()); if (level == 0) - return; + { + return; + } - // Save - event.getProjectile().setMetadata("ShotFrom", - new FixedMetadataValue(this.Factory.getPlugin(), event.getProjectile().getLocation())); + Player player = (Player) event.getEntity(); + Entity projectile = event.getProjectile(); + + if (player.isSneaking() || !Recharge.Instance.use(player, GetName(), 7000 - (1000 * level), true, false)) + { + return; + } + + player.getWorld().playSound(player.getLocation(), Sound.FIZZ, 1, 1); + projectile.setVelocity(projectile.getVelocity().multiply(1.2)); + projectile.setMetadata("ShotFrom", new FixedMetadataValue(Factory.getPlugin(), projectile.getLocation())); } @EventHandler(priority = EventPriority.HIGH) public void Damage(CustomDamageEvent event) { if (event.IsCancelled()) - return; - - if (event.GetCause() != DamageCause.PROJECTILE) - return; + { + return; + } Projectile projectile = event.GetProjectile(); - if (projectile == null) - return; - if (!projectile.hasMetadata("ShotFrom")) - return; + if (projectile == null || !projectile.hasMetadata("ShotFrom")) + { + return; + } Player damager = event.GetDamagerPlayer(true); + if (damager == null) - return; + { + return; + } int level = getLevel(damager); @@ -74,11 +93,9 @@ public class Longshot extends Skill double length = UtilMath.offset(loc, projectile.getLocation()); // Damage - double damage = Math.min(6 + 6 * level, (length / (4.5 - 0.5 * level)) - 5); + double damage = length / (4.5 - 0.5 * level); + damage = Math.max(Math.min(damage, 12), 0); - if (damage < 0) - damage = 0; - event.AddMod(damager.getName(), GetName(), damage, damage > 0); } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java index 28ed24435..0008a48ac 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/NapalmShot.java @@ -70,7 +70,7 @@ public class NapalmShot extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -125,7 +125,7 @@ public class NapalmShot extends SkillActive Projectile projectile = event.GetProjectile(); if (projectile == null) return; - if (!_arrows.contains((Entity)projectile)) + if (!_arrows.contains(projectile)) return; LivingEntity damagee = event.GetDamageeEntity(); @@ -205,14 +205,8 @@ public class NapalmShot extends SkillActive { if (event.getType() != UpdateType.SEC) return; - - for (Iterator arrowIterator = _arrows.iterator(); arrowIterator.hasNext();) - { - Entity arrow = arrowIterator.next(); - - if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround()) - arrowIterator.remove(); - } + + _arrows.removeIf(arrow -> !arrow.isValid() || arrow.isOnGround()); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java index 385d8a5d8..d2e365a25 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/Overcharge.java @@ -1,21 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; -import java.util.Iterator; +import java.util.Map; import java.util.WeakHashMap; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilParticle.ParticleType; -import mineplex.core.common.util.UtilParticle.ViewDist; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; -import mineplex.minecraft.game.classcombat.Skill.SkillChargeBow; -import mineplex.minecraft.game.classcombat.Skill.SkillFactory; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import org.bukkit.Sound; import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; @@ -26,15 +13,26 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; +import mineplex.minecraft.game.classcombat.Skill.SkillChargeBow; +import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + public class Overcharge extends SkillChargeBow { - private WeakHashMap _arrows = new WeakHashMap(); + + private final Map _arrows = new WeakHashMap<>(); public Overcharge(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int maxLevel) { super(skills, name, classType, skillType, cost, maxLevel, - 0.016f, 0.008f, false, true); + 0.0225f, 0.005f, false, true); SetDesc(new String[] { @@ -42,15 +40,22 @@ public class Overcharge extends SkillChargeBow "", GetChargeString(), "", - "Deals up to #1.5#1.5 bonus damage." + "Deals up to #1.5#1.5 bonus damage.", + "Fully charging increases arrow speed by #5#5 %" }); } @Override public void DoSkillCustom(Player player, float charge, Arrow arrow) { - double damage = charge * (1.5 + 1.5 * getLevel(player)); + double damage = charge * (1.5 * getLevel(player)); _arrows.put(arrow, damage); + + if (charge >= 1) + { + //Increase Speed + arrow.setVelocity(arrow.getVelocity().multiply(1 + (.05 * getLevel(player)))); + } } @EventHandler(priority = EventPriority.HIGH) @@ -95,8 +100,7 @@ public class Overcharge extends SkillChargeBow for (Entity ent : _arrows.keySet()) { - UtilParticle.PlayParticle(ParticleType.RED_DUST, ent.getLocation(), 0, 0, 0, 0, 1, - ViewDist.MAX, UtilServer.getPlayers()); + UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, ent.getLocation(), null, 0, 1, ViewDist.LONG); } } @@ -105,13 +109,7 @@ public class Overcharge extends SkillChargeBow { if (event.getType() != UpdateType.SEC) return; - - for (Iterator arrowIterator = _arrows.keySet().iterator(); arrowIterator.hasNext();) - { - Arrow arrow = arrowIterator.next(); - - if (arrow.isDead() || !arrow.isValid() || arrow.isOnGround()) - arrowIterator.remove(); - } + + _arrows.keySet().removeIf(arrow -> !arrow.isValid() || arrow.isOnGround()); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/PinDown.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/PinDown.java index abc8292de..3fdbecf97 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/PinDown.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/PinDown.java @@ -1,6 +1,9 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Set; import org.bukkit.Effect; import org.bukkit.EntityEffect; @@ -15,6 +18,8 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; +import mineplex.minecraft.game.core.condition.Condition; +import mineplex.minecraft.game.core.condition.events.ConditionExpireEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; import mineplex.core.updater.event.UpdateEvent; @@ -27,7 +32,9 @@ import mineplex.minecraft.game.classcombat.Skill.SkillFactory; public class PinDown extends SkillActive { - private HashSet _arrows = new HashSet(); + + private final Set _arrows = new HashSet<>(); + private final Map _foodLevel = new HashMap<>(); public PinDown(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -53,7 +60,7 @@ public class PinDown extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -119,6 +126,8 @@ public class PinDown extends SkillActive //Cripple double dur = 3 + level; Factory.Condition().Factory().Slow(GetName(), damagee, damager, dur, 3, false, true, true, true); + Factory.Condition().Factory().Jump(GetName(), damagee, damager, dur, 250, false, true, true); + Factory.Condition().Factory().ArcadeHungerDisable(GetName(), damagee, damager, dur, false); //Damage event.AddMod(damager.getName(), GetName(), -2, true); @@ -127,7 +136,14 @@ public class PinDown extends SkillActive //Effect for (int i=0 ; i<3 ; i++) damagee.playEffect(EntityEffect.HURT); - + + Player damgeePlayer = event.GetDamageePlayer(); + if (damgeePlayer != null) + { + _foodLevel.put(damgeePlayer, damgeePlayer.getFoodLevel()); + damgeePlayer.setFoodLevel(1); + } + //Clean _arrows.remove(projectile); projectile.remove(); @@ -141,15 +157,29 @@ public class PinDown extends SkillActive public void Clean(UpdateEvent event) { if (event.getType() != UpdateType.SEC) + { return; - HashSet remove = new HashSet(); + } - for (Projectile cur : _arrows) - if (cur.isDead() || !cur.isValid()) - remove.add(cur); + _arrows.removeIf(projectile -> projectile.isDead() || !projectile.isValid()); + _foodLevel.keySet().removeIf(player -> !player.isOnline()); + } - for (Projectile cur : remove) - _arrows.remove(cur); + @EventHandler + public void conditionEnd(ConditionExpireEvent event) + { + Condition condition = event.getCondition(); + LivingEntity entity = condition.GetEnt(); + + if (event.getCondition().GetReason().equals(GetName())) + { + Integer food = _foodLevel.remove(entity); + + if (food != null && entity instanceof Player) + { + ((Player) entity).setFoodLevel(food); + } + } } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java index 41a752f2d..dd2a9123f 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/VitalitySpores.java @@ -28,7 +28,7 @@ public class VitalitySpores extends Skill SetDesc(new String[] { "After getting hit, if no damage is taken", - "for 10 Seconds then you will receive", + "for 8 Seconds then you will receive", "Regeneration #2#0 for #5#1 Seconds", }); } @@ -62,7 +62,7 @@ public class VitalitySpores extends Skill { Entry entry = iterator.next(); - if (UtilTime.elapsed(entry.getValue(), 10000)) + if (UtilTime.elapsed(entry.getValue(), 8000)) { iterator.remove(); entry.getKey().addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, (20 * (5 + getLevel(entry.getKey()))), 1)); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java index 87f98a7f8..cc1eee5e1 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsFury.java @@ -1,6 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.WeakHashMap; import org.bukkit.Material; @@ -13,28 +15,30 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerInteractEvent; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilGear; -import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilServer; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.common.util.UtilPlayer; -import mineplex.minecraft.game.core.condition.Condition.ConditionType; +import mineplex.core.common.util.UtilServer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.SkillActive; import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; public class WolfsFury extends SkillActive { - private WeakHashMap _active = new WeakHashMap(); - private HashSet _swing = new HashSet(); - private HashSet _miss = new HashSet(); + + private final Map _active = new WeakHashMap<>(); + private final Set _swing = new HashSet<>(); + private final Set _miss = new HashSet<>(); public WolfsFury(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels, @@ -53,7 +57,7 @@ public class WolfsFury extends SkillActive SetDesc(new String[] { "Summon the power of the wolf, gaining", - "Strength 3 for #2#2 seconds, and giving", + "Strength 4 for #2#2 seconds, and giving", "no knockback on your attacks.", "", "If you miss two consecutive attacks,", @@ -64,7 +68,7 @@ public class WolfsFury extends SkillActive @Override public boolean CustomCheck(Player player, int level) { - if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) + if (UtilEnt.isInWater(player)) { UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water.")); return false; @@ -80,7 +84,7 @@ public class WolfsFury extends SkillActive _active.put(player, System.currentTimeMillis() + 8000); //Condition - Factory.Condition().Factory().Strength(GetName(), player, player, 2 + 2*level, 2, false, true, true); + Factory.Condition().Factory().Strength(GetName(), player, player, 2 + 2*level, 3, false, true, true); //Inform UtilPlayer.message(player, F.main(GetClassType().name(), "You used " + F.skill(GetName(level)) + ".")); @@ -92,18 +96,21 @@ public class WolfsFury extends SkillActive @EventHandler public void Expire(UpdateEvent event) { - //End Skill - if (event.getType() == UpdateType.FAST) + if (event.getType() != UpdateType.FAST) { - HashSet expired = new HashSet(); - - for (Player cur : _active.keySet()) - if (System.currentTimeMillis() > _active.get(cur)) - expired.add(cur); - - for (Player cur : expired) - End(cur); + return; } + + _active.entrySet().removeIf(entry -> + { + if (System.currentTimeMillis() > entry.getValue()) + { + End(entry.getKey()); + return true; + } + + return false; + }); } @EventHandler @@ -157,26 +164,23 @@ public class WolfsFury extends SkillActive public void Miss(UpdateEvent event) { if (event.getType() != UpdateType.TICK) - return; - - HashSet expired = new HashSet(); - - for (Player cur : _swing) - expired.add(cur); - - for (Player cur : expired) { - _swing.remove(cur); - - if (_miss.remove(cur)) + return; + } + + _swing.removeIf(player -> + { + if (_miss.remove(player)) { - End(cur); + End(player); } else { - _miss.add(cur); + _miss.add(player); } - } + + return true; + }); } public void End(Player player) @@ -198,9 +202,9 @@ public class WolfsFury extends SkillActive for (Player player : _active.keySet()) { - UtilParticle.PlayParticle(ParticleType.RED_DUST, player.getLocation(), + UtilParticle.PlayParticleToAll(ParticleType.RED_DUST, player.getLocation(), (float)(Math.random() - 0.5), 0.2f + (float)(Math.random() * 1), (float)(Math.random() - 0.5), 0, 4, - ViewDist.LONG, UtilServer.getPlayers()); + ViewDist.LONG); } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java index 195ff7a27..9f1850676 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Ranger/WolfsPounce.java @@ -1,20 +1,5 @@ package mineplex.minecraft.game.classcombat.Skill.Ranger; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; -import mineplex.core.common.util.F; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.updater.UpdateType; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilMath; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilTime; -import mineplex.minecraft.game.classcombat.Skill.SkillChargeSword; -import mineplex.minecraft.game.classcombat.Skill.SkillFactory; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; - -import org.bukkit.GameMode; import org.bukkit.Sound; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -22,6 +7,20 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import mineplex.core.common.util.F; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; +import mineplex.minecraft.game.classcombat.Skill.SkillChargeSword; +import mineplex.minecraft.game.classcombat.Skill.SkillFactory; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + public class WolfsPounce extends SkillChargeSword { private NautHashMap _live = new NautHashMap(); @@ -82,7 +81,7 @@ public class WolfsPounce extends SkillChargeSword //End for (Player player : GetUsers()) { - if (!UtilEnt.isGrounded(player)) + if (!UtilEnt.onBlock(player)) continue; if (!_live.containsKey(player)) @@ -173,4 +172,4 @@ public class WolfsPounce extends SkillChargeSword _charge.remove(player); _live.remove(player); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Skill.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Skill.java index b43e1c6b1..58ebd9315 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Skill.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/Skill.java @@ -127,13 +127,13 @@ public abstract class Skill implements ISkill, Listener if (GetSkillType() == SkillType.Sword) if (UtilGear.isMat(player.getItemInHand(), Material.GOLD_SWORD)) - level++; + level += 2; if (GetSkillType() == SkillType.Axe) if (UtilGear.isMat(player.getItemInHand(), Material.GOLD_AXE)) - level++; + level += 2; - return level; + return Math.min(level, _maxLevel + 1); } @Override diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillActive.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillActive.java index ee7f2296d..d64af0dc8 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillActive.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillActive.java @@ -1,6 +1,8 @@ package mineplex.minecraft.game.classcombat.Skill; +import java.util.Collections; import java.util.HashSet; +import java.util.Set; import mineplex.core.common.util.UtilBlock; import mineplex.core.common.util.UtilMath; @@ -28,8 +30,8 @@ public abstract class SkillActive extends Skill implements Listener protected long _rechargeMod; protected boolean _rechargeInform; - protected HashSet _itemSet = new HashSet(); - protected HashSet _actionSet = new HashSet(); + protected final Set _itemSet = new HashSet<>(); + protected final Set _actionSet = new HashSet<>(); public SkillActive(SkillFactory skills, String name, ClassType classType, SkillType skillType, @@ -47,19 +49,16 @@ public abstract class SkillActive extends Skill implements Listener _rechargeMod = rechargeMod; _rechargeInform = rechargeInform; - for (Material cur : itemArray) - _itemSet.add(cur); - - for (Action cur : actionArray) - _actionSet.add(cur); + Collections.addAll(_itemSet, itemArray); + Collections.addAll(_actionSet, actionArray); } - public HashSet GetItems() + public Set GetItems() { return _itemSet; } - public HashSet GetActions() + public Set GetActions() { return _actionSet; } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillChargeBow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillChargeBow.java index 28842a73d..a571b807d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillChargeBow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Skill/SkillChargeBow.java @@ -1,18 +1,5 @@ package mineplex.minecraft.game.classcombat.Skill; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilEvent; -import mineplex.core.common.util.UtilGear; -import mineplex.core.common.util.UtilTime; -import mineplex.core.common.util.UtilEvent.ActionType; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.recharge.Recharge; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; - import org.bukkit.Material; import org.bukkit.entity.Arrow; import org.bukkit.entity.Player; @@ -21,6 +8,17 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.player.PlayerInteractEvent; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; + public abstract class SkillChargeBow extends SkillCharge implements Listener { protected boolean _canChargeInWater; 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 ffc77893f..d61102ddd 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 @@ -145,8 +145,8 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory _movement = movement; _teleport = teleport; _energy = energy; - _skillMap = new HashMap(); - _skillSalesPackageMap = new HashMap(); + _skillMap = new HashMap<>(); + _skillSalesPackageMap = new HashMap<>(); PopulateSkills(); } @@ -181,7 +181,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory for (Skill skill : _skillMap.values()) getPlugin().getServer().getPluginManager().registerEvents(skill, getPlugin()); - List skillTokens = new ArrayList(); + List skillTokens = new ArrayList<>(); for (Skill skill : _skillMap.values()) { @@ -247,7 +247,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory AddSkill(new Blink(this, "Blink", ClassType.Assassin, SkillType.Axe, 1, 4, 0, 0, - 12000, 0, true, + 9000, 1000, true, new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE}, new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); @@ -283,7 +283,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory AddSkill(new SilencingArrow(this, "Silencing Arrow", ClassType.Assassin, SkillType.Bow, 1, 4, 0, 0, - 20000, -2000, true, + 20000, -3000, true, new Material[] {Material.BOW}, new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK})); @@ -453,7 +453,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory //Axe AddSkill(new FireBlast(this, "Fire Blast", ClassType.Mage, SkillType.Axe, 1, 5, - 60, -3, + 54, -4, 13000, -1000, true, new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE}, new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); @@ -475,7 +475,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory AddSkill(new Fissure(this, "Fissure", ClassType.Mage, SkillType.Axe, 1, 5, - 60, -3, + 53, -3, 13000, -1000, true, new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE}, new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); @@ -501,8 +501,8 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory //Passive B AddSkill(new GlacialBlade(this, "Glacial Blade", ClassType.Mage, SkillType.PassiveB, 1, 3, - 16, -2, - 1200, -250, false, + 11, -2, + 1000, -100, false, new Material[] {Material.IRON_SWORD, Material.GOLD_SWORD, Material.DIAMOND_SWORD}, new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK})); @@ -535,7 +535,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory AddSkill(new WolfsFury(this, "Wolfs Fury", ClassType.Ranger, SkillType.Axe, 1, 4, 0, 0, - 18000, 2000, true, + 17000, 2000, true, new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE}, new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK})); @@ -578,7 +578,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory AddSkill(new ExplosiveShot(this, "Explosive Arrow", ClassType.Ranger, SkillType.Bow, 1, 4, 0, 0, - 20000, -2000, false, + 22000, -2000, false, new Material[] {Material.BOW}, new Action[] {Action.LEFT_CLICK_AIR, Action.LEFT_CLICK_BLOCK})); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Item.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Item.java index 2ba766a11..e49205fb3 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Item.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Item.java @@ -10,15 +10,16 @@ import org.bukkit.event.Listener; public class Item implements IItem, Listener { - protected ItemFactory Factory; - private Material _type; - private String _name; - private String[] _desc; - private int _amount; + protected final ItemFactory Factory; + + private final Material _type; + private final String _name; + private final String[] _desc; + private final int _amount; private boolean _free; - private int _gemCost; - private boolean _canDamage; + private final int _gemCost; + private final boolean _canDamage; private int _tokenCost; diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java index 4351a0801..52bbaecd3 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemFactory.java @@ -7,6 +7,7 @@ import java.util.HashSet; import mineplex.core.MiniPlugin; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.minecraft.game.core.IRelation; import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.core.energy.Energy; import mineplex.minecraft.game.core.fire.Fire; @@ -22,23 +23,25 @@ import org.bukkit.plugin.java.JavaPlugin; public class ItemFactory extends MiniPlugin implements IItemFactory { - private BlockRestore _blockRestore; - private ConditionManager _condition; - private DamageManager _damage; - private Energy _energy; - private Fire _fire; - private ProjectileManager _projectileManager; - private ProximityManager _proxyManager; + + private final BlockRestore _blockRestore; + private final ConditionManager _condition; + private final DamageManager _damage; + private final Energy _energy; + private final Fire _fire; + private final ProjectileManager _projectileManager; + private final ProximityManager _proxyManager; + private final IRelation _relation; private java.lang.reflect.Field _itemMaxDurability; - private HashMap _items; - private HashSet _ignore; + private final HashMap _items; + private final HashSet _ignore; - public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager) + public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, IRelation relation) { - this(plugin, blockRestore, condition, damage, energy, fire, projectileManager, new HashSet()); + this(plugin, blockRestore, condition, damage, energy, fire, projectileManager, relation, new HashSet<>()); } - public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, HashSet ignore) + public ItemFactory(JavaPlugin plugin, BlockRestore blockRestore, ConditionManager condition, DamageManager damage, Energy energy, Fire fire, ProjectileManager projectileManager, IRelation relation, HashSet ignore) { super("Item Factory", plugin); @@ -49,8 +52,9 @@ public class ItemFactory extends MiniPlugin implements IItemFactory _fire = fire; _projectileManager = projectileManager; _proxyManager = new ProximityManager(); - - _items = new HashMap(); + _relation = relation; + + _items = new HashMap<>(); _ignore = ignore; try @@ -58,16 +62,12 @@ public class ItemFactory extends MiniPlugin implements IItemFactory _itemMaxDurability = net.minecraft.server.v1_8_R3.Item.class.getDeclaredField("durability"); _itemMaxDurability.setAccessible(true); } - catch (SecurityException e) + catch (SecurityException | NoSuchFieldException e) { e.printStackTrace(); } - catch (NoSuchFieldException e) - { - e.printStackTrace(); - } - - PopulateFactory(); + + PopulateFactory(); } private void PopulateFactory() @@ -120,7 +120,7 @@ public class ItemFactory extends MiniPlugin implements IItemFactory private void AddThrowable() { - AddItem(new WaterBottle(this, Material.POTION, 1, false, 0, 1, + AddItem(new WaterBottle(this, Material.POTION, 1, false, 0, 2, ActionType.R, true, 500, 0, ActionType.L, true, 500, 0, 1f, -1, true, true, true, false)); @@ -234,7 +234,17 @@ public class ItemFactory extends MiniPlugin implements IItemFactory { return _projectileManager; } - + + public IRelation getRelation() + { + return _relation; + } + + public ProximityManager getProximityManager() + { + return _proxyManager; + } + @Override public void registerSelf() { @@ -256,9 +266,4 @@ public class ItemFactory extends MiniPlugin implements IItemFactory HandlerList.unregisterAll(_proxyManager); } - - public ProximityManager getProximityManager() - { - return _proxyManager; - } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java index b47364428..8b954c69b 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityZapper.java @@ -76,6 +76,11 @@ public class ProximityZapper extends ItemUsable @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) { + if (UtilEnt.hasFlag(target, UtilEnt.FLAG_ENTITY_COMPONENT)) + { + return; + } + //Arm _armed.put(data.getThrown(), data.getThrower()); diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/WaterBottle.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/WaterBottle.java index bc711045b..ce7f0823d 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/WaterBottle.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/WaterBottle.java @@ -1,22 +1,41 @@ package mineplex.minecraft.game.classcombat.item.Throwable; import org.bukkit.Effect; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.scheduler.BukkitTask; -import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.projectile.ProjectileUser; import mineplex.minecraft.game.classcombat.item.ItemFactory; import mineplex.minecraft.game.classcombat.item.ItemUsable; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; public class WaterBottle extends ItemUsable { + private static final ConditionType[] NEGATIVE_TYPES = + { + ConditionType.BLINDNESS, + ConditionType.CONFUSION, + ConditionType.HARM, + ConditionType.HUNGER, + ConditionType.POISON, + ConditionType.POISON_SHOCK, + ConditionType.SHOCK, + ConditionType.SLOW, + ConditionType.SLOW_DIGGING, + ConditionType.WEAKNESS, + ConditionType.WITHER, + ConditionType.SILENCE + }; + public WaterBottle(ItemFactory factory, Material type, int amount, boolean canDamage, int gemCost, int tokenCost, ActionType useAction, boolean useStock, long useDelay, @@ -45,14 +64,25 @@ public class WaterBottle extends ItemUsable { Player player = event.getPlayer(); - if (((CraftPlayer)player).getHandle().spectating) + if (UtilPlayer.isSpectator(player)) + { return; + } //Extinguish player.setFireTicks(-20); //Resist Factory.Condition().Factory().FireResist(GetName(), player, player, 4, 0, false, true, true); + + BukkitTask task = UtilServer.runSyncTimer(() -> + { + for (ConditionType type : NEGATIVE_TYPES) + { + Factory.Condition().EndCondition(player, type, null); + } + }, 0, 10); + UtilServer.runSyncLater(task::cancel, 20 * 4); //Effect player.getWorld().playSound(player.getLocation(), Sound.SPLASH, 1f, 1.4f); @@ -85,10 +115,18 @@ public class WaterBottle extends ItemUsable public void Break(ProjectileUser data) { + if (!(data.getThrower() instanceof Player)) + { + return; + } + + Player thrower = (Player) data.getThrower(); + Location location = data.getThrown().getLocation(); + //Splash - data.getThrown().getWorld().playEffect(data.getThrown().getLocation(), Effect.STEP_SOUND, 20); - data.getThrown().getWorld().playEffect(data.getThrown().getLocation(), Effect.STEP_SOUND, 8); - data.getThrown().getWorld().playSound(data.getThrown().getLocation(), Sound.SPLASH, 1f, 1.4f); + data.getThrown().getWorld().playEffect(location, Effect.STEP_SOUND, 20); + data.getThrown().getWorld().playEffect(location, Effect.STEP_SOUND, 8); + data.getThrown().getWorld().playSound(location, Sound.SPLASH, 1f, 1.4f); //Extinguish Factory.Fire().RemoveNear(data.getThrown().getLocation(), 3); @@ -98,8 +136,18 @@ public class WaterBottle extends ItemUsable for (Player player : UtilPlayer.getNearby(data.getThrown().getLocation(), 3)) { + if (Factory.getRelation().canHurt(player, thrower)) + { + continue; + } + //Extinguish player.setFireTicks(-20); + + for (ConditionType type : NEGATIVE_TYPES) + { + Factory.Condition().EndCondition(player, type, null); + } } } } \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/Web.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/Web.java index 294e8234f..4090818fb 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/Web.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/Web.java @@ -1,5 +1,8 @@ package mineplex.minecraft.game.classcombat.item.Throwable; +import java.util.HashMap; +import java.util.Map; + import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.Location; @@ -7,12 +10,15 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.util.Vector; import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilMath; import mineplex.core.projectile.ProjectileUser; import mineplex.minecraft.game.classcombat.item.ItemFactory; import mineplex.minecraft.game.classcombat.item.ItemUsable; @@ -20,6 +26,9 @@ import mineplex.minecraft.game.classcombat.item.event.WebTossEvent; public class Web extends ItemUsable { + + private final Map _owner = new HashMap<>(); + public Web(ItemFactory factory, Material type, int amount, boolean canDamage, int gemCost, int tokenCost, ActionType useAction, boolean useStock, long useDelay, @@ -54,19 +63,19 @@ public class Web extends ItemUsable } } - CreateWeb(data.getThrown()); + createWeb(data.getThrown()); } @Override public void Idle(ProjectileUser data) { - CreateWeb(data.getThrown()); + createWeb(data.getThrown()); } @Override public void Expire(ProjectileUser data) { - CreateWeb(data.getThrown()); + createWeb(data.getThrown()); } @Override @@ -75,7 +84,7 @@ public class Web extends ItemUsable data.getThrown().remove(); } - public void CreateWeb(Entity ent) + private void createWeb(Entity ent) { LivingEntity thrower = Factory.Throw().getThrower(ent); @@ -85,8 +94,12 @@ public class Web extends ItemUsable if (canWeb(thrower, ent.getLocation())) { - Factory.BlockRestore().add(ent.getLocation().getBlock(), 30, (byte) 0, 6000); - } + Block block = ent.getLocation().getBlock(); + Factory.BlockRestore().add(block, 30, (byte) 0, 6000); + + _owner.put(block, thrower); + Factory.runSyncLater(() -> _owner.remove(block), 120); + } } private boolean canWeb(LivingEntity thrower, Location location) @@ -96,4 +109,21 @@ public class Web extends ItemUsable return !webEvent.isCancelled() && UtilBlock.airFoliage(location.getBlock()) && !location.getBlock().getType().toString().contains("BANNER"); } -} + + @EventHandler(priority = EventPriority.MONITOR) + public void onRightClick(PlayerInteractEvent event) + { + if (!UtilEvent.isAction(event, ActionType.R_BLOCK)) + { + return; + } + + Block block = event.getClickedBlock(); + LivingEntity owner = _owner.remove(block); + + if (event.getPlayer().equals(owner)) + { + Factory.BlockRestore().restore(block); + } + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterAxe.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterAxe.java index 313a0b0a2..33ac3581e 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterAxe.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterAxe.java @@ -9,6 +9,6 @@ public class BoosterAxe extends Item { public BoosterAxe(ItemFactory factory, int gemCost, int tokenCost) { - super(factory, "Booster Axe", new String [] { "Increases Axe Skill level by 1." }, Material.GOLD_AXE, 1, true, gemCost, tokenCost); + super(factory, "Booster Axe", new String [] { "Increases Axe Skill level by 2." }, Material.GOLD_AXE, 1, true, gemCost, tokenCost); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterBow.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterBow.java index 73bdb9380..5cd22e241 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterBow.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterBow.java @@ -11,4 +11,4 @@ public class BoosterBow extends Item { super(factory, "Booster Bow", new String [] { "Increases Bow Skill level by 1." }, Material.BOW, 1, true, gemCost, tokenCost); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterSword.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterSword.java index 170f5ca74..97ab30d0c 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterSword.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/weapon/BoosterSword.java @@ -9,6 +9,6 @@ public class BoosterSword extends Item { public BoosterSword(ItemFactory factory, int gemCost, int tokenCost) { - super(factory, "Booster Sword", new String[] { "Increases Sword Skill level by 1" }, Material.GOLD_SWORD, 1, true, gemCost, tokenCost); + super(factory, "Booster Sword", new String[] { "Increases Sword Skill level by 2." }, Material.GOLD_SWORD, 1, true, gemCost, tokenCost); } -} +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassShopManager.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassShopManager.java index 015863ec5..d21f2f34c 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassShopManager.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/ClassShopManager.java @@ -42,7 +42,7 @@ public class ClassShopManager extends MiniPlugin private void generatePermissions() { - + PermissionGroup.CONTENT.setPermission(Perm.SKILL_UNLOCK, true, true); PermissionGroup.TRAINEE.setPermission(Perm.SKILL_UNLOCK, true, true); PermissionGroup.ULTRA.setPermission(Perm.SKILL_UNLOCK_LEGACY, true, true); } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/button/DeleteCustomBuildButton.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/button/DeleteCustomBuildButton.java index 43af028d6..be5229860 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/button/DeleteCustomBuildButton.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/shop/button/DeleteCustomBuildButton.java @@ -1,16 +1,23 @@ package mineplex.minecraft.game.classcombat.shop.button; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.Inventory; +import mineplex.core.common.util.C; +import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.shop.confirmation.ConfirmationCallback; +import mineplex.core.shop.confirmation.ConfirmationPage; +import mineplex.core.shop.confirmation.ConfirmationProcessor; import mineplex.core.shop.item.IButton; import mineplex.minecraft.game.classcombat.Class.repository.token.CustomBuildToken; import mineplex.minecraft.game.classcombat.shop.page.CustomBuildPage; public class DeleteCustomBuildButton implements IButton { - private CustomBuildPage _page; - private CustomBuildToken _customBuild; + private final CustomBuildPage _page; + private final CustomBuildToken _customBuild; public DeleteCustomBuildButton(CustomBuildPage page, CustomBuildToken customBuild) { @@ -21,6 +28,23 @@ public class DeleteCustomBuildButton implements IButton @Override public void onClick(Player player, ClickType clickType) { - _page.DeleteCustomBuild(_customBuild); + _page.getShop().openPageForPlayer(player, new ConfirmationPage<>(player, _page, new ConfirmationProcessor() + { + @Override + public void init(Inventory inventory) + { + + } + + @Override + public void process(ConfirmationCallback callback) + { + _page.DeleteCustomBuild(_customBuild); + callback.resolve("Deleted."); + } + }, new ItemBuilder(Material.TNT) + .setTitle(C.cRedB + "Delete Build") + .addLore("Confirming will delete your", "build, forever. That's a really", "long time.") + .build())); } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java index 7dd31676a..7dda1cd0f 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/Condition.java @@ -15,6 +15,7 @@ public class Condition public enum ConditionType { CLOAK, + UNTRUE_CLOAK, SHOCK, POISON_SHOCK, SILENCE, diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionEffect.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionEffect.java index 31e2f9466..1fcbef39a 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionEffect.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionEffect.java @@ -2,15 +2,12 @@ package mineplex.minecraft.game.core.condition; import java.util.Iterator; -import mineplex.core.Managers; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilTime; -import mineplex.core.recharge.Recharge; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.core.visibility.VisibilityManager; -import mineplex.minecraft.game.core.condition.Condition.ConditionType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import net.minecraft.server.v1_8_R3.Packet; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity.PacketPlayOutEntityLook; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity.PacketPlayOutRelEntityMove; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntity.PacketPlayOutRelEntityMoveLook; +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport; import org.bukkit.Bukkit; import org.bukkit.Effect; @@ -24,14 +21,34 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.potion.PotionEffectType; -public class ConditionEffect implements Listener +import mineplex.core.Managers; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilTime; +import mineplex.core.packethandler.IPacketHandler; +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.packethandler.PacketInfo; +import mineplex.core.recharge.Recharge; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.core.visibility.VisibilityManager; +import mineplex.minecraft.game.core.condition.Condition.ConditionType; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; + +public class ConditionEffect implements Listener, IPacketHandler { - protected ConditionManager Manager; + + protected final ConditionManager Manager; public ConditionEffect(ConditionManager manager) { Manager = manager; Manager.getPlugin().getServer().getPluginManager().registerEvents(this, Manager.getPlugin()); + Managers.require(PacketHandler.class).addPacketHandler(this, + PacketPlayOutEntityLook.class, + PacketPlayOutRelEntityMove.class, + PacketPlayOutRelEntityMoveLook.class, + PacketPlayOutEntityTeleport.class + ); } @EventHandler(priority = EventPriority.LOW) @@ -62,7 +79,7 @@ public class ConditionEffect implements Listener LivingEntity ent = event.GetDamageeEntity(); if (ent == null) return; - if (!Manager.IsCloaked(ent)) + if (!Manager.IsCloaked(ent) && !Manager.isUntrueCloaked(ent)) return; //Set Damage @@ -445,4 +462,53 @@ public class ConditionEffect implements Listener Manager.EndCondition(ent, ConditionType.FALLING , null); } } + + @Override + public void handle(PacketInfo packetInfo) + { + Player player = packetInfo.getPlayer(); + Packet packet = packetInfo.getPacket(); + Player packetPlayer = null; + + if (packet instanceof PacketPlayOutEntity) + { + PacketPlayOutEntity entityPacket = (PacketPlayOutEntity) packet; + + for (Player other : player.getWorld().getPlayers()) + { + if (entityPacket.a == other.getEntityId()) + { + packetPlayer = other; + break; + } + } + + if (packetPlayer == null || !Manager.isUntrueCloaked(packetPlayer)) + { + return; + } + + packetInfo.setCancelled(true); + } + else if (packet instanceof PacketPlayOutEntityTeleport) + { + PacketPlayOutEntityTeleport entityPacket = (PacketPlayOutEntityTeleport) packet; + + for (Player other : player.getWorld().getPlayers()) + { + if (entityPacket.a == other.getEntityId()) + { + packetPlayer = other; + break; + } + } + + if (packetPlayer == null || !Manager.isUntrueCloaked(packetPlayer)) + { + return; + } + + packetInfo.setCancelled(true); + } + } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionFactory.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionFactory.java index fcfa571e1..0d6e56460 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionFactory.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionFactory.java @@ -51,6 +51,11 @@ public class ConditionFactory Material.GHAST_TEAR, (byte)0, false)); } + public Condition untrueCloak(String reason, LivingEntity ent, LivingEntity source, double duration, boolean extend) + { + return Manager.AddCondition(new UntrueCloak(Manager, reason, ent, source, ConditionType.UNTRUE_CLOAK, 0, (int)(20 * duration), extend, Material.GHAST_TEAR, (byte)0, false)); + } + public Condition Explosion(String reason, LivingEntity ent, LivingEntity source, int mult, double duration, boolean extend, boolean showIndicator) { diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionManager.java index 4ebf00f66..33e4bd377 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/ConditionManager.java @@ -540,6 +540,11 @@ public class ConditionManager extends MiniPlugin return false; } + public boolean isUntrueCloaked(LivingEntity ent) + { + return _activeConditions.containsKey(ent) && _activeConditions.get(ent).stream().anyMatch(condition -> condition.GetCondition().GetType() == ConditionType.UNTRUE_CLOAK); + } + @EventHandler public void CleanUpdate(UpdateEvent event) { diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/conditions/UntrueCloak.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/conditions/UntrueCloak.java new file mode 100644 index 000000000..c606e8565 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/condition/conditions/UntrueCloak.java @@ -0,0 +1,82 @@ +package mineplex.minecraft.game.core.condition.conditions; + +import net.minecraft.server.v1_8_R3.PacketPlayOutEntityTeleport; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; + +import mineplex.core.common.util.UtilPlayer; +import mineplex.minecraft.game.core.condition.Condition; +import mineplex.minecraft.game.core.condition.ConditionManager; + +public class UntrueCloak extends Condition +{ + + public UntrueCloak(ConditionManager manager, String reason, LivingEntity ent, + LivingEntity source, ConditionType type, int mult, int ticks, + boolean add, Material visualType, byte visualData, + boolean showIndicator) + { + super(manager, reason, ent, source, type, mult, ticks, add, visualType, + visualData, showIndicator, false); + + _informOn = "You are now invisible."; + _informOff = "You are no longer invisible."; + } + + @Override + public boolean needsForceRemove() + { + return true; + } + + @Override + public void Add() + { + if (!(_ent instanceof Player)) + { + return; + } + + PacketPlayOutEntityTeleport packet = new PacketPlayOutEntityTeleport(((CraftPlayer) _ent).getHandle()); + Location location = _ent.getLocation(); + packet.b = location.getBlockX() * 32; + packet.c = location.getWorld().getMaxHeight() * 32; + packet.d = location.getBlockZ() * 32; + packet.g = false; + + for (Player player : _ent.getWorld().getPlayers()) + { + if (player.equals(_ent)) + { + continue; + } + + UtilPlayer.sendPacket(player, packet); + } + } + + @Override + public void Remove() + { + if (!(_ent instanceof Player)) + { + return; + } + + PacketPlayOutEntityTeleport packet = new PacketPlayOutEntityTeleport(((CraftPlayer) _ent).getHandle()); + + for (Player player : _ent.getWorld().getPlayers()) + { + if (player.equals(_ent)) + { + continue; + } + + UtilPlayer.sendPacket(player, packet); + } + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/compatibility/NpcProtectListener.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/compatibility/NpcProtectListener.java index c150c2225..2d0ce9995 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/compatibility/NpcProtectListener.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/compatibility/NpcProtectListener.java @@ -1,5 +1,7 @@ package mineplex.minecraft.game.core.damage.compatibility; +import mineplex.core.Managers; +import mineplex.core.newnpc.NewNPCManager; import mineplex.core.npc.NpcManager; import mineplex.minecraft.game.core.damage.CustomDamageEvent; @@ -23,5 +25,15 @@ public class NpcProtectListener implements Listener { event.SetCancelled("NPC"); } + else + { + // This is bad but /shrug + NewNPCManager manager = Managers.get(NewNPCManager.class); + + if (manager != null && manager.isNPC(event.GetDamageeEntity())) + { + event.SetCancelled("New NPC"); + } + } } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/Fire.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/Fire.java index 4f51c650c..ee67f81b7 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/Fire.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/Fire.java @@ -6,6 +6,7 @@ import java.util.HashSet; import mineplex.core.MiniPlugin; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -69,12 +70,10 @@ public class Fire extends MiniPlugin for (LivingEntity ent : fire.getWorld().getEntitiesByClass(LivingEntity.class)) { - if (ent instanceof Player) - if (((CraftPlayer)ent).getHandle().spectating) - continue; - - if (ent.hasPotionEffect(PotionEffectType.FIRE_RESISTANCE)) + if (UtilPlayer.isSpectator(ent) || ent.hasPotionEffect(PotionEffectType.FIRE_RESISTANCE)) + { continue; + } if (ent.getLocation().getBlock().getTypeId() == 8 || ent.getLocation().getBlock().getTypeId() == 9) continue; @@ -116,8 +115,7 @@ public class Fire extends MiniPlugin if (!_fire.get(fire).canHitOwner() && _fire.get(fire).GetOwner().equals(player)) return; - - if (((CraftPlayer)player).getHandle().spectating) + if (UtilPlayer.isSpectator(player)) return; if (player.hasPotionEffect(PotionEffectType.FIRE_RESISTANCE)) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 583c22ddb..b78e277b3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -366,8 +366,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation //Champions Modules _energy = new Energy(plugin); - _itemFactory = new ItemFactory(_plugin, _blockRestore, _conditionManager, damageManager, _energy, - _fire, _projectileManager); + _itemFactory = new ItemFactory(_plugin, _blockRestore, _conditionManager, damageManager, _energy, _fire, _projectileManager, this); _skillFactory = new SkillFactory(plugin, damageManager, this, _damageManager.GetCombatManager(), _conditionManager, _projectileManager, _disguiseManager, _blockRestore, _fire, new Movement(plugin), teleport, diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index cdb3b793f..34c5b76f0 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -83,6 +83,7 @@ import mineplex.core.packethandler.IPacketHandler; import mineplex.core.preferences.Preference; import mineplex.core.quests.QuestManager; import mineplex.core.quests.event.QuestInteractEvent; +import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.utils.UtilGameProfile; @@ -310,7 +311,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public boolean SoupEnabled = true; public boolean GiveClock = true; - + public boolean AllowParticles = true; public boolean ShowWeaponNames = true; @@ -422,7 +423,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public enum Perm implements Permission { - DEBUG_KIT_COMMAND + DEBUG_COMMANDS } public Game(ArcadeManager manager, GameType gameType, Kit[] kits, String[] gameDesc) @@ -529,7 +530,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed .register(this); } - registerDebugCommand("kit", Perm.DEBUG_KIT_COMMAND, PermissionGroup.ADMIN, (caller, args) -> + registerDebugCommand("kit", Perm.DEBUG_COMMANDS, PermissionGroup.ADMIN, (caller, args) -> { String kit = Arrays.stream(args).collect(Collectors.joining(" ")); @@ -544,6 +545,15 @@ public abstract class Game extends ListenerComponent implements Lifetimed caller.sendMessage(F.main("Kit", "Sorry, but that is not a kit!")); }); + registerDebugCommand("cooldown", Perm.DEBUG_COMMANDS, PermissionGroup.ADMIN, (caller, args) -> + { + for (Player other : UtilServer.getPlayers()) + { + Recharge.Instance.Reset(other); + } + + Announce(C.cWhiteB + caller.getName() + C.cAquaB + " reset cooldowns!"); + }); } // You should never use this so please don't. Use Module.register instead diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsCTF.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsCTF.java index 6336f3c7f..179ea3973 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsCTF.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsCTF.java @@ -3,17 +3,11 @@ package nautilus.game.arcade.game.games.champions; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.inventory.InventoryType; -import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.game.GameTeam; @@ -24,6 +18,7 @@ import nautilus.game.arcade.game.games.champions.kits.KitMage; import nautilus.game.arcade.game.games.champions.kits.KitRanger; import nautilus.game.arcade.game.games.champions.quests.FlagQuestTracker; import nautilus.game.arcade.game.games.common.CaptureTheFlag; +import nautilus.game.arcade.game.modules.ChampionsModule; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.managers.chat.ChatStatData; import nautilus.game.arcade.stats.CapturesStatTracker; @@ -54,16 +49,15 @@ public class ChampionsCTF extends CaptureTheFlag "Make sure you use all of your Skill/Item Tokens", "Collect Resupply Chests to restock your inventory", "Customize your Class to suit your play style", - "Gold Sword boosts Sword Skill by 1 Level", - "Gold Axe boosts Axe Skill by 1 Level", + "Gold Sword boosts Sword Skill by 2 Levels", + "Gold Axe boosts Axe Skill by 2 Levels", "Gold/Iron Weapons deal 6 damage", "Diamond Weapons deal 7 damage", }; Manager.GetDamage().UseSimpleWeaponDamage = false; - Manager.getCosmeticManager().setHideParticles(true); - + Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); InventoryOpenChest = true; @@ -75,7 +69,7 @@ public class ChampionsCTF extends CaptureTheFlag this.DisableKillCommand = false; AllowParticles = false; - + registerStatTrackers( new KillReasonStatTracker(this, "Backstab", "Assassination", false), new ElectrocutionStatTracker(this), @@ -100,7 +94,7 @@ public class ChampionsCTF extends CaptureTheFlag new ChatStatData("Captures", "Flag Captures", true) ); - new ChampionsFixes(this); + new ChampionsModule().register(this); } @Override @@ -120,60 +114,22 @@ public class ChampionsCTF extends CaptureTheFlag return DeathMessageType.Detailed; } - @EventHandler - public void WaterArrowCancel(EntityShootBowEvent event) - { - if (event.getEntity().getLocation().getBlock().isLiquid()) - { - UtilPlayer.message(event.getEntity(), F.main("Game", "You cannot use your Bow while swimming.")); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void InventoryDamageCancel(CustomDamageEvent event) - { - if (event.IsCancelled()) - return; - - Player player = event.GetDamageePlayer(); - if (player == null) - return; - - if (!IsAlive(player)) - return; - - if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) - return; - - if (player.getOpenInventory().getTopInventory().getType() == InventoryType.CHEST) - player.closeInventory(); - } - - @EventHandler - public void validateSkills(UpdateEvent event) - { - if (event.getType() == UpdateType.SEC) - { - for (Player player : GetPlayers(true)) - { - Manager.getClassManager().Get(player).validateClassSkills(player); - } - } - } - @EventHandler public void cleanProximities(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() != UpdateType.FAST) + { return; + } for (Location loc : getLocations(true)) { Manager.getClassManager().GetItemFactory().getProximityManager().clean(loc, 12); } } -} +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java index f713f3e9f..1dbb44d2e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsDominate.java @@ -1,18 +1,9 @@ package nautilus.game.arcade.game.games.champions; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.inventory.InventoryType; -import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.game.GameTeam; @@ -23,6 +14,7 @@ import nautilus.game.arcade.game.games.champions.kits.KitMage; import nautilus.game.arcade.game.games.champions.kits.KitRanger; import nautilus.game.arcade.game.games.champions.quests.CaptureQuestTracker; import nautilus.game.arcade.game.games.common.Domination; +import nautilus.game.arcade.game.modules.ChampionsModule; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.stats.ElectrocutionStatTracker; import nautilus.game.arcade.stats.KillReasonStatTracker; @@ -51,16 +43,15 @@ public class ChampionsDominate extends Domination "Collect Emeralds to get 300 Points", "Collect Resupply Chests to restock your inventory", "Customize your Class to suit your play style", - "Gold Sword boosts Sword Skill by 1 Level", - "Gold Axe boosts Axe Skill by 1 Level", + "Gold Sword boosts Sword Skill by 2 Levels", + "Gold Axe boosts Axe Skill by 2 Levels", "Gold/Iron Weapons deal 6 damage", "Diamond Weapons deal 7 damage", }; Manager.GetDamage().UseSimpleWeaponDamage = false; - Manager.getCosmeticManager().setHideParticles(true); - + Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); InventoryOpenChest = true; @@ -71,8 +62,6 @@ public class ChampionsDominate extends Domination this.DisableKillCommand = false; - this.AllowParticles = false; - registerStatTrackers( new KillReasonStatTracker(this, "Backstab", "Assassination", false), new ElectrocutionStatTracker(this), @@ -92,7 +81,7 @@ public class ChampionsDominate extends Domination DamageTaken ); - new ChampionsFixes(this); + new ChampionsModule().register(this); } @Override @@ -111,46 +100,4 @@ public class ChampionsDominate extends Domination { return DeathMessageType.Detailed; } - - @EventHandler - public void WaterArrowCancel(EntityShootBowEvent event) - { - if (event.getEntity().getLocation().getBlock().isLiquid()) - { - UtilPlayer.message(event.getEntity(), F.main("Game", "You cannot use your Bow while swimming.")); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void InventoryDamageCancel(CustomDamageEvent event) - { - if (event.IsCancelled()) - return; - - Player player = event.GetDamageePlayer(); - if (player == null) - return; - - if (!IsAlive(player)) - return; - - if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) - return; - - if (player.getOpenInventory().getTopInventory().getType() == InventoryType.CHEST) - player.closeInventory(); - } - - @EventHandler - public void validateSkills(UpdateEvent event) - { - if (event.getType() == UpdateType.SEC) - { - for (Player player : GetPlayers(true)) - { - Manager.getClassManager().Get(player).validateClassSkills(player); - } - } - } -} +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsFixes.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsFixes.java deleted file mode 100644 index 83a96d185..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsFixes.java +++ /dev/null @@ -1,103 +0,0 @@ -package nautilus.game.arcade.game.games.champions; - -import mineplex.core.common.util.UtilServer; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import mineplex.minecraft.game.classcombat.Skill.Skill; -import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.events.PlayerKitApplyEvent; -import nautilus.game.arcade.game.Game; -import nautilus.game.arcade.game.Game.GameState; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.HandlerList; -import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockDamageEvent; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryType; - -public class ChampionsFixes implements Listener -{ - private Game _host; - - public ChampionsFixes(Game game) - { - _host = game; - Bukkit.getPluginManager().registerEvents(this, _host.getArcadeManager().getPlugin()); - } - - @EventHandler - public void disable(GameStateChangeEvent event) - { - if (event.GetGame() != _host) - return; - - if (event.GetState() == GameState.End || event.GetState() == GameState.Dead) - HandlerList.unregisterAll(this); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void fixDwarf(PlayerKitApplyEvent event) - { - if (!_host.IsLive()) - return; - - if (event.isCancelled()) - return; - - if (event.getPlayer().getPassenger() == null) - return; - - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void fixBlizzard(PlayerKitApplyEvent event) - { - if (!_host.IsLive()) - return; - - if (event.isCancelled()) - return; - - _host.getArcadeManager().getClassManager().GetSkillFactory().GetSkill("Blizzard").Reset(event.getPlayer()); - } - - @EventHandler - public void resetSkillsWhileInInventory(UpdateEvent event) - { - if (!_host.IsLive()) - return; - - if (event.getType() != UpdateType.FAST) - return; - - for (Player player : UtilServer.getPlayers()) - { - if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) - continue; - - if (player.getOpenInventory().getTopInventory().getType() == InventoryType.CHEST) - for (Skill skill : _host.getArcadeManager().getClassManager().GetSkillFactory().GetAllSkills()) - skill.Reset(player); - } - } - - @EventHandler - public void fixAxe(BlockDamageEvent event) - { - if (!_host.IsLive()) - return; - - event.setCancelled(true); - } - - @EventHandler - public void fixArmor(InventoryClickEvent event) - { - event.setCancelled(true); - } -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsMOBA.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsMOBA.java deleted file mode 100644 index 522ec3339..000000000 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsMOBA.java +++ /dev/null @@ -1,6 +0,0 @@ -package nautilus.game.arcade.game.games.champions; - -public class ChampionsMOBA -{ - -} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsTDM.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsTDM.java index 6441a2136..e88cd3a63 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsTDM.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsTDM.java @@ -1,17 +1,9 @@ package nautilus.game.arcade.game.games.champions; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.inventory.InventoryType; -import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; -import mineplex.minecraft.game.core.damage.CustomDamageEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; @@ -22,13 +14,12 @@ import nautilus.game.arcade.game.games.champions.kits.KitKnight; import nautilus.game.arcade.game.games.champions.kits.KitMage; import nautilus.game.arcade.game.games.champions.kits.KitRanger; import nautilus.game.arcade.game.games.common.TeamDeathmatch; +import nautilus.game.arcade.game.modules.ChampionsModule; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.stats.ElectrocutionStatTracker; -import nautilus.game.arcade.stats.KillAllOpposingStatTracker; import nautilus.game.arcade.stats.KillReasonStatTracker; import nautilus.game.arcade.stats.SeismicSlamStatTracker; import nautilus.game.arcade.stats.TheLongestShotStatTracker; -import nautilus.game.arcade.stats.WinWithoutLosingTeammateStatTracker; public class ChampionsTDM extends TeamDeathmatch { @@ -51,16 +42,15 @@ public class ChampionsTDM extends TeamDeathmatch "Make sure you use all of your Skill/Item Tokens", "Collect Resupply Chests to restock your inventory", "Customize your Class to suit your play style", - "Gold Sword boosts Sword Skill by 1 Level", - "Gold Axe boosts Axe Skill by 1 Level", + "Gold Sword boosts Sword Skill by 2 Levels", + "Gold Axe boosts Axe Skill by 2 Levels", "Gold/Iron Weapons deal 6 damage", "Diamond Weapons deal 7 damage", }; this.Manager.GetDamage().UseSimpleWeaponDamage = false; - Manager.getCosmeticManager().setHideParticles(true); - + Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); InventoryOpenChest = true; @@ -69,8 +59,6 @@ public class ChampionsTDM extends TeamDeathmatch this.DontAllowOverfill = true; registerStatTrackers( - new WinWithoutLosingTeammateStatTracker(this, "FlawlessVictory"), - new KillAllOpposingStatTracker(this), new KillReasonStatTracker(this, "Backstab", "Assassination", false), new ElectrocutionStatTracker(this), new TheLongestShotStatTracker(this), @@ -87,12 +75,12 @@ public class ChampionsTDM extends TeamDeathmatch DamageTaken ); - new ChampionsFixes(this); + new ChampionsModule().register(this); } @Override public void ValidateKit(Player player, GameTeam team) - { + { //Set to Default Knight if (GetKit(player) == null) { @@ -106,46 +94,4 @@ public class ChampionsTDM extends TeamDeathmatch { return DeathMessageType.Detailed; } - - @EventHandler - public void WaterArrowCancel(EntityShootBowEvent event) - { - if (event.getEntity().getLocation().getBlock().isLiquid()) - { - UtilPlayer.message(event.getEntity(), F.main("Game", "You cannot use your Bow while swimming.")); - event.setCancelled(true); - } - } - - @EventHandler(priority = EventPriority.HIGHEST) - public void InventoryDamageCancel(CustomDamageEvent event) - { - if (event.IsCancelled()) - return; - - Player player = event.GetDamageePlayer(); - if (player == null) - return; - - if (!IsAlive(player)) - return; - - if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) - return; - - if (player.getOpenInventory().getTopInventory().getType() == InventoryType.CHEST) - player.closeInventory(); - } - - @EventHandler - public void validateSkills(UpdateEvent event) - { - if (event.getType() == UpdateType.SEC) - { - for (Player player : GetPlayers(true)) - { - Manager.getClassManager().Get(player).validateClassSkills(player); - } - } - } -} +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java index 5fe9d3580..bd014fa44 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/CaptureTheFlag.java @@ -4,12 +4,12 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -42,11 +42,9 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatComponent; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; - import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.events.PlayerGameRespawnEvent; import nautilus.game.arcade.events.PlayerKitApplyEvent; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GameTeam; @@ -56,6 +54,7 @@ import nautilus.game.arcade.game.games.common.ctf_data.CarrierCombatDeathEvent; import nautilus.game.arcade.game.games.common.ctf_data.Flag; import nautilus.game.arcade.game.games.common.dominate_data.PlayerData; import nautilus.game.arcade.game.games.common.dominate_data.Resupply; +import nautilus.game.arcade.game.modules.SpawnRegenerationModule; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; @@ -69,16 +68,15 @@ public class CaptureTheFlag extends TeamGame //Map Data private Location _redFlag; private Location _blueFlag; - private ArrayList _flags = new ArrayList(); - private ArrayList _resupply = new ArrayList(); + private final List _flags = new ArrayList<>(); + private final List _resupply = new ArrayList<>(); //Stats - private HashMap _stats = new HashMap(); + private final Map _stats = new HashMap<>(); //Captures - private static int _victoryCaps = 5; - private int _redScore = 0; - private int _blueScore = 0; + private static final int _victoryCaps = 5; + private int _redScore = 0, _blueScore = 0; //Times private long _gameTime = 420000; @@ -86,8 +84,8 @@ public class CaptureTheFlag extends TeamGame //protected String[] _blockedItems = new String[] {"SWORD", "AXE", "BOW"}; private boolean _suddenDeath = false; - private HashMap> _hotbars = new HashMap>(); - private HashMap _helmets = new HashMap(); + private final Map> _hotbars = new HashMap<>(); + private final Map _helmets = new HashMap<>(); private boolean _flickerStage = false; @@ -113,6 +111,9 @@ public class CaptureTheFlag extends TeamGame .setGiveCompassToSpecs(true) .setGiveCompassToAlive(false) .register(this); + + new SpawnRegenerationModule() + .register(this); this.DeathSpectateSecs = 10; @@ -167,11 +168,17 @@ public class CaptureTheFlag extends TeamGame public void customTeamGeneration(GameStateChangeEvent event) { if (event.GetState() != GameState.Recruit) + { return; + } for (GameTeam team : GetTeamList()) + { if (team.GetColor() == ChatColor.AQUA) + { team.SetColor(ChatColor.BLUE); + } + } } @EventHandler(priority = EventPriority.HIGHEST) @@ -189,7 +196,9 @@ public class CaptureTheFlag extends TeamGame public void onTNTExplode(EntityExplodeEvent event) { if (!IsLive()) + { return; + } if (event.getEntityType() == EntityType.PRIMED_TNT) { @@ -201,12 +210,16 @@ public class CaptureTheFlag extends TeamGame public void updates(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() == UpdateType.FASTEST) { - for (Flag flag : _flags) + for (Flag flag : _flags) + { flag.update(); + } Iterator hotbarIter = _hotbars.keySet().iterator(); while (hotbarIter.hasNext()) @@ -214,7 +227,9 @@ public class CaptureTheFlag extends TeamGame Player player = hotbarIter.next(); if (!player.isOnline() || UtilPlayer.isSpectator(player) || !IsAlive(player)) + { hotbarIter.remove(); + } } Iterator helmetIter = _helmets.keySet().iterator(); @@ -223,7 +238,9 @@ public class CaptureTheFlag extends TeamGame Player player = helmetIter.next(); if (!player.isOnline() || UtilPlayer.isSpectator(player) || !IsAlive(player)) + { helmetIter.remove(); + } } } else if (event.getType() == UpdateType.TICK) @@ -231,24 +248,38 @@ public class CaptureTheFlag extends TeamGame for (Flag flag : _flags) { if (flag.getCarrier() == null) + { for (Player player : GetPlayers(true)) + { if (UtilMath.offset2d(player.getLocation(), flag.getPlacedLocation()) < .5 && player.getLocation().getY() > flag.getPlacedLocation().getY() - 2 && player.getLocation().getY() < flag.getPlacedLocation().getY() + 3) + { flag.pickup(player); + } + } + } } } else if (event.getType() == UpdateType.FAST) { - for (Resupply resupply : _resupply) + for (Resupply resupply : _resupply) + { resupply.Update(); + } getFlag(true).handleBottomInfo(_flickerStage, ChatColor.RED); getFlag(false).handleBottomInfo(_flickerStage, ChatColor.AQUA); } else if (event.getType() == UpdateType.SEC) + { for (Flag flag : _flags) + { flag.handleRespawn(); + } + } else + { progressTime(); + } } public void progressTime() @@ -260,9 +291,13 @@ public class CaptureTheFlag extends TeamGame if (remain <= 0) { if (_redScore > _blueScore) + { endCheckScore(_redScore); + } else if(_redScore < _blueScore) + { endCheckScore(_blueScore); + } else { _suddenDeath = true; @@ -305,13 +340,17 @@ public class CaptureTheFlag extends TeamGame public void saveInventory(Player player) { - List items = new ArrayList(); + List items = new ArrayList<>(); for (int i = 0; i < 9; i++) { if (player.getInventory().getItem(i) != null) + { items.add(i, player.getInventory().getItem(i)); + } else + { items.add(i, new ItemStack(Material.AIR)); + } } _hotbars.put(player, items); @@ -326,9 +365,13 @@ public class CaptureTheFlag extends TeamGame for (int i = 0; i < items.size(); i++) { if (items.get(i).getType() != Material.AIR) + { player.getInventory().setItem(i, items.get(i)); + } else + { player.getInventory().setItem(i, new ItemStack(Material.AIR)); + } } getArcadeManager().getClassManager().hideNextEquipMessage(player.getName()); player.getInventory().setHelmet(_helmets.get(player)); @@ -345,7 +388,9 @@ public class CaptureTheFlag extends TeamGame for (Flag flag : _flags) { if (flag.getTeam().GetColor() == team) + { return flag.isAtHome(); + } } return false; } @@ -365,12 +410,16 @@ public class CaptureTheFlag extends TeamGame if (red) { if (UtilMath.offset(location, _redFlag) < 4) + { return true; + } } else { if (UtilMath.offset(location, _blueFlag) < 4) + { return true; + } } return false; @@ -399,10 +448,14 @@ public class CaptureTheFlag extends TeamGame String newc = base.toString(); if (base == ChatColor.BLUE) + { newc = C.cDBlue; + } if (base == ChatColor.RED) + { newc = C.cDRed; + } return newc; } @@ -412,21 +465,29 @@ public class CaptureTheFlag extends TeamGame if (red) { for (Flag f : _flags) + { if (f.getTeam().GetColor() == ChatColor.RED) + { return f; + } + } } else { for (Flag f : _flags) + { if (f.getTeam().GetColor() == ChatColor.BLUE) + { return f; + } + } } return null; } public List getLocations(boolean base) { - List locs = new ArrayList(); + List locs = new ArrayList<>(); if (base) { locs.add(_blueFlag); @@ -451,7 +512,9 @@ public class CaptureTheFlag extends TeamGame public void ScoreboardUpdate(UpdateEvent event) { if (event.getType() != UpdateType.FAST) + { return; + } scoreboardWrite(); } @@ -459,7 +522,9 @@ public class CaptureTheFlag extends TeamGame private void scoreboardWrite() { if (!InProgress()) + { return; + } //Wipe Last Scoreboard.reset(); @@ -471,17 +536,25 @@ public class CaptureTheFlag extends TeamGame String redMessage = "Flag Dropped"; if (getFlag(true).isAtHome()) + { redMessage = "Flag Safe"; + } if (getFlag(true).getCarrier() != null) + { redMessage = "Flag Taken"; + } if (_flickerStage) { if (!getFlag(true).isAtHome()) + { Scoreboard.write(C.cRed + redMessage); + } else + { Scoreboard.write(redMessage); + } } else { @@ -495,7 +568,9 @@ public class CaptureTheFlag extends TeamGame String blueMessage = "Flag Dropped"; if (getFlag(false).isAtHome()) + { blueMessage = "Flag Safe"; + } if (getFlag(false).getCarrier() != null) { @@ -505,9 +580,13 @@ public class CaptureTheFlag extends TeamGame if (_flickerStage) { if (!getFlag(false).isAtHome()) + { Scoreboard.write(C.cAqua + blueMessage); + } else + { Scoreboard.write(blueMessage); + } } else { @@ -541,17 +620,25 @@ public class CaptureTheFlag extends TeamGame public void endCheckScore(int needed) { if (!IsLive()) + { return; + } GameTeam winner = null; if (_redScore >= needed) + { winner = GetTeam(ChatColor.RED); + } else if (_blueScore >= needed) + { winner = GetTeam(ChatColor.BLUE); + } if (winner == null) + { return; + } scoreboardWrite(); @@ -563,12 +650,18 @@ public class CaptureTheFlag extends TeamGame if (WinnerTeam != null && team.equals(WinnerTeam)) { for (Player player : team.GetPlayers(false)) + { AddGems(player, 10, "Winning Team", false, false); + } } for (Player player : team.GetPlayers(false)) + { if (player.isOnline()) + { AddGems(player, 10, "Participation", false, false); + } + } } endElo(); @@ -580,10 +673,14 @@ public class CaptureTheFlag extends TeamGame public double GetKillsGems(Player killer, Player killed, boolean assist) { if (assist) + { return .5; + } if (_suddenDeath) + { return 2; + } return 1; } @@ -593,18 +690,13 @@ public class CaptureTheFlag extends TeamGame { return "Capture the Flag"; } - - @EventHandler - public void respawnRegen(PlayerGameRespawnEvent event) - { - Manager.GetCondition().Factory().Regen("Respawn", event.GetPlayer(), event.GetPlayer(), 8, 3, false, false, false); - Manager.GetCondition().Factory().Protection("Respawn", event.GetPlayer(), event.GetPlayer(), 8, 3, false, false, false); - } public PlayerData getStats(Player player) { if (!_stats.containsKey(player.getName())) + { _stats.put(player.getName(), new PlayerData(player.getName())); + } return _stats.get(player.getName()); } @@ -616,7 +708,9 @@ public class CaptureTheFlag extends TeamGame if (game == null) return; if (!(event.GetEvent().getEntity() instanceof Player)) + { return; + } Player killed = (Player)event.GetEvent().getEntity(); getStats(killed).Deaths++; @@ -626,19 +720,25 @@ public class CaptureTheFlag extends TeamGame Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName()); if (killer != null && !killer.equals(killed)) + { getStats(killer).Kills++; + } } for (CombatComponent log : event.GetLog().GetAttackers()) { if (event.GetLog().GetKiller() != null && log.equals(event.GetLog().GetKiller())) + { continue; + } Player assist = UtilPlayer.searchExact(log.GetName()); //Assist if (assist != null) + { getStats(assist).Assists++; + } } } @@ -662,7 +762,9 @@ public class CaptureTheFlag extends TeamGame public void usableInteract(PlayerInteractEvent event) { if (UtilBlock.usable(event.getClickedBlock())) + { event.setCancelled(true); + } } @EventHandler @@ -671,12 +773,18 @@ public class CaptureTheFlag extends TeamGame if (this instanceof ChampionsCTF) { for (Flag flag : _flags) + { if (!flag.isAtHome()) + { if (flag.getCarrier() != null) + { if (flag.getCarrier().getName().equals(event.getPlayer().getName())) { event.setCancelled(true); } + } + } + } if (_suddenDeath) { @@ -689,8 +797,11 @@ public class CaptureTheFlag extends TeamGame public void dropFlag(PlayerDropItemEvent event) { for (Flag flag : _flags) + { if ((flag.getRepresentation().getType() == event.getItemDrop().getItemStack().getType()) || (event.getItemDrop().getItemStack().getType() == Material.COMPASS)) + { if (flag.getCarrier() != null) + { if (flag.getCarrier().getName().equals(event.getPlayer().getName())) { event.setCancelled(false); @@ -698,61 +809,88 @@ public class CaptureTheFlag extends TeamGame flag.drop(event.getPlayer()); resetInventory(event.getPlayer()); } + } + } + } } @EventHandler public void radarUpdate(UpdateEvent event) { if (!InProgress()) + { return; + } if (event.getType() != UpdateType.TICK) + { return; + } - ArrayList data = new ArrayList(); + List data = new ArrayList<>(); for (Flag f : _flags) { if (f.getCarrier() == null) + { data.add(new RadarData(f.getPlacedLocation(), f.getTeam().GetColor() + "⚑")); + } else + { data.add(new RadarData(f.getCarrier().getLocation(), getVisualResult(f.getTeam().GetColor()) + "⚑")); + } } data.add(new RadarData(_redFlag, C.cRed + "☗")); data.add(new RadarData(_blueFlag, C.cBlue + "☗")); for (Player player : UtilServer.getPlayers()) - UtilRadar.displayRadar(player, data); + { + UtilRadar.displayRadar(player, data); + } } @EventHandler public void useCmd(PlayerCommandPreprocessEvent event) { if (!InProgress()) + { return; + } if (event.getMessage().contains("/suddendeath")) { boolean authorized = Manager.GetClients().Get(event.getPlayer()).hasPermission(Perm.SUDDEN_DEATH_COMMAND); if (Manager.GetGameHostManager().isPrivateServer()) + { if (Manager.GetGameHostManager().isAdmin(event.getPlayer(), false)) + { authorized = true; + } + } if (authorized) { if (_redScore < _blueScore) + { _redScore = _blueScore; + } else + { _blueScore = _redScore; + } _gameTime = (System.currentTimeMillis() - GetStateTime()) + 11; for (Player pl : UtilServer.getPlayers()) + { UtilPlayer.message(pl, C.cYellowB + event.getPlayer().getName() + " has equalized both teams and enabled Sudden Death!"); + } } else + { UtilPlayer.message(event.getPlayer(), F.main("Game", "You do not have permission to use this game modifier!")); + } event.setCancelled(true); } @@ -762,17 +900,27 @@ public class CaptureTheFlag extends TeamGame public void powerupPickup(PlayerPickupItemEvent event) { if (!IsLive()) + { return; + } for (Flag f : _flags) + { if (f.getCarrier() == event.getPlayer()) + { return; + } + } if (_suddenDeath) + { return; + } for (Resupply resupply : _resupply) + { resupply.Pickup(event.getPlayer(), event.getItem()); + } } //Dont allow powerups to despawn @@ -800,7 +948,9 @@ public class CaptureTheFlag extends TeamGame } for (Flag flag : _flags) + { flag.drop(player); + } getArcadeManager().getClassManager().forceRemoveFromSuppressed(player.getName()); } @@ -809,7 +959,9 @@ public class CaptureTheFlag extends TeamGame public void onQuit(PlayerQuitEvent event) { for (Flag flag : _flags) + { flag.drop(event.getPlayer()); + } getArcadeManager().getClassManager().forceRemoveFromSuppressed(event.getPlayer().getName()); } @@ -818,19 +970,31 @@ public class CaptureTheFlag extends TeamGame public void equalizeBrute(CustomDamageEvent event) { if (event.GetDamageePlayer() == null) + { return; + } boolean carrier = false; for (Flag flag : _flags) + { if (flag.getCarrier() != null) + { if (flag.getCarrier().getName().equals(event.GetDamageePlayer().getName())) + { carrier = true; + } + } + } if (carrier) { if (event.GetDamageePlayer().getInventory().getChestplate() != null) + { if (event.GetDamageePlayer().getInventory().getChestplate().getType() == Material.DIAMOND_CHESTPLATE) + { event.SetBrute(); + } + } } } } \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java index 83a81f378..f86044729 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/Domination.java @@ -1,5 +1,23 @@ package nautilus.game.arcade.game.games.common; - + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.Material; +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.BlockPhysicsEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.ItemDespawnEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerPickupItemEvent; + import mineplex.core.common.util.C; import mineplex.core.common.util.RadarData; import mineplex.core.common.util.UtilBlock; @@ -11,10 +29,10 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.CombatComponent; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import mineplex.minecraft.game.core.damage.CustomDamageEvent; + import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.events.PlayerGameRespawnEvent; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.TeamGame; @@ -23,24 +41,9 @@ import nautilus.game.arcade.game.games.common.dominate_data.CapturePoint; import nautilus.game.arcade.game.games.common.dominate_data.Emerald; import nautilus.game.arcade.game.games.common.dominate_data.PlayerData; import nautilus.game.arcade.game.games.common.dominate_data.Resupply; +import nautilus.game.arcade.game.modules.SpawnRegenerationModule; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -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.BlockPhysicsEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.ItemDespawnEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; - -import java.util.ArrayList; -import java.util.HashMap; public class Domination extends TeamGame { @@ -49,17 +52,15 @@ public class Domination extends TeamGame public boolean EnableSupply = true; //Map Data - private ArrayList _points = new ArrayList(); - private ArrayList _emerald = new ArrayList(); - private ArrayList _resupply = new ArrayList(); + private final List _points = new ArrayList<>(); + private final List _emerald = new ArrayList<>(); + private final List _resupply = new ArrayList<>(); //Stats - private HashMap _stats = new HashMap(); + private final Map _stats = new HashMap<>(); //Scores - private int _victoryScore = 15000; - private int _redScore = 0; - private int _blueScore = 0; + private int _victoryScore = 15000, _redScore = 0, _blueScore = 0; public Domination(ArcadeManager manager, GameType type, Kit[] kits) { @@ -74,20 +75,22 @@ public class Domination extends TeamGame }); + AllowParticles = false; this.DeathOut = false; this.PrepareFreeze = true; this.HungerSet = 20; this.WorldTimeSet = 2000; this.DeathSpectateSecs = 10; - - //this.QuitOut = false; new CompassModule() .setGiveCompass(true) .setGiveCompassToSpecs(true) .setGiveCompassToAlive(false) .register(this); + + new SpawnRegenerationModule() + .register(this); } @Override @@ -129,11 +132,17 @@ public class Domination extends TeamGame public void CustomTeamGeneration(GameStateChangeEvent event) { if (event.GetState() != GameState.Recruit) + { return; + } for (GameTeam team : GetTeamList()) + { if (team.GetColor() == ChatColor.AQUA) + { team.SetColor(ChatColor.BLUE); + } + } } @EventHandler(priority = EventPriority.HIGHEST) @@ -151,7 +160,9 @@ public class Domination extends TeamGame public void onTNTExplode(EntityExplodeEvent event) { if (!IsLive()) + { return; + } if (event.getEntityType() == EntityType.PRIMED_TNT) { @@ -163,19 +174,33 @@ public class Domination extends TeamGame public void Updates(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() == UpdateType.FAST) + { for (CapturePoint cur : _points) + { cur.Update(); + } + } if (event.getType() == UpdateType.FAST) - for (Emerald cur : _emerald) + { + for (Emerald cur : _emerald) + { cur.Update(); + } + } if (event.getType() == UpdateType.FAST) - for (Resupply cur : _resupply) + { + for (Resupply cur : _resupply) + { cur.Update(); + } + } } @EventHandler @@ -184,17 +209,25 @@ public class Domination extends TeamGame for (Emerald cur : _emerald) { if (EnableEmerald) + { cur.Pickup(event.getPlayer(), event.getItem()); + } else + { return; + } } for (Resupply cur : _resupply) { if (EnableSupply) + { cur.Pickup(event.getPlayer(), event.getItem()); + } else + { return; + } } } @@ -202,7 +235,9 @@ public class Domination extends TeamGame public void KillScore(CombatDeathEvent event) { if (!(event.GetEvent().getEntity() instanceof Player)) + { return; + } Player killed = (Player)event.GetEvent().getEntity(); @@ -210,18 +245,24 @@ public class Domination extends TeamGame if (killedTeam == null) return; if (event.GetLog().GetKiller() == null) + { return; + } Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName()); if (killer == null) + { return; + } GameTeam killerTeam = GetTeam(killer); if (killerTeam == null) return; if (killerTeam.equals(killedTeam)) + { return; + } AddScore(killerTeam, 50); } @@ -252,7 +293,9 @@ public class Domination extends TeamGame public void ScoreboardUpdate(UpdateEvent event) { if (event.getType() != UpdateType.FAST) + { return; + } ScoreboardWrite(); @@ -261,7 +304,9 @@ public class Domination extends TeamGame private void ScoreboardWrite() { if (!InProgress()) + { return; + } //Wipe Last Scoreboard.reset(); @@ -292,17 +337,25 @@ public class Domination extends TeamGame public void EndCheckScore() { if (!IsLive()) + { return; + } GameTeam winner = null; if (_redScore >= _victoryScore) + { winner = GetTeam(ChatColor.RED); + } else if (_blueScore >= _victoryScore) + { winner = GetTeam(ChatColor.BLUE); + } if (winner == null) + { return; + } ScoreboardWrite(); @@ -314,12 +367,18 @@ public class Domination extends TeamGame if (WinnerTeam != null && team.equals(WinnerTeam)) { for (Player player : team.GetPlayers(false)) + { AddGems(player, 10, "Winning Team", false, false); + } } for (Player player : team.GetPlayers(false)) + { if (player.isOnline()) + { AddGems(player, 10, "Participation", false, false); + } + } } endElo(); @@ -339,17 +398,12 @@ public class Domination extends TeamGame return "Domination"; } - @EventHandler - public void RespawnRegen(PlayerGameRespawnEvent event) - { - Manager.GetCondition().Factory().Regen("Respawn", event.GetPlayer(), event.GetPlayer(), 8, 3, false, false, false); - Manager.GetCondition().Factory().Protection("Respawn", event.GetPlayer(), event.GetPlayer(), 8, 3, false, false, false); - } - public PlayerData GetStats(Player player) { if (!_stats.containsKey(player.getName())) + { _stats.put(player.getName(), new PlayerData(player.getName())); + } return _stats.get(player.getName()); } @@ -361,7 +415,9 @@ public class Domination extends TeamGame if (game == null) return; if (!(event.GetEvent().getEntity() instanceof Player)) + { return; + } Player killed = (Player)event.GetEvent().getEntity(); GetStats(killed).Deaths++; @@ -371,19 +427,25 @@ public class Domination extends TeamGame Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName()); if (killer != null && !killer.equals(killed)) + { GetStats(killer).Kills++; + } } for (CombatComponent log : event.GetLog().GetAttackers()) { if (event.GetLog().GetKiller() != null && log.equals(event.GetLog().GetKiller())) + { continue; + } Player assist = UtilPlayer.searchExact(log.GetName()); //Assist if (assist != null) + { GetStats(assist).Assists++; + } } } @@ -407,24 +469,34 @@ public class Domination extends TeamGame public void UsableInteract(PlayerInteractEvent event) { if (UtilBlock.usable(event.getClickedBlock())) + { event.setCancelled(true); + } } @EventHandler public void radarUpdate(UpdateEvent event) { if (!InProgress()) + { return; + } if (event.getType() != UpdateType.TICK) + { return; + } - ArrayList data = new ArrayList(); + List data = new ArrayList<>(); for (CapturePoint point : _points) - data.add(new RadarData(point.getLocation(), point.getRadarTag())); + { + data.add(new RadarData(point.getLocation(), point.getRadarTag())); + } for (Player player : UtilServer.getPlayers()) - UtilRadar.displayRadar(player, data); + { + UtilRadar.displayRadar(player, data); + } } -} +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java index 5fe60d199..9280becba 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/TeamDeathmatch.java @@ -2,6 +2,21 @@ package nautilus.game.arcade.game.games.common; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +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.BlockPhysicsEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.scoreboard.Objective; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -25,27 +40,12 @@ import nautilus.game.arcade.game.games.common.dominate_data.Resupply; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -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.BlockPhysicsEvent; -import org.bukkit.event.entity.EntityExplodeEvent; -import org.bukkit.event.entity.EntityShootBowEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.scoreboard.Objective; - public class TeamDeathmatch extends TeamGame { - private ArrayList _points = new ArrayList(); - private ArrayList _resupply = new ArrayList(); + private List _points = new ArrayList<>(); + private List _resupply = new ArrayList<>(); - private HashMap _kills = new HashMap(); - - private Objective _healthObj; + private Map _kills = new HashMap<>(); private CapturePointTDM _beacon = null; private long _beaconTime = 180000; @@ -71,25 +71,7 @@ public class TeamDeathmatch extends TeamGame .setGiveCompassToAlive(true) .register(this); - //this.EloRanking = true; - //this.EloSetting.setEloSetting(2); - - //this.addEloColumn(); - - /* - try - { - this.Manager.getEloManager().addGameToDatabase("ALTER TABLE Accounts.eloRatingTest ADD [Champions TDM Team Deathmatch] INT;"); - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - */ - - this.Manager.GetDamage().UseSimpleWeaponDamage = false; - - //_healthObj = GetScoreboard().registerNewObjective("HP", "dummy"); - //_healthObj.setDisplaySlot(DisplaySlot.BELOW_NAME); + Manager.GetDamage().UseSimpleWeaponDamage = false; } @Override @@ -121,7 +103,9 @@ public class TeamDeathmatch extends TeamGame public void onTNTExplode(EntityExplodeEvent event) { if (!IsLive()) + { return; + } if (event.getEntityType() == EntityType.PRIMED_TNT) { @@ -133,14 +117,18 @@ public class TeamDeathmatch extends TeamGame public void PlayerKillAward(CombatDeathEvent event) { if (!(event.GetEvent().getEntity() instanceof Player)) + { return; + } Player killed = (Player)event.GetEvent().getEntity(); SetPlayerState(killed, PlayerState.OUT); GameTeam killedTeam = GetTeam(killed); - if (killedTeam == null) - return; + if (killedTeam == null) + { + return; + } if (event.GetLog().GetKiller() != null) { @@ -150,14 +138,20 @@ public class TeamDeathmatch extends TeamGame { GameTeam killerTeam = GetTeam(killer); if (killerTeam == null) - return; + { + return; + } int kills = 1; if (killedTeam.equals(killerTeam)) + { kills = -1; + } if (_kills.containsKey(killer)) + { kills += _kills.get(killer); + } _kills.put(killer, kills); @@ -170,7 +164,9 @@ public class TeamDeathmatch extends TeamGame public void Health(GameStateChangeEvent event) { if (event.GetState() != GameState.Live) + { return; + } for (Player player : GetPlayers(true)) { @@ -207,14 +203,6 @@ public class TeamDeathmatch extends TeamGame return DeathMessageType.Detailed; } - @EventHandler - public void DisplayHealth(UpdateEvent event) - { - if (_healthObj != null) - for (Player player : GetPlayers(true)) - _healthObj.getScore(player.getName()).setScore((int)player.getHealth()); - } - @EventHandler public void WaterArrowCancel(EntityShootBowEvent event) { @@ -229,41 +217,56 @@ public class TeamDeathmatch extends TeamGame public void Updates(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() == UpdateType.FAST) + { for (CapturePointTDM cur : _points) + { cur.Update(); + } + } if (event.getType() == UpdateType.FAST) - for (Resupply cur : _resupply) + { + for (Resupply cur : _resupply) + { cur.Update(); + } + } } @EventHandler public void BeaconUpdate(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() != UpdateType.TICK) + { return; + } if (_beacon != null) + { return; + } if (UtilTime.elapsed(GetStateTime(), _beaconTime)) { _beacon = _points.get(UtilMath.r(_points.size())); - - - _beacon.Enable(); Announce(C.cWhite + C.Bold + _beacon.GetName() + " Capture Point is active!"); for (Player player : UtilServer.getPlayers()) + { player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, 1f); + } } } @@ -272,7 +275,9 @@ public class TeamDeathmatch extends TeamGame public void ScoreboardUpdate(UpdateEvent event) { if (event != null && event.getType() != UpdateType.FAST) + { return; + } ScoreboardWrite(); } @@ -292,12 +297,18 @@ public class TeamDeathmatch extends TeamGame { int kills = 0; if (_kills.containsKey(player)) + { kills = _kills.get(player); + } if (IsAlive(player)) + { Scoreboard.write(kills + " " + team.GetColor() + player.getName()); + } else + { Scoreboard.write(kills + " " + C.cGray + player.getName()); + } } } @@ -332,12 +343,16 @@ public class TeamDeathmatch extends TeamGame public void EndCheckScore() { if (!IsLive()) + { return; + } GameTeam winner = _beacon.GetWinner(); if (winner == null) + { return; + } ScoreboardWrite(); @@ -346,12 +361,18 @@ public class TeamDeathmatch extends TeamGame if (WinnerTeam != null && team.equals(WinnerTeam)) { for (Player player : team.GetPlayers(false)) + { AddGems(player, 10, "Winning Team", false, false); + } } for (Player player : team.GetPlayers(false)) + { if (player.isOnline()) + { AddGems(player, 10, "Participation", false, false); + } + } } //Announce End @@ -361,24 +382,12 @@ public class TeamDeathmatch extends TeamGame SetState(GameState.End); } - /*//call endElo (Game.Java) if the game ends - @EventHandler - public void EloCalc(GameStateChangeEvent event) - { - //relevant if we decide to move this to Game.java - if(EloRanking) - { - if (event.GetState() == GameState.End) - { - endElo(); - } - } - }*/ - @EventHandler(priority = EventPriority.HIGHEST) public void UsableInteract(PlayerInteractEvent event) { if (UtilBlock.usable(event.getClickedBlock())) + { event.setCancelled(true); + } } -} +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java index 2e6af351a..3fe2891cb 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/dominate_data/Emerald.java @@ -58,7 +58,8 @@ public class Emerald //Spawn _ent = _loc.getWorld().dropItem(_loc.clone().add(0, 1, 0), new ItemStack(Material.EMERALD)); _ent.setVelocity(new Vector(0,1,0)); - + _ent.setPickupDelay(30); + //Block _loc.getBlock().getRelative(BlockFace.DOWN).setType(Material.EMERALD_BLOCK); @@ -77,9 +78,6 @@ public class Emerald if (!_ent.equals(item)) return; - if (_ent.getTicksLived() <= 40) - return; - if (!Host.IsAlive(player)) return; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/modes/ChampionsGladiators.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/modes/ChampionsGladiators.java index 95ae1feb4..9cc14d14a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/modes/ChampionsGladiators.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/gladiators/modes/ChampionsGladiators.java @@ -10,7 +10,6 @@ import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.game.games.champions.ChampionsFixes; import nautilus.game.arcade.game.games.champions.kits.KitAssassin; import nautilus.game.arcade.game.games.champions.kits.KitBrute; import nautilus.game.arcade.game.games.champions.kits.KitKnight; @@ -20,6 +19,7 @@ import nautilus.game.arcade.game.games.gladiators.Arena; import nautilus.game.arcade.game.games.gladiators.ArenaType; import nautilus.game.arcade.game.games.gladiators.Gladiators; import nautilus.game.arcade.game.games.gladiators.RoundState; +import nautilus.game.arcade.game.modules.ChampionsModule; import nautilus.game.arcade.kit.Kit; /** @@ -46,7 +46,7 @@ public class ChampionsGladiators extends Gladiators Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); - new ChampionsFixes(this); + new ChampionsModule().register(this); manager.enableChampionsModules(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/modes/EweHeroes.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/modes/EweHeroes.java index 02e21aae1..87db4ada4 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/modes/EweHeroes.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/sheep/modes/EweHeroes.java @@ -11,13 +11,13 @@ import mineplex.core.updater.event.UpdateEvent; import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.game.games.champions.ChampionsFixes; import nautilus.game.arcade.game.games.champions.kits.KitAssassin; import nautilus.game.arcade.game.games.champions.kits.KitBrute; import nautilus.game.arcade.game.games.champions.kits.KitKnight; import nautilus.game.arcade.game.games.champions.kits.KitMage; import nautilus.game.arcade.game.games.champions.kits.KitRanger; import nautilus.game.arcade.game.games.sheep.SheepGame; +import nautilus.game.arcade.game.modules.ChampionsModule; import nautilus.game.arcade.game.modules.TeamArmorModule; import nautilus.game.arcade.kit.Kit; @@ -50,7 +50,7 @@ public class EweHeroes extends SheepGame getModule(TeamArmorModule.class) .dontGiveTeamArmor(); - new ChampionsFixes(this); + new ChampionsModule().register(this); manager.enableChampionsModules(); } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java index f6075b9c1..03d23794b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java @@ -35,7 +35,6 @@ import com.google.common.collect.Sets; import mineplex.core.account.permissions.Permission; import mineplex.core.account.permissions.PermissionGroup; -import mineplex.core.achievement.Achievement; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -99,7 +98,6 @@ public abstract class SuperSmash extends Game DEBUG_LIVES_COMMAND, DEBUG_SMASH_COMMAND, DEBUG_NEXTSMASH_COMMAND, - DEBUG_COOLDOWN_COMMAND, DEBUG_PERK_COMMANDS } @@ -110,16 +108,6 @@ public abstract class SuperSmash extends Game private static final String DATA_POINT_POWERUP = "RED"; - public static final Achievement[] ACHIEVEMENTS = - { - Achievement.SMASH_MOBS_1V3, - Achievement.SMASH_MOBS_FREE_KITS, - Achievement.SMASH_MOBS_MLG_PRO, - Achievement.SMASH_MOBS_RECOVERY_MASTER, - Achievement.SMASH_MOBS_TRIPLE_KILL, - Achievement.SMASH_MOBS_WINS - }; - private final Map _lives = new HashMap<>(); private final Map _respawnTime = new HashMap<>(); @@ -168,15 +156,6 @@ public abstract class SuperSmash extends Game new PerkSpreadsheetModule("SMASH_KITS") .register(this); - registerDebugCommand("cooldown", Perm.DEBUG_COOLDOWN_COMMAND, PermissionGroup.ADMIN, (caller, args) -> - { - for (Player other : UtilServer.getPlayers()) - { - Recharge.Instance.Reset(other); - } - - Announce(C.cWhiteB + caller.getName() + C.cAquaB + " reset cooldowns!"); - }); registerDebugCommand("nextsmash", Perm.DEBUG_NEXTSMASH_COMMAND, PermissionGroup.ADMIN, (caller, args) -> { _nextPowerup = System.currentTimeMillis() + 1000; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/ChampionsModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/ChampionsModule.java new file mode 100644 index 000000000..8170ef35d --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/ChampionsModule.java @@ -0,0 +1,167 @@ +package nautilus.game.arcade.game.modules; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockDamageEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; + +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import mineplex.minecraft.game.classcombat.Skill.Skill; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; +import nautilus.game.arcade.events.PlayerKitApplyEvent; + +public class ChampionsModule extends Module +{ + @EventHandler(priority = EventPriority.HIGHEST) + public void fixDwarf(PlayerKitApplyEvent event) + { + if (!getGame().IsLive()) + return; + + if (event.isCancelled()) + return; + + if (event.getPlayer().getPassenger() == null) + return; + + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void fixBlizzard(PlayerKitApplyEvent event) + { + if (!getGame().IsLive()) + { + return; + } + + if (event.isCancelled()) + { + return; + } + + getGame().Manager.getClassManager().GetSkillFactory().GetSkill("Blizzard").Reset(event.getPlayer()); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void fixFlash(PlayerKitApplyEvent event) + { + if (!getGame().IsLive()) + { + return; + } + + if (event.isCancelled()) + { + return; + } + + getGame().Manager.getClassManager().GetSkillFactory().GetSkill("Flash").Reset(event.getPlayer()); + } + + @EventHandler + public void resetSkillsWhileInInventory(UpdateEvent event) + { + if (!getGame().IsLive()) + { + return; + } + + if (event.getType() != UpdateType.FAST) + { + return; + } + + for (Player player : UtilServer.getPlayers()) + { + if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) + { + continue; + } + + if (player.getOpenInventory().getTopInventory().getType() == InventoryType.CHEST) + { + for (Skill skill : getGame().Manager.getClassManager().GetSkillFactory().GetAllSkills()) + { + skill.Reset(player); + } + } + } + } + + @EventHandler + public void fixAxe(BlockDamageEvent event) + { + if (!getGame().IsLive()) + { + return; + } + + event.setCancelled(true); + } + + @EventHandler + public void fixArmor(InventoryClickEvent event) + { + event.setCancelled(true); + } + + @EventHandler + public void WaterArrowCancel(EntityShootBowEvent event) + { + if (event.getEntity().getLocation().getBlock().isLiquid()) + { + UtilPlayer.message(event.getEntity(), F.main("Game", "You cannot use your Bow while swimming.")); + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void InventoryDamageCancel(CustomDamageEvent event) + { + if (event.IsCancelled()) + { + return; + } + + Player player = event.GetDamageePlayer(); + if (player == null) + { + return; + } + + if (!getGame().IsAlive(player)) + { + return; + } + + if (player.getOpenInventory() == null || player.getOpenInventory().getTopInventory() == null) + { + return; + } + + if (player.getOpenInventory().getTopInventory().getType() == InventoryType.CHEST) + { + player.closeInventory(); + } + } + + @EventHandler + public void validateSkills(UpdateEvent event) + { + if (event.getType() == UpdateType.SEC) + { + for (Player player : getGame().GetPlayers(true)) + { + getGame().Manager.getClassManager().Get(player).validateClassSkills(player); + } + } + } +} \ No newline at end of file diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/Module.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/Module.java index 9fa7e4862..62e73b4f8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/Module.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/Module.java @@ -34,8 +34,8 @@ public class Module implements Listener { throw new IllegalArgumentException("Attempting to initialize module which has already been initialized for " + _game); } - this._game = game; - this.setup(); + _game = game; + setup(); } /** @@ -80,7 +80,7 @@ public class Module implements Listener */ public Game getGame() { - return this._game; + return _game; } public final void register(Game instance) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/SpawnRegenerationModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/SpawnRegenerationModule.java new file mode 100644 index 000000000..1d8ff8ae0 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/modules/SpawnRegenerationModule.java @@ -0,0 +1,24 @@ +package nautilus.game.arcade.game.modules; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import mineplex.minecraft.game.core.condition.ConditionFactory; + +import nautilus.game.arcade.events.PlayerGameRespawnEvent; + +public class SpawnRegenerationModule extends Module +{ + + @EventHandler + public void respawn(PlayerGameRespawnEvent event) + { + Player player = event.GetPlayer(); + ConditionFactory factory = getGame().getArcadeManager().GetCondition().Factory(); + String reason = "Spawn Regeneration"; + + factory.Regen(reason, player, player, 5, 2, false, false, false); + factory.Protection(reason, player, player, 5, 2, false, false, false); + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java index 7c0753681..56bc732ec 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameFlagManager.java @@ -91,8 +91,8 @@ public class GameFlagManager implements Listener BYPASS_TELEPORT_KICK, } - ArcadeManager Manager; - SecondaryDamageManager Secondary; + final ArcadeManager Manager; + private SecondaryDamageManager Secondary; private Map _respawnTimers = new HashMap<>(); private Map _respawnRunnables = new HashMap<>(); @@ -1308,16 +1308,20 @@ public class GameFlagManager implements Listener @EventHandler public void PlayerKillCommandCancel(PlayerCommandPreprocessEvent event) { - if (Manager.GetGame() == null) + if (Manager.GetGame() == null || !event.getMessage().toLowerCase().equalsIgnoreCase("/kill")) + { return; - - if (!Manager.GetGame().DisableKillCommand) - return; - - if (event.getMessage().toLowerCase().startsWith("/kill")) + } + + event.setCancelled(true); + + if (Manager.GetGame().DisableKillCommand) { UtilPlayer.message(event.getPlayer(), F.main("Game", "Suicide is disabled.")); - event.setCancelled(true); + } + else + { + Manager.GetDamage().NewDamageEvent(event.getPlayer(), null, null, DamageCause.CUSTOM, 500, false, true, true, Manager.GetGame().GetName(), "Trying to Escape"); } }