Skip to content

Instantly share code, notes, and snippets.

@97WaterPolo
Created March 9, 2014 03:34
Show Gist options
  • Save 97WaterPolo/9442546 to your computer and use it in GitHub Desktop.
Save 97WaterPolo/9442546 to your computer and use it in GitHub Desktop.
Mage
package com.AnniStuff.sigler;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.inventory.InventoryPickupItemEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
@SuppressWarnings("unused")
public class Mage implements Listener, CommandExecutor
{
public Main plugin;
public Mage(Main plugin) {
this.plugin = plugin;
}
public static Inventory spellbook = Bukkit.createInventory(null, 18, "" + ChatColor.RED + ChatColor.BOLD +"Magician's Book");
static
{
ItemStack fireball = SiglerAPI.createItem(Material.FIREBALL, "" + ChatColor.RED + ChatColor.BOLD + "Fire Ball", ChatColor.DARK_PURPLE + "Click to select the Fire Ball wand!", "");
ItemStack icespike = SiglerAPI.createItem(Material.ICE, "" + ChatColor.AQUA + ChatColor.BOLD + "Ice Spike", ChatColor.DARK_PURPLE + "Click to select the Ice spike Wand!", "");
ItemStack tornado = SiglerAPI.createItem(Material.WEB, "" + ChatColor.RED + ChatColor.BOLD + "Tornado", ChatColor.DARK_PURPLE + "Click to select the Tornado wand!", "");
ItemStack earthquake = SiglerAPI.createItem(Material.DIRT, "" + ChatColor.RED + ChatColor.BOLD + "EarthQuake", ChatColor.DARK_PURPLE + "Click to select the EarthQuake wand!", "");
spellbook.setItem(0, fireball);
spellbook.setItem(1, icespike);
spellbook.setItem(2, tornado);
spellbook.setItem(3, earthquake);
}
ItemStack fire = SiglerAPI.createItem(Material.STICK, "" + ChatColor.RED + ChatColor.BOLD + "Fire Wand", ChatColor.DARK_PURPLE + "Right click to send a fireball at an enemy!", "" + ChatColor.WHITE + ChatColor.ITALIC + "180 second cooldown!");
ItemStack ice = SiglerAPI.createItem(Material.STICK, "" + ChatColor.AQUA + ChatColor.BOLD + "Ice Wand", ChatColor.DARK_PURPLE + "Right click to send a ice spike at an enemy!", "" + ChatColor.WHITE + ChatColor.ITALIC + "180 second cooldown!");
ItemStack air = SiglerAPI.createItem(Material.STICK, "" + ChatColor.DARK_GRAY + ChatColor.BOLD + "Tornado Wand", ChatColor.DARK_PURPLE + "Right click to unleash the whirlwind!", "" + ChatColor.WHITE + ChatColor.ITALIC + "300 second cooldown!");
ItemStack earth = SiglerAPI.createItem(Material.STICK, "" + ChatColor.GREEN + ChatColor.BOLD + "EarthQuake Wand", ChatColor.DARK_PURPLE + "Right click to unleash the Earth's rage!", "" + ChatColor.WHITE + ChatColor.ITALIC + "300 second cooldown!");
ItemStack spellbookitem = SiglerAPI.createItem(Material.BOOK, "" + ChatColor.DARK_GREEN + ChatColor.BOLD + "Spell Book", ChatColor.DARK_PURPLE + "Right click to open the Spell Book!", "");
@SuppressWarnings({ "deprecation", "static-access" })
@EventHandler
public void useWand(PlayerInteractEvent event)
{
Player player = event.getPlayer();
if (player.getItemInHand().equals(spellbookitem) && event.getAction().equals(Action.RIGHT_CLICK_AIR))
{
player.openInventory(spellbook);
}
if (player.getItemInHand().equals(fire) && event.getAction().equals(Action.RIGHT_CLICK_AIR))
{
Fireball fireball = player.launchProjectile(Fireball.class);
fireball.setMetadata("FireBall", new FixedMetadataValue(plugin, player.getName()));
fireball.setTicksLived(100);
fireball.setIsIncendiary(false);
}
else if (player.getItemInHand().equals(ice) && event.getAction().equals(Action.RIGHT_CLICK_AIR))
{
Snowball snowball = player.launchProjectile(Snowball.class);
snowball.setMetadata("SnowBall", new FixedMetadataValue(plugin,player.getName()));
}
else if (player.getItemInHand().equals(air) && event.getAction().equals(Action.RIGHT_CLICK_AIR))
{
Block block = player.getTargetBlock(null, 25);
if (block.getType() == Material.DIRT || block.getType() == Material.GRASS)
{
Location loc = block.getLocation().add(0, 1.5, 0);
player.sendMessage(ChatColor.DARK_PURPLE + "Tornado has suddenly occured!");
TornadoResource.spawnTornado(plugin, loc, Material.WEB, (byte) 0, new Vector(1, 0, 1), 0.005, 25, (long) 7*20, false, false, player);
}else
{
player.sendMessage(ChatColor.LIGHT_PURPLE + "This tornado is out of my abilities...");
}
}
else if (player.getItemInHand().equals(earth) && event.getAction().equals(Action.RIGHT_CLICK_AIR))
{
String string = SiglerAPI.getPlayerDirection(player);
Location loc = player.getTargetBlock(null, 25).getLocation();
if (loc.getBlock().getType().equals(Material.GRASS) || loc.getBlock().getType().equals(Material.DIRT) || loc.getBlock().getType().equals(Material.SAND))
{
player.sendMessage(ChatColor.DARK_PURPLE + "The ground trembles with power!");
loc.setY(player.getLocation().getY() - 1.0D);
List<Location> list = SiglerAPI.getCone(loc, string);
player.getWorld().playEffect(player.getLocation(), Effect.ZOMBIE_DESTROY_DOOR, 1);
for (final Location l : list) {
if ((!l.getBlock().getType().equals(Material.AIR)) && (!l.getBlock().getType().equals(Material.BEDROCK)) && (!l.getBlock().getType().equals(Material.WATER)) && (!l.getBlock().getType().equals(Material.LAVA)) && (!l.getBlock().getType().equals(Material.CACTUS)) && (!l.getBlock().getType().equals(Material.CAKE_BLOCK)) && (!l.getBlock().getType().equals(Material.CROPS)) && (!l.getBlock().getType().equals(Material.TORCH)) && (!l.getBlock().getType().equals(Material.ENDER_PORTAL)) && (!l.getBlock().getType().equals(Material.MOB_SPAWNER)) && (!l.getBlock().getType().equals(Material.NETHER_WARTS)) && (!l.getBlock().getType().equals(Material.MELON_STEM)) && (!l.getBlock().getType().equals(Material.STATIONARY_LAVA)) && (!l.getBlock().getType().equals(Material.STATIONARY_WATER)))
{
for (Entity nearby : SiglerAPI.getNearbyEntities(l, 5))
{
if (nearby instanceof Player)
{
Player allie = (Player) nearby;
if (plugin.red.hasPlayer(player) && !plugin.red.hasPlayer(allie))
{
nearby.setVelocity(new Vector(0, 1.2, 0));
}
else if (plugin.blue.hasPlayer(player) && !plugin.blue.hasPlayer(allie))
{
nearby.setVelocity(new Vector(0, 1.2, 0));
}
else if (plugin.yellow.hasPlayer(player) && !plugin.yellow.hasPlayer(allie))
{
nearby.setVelocity(new Vector(0, 1.2, 0));
}
else if (plugin.green.hasPlayer(player) && !plugin.green.hasPlayer(allie))
{
nearby.setVelocity(new Vector(0, 1.2, 0));
}
}
}
final Material mat = l.getBlock().getType();
final FallingBlock b = l.getWorld().spawnFallingBlock(l, l.getBlock().getTypeId(), l.getBlock().getData());
b.setVelocity(new Vector(0.0D, 0.75D, 0.0D));
l.getBlock().setType(Material.AIR);
new BukkitRunnable() {
public void run() {
if (!b.isDead()) {
b.remove();
}
l.getBlock().setType(mat);
}
}
.runTaskLater(plugin, 40L);
}
}
player.sendMessage("Earth Test");
}else
{
player.sendMessage(ChatColor.LIGHT_PURPLE + "That EarthQuake is just outside of my abilities...");
}
}else
{
return;
}
}
@SuppressWarnings("static-access")
@EventHandler
public void damageHandler(EntityDamageByEntityEvent event)
{
if (event.getEntity() instanceof Player)
{
Player target = (Player) event.getEntity();
if (event.getDamager() instanceof Snowball && event.getDamager().hasMetadata("SnowBall"))
{
Snowball snowball = (Snowball) event.getDamager();
LivingEntity shooterog = snowball.getShooter();
Player shooter = (Player) shooterog;
if (plugin.red.hasPlayer(shooter) && plugin.red.hasPlayer(target))
{
event.setCancelled(true);
}
else if (plugin.blue.hasPlayer(shooter) && plugin.blue.hasPlayer(target))
{
event.setCancelled(true);
}
else if (plugin.yellow.hasPlayer(shooter) && plugin.yellow.hasPlayer(target))
{
event.setCancelled(true);
}
else if (plugin.green.hasPlayer(shooter) && plugin.green.hasPlayer(target))
{
event.setCancelled(true);
}else
{
shooter.sendMessage(ChatColor.AQUA + "You succesfully hit " + target.getName() + " with your Ice Spike!");
target.sendMessage(ChatColor.AQUA + "" + shooter.getName() + " hit you with an Ice Spike!");
event.setDamage(6);
target.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 120, 1));
target.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 120, 128));
target.playSound(target.getLocation(), Sound.GLASS, 1.0F, 1.0F);
}
}
else if (event.getDamager() instanceof Fireball && event.getDamager().hasMetadata("FireBall"))
{
Fireball fireball = (Fireball) event.getDamager();
LivingEntity shooterog = fireball.getShooter();
Player shooter = (Player) shooterog;
if (plugin.red.hasPlayer(shooter) && plugin.red.hasPlayer(target))
{
event.setCancelled(true);
}
else if (plugin.blue.hasPlayer(shooter) && plugin.blue.hasPlayer(target))
{
event.setCancelled(true);
}
else if (plugin.yellow.hasPlayer(shooter) && plugin.yellow.hasPlayer(target))
{
event.setCancelled(true);
}
else if (plugin.green.hasPlayer(shooter) && plugin.green.hasPlayer(target))
{
event.setCancelled(true);
}else
{
shooter.sendMessage(ChatColor.RED + "You succesfully hit " + target.getName() + " with your Fire Ball!");
target.sendMessage(ChatColor.RED + "" + shooter.getName() + " hit you with an Fire Ball!");
event.setDamage(4);
target.setFireTicks(80);
target.playSound(target.getLocation(), Sound.FIRE, 1.0F, 1.0F);
}
}
}
if (event.getEntity() instanceof Player && event.getDamager() instanceof Player)
{
Player player = (Player) event.getDamager();
Player allie = (Player) event.getEntity();
if (plugin.red.hasPlayer(player) && plugin.red.hasPlayer(allie))
{
event.setCancelled(true);
}
else if (plugin.blue.hasPlayer(player) && plugin.blue.hasPlayer(allie))
{
event.setCancelled(true);
}
else if (plugin.yellow.hasPlayer(player) && plugin.yellow.hasPlayer(allie))
{
event.setCancelled(true);
}
else if (plugin.green.hasPlayer(player) && plugin.green.hasPlayer(allie))
{
event.setCancelled(true);
}
else
{
event.setCancelled(true);
}
}
}
@EventHandler
public void onentityExplode(EntityExplodeEvent event)
{
if (event.getEntity() instanceof Fireball && event.getEntity().hasMetadata("FireBall"))
{
event.setCancelled(true);
}else
{
return;
}
}
@SuppressWarnings("deprecation")
@EventHandler
public void onInventoryClick(InventoryClickEvent event)
{
final Player player = (Player) event.getWhoClicked(); // The player that clicked the item
ItemStack clicked = event.getCurrentItem(); // The item that was clicked
Inventory inventory = event.getInventory(); // The inventory that was clicked in
if (inventory.getName().equals(spellbook.getName())) // The inventory is our custom Inventory
{
if (clicked.getType() == Material.FIREBALL)
{
player.getInventory().remove(air);
player.getInventory().remove(earth);
player.getInventory().remove(ice);
player.getInventory().remove(fire);
player.getInventory().addItem(fire);
player.sendMessage(ChatColor.RED + "Fireball has been selected!");
}
else if (clicked.getType() == Material.ICE)
{
player.getInventory().remove(air);
player.getInventory().remove(earth);
player.getInventory().remove(fire);
player.getInventory().remove(ice);
player.getInventory().addItem(ice);
player.sendMessage(ChatColor.AQUA + "Ice Spike has been selected!");
}
else if (clicked.getType() == Material.WEB)
{
player.getInventory().remove(fire);
player.getInventory().remove(earth);
player.getInventory().remove(ice);
player.getInventory().remove(air);
player.getInventory().addItem(air);
player.sendMessage(ChatColor.DARK_GRAY + "Tornado has been selected!");
}
else if (clicked.getType() == Material.DIRT)
{
player.getInventory().remove(air);
player.getInventory().remove(fire);
player.getInventory().remove(ice);
player.getInventory().remove(earth);
player.getInventory().addItem(earth);
player.sendMessage(ChatColor.GRAY + "EarthQuake has been selected!");
}
player.closeInventory();
player.updateInventory();
}
}
@EventHandler
public void onClick(InventoryClickEvent event)
{
final Player player = (Player) event.getWhoClicked();
InventoryType topType = event.getView().getTopInventory().getType();
if(event.getCurrentItem().getType() == Material.IRON_SWORD || event.getCurrentItem().getType() == Material.DIAMOND_SWORD)
{
Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable()
{
@SuppressWarnings("deprecation")
@Override
public void run()
{player.updateInventory(); player.closeInventory();}
}, 1L);
event.setCancelled(true);
}
}
@EventHandler
public void swordPickup(PlayerPickupItemEvent event)
{
if (event.getItem().getItemStack().getType() == Material.IRON_SWORD || event.getItem().getItemStack().getType() == Material.DIAMOND_SWORD)
{
event.setCancelled(true);
}
}
@SuppressWarnings("static-access")
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
final Player player = (Player) sender;
if (cmd.getName().equalsIgnoreCase("mage"))
{
player.getInventory().addItem(spellbookitem);
player.getInventory().addItem(fire);
player.getInventory().addItem(ice);
player.getInventory().addItem(air);
player.getInventory().addItem(earth);
player.getInventory().addItem(new ItemStack(Material.STICK, 1));
}
if (cmd.getName().equalsIgnoreCase("team"))
{
if (args.length == 0)
{
player.sendMessage("Wrong Context");
}else
{
if (args[0].equalsIgnoreCase("red"))
{
plugin.red.addPlayer(player);
player.sendMessage("Joined red");
Bukkit.broadcastMessage("Red");
}
else if (args[0].equalsIgnoreCase("blue"))
{
plugin.blue.addPlayer(player);
player.sendMessage("Joined blue");
Bukkit.broadcastMessage("Blue");
}
else if (args[0].equalsIgnoreCase("yellow"))
{
plugin.yellow.addPlayer(player);
player.sendMessage("Joined yellow");
Bukkit.broadcastMessage("Yellow");
}
else if (args[0].equalsIgnoreCase("green"))
{
plugin.green.addPlayer(player);
player.sendMessage("Joined green");
Bukkit.broadcastMessage("Green");
}
}
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment