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:
Ty Sayers 2015-09-11 17:02:53 -05:00
commit fbb5e26cf4
24 changed files with 411 additions and 52 deletions

View File

@ -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);

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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,

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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)
{

View File

@ -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();

View File

@ -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);
}

View File

@ -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));
}
}

View File

@ -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)));
}
}

View File

@ -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)));
}
}

View File

@ -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)

View File

@ -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++;

View File

@ -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());
}

View File

@ -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}));

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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));
/*

View File

@ -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());
}
}

View File

@ -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;
}
}