-
Notifications
You must be signed in to change notification settings - Fork 25
Special Abilities
__R3 edited this page Feb 16, 2014
·
18 revisions
This page has the snippets for all the special effects currently used on our maps! Feel free to copy them into your own maps!
The grappling hook found in Casa de Perro.
@EventHandler
public void fishing(org.bukkit.event.player.PlayerFishEvent event) {
Material mat = event.getPlayer().getItemInHand().getType();
if (event.getPlayer().getLocation().getWorld().getName().equals(name) && mat == Material.FISHING_ROD
&& event.getState() == org.bukkit.event.player.PlayerFishEvent.State.IN_GROUND)
event.getPlayer().launchProjectile(org.bukkit.entity.Snowball.class);
}
@EventHandler
public void grapple(org.bukkit.event.entity.ProjectileHitEvent event) {
org.bukkit.entity.Entity proj = event.getEntity();
Location hit = proj.getLocation();
if (hit.getWorld().getName().equals(name) && proj instanceof org.bukkit.entity.Snowball) {
org.bukkit.entity.Snowball fish = (org.bukkit.entity.Snowball) proj;
org.bukkit.entity.Entity shooter = fish.getShooter();
if (shooter instanceof org.bukkit.entity.Player) {
org.bukkit.entity.Player p = (org.bukkit.entity.Player) shooter;
Location loc = p.getLocation();
Material mat = p.getItemInHand().getType();
if (mat == Material.FISHING_ROD) {
p.setFallDistance(0);
p.playSound(loc, org.bukkit.Sound.ARROW_HIT, 1, 1);
int hitx = hit.getBlockX();
int hity = hit.getBlockY();
int hitz = hit.getBlockZ();
int locx = loc.getBlockX();
int locy = loc.getBlockY();
int locz = loc.getBlockZ();
double co[] = new double[3];
if (hitx > locx) co[0] = 1.2;
else if (hitx < locx) co[0] = -1.2;
else if (hitx == locx) co[0] = 0;
if (hity > locy) co[1] = 1.4;
else if (hity < locy) co[1] = -0.8;
else if (hity == locy) co[1] = 0;
if (hitz > locz) co[2] = 1.2;
else if (hitz < locz) co[2] = -1.2;
else if (hitz == locz) co[2] = 0;
p.setVelocity(new org.bukkit.util.Vector(co[0], co[1], co[2]));
}
}
}
}The (in?)famous gun found on Wartown.
@EventHandler
public void gun(PlayerInteractEvent event) {
if (!event.getPlayer().getWorld().getName().equals(name)) return;
Player player = event.getPlayer();
Location loc = player.getLocation();
Action action = event.getAction();
ItemStack i = player.getItemInHand();
Inventory inv = player.getInventory();
Material tool = i.getType();
final World world = loc.getWorld();
if (tool.equals(Material.BLAZE_ROD)) {
if (action.equals(Action.RIGHT_CLICK_AIR) || action.equals(Action.RIGHT_CLICK_BLOCK)) {
if (inv.contains(Material.FLINT)) {
player.launchProjectile(Arrow.class);
world.playSound(loc, Sound.COW_WALK, 10, 10);
ItemStack AMMO = new ItemStack(Material.FLINT, 1);
inv.removeItem(AMMO);
ItemMeta ammo = AMMO.getItemMeta();
ammo.setDisplayName(ChatColor.BLUE + "Ammunition");
AMMO.setItemMeta(ammo);
inv.removeItem(AMMO);
// Make it remove normal flints, too.
player.updateInventory();
} else {
world.playSound(loc, Sound.CLICK, 10, 10);
}
}
}
}The enderbow used on Xenon. This can be used to shoot any projectile too!
@EventHandler
public void onFireBow(org.bukkit.event.entity.EntityShootBowEvent event) {
if (getArena().equals(name)) {
if (event.getEntityType() == org.bukkit.entity.EntityType.PLAYER) {
org.bukkit.entity.Player player = (org.bukkit.entity.Player) event.getEntity();
if (player.getInventory().contains(Material.ARROW)) {
event.setCancelled(true);
player.getInventory().removeItem(new ItemStack(Material.ARROW, 1));
player.launchProjectile(org.bukkit.entity.EnderPearl.class).setVelocity(event.getProjectile().getVelocity());
} else {
event.setCancelled(true);
}
}
}
}The Ice Hook found on Arctic
@EventHandler
public void icePick(org.bukkit.event.player.PlayerInteractEvent event) {
org.bukkit.entity.Player p = event.getPlayer();
ItemStack i = p.getItemInHand();
Material mat = i.getType();
org.bukkit.event.block.Action a = event.getAction();
Location loc = p.getLocation();
if (loc.getWorld().getName().equals(name) && mat == Material.STONE_HOE &&
a == org.bukkit.event.block.Action.LEFT_CLICK_BLOCK) {
org.bukkit.block.BlockFace f = event.getBlockFace();
org.bukkit.block.Block b = event.getClickedBlock();
Material Bmat = b.getType();
if (Bmat == Material.STONE || Bmat == Material.ICE && f != org.bukkit.block.BlockFace.UP
&& f != org.bukkit.block.BlockFace.DOWN) {
p.setVelocity(new org.bukkit.util.Vector(0, 1, 0));
p.setFallDistance(0);
w.playEffect(b.getLocation(), org.bukkit.Effect.STEP_SOUND, 79);
}
}
}The Nuke (Egg) found in Spire.
@EventHandler
public void superEgg(org.bukkit.event.player.PlayerEggThrowEvent event) {
org.bukkit.entity.Egg egg = event.getEgg();
World w = egg.getWorld();
Location location = egg.getLocation();
if (location.getWorld().getName().equals(name)) {
event.setHatching(true);
w.createExplosion(location, 25);
int strikes = 0;
while (strikes < 20) {
strikes++;
w.strikeLightning(location);
}
}
}The Turrets found in Spire. (Stand on top of them, your arrows become explosive)
@EventHandler
public void explodingArrow(org.bukkit.event.entity.ProjectileHitEvent event) {
org.bukkit.entity.Entity projectile = event.getEntity();
World w = projectile.getWorld();
Location hit = projectile.getLocation();
if (hit.getWorld().getName().equals(name)) {
if (projectile instanceof org.bukkit.entity.Arrow) {
org.bukkit.entity.Arrow arrow = (org.bukkit.entity.Arrow) projectile;
org.bukkit.entity.Entity shooter = arrow.getShooter();
Location l = shooter.getLocation();
org.bukkit.block.Block bl = l.getBlock();
org.bukkit.block.Block b = bl.getRelative(org.bukkit.block.BlockFace.DOWN, 2);
Material mat = b.getType();
if (shooter instanceof org.bukkit.entity.Player) {
org.bukkit.entity.Player p = (org.bukkit.entity.Player) shooter;
ItemStack is = p.getItemInHand();
Material i = is.getType();
if (i == Material.BOW && mat == Material.SPONGE) {
w.createExplosion(hit, 2);
Bukkit.getWorld(name).playEffect(arrow.getLocation(), org.bukkit.Effect.STEP_SOUND, 10);
}
}
}
}
}