Merge pull request #61 in MIN/mineplex from clans_custom_gear to clans-beta
* commit '9be0ecc598e0d1fd3f47881a19e88a56cf9b833c': Fix bug where Assassins could teleport outside of the Borders (causing their death) with several skills. Fix bug where crafting denials for certain items were not properly communicated to the user. Clean up use-cases for cancelling fishing to prevent players from not being able to use their class abilities. Fix bug where pigs could be struck my lightning using class abilities, spawning in pig zombies that could be farmed for gold. Fix bug where Fissure skill travelled through doorways as well as increase cooldown. Fix bug where Cobwebs could be thrown inside spawn safe zones and increase cooldown. Modify StaticLazer skill's range, damage, cooldown, and damage radius for balance purposes. Remove the ability to craft TNT Minecarts and Jukeboxes. Disable fishing ability in Clans. Add the requirement that players must crouch while clicking on furnaces to be able to smelt. Fix bug where Axes weren't considered a weapon in the context of player murders.
This commit is contained in:
commit
fbb5e26cf4
|
@ -99,13 +99,11 @@ public class UtilBlock
|
|||
blockPassSet.add((byte)55);
|
||||
blockPassSet.add((byte)59);
|
||||
blockPassSet.add((byte)63);
|
||||
blockPassSet.add((byte)64);
|
||||
blockPassSet.add((byte)65);
|
||||
blockPassSet.add((byte)66);
|
||||
blockPassSet.add((byte)68);
|
||||
blockPassSet.add((byte)69);
|
||||
blockPassSet.add((byte)70);
|
||||
blockPassSet.add((byte)71);
|
||||
blockPassSet.add((byte)72);
|
||||
blockPassSet.add((byte)75);
|
||||
blockPassSet.add((byte)76);
|
||||
|
|
|
@ -30,6 +30,21 @@ public class ProjectileManager extends MiniPlugin
|
|||
super("Throw", plugin);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param thrown - the thrown {@link Entity} whose thrower is to be fetched
|
||||
* @return the {@link LivingEntity} that threw the {@code thrown} entity, if one
|
||||
* can be found, null otherwise.
|
||||
*/
|
||||
public LivingEntity getThrower(Entity thrown)
|
||||
{
|
||||
if (_thrown.containsKey(thrown))
|
||||
{
|
||||
return _thrown.get(thrown).GetThrower();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public void AddThrow(Entity thrown, LivingEntity thrower, IThrown callback,
|
||||
long expireTime, boolean hitPlayer, boolean hitBlock, boolean idle, float hitboxGrow)
|
||||
{
|
||||
|
|
|
@ -80,17 +80,6 @@ public class ClansGame extends MiniPlugin
|
|||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void SkillTrigger(SkillTriggerEvent event)
|
||||
{
|
||||
if (!Clans.getClanUtility().isSafe(event.GetPlayer()))
|
||||
return;
|
||||
|
||||
UtilPlayer.message(event.GetPlayer(), F.main("Safe Zone", "You cannot use " + F.skill(event.GetSkillName() + " in " + F.elem("Safe Zone") + ".")));
|
||||
|
||||
event.SetCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void openClanShop(PlayerInteractEvent event)
|
||||
{
|
||||
|
|
|
@ -29,6 +29,7 @@ public class MurderManager extends MiniClientPlugin<WeaklingStatus>
|
|||
{
|
||||
private final Material[] weapons = { Material.WOOD_SWORD, Material.STONE_SWORD, Material.IRON_SWORD, Material.DIAMOND_SWORD,
|
||||
Material.WOOD_AXE, Material.STONE_AXE, Material.IRON_AXE, Material.DIAMOND_AXE, Material.BOW };
|
||||
|
||||
private final Material[] armour = { Material.LEATHER_HELMET, Material.LEATHER_CHESTPLATE, Material.LEATHER_LEGGINGS, Material.LEATHER_BOOTS,
|
||||
Material.IRON_HELMET, Material.IRON_CHESTPLATE, Material.IRON_LEGGINGS, Material.IRON_BOOTS,
|
||||
Material.GOLD_HELMET, Material.GOLD_CHESTPLATE, Material.GOLD_LEGGINGS, Material.GOLD_BOOTS,
|
||||
|
|
|
@ -32,6 +32,7 @@ import mineplex.game.clans.clans.ClanInfo;
|
|||
import mineplex.game.clans.clans.ClansDataAccessLayer;
|
||||
import mineplex.game.clans.clans.ClansManager;
|
||||
import mineplex.game.clans.spawn.Spawn;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.SkillTeleportEvent;
|
||||
|
||||
public class ClansRegions extends MiniPlugin
|
||||
{
|
||||
|
@ -233,12 +234,21 @@ public class ClansRegions extends MiniPlugin
|
|||
{
|
||||
if (event.getFrom().getBlockX() != event.getTo().getBlockX() || event.getFrom().getBlockZ() != event.getTo().getBlockZ())
|
||||
{
|
||||
if (event.getTo().getBlockX() >= BORDER_RADIUS || event.getTo().getBlockZ() >= BORDER_RADIUS)
|
||||
if (!isInsideBorders(event.getTo()))
|
||||
{
|
||||
UtilAction.velocity(event.getPlayer(), UtilAlg.getTrajectory(event.getTo(), new Location(_world, 0, 100, 0)), 1.5, true, 0.8, 0, 1.0, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onSkillTeleport(SkillTeleportEvent event)
|
||||
{
|
||||
if (!isInsideBorders(event.getDestination()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onTeleport(PlayerTeleportEvent event)
|
||||
|
@ -248,4 +258,9 @@ public class ClansRegions extends MiniPlugin
|
|||
if (!from.getWorld().equals(to.getWorld()) && to.getWorld().equals(_world))
|
||||
sendBorder(event.getPlayer());
|
||||
}
|
||||
|
||||
private boolean isInsideBorders(Location location)
|
||||
{
|
||||
return location.getBlockX() < BORDER_RADIUS && location.getBlockZ() < BORDER_RADIUS;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package mineplex.game.clans.gameplay;
|
||||
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.inventory.Recipe;
|
||||
|
||||
public class CustomCreatures implements Listener
|
||||
{
|
||||
|
||||
private static final EntityType[] DISABLED_CREATURES = { EntityType.WITCH, EntityType.PIG_ZOMBIE,
|
||||
EntityType.HORSE, EntityType.ENDERMAN };
|
||||
|
||||
@EventHandler
|
||||
public void onCreatureSpawn(CreatureSpawnEvent event)
|
||||
{
|
||||
if (isDisabledCreature(event.getEntityType()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isDisabledCreature(EntityType entityType)
|
||||
{
|
||||
for (EntityType disabledCreature : DISABLED_CREATURES)
|
||||
{
|
||||
if (disabledCreature == entityType)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package mineplex.game.clans.gameplay;
|
||||
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.CraftItemEvent;
|
||||
import org.bukkit.inventory.Recipe;
|
||||
|
||||
public class CustomRecipes implements Listener
|
||||
{
|
||||
|
||||
private static final Material[] DISABLED_RECIPES = { Material.EXPLOSIVE_MINECART, Material.JUKEBOX };
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerCraftItem(CraftItemEvent event)
|
||||
{
|
||||
if (isDisabledRecipe(event.getRecipe()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
notify(event.getWhoClicked(), "Crafting this item is disabled!");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isDisabledRecipe(Recipe recipe)
|
||||
{
|
||||
Material itemType = recipe.getResult().getType();
|
||||
|
||||
for (Material disabledRecipe : DISABLED_RECIPES)
|
||||
{
|
||||
if (disabledRecipe == itemType)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void notify(HumanEntity player, String message)
|
||||
{
|
||||
UtilPlayer.message(player, F.main("Recipes", message));
|
||||
}
|
||||
}
|
|
@ -6,9 +6,10 @@ import java.util.HashSet;
|
|||
import mineplex.core.MiniPlugin;
|
||||
import mineplex.minecraft.game.classcombat.Class.ClientClass;
|
||||
import mineplex.minecraft.game.classcombat.Class.IPvpClass.ClassType;
|
||||
import mineplex.minecraft.game.classcombat.event.BlockTossEvent;
|
||||
import mineplex.minecraft.game.classcombat.event.BlockTossExpireEvent;
|
||||
import mineplex.minecraft.game.classcombat.event.BlockTossLandEvent;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.BlockTossEvent;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.BlockTossExpireEvent;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.BlockTossLandEvent;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.SkillTeleportEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
import mineplex.minecraft.game.core.damage.DamageManager;
|
||||
import mineplex.core.itemstack.ItemStackFactory;
|
||||
|
@ -28,6 +29,7 @@ import mineplex.game.clans.clans.ClansManager;
|
|||
import mineplex.game.clans.items.generation.Weight;
|
||||
import mineplex.game.clans.items.generation.WeightSet;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
|
@ -48,12 +50,16 @@ import org.bukkit.event.block.BlockDispenseEvent;
|
|||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||
import org.bukkit.event.player.PlayerFishEvent;
|
||||
import org.bukkit.event.player.PlayerFishEvent.State;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
@ -76,8 +82,23 @@ public class Gameplay extends MiniPlugin
|
|||
_blockRestore = blockRestore;
|
||||
_damageManager = damageManager;
|
||||
_foodDecrease = new WeightSet<Boolean>(new Weight<Boolean>(10, true), new Weight<Boolean>(90, false));
|
||||
|
||||
// Register the custom recipes and mobs
|
||||
Bukkit.getPluginManager().registerEvents(new CustomRecipes(), plugin);
|
||||
Bukkit.getPluginManager().registerEvents(new CustomCreatures(), plugin);
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerFishing(PlayerFishEvent event)
|
||||
{
|
||||
State state = event.getState();
|
||||
if (state == State.CAUGHT_ENTITY || state == State.CAUGHT_FISH)
|
||||
{
|
||||
event.setCancelled(true);
|
||||
notify(event.getPlayer(), "Fishing is disabled!");
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockToss(BlockTossEvent event)
|
||||
{
|
||||
|
|
|
@ -21,7 +21,7 @@ public class SmeltingListener implements Listener
|
|||
@EventHandler
|
||||
public void onPlayerInteract(PlayerInteractEvent event)
|
||||
{
|
||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK)
|
||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK && event.getPlayer().isSneaking())
|
||||
{
|
||||
Block clicked = event.getClickedBlock();
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import org.bukkit.GameMode;
|
|||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
|
@ -16,6 +17,7 @@ import org.bukkit.entity.Player;
|
|||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockBurnEvent;
|
||||
import org.bukkit.event.block.BlockFromToEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent;
|
||||
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
|
@ -41,6 +43,8 @@ import mineplex.core.updater.event.UpdateEvent;
|
|||
import mineplex.game.clans.clans.ClansManager;
|
||||
import mineplex.game.clans.items.generation.WeightSet;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
|
||||
import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent;
|
||||
import mineplex.minecraft.game.classcombat.item.event.WebTossEvent;
|
||||
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
|
@ -81,6 +85,48 @@ public class Spawn extends MiniPlugin
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent liquids from flowing into Safe Zone areas.
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onWaterFlow(BlockFromToEvent event)
|
||||
{
|
||||
Block block = event.getToBlock();
|
||||
|
||||
if (block.isLiquid() && isInSpawn(block.getLocation()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent players from tossing Webs into spawn or from spawn.
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onWebToss(WebTossEvent event)
|
||||
{
|
||||
if (isInSpawn(event.getLocation()))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
else if (event.getThrower() instanceof Player)
|
||||
{
|
||||
Player thrower = (Player) event.getThrower();
|
||||
|
||||
if (isInSpawn(thrower))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
attemptNotify(thrower, "You cannot throw webs while in a safe zone!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent Spawn blocks from burning
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onBlockBurn(BlockBurnEvent event)
|
||||
{
|
||||
|
@ -141,6 +187,10 @@ public class Spawn extends MiniPlugin
|
|||
UtilParticle.PlayParticle(UtilParticle.ParticleType.CRIT, player.getEyeLocation().add(0, 0.75d, 0), 0, 0, 0, 0.2f, 35, UtilParticle.ViewDist.NORMAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent players from targetting spawn protected players using skills
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onSkillTriggered(SkillTriggerEvent event)
|
||||
{
|
||||
|
@ -152,15 +202,39 @@ public class Spawn extends MiniPlugin
|
|||
{
|
||||
event.SetCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent players from activating skills while in Spawn
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onSkillTriggeredInSpawn(SkillTriggerEvent event)
|
||||
{
|
||||
Player player = event.GetPlayer();
|
||||
|
||||
if (isInSpawn(player))
|
||||
{
|
||||
UtilPlayer.message(event.GetPlayer(), F.main("Safe Zone", "You cannot use " + F.skill(event.GetSkillName() + " in " + F.elem("Safe Zone") + ".")));
|
||||
event.SetCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure players respawn in Spawn locations.
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onRespawn(PlayerRespawnEvent event)
|
||||
{
|
||||
event.setRespawnLocation(getSpawnLocation());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure player spawns into a Spawn location if it's their first time on the server.
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onPlayerFirstJoin(PlayerJoinEvent event)
|
||||
{
|
||||
|
@ -170,6 +244,10 @@ public class Spawn extends MiniPlugin
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent creatures from spawning inside Spawn
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onEntitySpawn(CreatureSpawnEvent event)
|
||||
{
|
||||
|
@ -221,6 +299,10 @@ public class Spawn extends MiniPlugin
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent creatures from targetting players who are in Spawn
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onEntityTarget(EntityTargetEvent event)
|
||||
{
|
||||
|
@ -230,6 +312,10 @@ public class Spawn extends MiniPlugin
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent players from breaking blocks in spawn
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent event)
|
||||
{
|
||||
|
@ -241,19 +327,27 @@ public class Spawn extends MiniPlugin
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent players from atacking others while in spawn
|
||||
* @param event
|
||||
*/
|
||||
@EventHandler
|
||||
public void onPlayerAttacked(CustomDamageEvent event)
|
||||
public void onPlayerAttack(CustomDamageEvent event)
|
||||
{
|
||||
Player defender = event.GetDamageePlayer();
|
||||
Player attacker = event.GetDamagerPlayer(true); // Get (potentially ranged) attacker
|
||||
|
||||
if (defender != null)
|
||||
if (defender != null && !isCombatTagged(defender))
|
||||
{
|
||||
Player player = (Player) defender;
|
||||
|
||||
if (isInSpawn(player) && !isCombatTagged(player))
|
||||
if (isInSpawn(defender))
|
||||
{
|
||||
event.SetCancelled("Safe Zone");
|
||||
attemptNotify(event.GetDamagerPlayer(true), "You cannot attack players who are in spawn!");
|
||||
attemptNotify(attacker, "You cannot attack players who are in spawn!");
|
||||
}
|
||||
else if (isInSpawn(attacker))
|
||||
{
|
||||
event.SetCancelled("Safe Zone");
|
||||
attemptNotify(attacker, "You cannot attack untagged players while in spawn!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -318,7 +412,7 @@ public class Spawn extends MiniPlugin
|
|||
return new Location(getSpawnWorld(), 8, 111, 200);
|
||||
}
|
||||
|
||||
private boolean isCombatTagged(Player player)
|
||||
public boolean isCombatTagged(Player player)
|
||||
{
|
||||
return _clansManager.getCondition().HasCondition(player, ConditionType.CUSTOM, COMBAT_TAG_NAME);
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import mineplex.core.common.util.UtilPlayer;
|
|||
import mineplex.core.shop.ShopBase;
|
||||
import mineplex.core.shop.page.ShopPageBase;
|
||||
import mineplex.game.clans.clans.ClansManager;
|
||||
import mineplex.game.clans.spawn.Spawn;
|
||||
|
||||
public class TravelShop extends ShopBase<ClansManager>
|
||||
{
|
||||
|
@ -24,4 +25,21 @@ public class TravelShop extends ShopBase<ClansManager>
|
|||
{
|
||||
return new TravelPage(getPlugin(), this, getClientManager(), getDonationManager(), player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean attemptShopOpen(Player player)
|
||||
{
|
||||
if (Spawn.getInstance().isCombatTagged(player))
|
||||
{
|
||||
notify(player, "You cannot use the Travel Hub while combat tagged!");
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.attemptShopOpen(player);
|
||||
}
|
||||
|
||||
private static void notify(Player player, String message)
|
||||
{
|
||||
UtilPlayer.message(player, F.main("Travel Hub", message));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin;
|
|||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
@ -26,6 +27,7 @@ import mineplex.core.common.util.UtilParticle.ParticleType;
|
|||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillActive;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.SkillTeleportEvent;
|
||||
|
||||
public class Blink extends SkillActive
|
||||
{
|
||||
|
@ -65,12 +67,18 @@ public class Blink extends SkillActive
|
|||
UtilPlayer.message(player, F.main(GetClassType().name(), "You cannot use " + F.skill(GetName()) + " while Slowed."));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9)
|
||||
else if (player.getLocation().getBlock().getTypeId() == 8 || player.getLocation().getBlock().getTypeId() == 9)
|
||||
{
|
||||
UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water."));
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check to see if teleporting event is valid
|
||||
Location destination = getDestination(player, getMaxRange(player));
|
||||
SkillTeleportEvent teleportEvent = new SkillTeleportEvent(player, destination);
|
||||
Bukkit.getPluginManager().callEvent(teleportEvent);
|
||||
|
||||
if (teleportEvent.isCancelled()) return false; // Teleport cancelled
|
||||
|
||||
//Deblink
|
||||
if (_loc.containsKey(player) && _blinkTime.containsKey(player))
|
||||
|
@ -92,7 +100,7 @@ public class Blink extends SkillActive
|
|||
//Smoke Trail
|
||||
Block lastSmoke = player.getLocation().getBlock();
|
||||
|
||||
double maxRange = 9 + (level*3);
|
||||
double maxRange = getMaxRange(player);
|
||||
double curRange = 0;
|
||||
while (curRange <= maxRange)
|
||||
{
|
||||
|
@ -138,7 +146,7 @@ public class Blink extends SkillActive
|
|||
curRange = 0;
|
||||
|
||||
//Destination
|
||||
Location loc = player.getLocation().add(player.getLocation().getDirection().multiply(curRange).add(new Vector(0, 0.4, 0)));
|
||||
Location loc = getDestination(player, curRange);
|
||||
_loc.put(player, player.getLocation());
|
||||
|
||||
//Action
|
||||
|
@ -212,4 +220,14 @@ public class Blink extends SkillActive
|
|||
_loc.remove(player);
|
||||
_blinkTime.remove(player);
|
||||
}
|
||||
|
||||
private double getMaxRange(Player player)
|
||||
{
|
||||
return 9 + (getLevel(player) * 3);
|
||||
}
|
||||
|
||||
private Location getDestination(Player player, double range)
|
||||
{
|
||||
return player.getLocation().add(player.getLocation().getDirection().multiply(range).add(new Vector(0, 0.4, 0)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package mineplex.minecraft.game.classcombat.Skill.Assassin;
|
|||
|
||||
import java.util.HashMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
@ -25,6 +26,7 @@ import mineplex.core.common.util.UtilParticle.ParticleType;
|
|||
import mineplex.core.common.util.UtilParticle.ViewDist;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillActive;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.SkillTeleportEvent;
|
||||
|
||||
public class Flash extends SkillActive
|
||||
{
|
||||
|
@ -72,6 +74,13 @@ public class Flash extends SkillActive
|
|||
UtilPlayer.message(player, F.main("Skill", "You cannot use " + F.skill(GetName()) + " in water."));
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check to see if teleporting event is valid
|
||||
Location destination = getDestination(player, getMaxRange(player));
|
||||
SkillTeleportEvent teleportEvent = new SkillTeleportEvent(player, destination);
|
||||
Bukkit.getPluginManager().callEvent(teleportEvent);
|
||||
|
||||
if (teleportEvent.isCancelled()) return false; // Teleport cancelled
|
||||
|
||||
//No Flash
|
||||
if (!_flash.containsKey(player) || _flash.get(player) == 0)
|
||||
|
@ -120,7 +129,7 @@ public class Flash extends SkillActive
|
|||
|
||||
_flash.put(player, _flash.get(player) - 1);
|
||||
|
||||
double maxRange = 6;
|
||||
double maxRange = getMaxRange(player);
|
||||
double curRange = 0;
|
||||
while (curRange <= maxRange)
|
||||
{
|
||||
|
@ -144,7 +153,7 @@ public class Flash extends SkillActive
|
|||
curRange = 0;
|
||||
|
||||
//Destination
|
||||
Location loc = player.getLocation().add(player.getLocation().getDirection().multiply(curRange).add(new Vector(0, 0.4, 0)));
|
||||
Location loc = getDestination(player, curRange);
|
||||
|
||||
if (curRange > 0)
|
||||
player.teleport(loc);
|
||||
|
@ -165,4 +174,14 @@ public class Flash extends SkillActive
|
|||
{
|
||||
_flash.remove(player);
|
||||
}
|
||||
|
||||
private double getMaxRange(Player player)
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
|
||||
private Location getDestination(Player player, double range)
|
||||
{
|
||||
return player.getLocation().add(player.getLocation().getDirection().multiply(range).add(new Vector(0, 0.4, 0)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,10 +37,10 @@ import mineplex.core.common.util.UtilMath;
|
|||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillCharge;
|
||||
import mineplex.minecraft.game.classcombat.Skill.SkillFactory;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.BlockTossExpireEvent;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.BlockTossLandEvent;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.SkillEvent;
|
||||
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
|
||||
import mineplex.minecraft.game.classcombat.event.BlockTossExpireEvent;
|
||||
import mineplex.minecraft.game.classcombat.event.BlockTossLandEvent;
|
||||
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
|
||||
|
||||
public class BlockToss extends SkillCharge implements IThrown
|
||||
|
@ -59,7 +59,9 @@ public class BlockToss extends SkillCharge implements IThrown
|
|||
Material.CHEST,
|
||||
Material.FURNACE,
|
||||
Material.BURNING_FURNACE,
|
||||
Material.WORKBENCH
|
||||
Material.WORKBENCH,
|
||||
Material.WATER,
|
||||
Material.LAVA
|
||||
};
|
||||
|
||||
public BlockToss(SkillFactory skills, String name, ClassType classType, SkillType skillType, int cost, int levels)
|
||||
|
|
|
@ -129,7 +129,7 @@ public class FissureData
|
|||
//Boost Column
|
||||
if (block.getTypeId() == 1) Host.Factory.BlockRestore().add(block, 4, block.getData(), 14000);
|
||||
if (block.getTypeId() == 2) Host.Factory.BlockRestore().add(block, 3, block.getData(), 14000);
|
||||
if (block.getTypeId() == 98) Host.Factory.BlockRestore().add(block, 98, (byte) 2, 14000);
|
||||
if (block.getTypeId() == 98) Host.Factory.BlockRestore().add(block, 98, (byte) 0, 14000);
|
||||
|
||||
Host.Factory.BlockRestore().add(up, block.getTypeId(), block.getData(), 10000 - (1000 * _height));
|
||||
_height++;
|
||||
|
|
|
@ -36,7 +36,7 @@ public class StaticLazer extends SkillChargeSword
|
|||
{
|
||||
super(skills, name, classType, skillType, cost, maxLevel,
|
||||
0.012f, 0.004f,
|
||||
12000, -1000, true, true,
|
||||
15000, -1000, true, true,
|
||||
false, true);
|
||||
|
||||
SetDesc(new String[]
|
||||
|
@ -77,12 +77,13 @@ public class StaticLazer extends SkillChargeSword
|
|||
|
||||
//Action
|
||||
double curRange = 0;
|
||||
while (curRange <= 20 + 10 * level)
|
||||
double maxRange = 10 + 5 * level;
|
||||
while (curRange <= maxRange)
|
||||
{
|
||||
Location newTarget = player.getEyeLocation().add(player.getLocation().getDirection().multiply(curRange));
|
||||
|
||||
//Hit Player
|
||||
HashMap<LivingEntity, Double> hits = UtilEnt.getInRadius(newTarget, 2);
|
||||
HashMap<LivingEntity, Double> hits = UtilEnt.getInRadius(newTarget, 1);
|
||||
hits.remove(player);
|
||||
if (!hits.isEmpty())
|
||||
break;
|
||||
|
@ -114,9 +115,10 @@ public class StaticLazer extends SkillChargeSword
|
|||
if (other.equals(player))
|
||||
continue;
|
||||
|
||||
double damage = 7 + 1*level;
|
||||
//Damage Event
|
||||
Factory.Damage().NewDamageEvent(other, player, null,
|
||||
DamageCause.CUSTOM, 6 + level * charge, true, true, false,
|
||||
DamageCause.CUSTOM, damage * charge, true, true, false,
|
||||
player.getName(), GetName());
|
||||
|
||||
}
|
||||
|
|
|
@ -409,7 +409,7 @@ public class SkillFactory extends MiniPlugin implements ISkillFactory
|
|||
AddSkill(new Fissure(this, "Fissure", ClassType.Mage, SkillType.Axe,
|
||||
1, 5,
|
||||
60, -3,
|
||||
11000, -1000, true,
|
||||
14000, -1000, true,
|
||||
new Material[] {Material.IRON_AXE, Material.GOLD_AXE, Material.DIAMOND_AXE},
|
||||
new Action[] {Action.RIGHT_CLICK_AIR, Action.RIGHT_CLICK_BLOCK}));
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package mineplex.minecraft.game.classcombat.event;
|
||||
package mineplex.minecraft.game.classcombat.Skill.event;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
|
@ -1,4 +1,4 @@
|
|||
package mineplex.minecraft.game.classcombat.event;
|
||||
package mineplex.minecraft.game.classcombat.Skill.event;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
|
@ -1,4 +1,4 @@
|
|||
package mineplex.minecraft.game.classcombat.event;
|
||||
package mineplex.minecraft.game.classcombat.Skill.event;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
|
@ -0,0 +1,31 @@
|
|||
package mineplex.minecraft.game.classcombat.Skill.event;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class SkillTeleportEvent extends Event implements Cancellable
|
||||
{
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
public static HandlerList getHandlerList() { return handlers; }
|
||||
public HandlerList getHandlers() { return handlers; }
|
||||
|
||||
private boolean _cancelled;
|
||||
public boolean isCancelled() { return _cancelled; }
|
||||
public void setCancelled(boolean cancelled) { _cancelled = cancelled; }
|
||||
|
||||
private Player _player;
|
||||
public Player getPlayer() { return _player; }
|
||||
|
||||
private Location _destination;
|
||||
public Location getDestination() { return _destination; }
|
||||
|
||||
public SkillTeleportEvent(Player player, Location destination)
|
||||
{
|
||||
_player = player;
|
||||
_destination = destination;
|
||||
}
|
||||
}
|
|
@ -125,7 +125,7 @@ public class ItemFactory extends MiniPlugin implements IItemFactory
|
|||
|
||||
AddItem(new Web(this, Material.WEB, 3, false, 500, 1,
|
||||
null, true, 0, 0,
|
||||
ActionType.L, true, 250, 0, 1f,
|
||||
ActionType.L, true, 1500, 0, 1f,
|
||||
-1, true, true, true, false));
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
package mineplex.minecraft.game.classcombat.item.Throwable;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
|
@ -14,6 +17,7 @@ import mineplex.core.common.util.UtilEvent.ActionType;
|
|||
import mineplex.core.projectile.ProjectileUser;
|
||||
import mineplex.minecraft.game.classcombat.item.ItemFactory;
|
||||
import mineplex.minecraft.game.classcombat.item.ItemUsable;
|
||||
import mineplex.minecraft.game.classcombat.item.event.WebTossEvent;
|
||||
|
||||
public class Web extends ItemUsable
|
||||
{
|
||||
|
@ -68,14 +72,23 @@ public class Web extends ItemUsable
|
|||
|
||||
public void CreateWeb(Entity ent)
|
||||
{
|
||||
LivingEntity thrower = Factory.Throw().getThrower(ent);
|
||||
|
||||
//Effect
|
||||
ent.getWorld().playEffect(ent.getLocation(), Effect.STEP_SOUND, 30);
|
||||
|
||||
if (!UtilBlock.airFoliage(ent.getLocation().getBlock()))
|
||||
return;
|
||||
|
||||
Factory.BlockRestore().add(ent.getLocation().getBlock(), 30, (byte) 0, 6000);
|
||||
|
||||
ent.remove();
|
||||
|
||||
if (canWeb(thrower, ent.getLocation()))
|
||||
{
|
||||
Factory.BlockRestore().add(ent.getLocation().getBlock(), 30, (byte) 0, 6000);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean canWeb(LivingEntity thrower, Location location)
|
||||
{
|
||||
WebTossEvent webEvent = new WebTossEvent(thrower, location);
|
||||
Bukkit.getPluginManager().callEvent(webEvent);
|
||||
|
||||
return !webEvent.isCancelled() && UtilBlock.airFoliage(location.getBlock());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package mineplex.minecraft.game.classcombat.item.event;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class WebTossEvent extends Event implements Cancellable
|
||||
{
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
public static HandlerList getHandlerList() { return handlers; }
|
||||
public HandlerList getHandlers() { return handlers; }
|
||||
|
||||
private boolean _cancelled;
|
||||
public boolean isCancelled() { return _cancelled; }
|
||||
public void setCancelled(boolean cancelled) { _cancelled = cancelled; }
|
||||
|
||||
private Location _location;
|
||||
public Location getLocation() { return _location; }
|
||||
|
||||
private LivingEntity _thrower;
|
||||
public LivingEntity getThrower() { return _thrower; }
|
||||
|
||||
public WebTossEvent(LivingEntity thrower, Location location)
|
||||
{
|
||||
_location = location;
|
||||
_thrower = thrower;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue