Code

package me.delta242.BouncingBall;

import java.util.ArrayList;
import java.util.Random;
import java.util.logging.Logger;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.util.Vector;

public class BouncingBall extends JavaPlugin implements Listener {

	public Logger log;
	public String displayname;
	public String lore;
	Random r;
	int lifetime;

	@Override
	public void onEnable() {
		log = super.getLogger();
		this.saveDefaultConfig();
		this.saveConfig();
		displayname = ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("displayname"));
		lore = ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("lore"));
		lifetime = this.getConfig().getInt("lifetime");
		r = new Random();
		this.getServer().getPluginManager().registerEvents(this, this);
		log.info("Plugin enabled");
	}
	@Override
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
		if (cmd.getName().equalsIgnoreCase("bouncingball")) {
			if (sender instanceof Player) {
				Player p = (Player) sender;
				
				if (args.length == 0) {
					p.sendMessage(ChatColor.RED + "/bouncingball <get | remove [all|radius]>");
				} else if (args[0].equalsIgnoreCase("get")) {
					if(p.hasPermission("bouncingball.bouncingball")) {
						if (args.length != 1) {
							p.sendMessage(ChatColor.RED + "/bouncingball get");
						} else {
								ItemStack stack = new ItemStack(Material.SNOW_BALL);
								ItemMeta im = stack.getItemMeta();
								im.setDisplayName(displayname);
								ArrayList<String> lore = new ArrayList<>();
								lore.add(this.lore);
								im.setLore(lore);
								stack.setItemMeta(im);
								if (p.getInventory().contains(stack)) {
									p.sendMessage(ChatColor.RED + "You already have a Bouncing Ball!");
									return true;
								}
								p.getInventory().addItem(stack);
								p.sendMessage(this.lore);
						}
					} else {
						p.sendMessage(ChatColor.RED + "You dont have permission.");
					}
				} else if (args[0].equalsIgnoreCase("remove")) {
					if(p.hasPermission("bouncingball.remove")) {
						if (args.length != 2) {
							p.sendMessage(ChatColor.RED + "/bouncingball remove <all | radius>");
						} else {
							if (args[1].equalsIgnoreCase("all")) {
								for (World world : Bukkit.getWorlds()) {
									for (Snowball sb : world.getEntitiesByClass(Snowball.class)) {
										sb.remove();
									}
								}
								p.sendMessage(ChatColor.GRAY + "Removed all Bouncing Balls!");
							} else {
								try {
									Integer radius = Integer.parseInt(args[1]);
									int counter = 0;
									for (Entity e : p.getNearbyEntities(radius, radius, radius)) {
										if(e instanceof Snowball) {
											e.remove();
											counter++;
										}
									}
									p.sendMessage(ChatColor.GRAY + "Removed " + counter + " Entitys in Radius " + radius);
								} catch (NumberFormatException e) {
									p.sendMessage(ChatColor.RED + "/bouncingball remove <all | radius>");
								}
							}
						}
					} else {
						p.sendMessage(ChatColor.RED + "You dont have permission.");
					}
				} else {
					p.sendMessage(ChatColor.RED + "/bouncingball <get | remove [all|radius]>");
				}
			} else {
				sender.sendMessage("Only Players");
			}
		}
		return true;	
	}
	@EventHandler
	public void onPlayerInteract(PlayerInteractEvent event) {
		if (event.getAction().toString().toLowerCase().startsWith("right_click")) {
			try {
				if (event.getItem().getType() == Material.SNOW_BALL) {
					Player p = event.getPlayer();
					ItemStack stack = p.getInventory().getItemInHand();
					if ((stack.getItemMeta().getDisplayName().equalsIgnoreCase(displayname)) && (stack.getItemMeta().getLore().get(0).equalsIgnoreCase(lore))) {
						if (p.hasPermission("bouncingball.spawn")) {
							event.setCancelled(true);
							if (p.getGameMode() != GameMode.CREATIVE) p.setItemInHand(null);
							Location loc = p.getLocation();
							loc.setY(loc.getY() + 2.5);
							Snowball ball = (Snowball) p.getWorld().spawnEntity(loc, EntityType.SNOWBALL);
							Vector vel = p.getLocation().getDirection().multiply(1.1D);
							ball.setVelocity(vel);
							ball.setShooter(null);
						} else {
							event.setCancelled(true);
							p.sendMessage(ChatColor.RED + "You dont have permission.");
						}
					}
				}
			} catch (NullPointerException e) {

			}
		}
	}
	@EventHandler
	public void onProjectileHit(ProjectileHitEvent event) {
		if (event.getEntity() instanceof Snowball) {
			Snowball sb = (Snowball) event.getEntity();
			if (sb.getShooter() == null) {
				if ((lifetime == 0) || (sb.getTicksLived() < lifetime * 20)) {
					Snowball ball = (Snowball) sb.getWorld().spawnEntity(sb.getLocation(), EntityType.SNOWBALL);
					Vector vel = new Vector(r.nextFloat() * 2.0D - 1.0D, r.nextFloat() * 2.0D - 0.5D, r.nextFloat() * 2.0D - 1.0D);
					vel.multiply(r.nextFloat());
					ball.setTicksLived(sb.getTicksLived());
					ball.setVelocity(vel);
				}
			}
		}
	}
	@EventHandler
	public void onDamage(EntityDamageByEntityEvent event) {
		if ((event.getEntity() instanceof Player) && (event.getDamager() instanceof Snowball)) {
			Player p = (Player) event.getEntity();
			if (p.hasPermission("bouncingball.nodamage")) {
				event.setCancelled(true);
			}
		}
	}
}

Comments

Posts Quoted:
Reply
Clear All Quotes