diff --git a/Patches/Bukkit-Patches/0031-EntityDismountEvent.patch b/Patches/Bukkit-Patches/0031-EntityDismountEvent.patch new file mode 100644 index 000000000..72f7c9718 --- /dev/null +++ b/Patches/Bukkit-Patches/0031-EntityDismountEvent.patch @@ -0,0 +1,47 @@ +From c6e51ae8ffc31d0fc059d33ca159df31c2b7a83e Mon Sep 17 00:00:00 2001 +From: libraryaddict +Date: Sun, 22 Nov 2015 14:37:11 +1300 +Subject: [PATCH] EntityDismountEvent + + +diff --git a/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java +index 24d4942..02943d6 100644 +--- a/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java ++++ b/src/main/java/org/spigotmc/event/entity/EntityDismountEvent.java +@@ -2,13 +2,14 @@ package org.spigotmc.event.entity; + + import org.bukkit.entity.Entity; + import org.bukkit.event.HandlerList; ++import org.bukkit.event.Cancellable; + import org.bukkit.event.entity.EntityEvent; + + /** + * Called when an entity stops riding another entity. + * + */ +-public class EntityDismountEvent extends EntityEvent ++public class EntityDismountEvent extends EntityEvent implements Cancellable + { + + private static final HandlerList handlers = new HandlerList(); +@@ -36,4 +37,17 @@ public class EntityDismountEvent extends EntityEvent + { + return handlers; + } ++ ++ @Override ++ public boolean isCancelled() ++ { ++ return cancelled; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) ++ { ++ this.cancelled = cancel; ++ } ++ + } +-- +1.9.5.msysgit.0 + diff --git a/Patches/CraftBukkit-Patches/0176-EntityDismountEvent-teleport-crash-fix.patch b/Patches/CraftBukkit-Patches/0176-EntityDismountEvent-teleport-crash-fix.patch new file mode 100644 index 000000000..6a7278e9a --- /dev/null +++ b/Patches/CraftBukkit-Patches/0176-EntityDismountEvent-teleport-crash-fix.patch @@ -0,0 +1,159 @@ +From bc86c3b02f2efa4c1194fc908e8d1ee8723f62c5 Mon Sep 17 00:00:00 2001 +From: libraryaddict +Date: Sun, 22 Nov 2015 14:41:11 +1300 +Subject: [PATCH] EntityDismountEvent & teleport crash fix + + +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index 81ca499..7165579 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -23,6 +23,8 @@ import org.bukkit.event.painting.PaintingBreakByEntityEvent; + import org.bukkit.event.vehicle.VehicleBlockCollisionEvent; + import org.bukkit.event.vehicle.VehicleEnterEvent; + import org.bukkit.event.vehicle.VehicleExitEvent; ++import org.spigotmc.event.entity.EntityDismountEvent; ++import org.spigotmc.event.entity.EntityMountEvent; + import org.bukkit.craftbukkit.CraftWorld; + import org.bukkit.craftbukkit.entity.CraftEntity; + import org.bukkit.craftbukkit.entity.CraftPlayer; +@@ -1591,7 +1593,12 @@ public abstract class Entity implements ICommandListener { + } + } + // CraftBukkit end +- pluginManager.callEvent( new org.spigotmc.event.entity.EntityDismountEvent( this.getBukkitEntity(), this.vehicle.getBukkitEntity() ) ); // Spigot ++ EntityDismountEvent event = new org.spigotmc.event.entity.EntityDismountEvent(this.getBukkitEntity(), this.vehicle.getBukkitEntity()); ++ pluginManager.callEvent(event); // Spigot ++ ++ if (event.isCancelled() || vehicle != originalVehicle) { ++ return; ++ } // Spigot + this.setPositionRotation(this.vehicle.locX, this.vehicle.getBoundingBox().b + (double) this.vehicle.length, this.vehicle.locZ, this.yaw, this.pitch); + this.vehicle.passenger = null; + } +@@ -1599,44 +1606,45 @@ public abstract class Entity implements ICommandListener { + this.vehicle = null; + } else { + // CraftBukkit start +- if ((this.bukkitEntity instanceof LivingEntity) && (entity.getBukkitEntity() instanceof Vehicle) && entity.world.isChunkLoaded((int) entity.locX >> 4, (int) entity.locZ >> 4, true)) { ++ if (entity.world.isChunkLoaded((int) entity.locX >> 4, (int) entity.locZ >> 4, true)) { + // It's possible to move from one vehicle to another. We need to check if they're already in a vehicle, and fire an exit event if they are. + VehicleExitEvent exitEvent = null; ++ EntityDismountEvent exitEvent1 = null; + if (this.vehicle != null) { +- exitEvent = new VehicleExitEvent((Vehicle) this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); ++ if ((this.bukkitEntity instanceof LivingEntity) && (entity.getBukkitEntity() instanceof Vehicle)) ++ exitEvent = new VehicleExitEvent((Vehicle) this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); + pluginManager.callEvent(exitEvent); + + if (exitEvent.isCancelled() || this.vehicle != originalVehicle || (this.vehicle != null && this.vehicle.passenger != originalPassenger)) { + return; + } ++ ++ exitEvent1 = new EntityDismountEvent(this.vehicle.getBukkitEntity(), this.bukkitEntity); ++ ++ pluginManager.callEvent(exitEvent1); ++ ++ if (exitEvent1.isCancelled() || this.vehicle != originalVehicle || (this.vehicle != null && this.vehicle.passenger != originalPassenger)) { ++ return; ++ } + } + +- VehicleEnterEvent event = new VehicleEnterEvent((Vehicle) entity.getBukkitEntity(), this.bukkitEntity); +- pluginManager.callEvent(event); ++ if ((this.bukkitEntity instanceof LivingEntity) && (entity.getBukkitEntity() instanceof Vehicle)) { ++ VehicleEnterEvent event = new VehicleEnterEvent((Vehicle) entity.getBukkitEntity(), this.bukkitEntity); ++ pluginManager.callEvent(event); + +- // If a plugin messes with the vehicle or the vehicle's passenger +- if (event.isCancelled() || this.vehicle != originalVehicle || (this.vehicle != null && this.vehicle.passenger != originalPassenger)) { +- // If we only cancelled the enterevent then we need to put the player in a decent position. +- if (exitEvent != null && this.vehicle == originalVehicle && this.vehicle != null && this.vehicle.passenger == originalPassenger) { +- this.setPositionRotation(this.vehicle.locX, this.vehicle.getBoundingBox().b + (double) this.vehicle.length, this.vehicle.locZ, this.yaw, this.pitch); +- this.vehicle.passenger = null; +- this.vehicle = null; ++ // If a plugin messes with the vehicle or the vehicle's passenger ++ if (event.isCancelled() || this.vehicle != originalVehicle || (this.vehicle != null && this.vehicle.passenger != originalPassenger)) { ++ // If we only cancelled the enterevent then we need to put the player in a decent position. ++ if (exitEvent != null && this.vehicle == originalVehicle && this.vehicle != null && this.vehicle.passenger == originalPassenger) { ++ this.setPositionRotation(this.vehicle.locX, this.vehicle.getBoundingBox().b + (double) this.vehicle.length, this.vehicle.locZ, this.yaw, this.pitch); ++ this.vehicle.passenger = null; ++ this.vehicle = null; ++ } ++ return; + } +- return; + } + } + // CraftBukkit end +- // Spigot Start +- if ( entity.world.isChunkLoaded( (int) entity.locX >> 4, (int) entity.locZ >> 4, true ) ) +- { +- org.spigotmc.event.entity.EntityMountEvent event = new org.spigotmc.event.entity.EntityMountEvent( this.getBukkitEntity(), entity.getBukkitEntity() ); +- pluginManager.callEvent( event ); +- if ( event.isCancelled() ) +- { +- return; +- } +- } +- // Spigot End + + if (this.vehicle != null) { + this.vehicle.passenger = null; +diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java +index b861dbe..96b3905 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -21,6 +21,7 @@ import org.bukkit.event.entity.EntityDamageEvent; + import org.bukkit.event.entity.EntityDamageEvent.DamageModifier; + import org.bukkit.event.entity.EntityRegainHealthEvent; + import org.bukkit.event.vehicle.VehicleExitEvent; ++import org.spigotmc.event.entity.EntityDismountEvent; + // CraftBukkit end + + import org.bukkit.craftbukkit.SpigotTimings; // Spigot +@@ -1725,8 +1726,15 @@ public abstract class EntityLiving extends Entity { + return; + } + } ++ ++ EntityDismountEvent event = new EntityDismountEvent(this.vehicle.getBukkitEntity(), (LivingEntity) this.bukkitEntity); ++ getBukkitEntity().getServer().getPluginManager().callEvent(event); ++ ++ if (event.isCancelled() || vehicle != originalVehicle) { ++ return; ++ } + // CraftBukkit end +- ++ + if (!this.world.isClientSide) { + this.q(this.vehicle); + } +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +index efbf1a8..dbc7b54 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +@@ -1,6 +1,7 @@ + package org.bukkit.craftbukkit.entity; + + import com.google.common.base.Preconditions; ++import com.google.common.primitives.Doubles; + import java.util.ArrayList; + import java.util.Collection; + import java.util.List; +@@ -234,6 +235,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { + // If this entity is riding another entity, we must dismount before teleporting. + entity.mount(null); + ++ if (!Doubles.isFinite(location.getX()) || !Doubles.isFinite(location.getY()) || !Doubles.isFinite(location.getZ())) ++ { ++ Thread.dumpStack(); ++ return false; ++ } ++ + // Spigot start + if (!location.getWorld().equals(getWorld())) { + entity.teleportTo(location, cause.equals(TeleportCause.NETHER_PORTAL)); +-- +1.9.5.msysgit.0 + diff --git a/Plugins/Libraries/craftbukkit.jar b/Plugins/Libraries/craftbukkit.jar index c06344ecb..46f49bad7 100644 Binary files a/Plugins/Libraries/craftbukkit.jar and b/Plugins/Libraries/craftbukkit.jar differ diff --git a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerTracker/PlayerTracker.java b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerTracker/PlayerTracker.java index 707dc3eb8..8d0a2cf99 100644 --- a/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerTracker/PlayerTracker.java +++ b/Plugins/Mineplex.Bungee.Mineplexer/src/mineplex/bungee/playerTracker/PlayerTracker.java @@ -38,9 +38,8 @@ public class PlayerTracker implements Listener, Runnable _plugin.getProxy().getPluginManager().registerListener(_plugin, this); _plugin.getProxy().getScheduler().schedule(_plugin, this, 1L, 1L, TimeUnit.MINUTES); - Region region = !new File("eu.dat").exists() ? Region.US : Region.EU; _repository = new RedisDataRepository(ServerManager.getMasterConnection(), ServerManager.getSlaveConnection(), - region, PlayerStatus.class, "playerStatus"); + Region.currentRegion(), PlayerStatus.class, "playerStatus"); ServerCommandManager.getInstance().registerCommandType("PlayerJoinCommand", mineplex.serverdata.commands.PlayerJoinCommand.class, new PlayerJoinHandler(this)); diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java index 8587871ee..6d5867e27 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java @@ -29,7 +29,6 @@ import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.World; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.craftbukkit.v1_8_R3.CraftWorld; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftCreature; import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity; @@ -291,6 +290,8 @@ public class UtilEnt creatureMap.put("WitherSkull", EntityType.WITHER_SKULL); creatureMap.put("Wolf", EntityType.WOLF); creatureMap.put("Zombie", EntityType.ZOMBIE); + creatureMap.put("Guardian", EntityType.GUARDIAN); + creatureMap.put("Rabbit", EntityType.RABBIT); creatureMap.put("Item", EntityType.DROPPED_ITEM); } @@ -457,6 +458,28 @@ public class UtilEnt return ents; } + public static HashMap getAllInRadius(Location loc, double dR) + { + HashMap ents = new HashMap(); + + for (Entity cur : loc.getWorld().getEntities()) + { + if (UtilPlayer.isSpectator(cur)) + continue; + + //Loc + double offset = UtilMath.offset(loc, cur.getLocation()); + + if (offset < dR) + { + ents.put(cur, 1 - (offset/dR)); + continue; + } + } + + return ents; + } + public static boolean hitBox(Location loc, LivingEntity ent, double mult, EntityType disguise) { if (disguise != null) @@ -480,7 +503,7 @@ public class UtilEnt } else if (UtilMath.offset2d(loc, player.getLocation()) < 0.6 * mult) { - if (loc.getY() > player.getLocation().getY() && loc.getY() < player.getEyeLocation().getY()) + if (loc.getY() >= player.getLocation().getY() - 0.2*mult && loc.getY() <= player.getEyeLocation().getY() + 0.2*mult) { return true; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/account/command/UpdateRank.java b/Plugins/Mineplex.Core/src/mineplex/core/account/command/UpdateRank.java index 0b0db5c51..ae3a81c72 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/account/command/UpdateRank.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/account/command/UpdateRank.java @@ -27,14 +27,7 @@ public class UpdateRank extends CommandBase @Override public void Execute(final Player caller, String[] args) - { - if (!Plugin.Get(caller).GetRank(true).has(caller, Rank.ADMIN, true)) - { - return; - } - - boolean testServer = Plugin.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing"); - + { if (args == null) { UtilPlayer.message(caller, F.main(Plugin.getName(), "/" + AliasUsed + " joeschmo MODERATOR")); @@ -62,79 +55,70 @@ public class UpdateRank extends CommandBase final Rank rank = tempRank; - if (rank == Rank.ADMIN || rank == Rank.YOUTUBE || rank == Rank.TWITCH || rank == Rank.MODERATOR || rank == Rank.JNR_DEV || rank == Rank.HELPER || rank == Rank.ALL || rank == Rank.MAPDEV || rank == Rank.SNR_MODERATOR || rank == Rank.SUPPORT) + Plugin.getRepository().matchPlayerName(new Callback>() { - if (!testServer && rank.has(Rank.ADMIN) && !Plugin.hasRank(caller, Rank.LT)) + public void run(List matches) { - UtilPlayer.message(caller, F.main(Plugin.getName(), ChatColor.RED + "" + ChatColor.BOLD + "Insufficient privileges!")); - return; - } - - Plugin.getRepository().matchPlayerName(new Callback>() - { - public void run(List matches) + boolean matchedExact = false; + + for (String match : matches) { - boolean matchedExact = false; - - for (String match : matches) + if (match.equalsIgnoreCase(playerName)) { - if (match.equalsIgnoreCase(playerName)) - { - matchedExact = true; - } + matchedExact = true; } - - if (matchedExact) - { - for (Iterator matchIterator = matches.iterator(); matchIterator.hasNext();) - { - if (!matchIterator.next().equalsIgnoreCase(playerName)) - { - matchIterator.remove(); - } - } - } - - if (UtilPlayer.isOnline(playerName)) - { - Player p = UtilServer.getServer().getPlayer(playerName); - if (Plugin.Get(p).GetRank() != Plugin.Get(p).GetRank(true)) - Plugin.Get(p).resetTemp(); - - OnlineRankUpdateEvent event = new OnlineRankUpdateEvent(caller, Plugin.Get(caller).GetRank(), rank, true); - Plugin.Get(p).SetRank(rank, false); - Bukkit.getPluginManager().callEvent(event); - - UtilPlayer.message(p, F.main(Plugin.getName(), "Your rank has been updated to " + rank.Name + "!")); - } - - UtilPlayer.searchOffline(matches, new Callback() - { - public void run(final String target) - { - if (target == null) - { - return; - } - - UUID uuid = Plugin.loadUUIDFromDB(playerName); - - if (uuid == null) - uuid = UUIDFetcher.getUUIDOf(playerName); - - Plugin.getRepository().saveRank(new Callback() - { - public void run(Rank rank) - { - caller.sendMessage(F.main(Plugin.getName(), target + "'s rank has been updated to " + rank.Name + "!")); - } - }, target, uuid, rank, true); - - } - }, caller, playerName, true); } - }, playerName); - } + + if (matchedExact) + { + for (Iterator matchIterator = matches.iterator(); matchIterator.hasNext();) + { + if (!matchIterator.next().equalsIgnoreCase(playerName)) + { + matchIterator.remove(); + } + } + } + + if (UtilPlayer.isOnline(playerName)) + { + Player p = UtilServer.getServer().getPlayer(playerName); + if (Plugin.Get(p).GetRank() != Plugin.Get(p).GetRank(true)) + Plugin.Get(p).resetTemp(); + + OnlineRankUpdateEvent event = new OnlineRankUpdateEvent(caller, Plugin.Get(caller).GetRank(), rank, true); + Plugin.Get(p).SetRank(rank, false); + Bukkit.getPluginManager().callEvent(event); + + UtilPlayer.message(p, F.main(Plugin.getName(), "Your rank has been updated to " + rank.Name + "!")); + } + + UtilPlayer.searchOffline(matches, new Callback() + { + public void run(final String target) + { + if (target == null) + { + return; + } + + UUID uuid = Plugin.loadUUIDFromDB(playerName); + + if (uuid == null) + uuid = UUIDFetcher.getUUIDOf(playerName); + + Plugin.getRepository().saveRank(new Callback() + { + public void run(Rank rank) + { + caller.sendMessage(F.main(Plugin.getName(), target + "'s rank has been updated to " + rank.Name + "!")); + } + }, target, uuid, rank, true); + + } + }, caller, playerName, true); + } + }, playerName); } } } \ 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 5953c98fa..329f3bd35 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/Achievement.java @@ -329,6 +329,12 @@ public enum Achievement new String[]{"Kill the Enemy Flag Carrier in Sudden Death"}, new int[]{1}, AchievementCategory.CHAMPIONS), + + CHAMPIONS_SPECIAL_WIN("Champion of Champions", 3000, + new String[]{"Champions Capture the Flag.SpecialWin"}, + new String[]{"Win the game with 5 more captures than the other team"}, + new int[]{1}, + AchievementCategory.CHAMPIONS), //Paintball SUPER_PAINTBALL_WINS("Paintball King", 600, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java index f2d6f79af..063495f54 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/Gadget.java @@ -74,6 +74,8 @@ public abstract class Gadget extends SalesPackageBase implements Listener return; } + System.out.println(player.getName() + " has activated " + Name); + EnableCustom(player); Manager.setActive(player, this); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java index f7393e9ac..79a5cbff9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/game/GameDisplay.java @@ -1,5 +1,6 @@ package mineplex.core.game; +import org.bukkit.DyeColor; import org.bukkit.Material; public enum GameDisplay @@ -10,7 +11,6 @@ public enum GameDisplay Bridge("The Bridges", Material.IRON_PICKAXE, (byte)0, GameCategory.SURVIVAL, 3), CastleSiege("Castle Siege", Material.DIAMOND_CHESTPLATE, (byte)0, GameCategory.CLASSICS, 4), ChampionsDominate("Champions Domination", "Champions", Material.BEACON, (byte)0, GameCategory.CHAMPIONS, 6), - //ChampionsMOBA(ChampionsMOBA.class, "Champions MOBA", "Champions", Material.SKULL_ITEM, (byte)0, GameCategory.CHAMPIONS, 7), ChampionsTDM("Champions TDM", "Champions", Material.GOLD_SWORD, (byte)0, GameCategory.CHAMPIONS, 5), Christmas("Christmas Chaos", Material.SNOW_BALL, (byte)0, GameCategory.CLASSICS, 8), DeathTag("Death Tag", Material.SKULL_ITEM, (byte)0, GameCategory.ARCADE, 9), @@ -21,8 +21,7 @@ public enum GameDisplay DragonsTeams("Dragons Teams", Material.ENDER_STONE, (byte)0, GameCategory.TEAM_VARIANT, 14), Draw("Draw My Thing", Material.BOOK_AND_QUILL, (byte)0, GameCategory.CLASSICS, 15), Evolution("Evolution", Material.EMERALD, (byte)0, GameCategory.ARCADE, 16), - //FlappyBird(FlappyBird.class, "Flappy Bird", Material.FEATHER, (byte)0, GameCategory.ARCADE, 17), - Gravity("Gravity", Material.SEA_LANTERN, (byte)0, GameCategory.EXTRA, 18), + Gravity("Gravity", Material.ENDER_PORTAL, (byte)0, GameCategory.EXTRA, 18), Halloween("Halloween Horror", Material.PUMPKIN, (byte)0, GameCategory.CLASSICS, 19), HideSeek("Block Hunt", Material.GRASS, (byte)0, GameCategory.CLASSICS, 20), HoleInTheWall("Hole in the Wall", Material.STAINED_GLASS, (byte) 2, GameCategory.ARCADE, 52), @@ -67,7 +66,7 @@ public enum GameDisplay Lobbers("Bomb Lobbers", Material.FIREBALL, (byte) 0, GameCategory.ARCADE, 54), - ChampionsCTF("Champions CTF", "Champions", Material.REDSTONE_BLOCK, (byte)0, GameCategory.CHAMPIONS, 55), + ChampionsCTF("Champions CTF", "Champions", Material.BANNER, DyeColor.RED.getDyeData(), GameCategory.CHAMPIONS, 56), Event("Mineplex Event", Material.CAKE, (byte)0, GameCategory.EVENT, 999); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java index d34e42c11..aab042293 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileManager.java @@ -135,6 +135,12 @@ public class ProjectileManager extends MiniPlugin expireTime, hitPlayer, hitNonPlayerEntity, hitBlock, idle, false, sound, soundVolume, soundPitch, null, 0, effectRate, particle, pX, pY, pZ, pS, pC, hitboxMult, canHit)); } + + public void deleteThrown(Entity thrown) + { + _thrown.remove(thrown); + thrown.remove(); + } @EventHandler public void Update(UpdateEvent event) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java index af01bf478..8a17080cd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/projectile/ProjectileUser.java @@ -269,6 +269,13 @@ public class ProjectileUser nmsEntity.locY -= nmsEntity.motY / f2 * 0.0500000007450581D; nmsEntity.locZ -= nmsEntity.motZ / f2 * 0.0500000007450581D; + if (nmsEntity.locX == Double.NaN) + System.out.println(_thrown + " has made " + nmsEntity + "'s locX NaN."); + if (nmsEntity.locY == Double.NaN) + System.out.println(_thrown + " has made " + nmsEntity + "'s locY NaN."); + if (nmsEntity.locZ == Double.NaN) + System.out.println(_thrown + " has made " + nmsEntity + "'s locZ NaN."); + _callback.Collide(null, block, this); return true; } 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 05b6bb0e9..c00523beb 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 @@ -132,7 +132,7 @@ public class ClansManager extends MiniClientPlugin implements IRelat itemIgnore.add("Proximity Zapper"); ItemFactory itemFactory = new ItemFactory(plugin, blockRestore, _condition, damageManager, energy, fire, throwManager, webServerAddress, itemIgnore); - SkillFactory skillManager = new SkillFactory(plugin, damageManager, this, _combatManager, _condition, throwManager, disguiseManager, blockRestore, fire, new Movement(plugin), teleport, energy, webServerAddress); + SkillFactory skillManager = new SkillFactory(plugin, damageManager, this, _combatManager, _condition, throwManager, disguiseManager, blockRestore, itemFactory.ThrownManager, fire, new Movement(plugin), teleport, energy, webServerAddress); skillManager.RemoveSkill("Dwarf Toss", "Block Toss"); _classManager = new ClassManager(plugin, _clientManager, donationManager, skillManager, itemFactory, webServerAddress); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 1c774a995..4ae6eea74 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -67,7 +67,6 @@ import mineplex.hub.modules.NewsManager; import mineplex.hub.modules.ParkourManager; import mineplex.hub.modules.SoccerManager; import mineplex.hub.modules.TextManager; -import mineplex.hub.modules.TrickOrTreatManager; import mineplex.hub.modules.WorldManager; import mineplex.hub.profile.gui.GUIProfile; import mineplex.hub.tutorial.TutorialManager; diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java index 2ac87ef75..094c43bec 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/StackerManager.java @@ -224,6 +224,8 @@ public class StackerManager extends MiniPlugin implements IThrown UtilPlayer.message(thrower, F.main("Stacker", "You threw " + F.name(UtilEnt.getName(throwee)))); UtilPlayer.message(throwee, F.main("Stacker", "You were thrown by " + F.name(thrower.getName()))); + System.out.println("Stacker throw."); + UtilAction.velocity(throwee, thrower.getLocation().getDirection(), 1.8, false, 0, 0.3, 2, false); _projectileManager.AddThrow(throwee, thrower, this, 4000, true, false, true, false, 0.5f); @@ -244,7 +246,9 @@ public class StackerManager extends MiniPlugin implements IThrown if (!Manager.hasPlayerStackingEnabled(target)) return; - + + System.out.println("Stacker collide."); + //Velocity UtilAction.velocity(target, UtilAlg.getTrajectory2d(data.GetThrown(), target), 1, true, 0.8, 0, 10, true); 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 c2b817e81..da87fc2da 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 @@ -315,6 +315,11 @@ public class ClassManager extends MiniClientPlugin implements IClas { return _skillFactory; } + + public ItemFactory GetItemFactory() + { + return _itemFactory; + } @Override protected ClientClass AddPlayer(String player) diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Condition/SkillConditionEffect.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Condition/SkillConditionEffect.java index 732ffb15a..b5dcbc455 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Condition/SkillConditionEffect.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/Condition/SkillConditionEffect.java @@ -1,8 +1,11 @@ package mineplex.minecraft.game.classcombat.Condition; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import mineplex.core.common.util.UtilServer; +import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.condition.ConditionEffect; import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; 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 54b7cffef..043333409 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 @@ -214,7 +214,7 @@ public class Immolate extends Skill Item fire = cur.getWorld().dropItem(cur.getLocation().add(0, 0.5, 0), itemStack); fire.setVelocity(new Vector((Math.random() - 0.5)/3,Math.random()/3,(Math.random() - 0.5)/3)); - Factory.Fire().Add(fire, cur, 2, 0, 0.25 + (level * 0.25), 0, GetName()); + Factory.Fire().Add(fire, cur, 2, 0, 0.25 + (level * 0.25), 0, GetName(), false); //Sound cur.getWorld().playSound(cur.getLocation(), Sound.FIZZ, 0.2f, 1f); 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 cced308da..fcd7fcc3f 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 @@ -113,7 +113,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), 1, GetName()); + Factory.Fire().Add(fire, cur, 0.7, 0, 0.3 + (0.1 * level), 1, GetName(), false); fire.teleport(cur.getEyeLocation()); double x = 0.07 - (UtilMath.r(14)/100d); 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 dbf235d74..17cea9ff8 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 @@ -18,17 +18,12 @@ 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.UpdateType; -import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilParticle.ParticleType; 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.damage.CustomDamageEvent; import org.bukkit.event.player.*; 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 2d08a12a9..5926fe0e4 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 @@ -153,7 +153,7 @@ public class HealingShot extends SkillActive projectile.remove(); //Regen - if (Factory.Relation().canHurt(damager, damagee)) + if (!Factory.Relation().canHurt(damager, damagee)) { Factory.Condition().Factory().Regen(GetName(), damagee, damager, 3 + level, 2, false, false, false); 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 ecd747510..28ed24435 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 @@ -144,19 +144,19 @@ public class NapalmShot extends SkillActive //Damage event.AddMod(damager.getName(), GetName(), 0, true); - //Effect + //Effect damagee.getWorld().playSound(damagee.getLocation(), Sound.FIZZ, 2f, 1.5f); //Remove projectile.remove(); } - @EventHandler + @EventHandler(priority=EventPriority.MONITOR) //make it happen after the damage event ^ public void projectileHit(ProjectileHitEvent event) { Projectile proj = event.getEntity(); - if (!_arrows.remove(proj)) + if (!_arrows.contains(proj)) return; if (proj.getShooter() == null) @@ -179,7 +179,7 @@ public class NapalmShot extends SkillActive itemStack.setItemMeta(meta); Item fire = proj.getWorld().dropItemNaturally(proj.getLocation(), itemStack); - Factory.Fire().Add(fire, damager, 16, 0.25, 2, 0, GetName()); + Factory.Fire().Add(fire, damager, 16, 0.25, 2, 0.25, GetName(), true); fire.setVelocity(fire.getVelocity().multiply(1 + (0.15 * level))); } 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 768154f44..65de30294 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 @@ -8,7 +8,6 @@ import java.util.List; import mineplex.core.MiniPlugin; import mineplex.core.blockrestore.BlockRestore; -import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.core.disguise.DisguiseManager; import mineplex.core.donation.repository.GameSalesPackageToken; import mineplex.core.energy.Energy; @@ -18,17 +17,91 @@ import mineplex.core.teleport.Teleport; import mineplex.minecraft.game.classcombat.Class.IPvpClass; import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType; import mineplex.minecraft.game.classcombat.Skill.ISkill.SkillType; -import mineplex.minecraft.game.classcombat.Skill.Brute.*; -import mineplex.minecraft.game.classcombat.Skill.Assassin.*; -import mineplex.minecraft.game.classcombat.Skill.Global.*; -import mineplex.minecraft.game.classcombat.Skill.Knight.*; -import mineplex.minecraft.game.classcombat.Skill.Mage.*; +import mineplex.minecraft.game.classcombat.Skill.Assassin.Assassin; +import mineplex.minecraft.game.classcombat.Skill.Assassin.BackStab; +import mineplex.minecraft.game.classcombat.Skill.Assassin.Blink; +import mineplex.minecraft.game.classcombat.Skill.Assassin.ComboAttack; +import mineplex.minecraft.game.classcombat.Skill.Assassin.Evade; +import mineplex.minecraft.game.classcombat.Skill.Assassin.Flash; +import mineplex.minecraft.game.classcombat.Skill.Assassin.Illusion; +import mineplex.minecraft.game.classcombat.Skill.Assassin.Leap; +import mineplex.minecraft.game.classcombat.Skill.Assassin.MarkedForDeath; +import mineplex.minecraft.game.classcombat.Skill.Assassin.Recall; +import mineplex.minecraft.game.classcombat.Skill.Assassin.ShockingStrikes; +import mineplex.minecraft.game.classcombat.Skill.Assassin.SilencingArrow; +import mineplex.minecraft.game.classcombat.Skill.Assassin.SmokeArrow; +import mineplex.minecraft.game.classcombat.Skill.Assassin.SmokeBomb; +import mineplex.minecraft.game.classcombat.Skill.Assassin.ViperStrikes; +import mineplex.minecraft.game.classcombat.Skill.Brute.BlockToss; +import mineplex.minecraft.game.classcombat.Skill.Brute.Bloodlust; +import mineplex.minecraft.game.classcombat.Skill.Brute.Brute; +import mineplex.minecraft.game.classcombat.Skill.Brute.Colossus; +import mineplex.minecraft.game.classcombat.Skill.Brute.CripplingBlow; +import mineplex.minecraft.game.classcombat.Skill.Brute.DwarfToss; +import mineplex.minecraft.game.classcombat.Skill.Brute.FleshHook; +import mineplex.minecraft.game.classcombat.Skill.Brute.Intimidation; +import mineplex.minecraft.game.classcombat.Skill.Brute.Overwhelm; +import mineplex.minecraft.game.classcombat.Skill.Brute.SeismicSlam; +import mineplex.minecraft.game.classcombat.Skill.Brute.Stampede; +import mineplex.minecraft.game.classcombat.Skill.Brute.Takedown; +import mineplex.minecraft.game.classcombat.Skill.Brute.WhirlwindAxe; +import mineplex.minecraft.game.classcombat.Skill.Global.BreakFall; +import mineplex.minecraft.game.classcombat.Skill.Global.Fitness; +import mineplex.minecraft.game.classcombat.Skill.Global.Recharge; +import mineplex.minecraft.game.classcombat.Skill.Global.Resistance; +import mineplex.minecraft.game.classcombat.Skill.Knight.AxeThrow; +import mineplex.minecraft.game.classcombat.Skill.Knight.BullsCharge; +import mineplex.minecraft.game.classcombat.Skill.Knight.Cleave; +import mineplex.minecraft.game.classcombat.Skill.Knight.DefensiveStance; +import mineplex.minecraft.game.classcombat.Skill.Knight.Deflection; +import mineplex.minecraft.game.classcombat.Skill.Knight.Fortitude; +import mineplex.minecraft.game.classcombat.Skill.Knight.HiltSmash; +import mineplex.minecraft.game.classcombat.Skill.Knight.HoldPosition; +import mineplex.minecraft.game.classcombat.Skill.Knight.Knight; +import mineplex.minecraft.game.classcombat.Skill.Knight.LevelField; +import mineplex.minecraft.game.classcombat.Skill.Knight.Riposte; +import mineplex.minecraft.game.classcombat.Skill.Knight.ShieldSmash; +import mineplex.minecraft.game.classcombat.Skill.Knight.Swordsmanship; +import mineplex.minecraft.game.classcombat.Skill.Knight.Vengeance; +import mineplex.minecraft.game.classcombat.Skill.Mage.ArcticArmor; +import mineplex.minecraft.game.classcombat.Skill.Mage.Blizzard; +import mineplex.minecraft.game.classcombat.Skill.Mage.FireBlast; +import mineplex.minecraft.game.classcombat.Skill.Mage.Fissure; +import mineplex.minecraft.game.classcombat.Skill.Mage.GlacialBlade; +import mineplex.minecraft.game.classcombat.Skill.Mage.IcePrison; +import mineplex.minecraft.game.classcombat.Skill.Mage.Immolate; +import mineplex.minecraft.game.classcombat.Skill.Mage.Inferno; +import mineplex.minecraft.game.classcombat.Skill.Mage.LifeBonds; +import mineplex.minecraft.game.classcombat.Skill.Mage.LightningOrb; +import mineplex.minecraft.game.classcombat.Skill.Mage.Mage; +import mineplex.minecraft.game.classcombat.Skill.Mage.MagmaBlade; +import mineplex.minecraft.game.classcombat.Skill.Mage.NullBlade; +import mineplex.minecraft.game.classcombat.Skill.Mage.Rupture; +import mineplex.minecraft.game.classcombat.Skill.Mage.StaticLazer; import mineplex.minecraft.game.classcombat.Skill.Mage.Void; -import mineplex.minecraft.game.classcombat.Skill.Ranger.*; +import mineplex.minecraft.game.classcombat.Skill.Ranger.Agility; +import mineplex.minecraft.game.classcombat.Skill.Ranger.BarbedArrows; +import mineplex.minecraft.game.classcombat.Skill.Ranger.Barrage; +import mineplex.minecraft.game.classcombat.Skill.Ranger.Disengage; +import mineplex.minecraft.game.classcombat.Skill.Ranger.ExplosiveShot; +import mineplex.minecraft.game.classcombat.Skill.Ranger.HealingShot; +import mineplex.minecraft.game.classcombat.Skill.Ranger.HeavyArrows; +import mineplex.minecraft.game.classcombat.Skill.Ranger.Longshot; +import mineplex.minecraft.game.classcombat.Skill.Ranger.NapalmShot; +import mineplex.minecraft.game.classcombat.Skill.Ranger.Overcharge; +import mineplex.minecraft.game.classcombat.Skill.Ranger.PinDown; +import mineplex.minecraft.game.classcombat.Skill.Ranger.Ranger; +import mineplex.minecraft.game.classcombat.Skill.Ranger.RopedArrow; +import mineplex.minecraft.game.classcombat.Skill.Ranger.Sharpshooter; +import mineplex.minecraft.game.classcombat.Skill.Ranger.VitalitySpores; +import mineplex.minecraft.game.classcombat.Skill.Ranger.WolfsFury; +import mineplex.minecraft.game.classcombat.Skill.Ranger.WolfsPounce; import mineplex.minecraft.game.classcombat.Skill.repository.SkillRepository; import mineplex.minecraft.game.classcombat.Skill.repository.token.SkillToken; +import mineplex.minecraft.game.classcombat.item.Throwable.ProximityManager; import mineplex.minecraft.game.core.IRelation; import mineplex.minecraft.game.core.combat.CombatManager; +import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.core.damage.DamageManager; import mineplex.minecraft.game.core.fire.Fire; 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 97ee02a87..334368043 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 @@ -28,6 +28,7 @@ public class ItemFactory extends MiniPlugin implements IItemFactory private Energy _energy; private Fire _fire; private ProjectileManager _projectileManager; + private ProximityManager _proxyManager; private java.lang.reflect.Field _itemMaxDurability; private HashMap _items; private HashSet _ignore; @@ -47,6 +48,7 @@ public class ItemFactory extends MiniPlugin implements IItemFactory _energy = energy; _fire = fire; _projectileManager = projectileManager; + _proxyManager = new ProximityManager(); _items = new HashMap(); _ignore = ignore; @@ -240,6 +242,8 @@ public class ItemFactory extends MiniPlugin implements IItemFactory for (Item item : _items.values()) registerEvents(item); + + registerEvents(_proxyManager); } @Override @@ -249,5 +253,12 @@ public class ItemFactory extends MiniPlugin implements IItemFactory for (Item item : _items.values()) HandlerList.unregisterAll(item); + + HandlerList.unregisterAll(_proxyManager); + } + + public ProximityManager getProximityManager() + { + return _proxyManager; } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemUsable.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemUsable.java index c86940077..4ebc47b56 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemUsable.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/ItemUsable.java @@ -1,5 +1,17 @@ package mineplex.minecraft.game.classcombat.item; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilInv; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.projectile.IThrown; +import mineplex.core.projectile.ProjectileUser; +import mineplex.core.recharge.Recharge; +import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent; + import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; @@ -9,21 +21,6 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.player.PlayerInteractEvent; -import mineplex.core.common.util.UtilAction; -import mineplex.core.common.util.UtilBlock; -import mineplex.core.common.util.UtilEvent; -import mineplex.core.common.util.UtilGear; -import mineplex.core.common.util.UtilInv; -import mineplex.core.common.util.UtilEvent.ActionType; -import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.projectile.IThrown; -import mineplex.core.projectile.ProjectileUser; -import mineplex.core.recharge.Recharge; -import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent; -import mineplex.minecraft.game.classcombat.item.Item; -import mineplex.minecraft.game.classcombat.item.ItemFactory; -import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent; - public abstract class ItemUsable extends Item implements IThrown { private ActionType _useAction; @@ -161,7 +158,7 @@ public abstract class ItemUsable extends Item implements IThrown org.bukkit.entity.Item ent = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(GetType())); UtilAction.velocity(ent, player.getLocation().getDirection(), _throwPower, false, 0, 0.2, 10, false); Factory.Throw().AddThrow(ent, player, this, expire, _throwPlayer, _throwPlayer, _throwBlock, _throwIdle, _throwPickup, 0.5f); - + ThrowCustom(event, ent); } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java index 0768e5b2d..a6895deda 100644 --- a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityExplosive.java @@ -2,9 +2,10 @@ package mineplex.minecraft.game.classcombat.item.Throwable; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; +import org.bukkit.Bukkit; import org.bukkit.Effect; -import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -34,6 +35,7 @@ import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.minecraft.game.classcombat.item.ItemFactory; import mineplex.minecraft.game.classcombat.item.ItemUsable; +import mineplex.minecraft.game.classcombat.item.event.ProximityUseEvent; public class ProximityExplosive extends ItemUsable { @@ -63,7 +65,14 @@ public class ProximityExplosive extends ItemUsable @Override public void UseAction(PlayerInteractEvent event) { - + + } + + @Override + public void ThrowCustom(PlayerInteractEvent event, org.bukkit.entity.Item ent) + { + ProximityUseEvent useEvent = new ProximityUseEvent(event.getPlayer(), this, ent); + Bukkit.getServer().getPluginManager().callEvent(useEvent); } @Override @@ -160,19 +169,22 @@ public class ProximityExplosive extends ItemUsable { if (event.getType() != UpdateType.FAST) return; + + Iterator armedIter = _armed.keySet().iterator(); - HashSet expired = new HashSet(); - - for (Entity ent : _armed.keySet()) + while (armedIter.hasNext()) { + Entity ent = armedIter.next(); + if (ent.isDead() || !ent.isValid() || ent.getTicksLived() >= 3600) - expired.add(ent); - } - - for (Entity ent : expired) - { - Detonate(ent); - } + { + UtilParticle.PlayParticle(ParticleType.EXPLODE, ent.getLocation(), 0.1f, 0.1f, 0.1f, 0, 10, + ViewDist.MAX, UtilServer.getPlayers()); + + ent.remove(); + armedIter.remove(); + } + } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityManager.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityManager.java new file mode 100644 index 000000000..9e70eba21 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/Throwable/ProximityManager.java @@ -0,0 +1,104 @@ +package mineplex.minecraft.game.classcombat.item.Throwable; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; + +import mineplex.core.common.util.F; +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.item.event.ProximityUseEvent; + +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +public class ProximityManager implements Listener +{ + private int _proxyLimit = 6; + + private HashMap>> _proxyMap = new HashMap>>(); + + public void setProxyLimit(int limit) + { + _proxyLimit = limit; + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void proximityThrownEvent(ProximityUseEvent event) + { + //Don't bother if the proxy has been disallowed + if (!event.getEntity().isValid()) + return; + + if (!_proxyMap.containsKey(event.getPlayer())) + _proxyMap.put(event.getPlayer(), new ArrayList>()); + + ArrayList> proxies = _proxyMap.get(event.getPlayer()); + + //Store New + proxies.add(new AbstractMap.SimpleEntry(event.getItemType().GetName(), event.getEntity())); + + //Clean Excess + while (proxies.size() > _proxyLimit) + { + Entry entry = proxies.remove(0); + UtilPlayer.message(event.getPlayer(), F.main("Game", "Your old " + entry.getKey() + " was removed. Limit of " + _proxyLimit + ".")); + entry.getValue().remove(); + } + } + + @EventHandler + public void clean(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + clean(null, 0); + } + + public void clean(Location loc, int radius) + { + Iterator playerIter = _proxyMap.keySet().iterator(); + + while (playerIter.hasNext()) + { + Player player = playerIter.next(); + + //Clean Offline Players + if (!player.isOnline()) + { + playerIter.remove(); + continue; + } + + ArrayList> proxies = _proxyMap.get(player); + + Iterator> proxyIter = proxies.iterator(); + + //Clean Dead Proxies + while (proxyIter.hasNext()) + { + Entry proxy = proxyIter.next(); + + if (!proxy.getValue().isValid() || //Dead + (loc != null && UtilMath.offset(proxy.getValue().getLocation(), loc) < radius)) //Around Radius + { + proxy.getValue().remove(); + proxyIter.remove(); + } + } + + //Clean Empty Entries + if (proxies.isEmpty()) + playerIter.remove(); + } + } +} 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 230168163..3a3c22886 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 @@ -2,7 +2,9 @@ package mineplex.minecraft.game.classcombat.item.Throwable; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; +import org.bukkit.Bukkit; import org.bukkit.Effect; import org.bukkit.GameMode; import org.bukkit.Material; @@ -31,6 +33,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.minecraft.game.classcombat.item.ItemFactory; import mineplex.minecraft.game.classcombat.item.ItemUsable; +import mineplex.minecraft.game.classcombat.item.event.ProximityUseEvent; public class ProximityZapper extends ItemUsable { @@ -62,6 +65,13 @@ public class ProximityZapper extends ItemUsable { } + + @Override + public void ThrowCustom(PlayerInteractEvent event, org.bukkit.entity.Item ent) + { + ProximityUseEvent useEvent = new ProximityUseEvent(event.getPlayer(), this, ent); + Bukkit.getServer().getPluginManager().callEvent(useEvent); + } @Override public void Collide(LivingEntity target, Block block, ProjectileUser data) @@ -154,18 +164,21 @@ public class ProximityZapper extends ItemUsable if (event.getType() != UpdateType.FAST) return; - HashSet expired = new HashSet(); - - for (Entity ent : _armed.keySet()) + Iterator armedIter = _armed.keySet().iterator(); + + while (armedIter.hasNext()) { + Entity ent = armedIter.next(); + if (ent.isDead() || !ent.isValid() || ent.getTicksLived() >= 3600) - expired.add(ent); - } - - for (Entity ent : expired) - { - Detonate(ent, null); - } + { + UtilParticle.PlayParticle(ParticleType.EXPLODE, ent.getLocation(), 0.1f, 0.1f, 0.1f, 0, 10, + ViewDist.MAX, UtilServer.getPlayers()); + + ent.remove(); + armedIter.remove(); + } + } } } diff --git a/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/event/ProximityUseEvent.java b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/event/ProximityUseEvent.java new file mode 100644 index 000000000..30f78ba40 --- /dev/null +++ b/Plugins/Mineplex.Minecraft.Game.ClassCombat/src/mineplex/minecraft/game/classcombat/item/event/ProximityUseEvent.java @@ -0,0 +1,48 @@ +package mineplex.minecraft.game.classcombat.item.event; + +import mineplex.minecraft.game.classcombat.item.Item; + +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class ProximityUseEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + + private Player _player; + private Item _item; + private org.bukkit.entity.Item _entity; + + public ProximityUseEvent(Player player, Item item, org.bukkit.entity.Item ent) + { + _player = player; + _item = item; + _entity = ent; + } + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + + public Player getPlayer() + { + return _player; + } + + public Item getItemType() + { + return _item; + } + + public org.bukkit.entity.Item getEntity() + { + return _entity; + } +} \ 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 920a138d2..5c3d5e13a 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 @@ -61,7 +61,8 @@ public class ClassShopManager extends MiniPlugin Achievement.CHAMPIONS_THE_LONGEST_SHOT, Achievement.CHAMPIONS_WINS, Achievement.CHAMPIONS_CAPTURES, - Achievement.CHAMPIONS_CLUTCH + Achievement.CHAMPIONS_CLUTCH, + Achievement.CHAMPIONS_SPECIAL_WIN }); } } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java index 6ff2a3dec..ad1d4d17f 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/damage/DamageManager.java @@ -176,15 +176,7 @@ public class DamageManager extends MiniPlugin { NewDamageEvent(damagee, damager, proj, null, cause, damage, knockback, ignoreRate, ignoreArmor, source, reason, cancelled); } - - public void NewDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile proj, Location knockbackOrigin, - DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor, - String source, String reason, boolean cancelled) - { - _plugin.getServer().getPluginManager().callEvent(new CustomDamageEvent(damagee, damager, proj, knockbackOrigin, cause, - damage, knockback, ignoreRate, ignoreArmor, source, reason, cancelled)); - } - + public void NewDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile proj, Location knockbackOrigin, DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor, String source, String reason) @@ -193,6 +185,14 @@ public class DamageManager extends MiniPlugin reason, false); } + public void NewDamageEvent(LivingEntity damagee, LivingEntity damager, Projectile proj, Location knockbackOrigin, + DamageCause cause, double damage, boolean knockback, boolean ignoreRate, boolean ignoreArmor, + String source, String reason, boolean cancelled) + { + _plugin.getServer().getPluginManager().callEvent(new CustomDamageEvent(damagee, damager, proj, knockbackOrigin, cause, + damage, knockback, ignoreRate, ignoreArmor, source, reason, cancelled)); + } + @EventHandler(priority = EventPriority.LOW) public void CancelDamageEvent(CustomDamageEvent event) { 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 02f555f83..afe05620a 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 @@ -42,9 +42,9 @@ public class Fire extends MiniPlugin _damageManager = damageManager; } - public void Add(Item item, LivingEntity owner, double expireTime, double delayTime, double burnTime, double damage, String skillName) + public void Add(Item item, LivingEntity owner, double expireTime, double delayTime, double burnTime, double damage, String skillName, boolean hitSelf) { - _fire.put(item, new FireData(owner, expireTime, delayTime, burnTime, damage, skillName)); + _fire.put(item, new FireData(owner, expireTime, delayTime, burnTime, damage, skillName, hitSelf)); item.setPickupDelay(0); } @@ -60,13 +60,13 @@ public class Fire extends MiniPlugin { if (!_fire.get(fire).IsPrimed()) continue; - + if (fire.getLocation().getBlock().isLiquid()) { collided.put(fire, null); continue; } - + for (LivingEntity ent : fire.getWorld().getEntitiesByClass(LivingEntity.class)) { if (ent instanceof Player) @@ -75,13 +75,13 @@ public class Fire extends MiniPlugin if (ent.hasPotionEffect(PotionEffectType.FIRE_RESISTANCE)) continue; - + if (ent.getLocation().getBlock().getTypeId() == 8 || ent.getLocation().getBlock().getTypeId() == 9) continue; - - if (ent.equals(_fire.get(fire).GetOwner())) + + if (!_fire.get(fire).canHitOwner() && ent.equals(_fire.get(fire).GetOwner())) continue; - + if (_conditionManager.HasCondition(ent, ConditionType.FIRE_ITEM_IMMUNITY, null)) { continue; @@ -111,23 +111,23 @@ public class Fire extends MiniPlugin if (!_fire.containsKey(fire)) return; - if (_fire.get(fire).GetOwner().equals(player)) + if (!_fire.get(fire).canHitOwner() && _fire.get(fire).GetOwner().equals(player)) return; - + event.setCancelled(true); if (((CraftPlayer)player).getHandle().spectating) return; - + if (player.hasPotionEffect(PotionEffectType.FIRE_RESISTANCE)) return; - + if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9) return; if (!_fire.get(fire).IsPrimed()) return; - + if (_conditionManager.HasCondition(player, ConditionType.FIRE_ITEM_IMMUNITY, null)) { return; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/FireData.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/FireData.java index a06baaa29..79709c8bf 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/FireData.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/fire/FireData.java @@ -10,8 +10,9 @@ public class FireData private double _burnTime; private double _damage; private String _skillName; + private boolean _hitOwner; - public FireData(LivingEntity owner, double expireTime, double delayTime, double burnTime, double damage, String skillName) + public FireData(LivingEntity owner, double expireTime, double delayTime, double burnTime, double damage, String skillName, boolean hitSelf) { _owner = owner; _expireTime = System.currentTimeMillis() + (long)(1000 * expireTime); @@ -19,6 +20,7 @@ public class FireData _burnTime = burnTime; _damage = damage; _skillName = skillName; + _hitOwner = hitSelf; } public LivingEntity GetOwner() @@ -50,4 +52,9 @@ public class FireData { return System.currentTimeMillis() > _expireTime; } + + public boolean canHitOwner() + { + return _hitOwner; + } } 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 0286d70bc..13f39a5d5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -24,7 +24,6 @@ import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.cosmetic.CosmeticManager; import mineplex.core.creature.Creature; @@ -41,9 +40,7 @@ import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.movement.Movement; import mineplex.core.notifier.NotificationManager; import mineplex.core.npc.NpcManager; -import mineplex.core.packethandler.IPacketHandler; import mineplex.core.packethandler.PacketHandler; -import mineplex.core.packethandler.PacketInfo; import mineplex.core.party.PartyManager; import mineplex.core.pet.PetManager; import mineplex.core.poll.PollManager; @@ -61,7 +58,6 @@ import mineplex.core.status.ServerStatusManager; import mineplex.core.task.TaskManager; import mineplex.core.teleport.Teleport; import mineplex.core.timing.TimingManager; -import mineplex.core.titangiveaway.TitanGiveawayManager; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.classcombat.Class.ClassManager; import mineplex.minecraft.game.classcombat.Condition.SkillConditionManager; @@ -104,10 +100,10 @@ import nautilus.game.arcade.managers.GameSpectatorManager; import nautilus.game.arcade.managers.GameStatManager; import nautilus.game.arcade.managers.GameTournamentManager; import nautilus.game.arcade.managers.GameWorldManager; -import nautilus.game.arcade.managers.HolidayManager; import nautilus.game.arcade.managers.IdleManager; import nautilus.game.arcade.managers.MiscManager; import nautilus.game.arcade.shop.ArcadeShop; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -235,16 +231,19 @@ public class ArcadeManager extends MiniPlugin implements IRelation _explosionManager = new Explosion(plugin, _blockRestore); _explosionManager.SetDebris(false); - if (serverConfig.GameList.contains(GameType.ChampionsDominate) - || serverConfig.GameList.contains(GameType.ChampionsTDM) - || serverConfig.GameList.contains(GameType.ChampionsCTF)) - { - _conditionManager = new SkillConditionManager(plugin); - } - else - { - _conditionManager = new ConditionManager(plugin); - } + _conditionManager = new SkillConditionManager(plugin); + + //Dont see a reason to ever just use the normal one +// if (serverConfig.GameList.contains(GameType.ChampionsDominate) +// || serverConfig.GameList.contains(GameType.ChampionsTDM) +// || serverConfig.GameList.contains(GameType.ChampionsCTF)) +// { +// _conditionManager = new SkillConditionManager(plugin); +// } +// else +// { +// _conditionManager = new ConditionManager(plugin); +// } _clientManager = clientManager; _serverStatusManager = serverStatusManager; @@ -713,6 +712,9 @@ public class ArcadeManager extends MiniPlugin implements IRelation { event.setMotd(ChatColor.YELLOW + "In Progress" + extrainformation); } + + if (this.getPlugin().getConfig().getString("serverstatus.group").equalsIgnoreCase("Testing")) + event.setMotd(ChatColor.GOLD + "Private Mineplex Test Server"); } @EventHandler diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java index f10e3fa97..cc25d677d 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/GameType.java @@ -72,7 +72,6 @@ public enum GameType CastleSiege(CastleSiege.class, GameDisplay.CastleSiege), ChampionsCTF(ChampionsCTF.class, GameDisplay.ChampionsCTF), ChampionsDominate(ChampionsDominate.class, GameDisplay.ChampionsDominate), - //ChampionsMOBA(ChampionsMOBA.class, "Champions MOBA", "Champions", Material.SKULL_ITEM, (byte)0, GameCategory.CHAMPIONS, 7), ChampionsTDM(ChampionsTDM.class, GameDisplay.ChampionsTDM), Christmas(Christmas.class, GameDisplay.Christmas, "http://file.mineplex.com/ResChristmas.zip", true), DeathTag(DeathTag.class, GameDisplay.DeathTag), @@ -83,7 +82,6 @@ public enum GameType DragonsTeams(DragonsTeams.class, GameDisplay.DragonsTeams), Draw(Draw.class, GameDisplay.Draw), Evolution(Evolution.class, GameDisplay.Evolution), - //FlappyBird(FlappyBird.class, "Flappy Bird", Material.FEATHER, (byte)0, GameCategory.ARCADE, 17), Gravity(Gravity.class, GameDisplay.Gravity), Halloween(Halloween.class, GameDisplay.Halloween, "http://file.mineplex.com/ResHalloween.zip", true), HideSeek(HideSeek.class, GameDisplay.HideSeek), @@ -92,7 +90,7 @@ public enum GameType Lobbers(BombLobbers.class, GameDisplay.Lobbers), Micro(Micro.class, GameDisplay.Micro), MilkCow(MilkCow.class, GameDisplay.MilkCow), - MineStrike(MineStrike.class, GameDisplay.MineStrike, "http://file.mineplex.com/ResMinestrike.zip", true),// Temp set to CHAMPIONS to fix UI bug + MineStrike(MineStrike.class, GameDisplay.MineStrike, "http://chivebox.com/file/c/ResMinestrike.zip", true), MineWare(MineWare.class, GameDisplay.MineWare), OldMineWare(OldMineWare.class, GameDisplay.OldMineWare), Paintball(Paintball.class, GameDisplay.Paintball), 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 23dc523e1..27f429305 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 @@ -195,7 +195,8 @@ public abstract class Game implements Listener public boolean AutomaticRespawn = true; public double DeathSpectateSecs = 0; - + public boolean DeathTeleport = true; + public boolean QuitOut = true; public boolean QuitDropItems = false; @@ -209,6 +210,7 @@ public abstract class Game implements Listener public int WorldWaterDamage = 0; public boolean WorldBoundaryKill = true; public boolean WorldBlockBurn = false; + public boolean WorldBlockGrow = false; public boolean WorldFireSpread = false; public boolean WorldLeavesDecay = false; public boolean WorldSoilTrample = false; 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 1399f1486..209a620ab 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 @@ -1,7 +1,9 @@ package nautilus.game.arcade.game.games.champions; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.inventory.data.Item; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; @@ -21,8 +23,11 @@ import nautilus.game.arcade.stats.ClutchStatTracker; import nautilus.game.arcade.stats.ElectrocutionStatTracker; import nautilus.game.arcade.stats.KillReasonStatTracker; import nautilus.game.arcade.stats.SeismicSlamStatTracker; +import nautilus.game.arcade.stats.SpecialWinStatTracker; import nautilus.game.arcade.stats.TheLongestShotStatTracker; +import org.bukkit.Location; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -59,6 +64,8 @@ public class ChampionsCTF extends CaptureTheFlag Manager.GetDamage().UseSimpleWeaponDamage = false; Manager.getCosmeticManager().setHideParticles(true); + Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); + this.StrictAntiHack = true; InventoryOpenChest = true; @@ -76,10 +83,11 @@ public class ChampionsCTF extends CaptureTheFlag new TheLongestShotStatTracker(this), new SeismicSlamStatTracker(this), new CapturesStatTracker(this, "Captures"), - new ClutchStatTracker(this, "Clutch") + new ClutchStatTracker(this, "Clutch"), + new SpecialWinStatTracker(this, "SpecialWin") ); - new ChampsFixer(this); + new ChampionsFixes(this); } @Override @@ -140,4 +148,19 @@ public class ChampionsCTF extends CaptureTheFlag } } } + + @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); + } + } } 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 ad16ae542..be521f530 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 @@ -59,6 +59,8 @@ public class ChampionsDominate extends Domination Manager.GetDamage().UseSimpleWeaponDamage = false; Manager.getCosmeticManager().setHideParticles(true); + Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); + this.StrictAntiHack = true; InventoryOpenChest = true; @@ -77,7 +79,7 @@ public class ChampionsDominate extends Domination new SeismicSlamStatTracker(this) ); - new ChampsFixer(this); + new ChampionsFixes(this); } @Override diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampsFixer.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsFixes.java similarity index 81% rename from Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampsFixer.java rename to Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsFixes.java index 4208ae91f..6fca5b150 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampsFixer.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/champions/ChampionsFixes.java @@ -1,6 +1,9 @@ package nautilus.game.arcade.game.games.champions; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilServer; +import mineplex.core.inventory.data.Item; +import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.minecraft.game.classcombat.Skill.Skill; import nautilus.game.arcade.events.GameStateChangeEvent; @@ -9,6 +12,8 @@ import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.Game.GameState; import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -18,11 +23,11 @@ import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryType; -public class ChampsFixer implements Listener +public class ChampionsFixes implements Listener { private Game _host; - public ChampsFixer(Game game) + public ChampionsFixes(Game game) { _host = game; Bukkit.getPluginManager().registerEvents(this, _host.getArcadeManager().getPlugin()); @@ -34,7 +39,7 @@ public class ChampsFixer implements Listener if (event.GetGame() != _host) return; - if (event.GetState() == GameState.Dead) + if (event.GetState() == GameState.End || event.GetState() == GameState.Dead) HandlerList.unregisterAll(this); } @@ -51,7 +56,7 @@ public class ChampsFixer implements Listener return; event.setCancelled(true); - event.setCancelMessage("You cannot change kits while holding someone in Dwarf Toss!"); + event.setCancelMessage("You cannot change kits while using Dwarf Toss!"); } @EventHandler(priority = EventPriority.HIGHEST) @@ -67,11 +72,14 @@ public class ChampsFixer implements Listener } @EventHandler - public void onUpdate(UpdateEvent event) + 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) @@ -97,5 +105,4 @@ public class ChampsFixer implements Listener { event.setCancelled(true); } - } 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 36b48a1c6..f4cd3ea49 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 @@ -59,6 +59,8 @@ public class ChampionsTDM extends TeamDeathmatch this.Manager.GetDamage().UseSimpleWeaponDamage = false; Manager.getCosmeticManager().setHideParticles(true); + + Manager.getClassManager().GetItemFactory().getProximityManager().setProxyLimit(6); this.StrictAntiHack = true; @@ -77,7 +79,7 @@ public class ChampionsTDM extends TeamDeathmatch new SeismicSlamStatTracker(this) ); - new ChampsFixer(this); + new ChampionsFixes(this); } @Override 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 c4e43e84b..d2d8dd2e8 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,7 +4,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; import mineplex.core.common.Rank; import mineplex.core.common.util.C; @@ -85,8 +84,7 @@ public class CaptureTheFlag extends TeamGame private HashMap> _hotbars = new HashMap>(); private HashMap _helmets = new HashMap(); - private boolean _redFlickerStage = false; - private boolean _blueFlickerStage = false; + private boolean _flickerStage = false; public CaptureTheFlag(ArcadeManager manager, GameType type, Kit[] kits) { @@ -224,8 +222,8 @@ public class CaptureTheFlag extends TeamGame for (Resupply resupply : _resupply) resupply.Update(); - getFlag(true).handleBottomInfo(_redFlickerStage, ChatColor.RED); - getFlag(false).handleBottomInfo(_blueFlickerStage, ChatColor.AQUA); + getFlag(true).handleBottomInfo(_flickerStage, ChatColor.RED); + getFlag(false).handleBottomInfo(_flickerStage, ChatColor.AQUA); } else if (event.getType() == UpdateType.SEC) for (Flag flag : _flags) @@ -407,6 +405,28 @@ public class CaptureTheFlag extends TeamGame return null; } + public List getLocations(boolean base) + { + List locs = new ArrayList(); + if (base) + { + locs.add(_blueFlag); + locs.add(_redFlag); + } + else + { + locs.add(getFlag(true).getPlacedLocation()); + locs.add(getFlag(false).getPlacedLocation()); + } + + return locs; + } + + public int getScoreDifference() + { + return Math.abs(_blueScore - _redScore); + } + @Override @EventHandler public void ScoreboardUpdate(UpdateEvent event) @@ -432,22 +452,21 @@ public class CaptureTheFlag extends TeamGame String redMessage = "Flag Dropped"; if (getFlag(true).isAtHome()) - { redMessage = "Flag Safe"; - _redFlickerStage = false; - } + if (getFlag(true).getCarrier() != null) redMessage = "Flag Taken"; - if (_redFlickerStage) + if (_flickerStage) { - Scoreboard.Write(C.cRed + redMessage); - _redFlickerStage = false; + if (!getFlag(true).isAtHome()) + Scoreboard.Write(C.cRed + redMessage); + else + Scoreboard.Write(redMessage); } else { Scoreboard.Write(redMessage); - _redFlickerStage = true; } //Flag in play stuff @@ -457,23 +476,27 @@ public class CaptureTheFlag extends TeamGame String blueMessage = "Flag Dropped"; if (getFlag(false).isAtHome()) - { blueMessage = "Flag Safe"; - _blueFlickerStage = false; - } - if (getFlag(false).getCarrier() != null) - blueMessage = "Flag Taken"; - if (_blueFlickerStage) + if (getFlag(false).getCarrier() != null) { - Scoreboard.Write(C.cAqua + blueMessage); - _blueFlickerStage = false; + blueMessage = "Flag Taken"; + } + + if (_flickerStage) + { + if (!getFlag(false).isAtHome()) + Scoreboard.Write(C.cAqua + blueMessage); + else + Scoreboard.Write(blueMessage); } else { Scoreboard.Write(blueMessage); - _blueFlickerStage = true; } + + _flickerStage = !_flickerStage; + //Flag in play stuff Scoreboard.WriteBlank(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/ctf_data/Flag.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/ctf_data/Flag.java index 08417f095..1d52aa217 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/ctf_data/Flag.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/common/ctf_data/Flag.java @@ -410,10 +410,13 @@ public class Flag if (!_host.isAtHome(_team.GetColor() == ChatColor.RED ? ChatColor.BLUE : ChatColor.RED)) { - if (Recharge.Instance.use(player, "No Cap Message", 1000, false, false)) - UtilTextMiddle.display("", C.cRed + "Your flag must be at home to capture!", player); - - return; + if (_host.getArcadeManager().IsTournamentServer()) + { + if (Recharge.Instance.use(player, "No Cap Message", 1000, false, false)) + UtilTextMiddle.display("", C.cRed + "Your flag must be at home to capture!", player); + + return; + } } _host.resetInventory(player); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/evolution/mobs/perks/PerkFlamingSwordEVO.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/evolution/mobs/perks/PerkFlamingSwordEVO.java index 8f38ff279..6db08334c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/evolution/mobs/perks/PerkFlamingSwordEVO.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/evolution/mobs/perks/PerkFlamingSwordEVO.java @@ -129,7 +129,7 @@ public class PerkFlamingSwordEVO extends Perk { //Fire Item fire = player.getWorld().dropItem(player.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.BLAZE_POWDER)); - Manager.GetFire().Add(fire, player, 0.7, 0, 0.5, 1, "Inferno"); + Manager.GetFire().Add(fire, player, 0.7, 0, 0.5, 1, "Inferno", false); fire.teleport(player.getEyeLocation()); double x = 0.07 - (UtilMath.r(14)/100d); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java index 093077d5c..eb2f0d0e9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/MineStrike.java @@ -116,6 +116,10 @@ import net.minecraft.server.v1_8_R3.EntityArrow; public class MineStrike extends TeamGame { + public static float RECOIL = 0.8f; + public static float CONE = 0.7f; + public static float MOVE_PENALTY = 0.8f; + public static class PlayerHeadshotEvent extends PlayerEvent { private static final HandlerList handlers = new HandlerList(); @@ -211,6 +215,7 @@ public class MineStrike extends TeamGame private Bomb _bomb = null; private Item _bombItem = null; private Player _bombHolder = null; + private long _bombHolderLastMove = 0; private Player _bombPlanter; private Player _bombDefuser; @@ -261,6 +266,8 @@ public class MineStrike extends TeamGame this.ItemDrop = true; + this.DeathTeleport = false; + this.InventoryClick = true; this.JoinInProgress = true; @@ -280,7 +287,7 @@ public class MineStrike extends TeamGame "Sprinting heavily decreases accuracy", "Jumping massively decreases accuracy", "Crouching increases accuracy", - "Left-Click to roll Grenades", + "Left-Click to drop Grenades", "Right-Click to throw Grenades", "Burst Fire for greater accuracy", "Sniper Rifles are only accurate while scoped", @@ -369,7 +376,7 @@ public class MineStrike extends TeamGame gun.giveToPlayer(event.getPlayer(), true); //Knife - event.getPlayer().getInventory().setItem(2, ItemStackFactory.Instance.CreateStack(Material.IRON_SWORD, (byte)0, 1, "Knife")); + event.getPlayer().getInventory().setItem(2, ItemStackFactory.Instance.CreateStack(Material.IRON_AXE, (byte)0, 1, "Knife")); //Armor giveTeamArmor(event.getPlayer(), Color.fromRGB(0, 0, 255)); @@ -385,6 +392,8 @@ public class MineStrike extends TeamGame { //Dont Get Hit By Bullets ((CraftPlayer) event.getEntity()).getHandle().spectating = true; + + Manager.GetCondition().Factory().Blind("Ghost", event.getEntity(), event.getEntity(), 2.5, 0, false, false, false); } // public void disguiseSneak(Player player, GameTeam team) @@ -530,6 +539,7 @@ public class MineStrike extends TeamGame player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 2f); _bombHolder = player; + _bombHolderLastMove = System.currentTimeMillis(); if (_bombItem != null) { @@ -717,6 +727,12 @@ public class MineStrike extends TeamGame if (grenade == null) return; + + if (!UtilTime.elapsed(GetStateTime(), 15000)) + { + UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot throw Grenades yet.")); + return; + } grenade.throwGrenade(event.getPlayer(), UtilEvent.isAction(event, ActionType.L), this); event.setCancelled(true); @@ -1601,7 +1617,7 @@ public class MineStrike extends TeamGame _bombPlanter.setExp(Math.min(_bombPlanter.getExp() + 0.017f, 0.99999f)); if (Math.random() > 0.90) - _bombPlanter.getWorld().playSound(_bombPlanter.getLocation(), Sound.NOTE_PLING, 1f, 3f); + _bombPlanter.getWorld().playSound(_bombPlanter.getLocation(), Sound.NOTE_PLING, 2f, 3f); UtilTextMiddle.display(C.cRed + C.Bold + "Planting Bomb", UtilTextMiddle.progress(_bombPlanter.getExp()), 0, 10, 0, _bombPlanter); @@ -2758,6 +2774,48 @@ public class MineStrike extends TeamGame _shopManager.addMoney(event.getPlayer(), 16000, "Debug"); event.setCancelled(true); } + + if (event.getMessage().contains("recoil")) + { + try + { + MineStrike.RECOIL = Float.parseFloat(event.getMessage().split(" ")[1]); + this.Announce(C.cPurple + C.Bold + "Recoil Bloom: " + ChatColor.RESET + (int)(MineStrike.RECOIL * 100) + "%"); + } + catch (Exception e) + { + + } + event.setCancelled(true); + } + + if (event.getMessage().contains("cone")) + { + try + { + MineStrike.CONE = Float.parseFloat(event.getMessage().split(" ")[1]); + this.Announce(C.cPurple + C.Bold + "Cone of Fire: " + ChatColor.RESET + (int)(MineStrike.CONE * 100) + "%"); + } + catch (Exception e) + { + + } + event.setCancelled(true); + } + + if (event.getMessage().contains("move")) + { + try + { + MineStrike.MOVE_PENALTY = Float.parseFloat(event.getMessage().split(" ")[1]); + this.Announce(C.cPurple + C.Bold + "Move/Sprint/Jump Penalties: " + ChatColor.RESET + (int)(MineStrike.MOVE_PENALTY * 100) + "%"); + } + catch (Exception e) + { + + } + event.setCancelled(true); + } if (event.getMessage().contains("instant")) { @@ -2882,4 +2940,107 @@ public class MineStrike extends TeamGame } } } + + @EventHandler + public void bombMove(PlayerMoveEvent event) + { + if (_bombHolder == null || !event.getPlayer().equals(_bombHolder)) + return; + + _bombHolderLastMove = System.currentTimeMillis(); + } + + @EventHandler + public void bombTimeDrop(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + return; + + if (_freezeTime > 0) + _bombHolderLastMove = System.currentTimeMillis(); + + if (_bombHolder != null && UtilTime.elapsed(_bombHolderLastMove, 10000)) + { + _bombHolder.getInventory().remove(Material.GOLD_SWORD); + + Vector vel = new Vector(Math.random() - 0.5, 0, Math.random() - 0.5); + vel.normalize(); + vel.multiply(0.3); + vel.setY(0.2); + + _bombItem = _bombHolder.getWorld().dropItem(_bombHolder.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.GOLD_SWORD, (byte)0, 1, C.cGold + C.Bold + "C4 Explosive")); + _bombItem.setVelocity(vel); + _bombItem.setPickupDelay(60); + + //Radio + playSound(Radio.T_BOMB_DROP, null, GetTeam(_bombHolder)); + + _bombHolder = null; + } + } + + @Override + public Location GetSpectatorLocation() + { + if (SpectatorSpawn != null) + return SpectatorSpawn; + + Vector vec = new Vector(0, 0, 0); + double count = 0; + + for (GameTeam team : this.GetTeamList()) + { + for (Location spawn : team.GetSpawns()) + { + count++; + vec.add(spawn.toVector()); + } + } + + SpectatorSpawn = new Location(this.WorldData.World, 0, 0, 0); + + vec.multiply(1d / count); + + SpectatorSpawn.setX(vec.getX()); + SpectatorSpawn.setY(vec.getY() + 50); //ADD 50 + SpectatorSpawn.setZ(vec.getZ()); + + // Move Up - Out Of Blocks + while (!UtilBlock.airFoliage(SpectatorSpawn.getBlock()) + || !UtilBlock.airFoliage(SpectatorSpawn.getBlock().getRelative(BlockFace.UP))) + { + SpectatorSpawn.add(0, 1, 0); + } + + int Up = 0; + + // Move Up - Through Air + for (int i = 0; i < 15; i++) + { + if (UtilBlock.airFoliage(SpectatorSpawn.getBlock().getRelative(BlockFace.UP))) + { + SpectatorSpawn.add(0, 1, 0); + Up++; + } + else + { + break; + } + } + + // Move Down - Out Of Blocks + while (Up > 0 && !UtilBlock.airFoliage(SpectatorSpawn.getBlock()) + || !UtilBlock.airFoliage(SpectatorSpawn.getBlock().getRelative(BlockFace.UP))) + { + SpectatorSpawn.subtract(0, 1, 0); + Up--; + } + + SpectatorSpawn = SpectatorSpawn.getBlock().getLocation().add(0.5, 0.1, 0.5); + + while (SpectatorSpawn.getBlock().getTypeId() != 0 || SpectatorSpawn.getBlock().getRelative(BlockFace.UP).getTypeId() != 0) + SpectatorSpawn.add(0, 1, 0); + + return SpectatorSpawn; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Grenade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Grenade.java index 595c303ea..83c3a8658 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Grenade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/Grenade.java @@ -87,7 +87,7 @@ public abstract class Grenade extends StrikeItem int alreadyHas = 0; int bestSlot = -1; - for (int i = 3 ; i < 7 ; i++) + for (int i = 5 ; i >= 3 ; i--) { if (UtilInv.IsItem(player.getInventory().getItem(i), getSkin(), (byte) -1)) alreadyHas++; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java index cf422687b..111292fc1 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/grenades/HighExplosive.java @@ -51,7 +51,7 @@ public class HighExplosive extends Grenade continue; // Damage Event - game.Manager.GetDamage().NewDamageEvent(player, _thrower, null, + game.Manager.GetDamage().NewDamageEvent(player, _thrower, null, ent.getLocation(), DamageCause.CUSTOM, 1 + (players.get(player) * 18), true, true, false, _thrower.getName(), getName()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java index a01c65619..408033016 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/Gun.java @@ -118,7 +118,9 @@ public class Gun extends StrikeItem } if (!Recharge.Instance.use(player, getName() + " Shoot", _gunStats.getFireRate(), false, false)) + { return; + } //Use Ammo _loadedAmmo--; @@ -164,6 +166,7 @@ public class Gun extends StrikeItem Vector cof = new Vector(Math.random() - 0.5, (Math.random() - 0.2) * (5d/8d), Math.random() - 0.5); cof.normalize(); cof.multiply(cone); + cof.multiply(MineStrike.CONE); cof.add(player.getLocation().getDirection()); cof.normalize(); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunStats.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunStats.java index 1e04ec13a..a7e777c70 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunStats.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunStats.java @@ -1,5 +1,6 @@ package nautilus.game.arcade.game.games.minestrike.items.guns; +import nautilus.game.arcade.game.games.minestrike.MineStrike; import nautilus.game.arcade.game.games.minestrike.items.StrikeItemType; import org.bukkit.Material; @@ -241,7 +242,6 @@ public enum GunStats private double _coneMin; private double _coneMax; - private double _coneReduceRate; private double _coneIncreaseRate; private boolean _scope = false; @@ -375,7 +375,7 @@ public enum GunStats public double getConeIncreaseRate() { - return _coneIncreaseRate; + return _coneIncreaseRate * MineStrike.RECOIL; } public boolean getScope() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunType.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunType.java index 4f35741da..3bdb407ac 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunType.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/minestrike/items/guns/GunType.java @@ -1,5 +1,7 @@ package nautilus.game.arcade.game.games.minestrike.items.guns; +import nautilus.game.arcade.game.games.minestrike.MineStrike; + public enum GunType { PISTOL("Pistol", 0.01, 0.02, 0.02, 3f, 0.1), @@ -38,17 +40,17 @@ public enum GunType public double getMovePenalty() { - return _movePenalty; + return _movePenalty * MineStrike.MOVE_PENALTY; } public double getSprintPenalty() { - return _sprintPentalty; + return _sprintPentalty * MineStrike.MOVE_PENALTY; } public double getJumpPenalty() { - return _jumpPenalty; + return _jumpPenalty * MineStrike.MOVE_PENALTY; } public float getVolume() diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlamingSword.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlamingSword.java index 9f17c5456..246f488ba 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlamingSword.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkFlamingSword.java @@ -111,7 +111,7 @@ public class PerkFlamingSword extends Perk //Fire Item fire = cur.getWorld().dropItem(cur.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.BLAZE_POWDER)); - Manager.GetFire().Add(fire, cur, 0.7, 0, 0.5, 1, "Inferno"); + Manager.GetFire().Add(fire, cur, 0.7, 0, 0.5, 1, "Inferno", false); fire.teleport(cur.getEyeLocation()); double x = 0.07 - (UtilMath.r(14)/100d); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java index 3d04b54bd..ecf9b4bff 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInferno.java @@ -106,7 +106,7 @@ public class PerkInferno extends SmashPerk //Fire Item fire = cur.getWorld().dropItem(cur.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.BLAZE_POWDER)); - Manager.GetFire().Add(fire, cur, 0.7, 0, 0.5, 1.25, "Inferno"); + Manager.GetFire().Add(fire, cur, 0.7, 0, 0.5, 1.25, "Inferno", false); fire.teleport(cur.getEyeLocation()); double x = 0.07 - (UtilMath.r(14)/100d); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernoFinn.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernoFinn.java index 2853fa834..892a64af9 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernoFinn.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/kit/perks/PerkInfernoFinn.java @@ -86,7 +86,7 @@ public class PerkInfernoFinn extends Perk //Fire Item fire = cur.getWorld().dropItem(cur.getEyeLocation(), ItemStackFactory.Instance.CreateStack(Material.BLAZE_POWDER)); - Manager.GetFire().Add(fire, cur, 0.7, 0, 2, 2, "Inferno"); + Manager.GetFire().Add(fire, cur, 0.7, 0, 2, 2, "Inferno", false); fire.teleport(cur.getEyeLocation()); double x = 0.07 - (UtilMath.r(14)/100d); 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 3b363b453..719aef1ae 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 @@ -47,6 +47,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.LeavesDecayEvent; @@ -675,7 +676,7 @@ public class GameFlagManager implements Listener final Player player = event.getEntity(); //Visual - Manager.GetCondition().Factory().Blind("Ghost", player, player, 2, 0, false, false, false); + Manager.GetCondition().Factory().Blind("Ghost", player, player, 2.5, 0, false, false, false); player.setFireTicks(0); player.setFallDistance(0); @@ -709,7 +710,7 @@ public class GameFlagManager implements Listener } else { - Manager.addSpectator(player, true); + Manager.addSpectator(player, game.DeathTeleport); } Manager.getPlugin().getServer().getScheduler().scheduleSyncDelayedTask(Manager.getPlugin(), new Runnable() @@ -730,7 +731,6 @@ public class GameFlagManager implements Listener time = game.GetTeam(player).GetRespawnTime(); UtilInv.Clear(player); - Manager.GetCondition().Factory().Blind("Ghost", player, player, 1.5, 0, false, false, false); Manager.GetCondition().Factory().Cloak("Ghost", player, player, time, false, false); player.setAllowFlight(true); player.setFlying(true); @@ -745,7 +745,7 @@ public class GameFlagManager implements Listener if (!game.IsAlive(player)) { - Manager.addSpectator(player, true); + Manager.addSpectator(player, game.DeathTeleport); return; } @@ -766,7 +766,7 @@ public class GameFlagManager implements Listener } else { - Manager.addSpectator(player, true); + Manager.addSpectator(player, game.DeathTeleport); } player.setFireTicks(0); @@ -1096,6 +1096,18 @@ public class GameFlagManager implements Listener event.setCancelled(true); } + @EventHandler + public void WorldBlockBurn(BlockGrowEvent event) + { + Game game = Manager.GetGame(); + if (game == null) return; + + if (game.WorldBlockGrow) + return; + + event.setCancelled(true); + } + @EventHandler public void WorldFireSpread(BlockIgniteEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/SpecialWinStatTracker.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/SpecialWinStatTracker.java new file mode 100644 index 000000000..407973ab6 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/stats/SpecialWinStatTracker.java @@ -0,0 +1,46 @@ +package nautilus.game.arcade.stats; + +import java.util.List; + +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.games.common.CaptureTheFlag; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +public class SpecialWinStatTracker extends StatTracker +{ + private final String _stat; + + public SpecialWinStatTracker(CaptureTheFlag game, String stat) + { + super(game); + _stat = stat; + } + + @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) + public void onGameStateChange(GameStateChangeEvent event) + { + if (event.GetState() == Game.GameState.End) + { + if (getGame().getScoreDifference() < 5) + return; + + List winners = getGame().getWinners(); + + if (winners != null) + { + for (Player winner : winners) + addStat(winner, _stat, 1, false, false); + } + } + } + + public String getStat() + { + return _stat; + } + +}