Remove grappling hooks

This commit is contained in:
kingbirdy 2015-08-18 20:34:56 -04:00
parent 2d3f0809fc
commit 8f2c188932
8 changed files with 95 additions and 494 deletions

View file

@ -1,5 +1,30 @@
package com.projectkorra.projectkorra;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import com.projectkorra.projectkorra.ability.AbilityModuleManager;
import com.projectkorra.projectkorra.ability.StockAbility;
import com.projectkorra.projectkorra.ability.combo.ComboManager;
@ -12,36 +37,9 @@ import com.projectkorra.projectkorra.event.PlayerChangeElementEvent.Result;
import com.projectkorra.projectkorra.firebending.FireMethods;
import com.projectkorra.projectkorra.object.Preset;
import com.projectkorra.projectkorra.storage.DBConnection;
import com.projectkorra.projectkorra.util.GrapplingHookAPI;
import com.projectkorra.projectkorra.waterbending.WaterMethods;
import com.projectkorra.rpg.RPGMethods;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import java.io.File;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
public class Commands {
private ProjectKorra plugin;
@ -107,7 +105,6 @@ public class Commands {
String[] choosealiases = { "choose", "ch" };
String[] clearaliases = { "clear", "cl", "c" };
String[] displayaliases = { "display", "d" };
String[] givealiases = { "give", "g", "spawn" };
String[] helpaliases = { "help", "h" };
String[] importaliases = { "import", "i" };
String[] invinciblealiases = { "invincible", "inv" };
@ -119,11 +116,6 @@ public class Commands {
String[] versionaliases = { "version", "v" };
String[] whoaliases = { "who", "w" };
/*
* Item Aliases
*/
String[] grapplinghookaliases = { "grapplinghook", "grapplehook", "hook", "ghook" };
private void init() {
PluginCommand projectkorra = plugin.getCommand("projectkorra");
CommandExecutor exe;
@ -1047,57 +1039,8 @@ public class Commands {
return true;
}
}
else if (Arrays.asList(givealiases).contains(args[0])) {
if (!s.hasPermission("bending.command.give")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
if (args.length < 3) {
s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending give [Player] [Item] <Properties>");
return true;
}
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
s.sendMessage(ChatColor.RED + "That player is not online.");
return true;
}
if (Arrays.asList(grapplinghookaliases).contains(args[2])) {
/*
* They are spawning in a grappling hook. bending give
* [Player] grapplinghook [# of Uses]
*/
if (args.length != 4) {
s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending give [Player] GrapplingHook <#OfUses>");
return true;
}
int uses;
try {
uses = Integer.parseInt(args[3]);
}
catch (NumberFormatException e) {
s.sendMessage(ChatColor.RED + "You must specify a number of uses you want the grappling hook to have.");
s.sendMessage(ChatColor.GOLD + "Example: /bending give " + s.getName() + " grapplinghook 25");
return true;
}
ItemStack hook = GrapplingHookAPI.createHook(uses);
player.getInventory().addItem(hook);
s.sendMessage(ChatColor.GREEN + "A grappling hook with " + uses + " uses has been added to your inventory.");
return true;
} else {
s.sendMessage(ChatColor.RED + "That is not a valid Bending item.");
s.sendMessage(ChatColor.GOLD + "Acceptable Items: GrapplingHook");
return true;
}
}
else if (Arrays.asList(importaliases).contains(args[0])) {
else if (Arrays.asList(importaliases).contains(args[0])) {
if (!s.hasPermission("bending.command.import")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
@ -1783,8 +1726,6 @@ public class Commands {
s.sendMessage(ChatColor.YELLOW + "/bending version");
if (s.hasPermission("bending.command.who"))
s.sendMessage(ChatColor.YELLOW + "/bending who");
if (s.hasPermission("bending.command.give"))
s.sendMessage(ChatColor.YELLOW + "/bending give [Player] [Item] <Properties>");
if (s.hasPermission("bending.command.invincible"))
s.sendMessage(ChatColor.YELLOW + "/bending invincible");
return true;
@ -1831,13 +1772,8 @@ public class Commands {
s.sendMessage(ChatColor.YELLOW + "This command will show you all of the elements you have bound if you do not specify an element." + " If you do specify an element (Air, Water, Earth, Fire, or Chi), it will show you all of the available " + " abilities of that element installed on the server.");
}
else if (Arrays.asList(givealiases).contains(args[1])) {
s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending give [Player] [Item] <Properties>");
s.sendMessage(ChatColor.YELLOW + "This command will give you an item that was created for the Bending plugin so you do not have to craft it." + " Each item may have its own properties involved, so the amount of arguments may change. However, the Player and Item will be " + " required each time you use this command.");
s.sendMessage(ChatColor.DARK_AQUA + "Items: GrapplingHook");
}
else if (Arrays.asList(choosealiases).contains(args[1])) {
else if (Arrays.asList(choosealiases).contains(args[1])) {
s.sendMessage(ChatColor.GOLD + "Proper Usage: " + ChatColor.DARK_AQUA + "/bending choose <Player> [Element]");
s.sendMessage(ChatColor.GOLD + "Applicable Elements: " + ChatColor.DARK_AQUA + "Air, Water, Earth, Fire, Chi");
s.sendMessage(ChatColor.YELLOW + "This command will allow the user to choose a player either for himself or <Player> if specified. " + " This command can only be used once per player unless they have permission to rechoose their element.");

View file

@ -105,7 +105,6 @@ import com.projectkorra.projectkorra.firebending.FireMethods;
import com.projectkorra.projectkorra.firebending.FireShield;
import com.projectkorra.projectkorra.object.Preset;
import com.projectkorra.projectkorra.storage.DBConnection;
import com.projectkorra.projectkorra.util.CraftingRecipes;
import com.projectkorra.projectkorra.util.Flight;
import com.projectkorra.projectkorra.util.ParticleEffect;
import com.projectkorra.projectkorra.util.TempBlock;
@ -1653,7 +1652,6 @@ public class GeneralMethods {
new AbilityModuleManager(plugin);
new ComboManager();
new MultiAbilityModuleManager();
new CraftingRecipes(plugin);
DBConnection.host = plugin.getConfig().getString("Storage.MySQL.host");
DBConnection.port = plugin.getConfig().getInt("Storage.MySQL.port");
DBConnection.pass = plugin.getConfig().getString("Storage.MySQL.pass");

View file

@ -1,5 +1,62 @@
package com.projectkorra.projectkorra;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
import org.bukkit.event.entity.EntityTeleportEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.entity.SlimeSplitEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType.SlotType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import com.projectkorra.projectkorra.ability.AvatarState;
import com.projectkorra.projectkorra.ability.combo.ComboManager;
import com.projectkorra.projectkorra.ability.multiability.MultiAbilityManager;
@ -41,15 +98,14 @@ import com.projectkorra.projectkorra.earthbending.EarthTunnel;
import com.projectkorra.projectkorra.earthbending.EarthWall;
import com.projectkorra.projectkorra.earthbending.Extraction;
import com.projectkorra.projectkorra.earthbending.LavaFlow;
import com.projectkorra.projectkorra.earthbending.LavaFlow.AbilityType;
import com.projectkorra.projectkorra.earthbending.LavaSurge;
import com.projectkorra.projectkorra.earthbending.LavaWave;
import com.projectkorra.projectkorra.earthbending.MetalClips;
import com.projectkorra.projectkorra.earthbending.SandSpout;
import com.projectkorra.projectkorra.earthbending.Shockwave;
import com.projectkorra.projectkorra.earthbending.Tremorsense;
import com.projectkorra.projectkorra.earthbending.LavaFlow.AbilityType;
import com.projectkorra.projectkorra.event.PlayerBendingDeathEvent;
import com.projectkorra.projectkorra.event.PlayerGrappleEvent;
import com.projectkorra.projectkorra.firebending.ArcOfFire;
import com.projectkorra.projectkorra.firebending.Combustion;
import com.projectkorra.projectkorra.firebending.Enflamed;
@ -70,7 +126,6 @@ import com.projectkorra.projectkorra.object.Preset;
import com.projectkorra.projectkorra.util.BlockSource;
import com.projectkorra.projectkorra.util.ClickType;
import com.projectkorra.projectkorra.util.Flight;
import com.projectkorra.projectkorra.util.GrapplingHookAPI;
import com.projectkorra.projectkorra.util.HorizontalVelocityChangeEvent;
import com.projectkorra.projectkorra.util.TempBlock;
import com.projectkorra.projectkorra.waterbending.Bloodbending;
@ -90,71 +145,10 @@ import com.projectkorra.projectkorra.waterbending.WaterWall;
import com.projectkorra.projectkorra.waterbending.WaterWave;
import com.projectkorra.projectkorra.waterbending.Wave;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockFadeEvent;
import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
import org.bukkit.event.entity.EntityTeleportEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.entity.SlimeSplitEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryType.SlotType;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerAnimationEvent;
import org.bukkit.event.player.PlayerFishEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerToggleFlightEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class PKListener implements Listener {
ProjectKorra plugin;
public static HashMap<Integer, Integer> noFallEntities = new HashMap<Integer, Integer>(); // Grappling Hooks
public static HashMap<String, Integer> noGrapplePlayers = new HashMap<String, Integer>(); // Grappling Hooks
public static HashMap<Player, String> bendingDeathPlayer = new HashMap<Player, String>(); // Player killed by Bending
public PKListener(ProjectKorra plugin) {
@ -853,73 +847,6 @@ public class PKListener implements Listener {
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerFish(PlayerFishEvent event) {
if (event.isCancelled())
return;
Player player = event.getPlayer();
if (GrapplingHookAPI.isGrapplingHook(player.getItemInHand())) {
if (event.getState() == PlayerFishEvent.State.IN_GROUND) {
Location loc = event.getHook().getLocation();
for (Entity ent : event.getHook().getNearbyEntities(1.5, 1, 1.5)) {
if (ent instanceof Item) {
PlayerGrappleEvent e = new PlayerGrappleEvent(player, ent, player.getLocation());
plugin.getServer().getPluginManager().callEvent(e);
return;
}
}
PlayerGrappleEvent e = new PlayerGrappleEvent(player, player, loc);
plugin.getServer().getPluginManager().callEvent(e);
}
}
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerGrapple(PlayerGrappleEvent event) {
if (event.isCancelled())
return;
if (!plugin.getConfig().getBoolean("Properties.CustomItems.GrapplingHook.Enable"))
return;
Player player = event.getPlayer();
if (!GeneralMethods.isBender(player.getName(), Element.Chi) && (!GeneralMethods.isBender(player.getName(), Element.Earth) || !EarthMethods.canMetalbend(player))) {
event.setCancelled(true);
return;
}
if (GeneralMethods.isBender(player.getName(), Element.Chi) && !player.hasPermission("bending.chi.grapplinghook")) {
event.setCancelled(true);
return;
}
if (GeneralMethods.isBender(player.getName(), Element.Earth) && !player.hasPermission("bending.earth.grapplinghook")) {
event.setCancelled(true);
return;
}
if (Paralyze.isParalyzed(player) || ChiComboManager.isParalyzed(player) || Bloodbending.isBloodbended(player) || Suffocate.isBreathbent(player)) {
event.setCancelled(true);
}
event.getHookItem().setDurability((short) -10);
if (noGrapplePlayers.containsKey(player.getName())) {
return;
}
Entity e = event.getPulledEntity();
Location loc = event.getPullLocation();
if (player.equals(e)) {
if (player.getLocation().distance(loc) < 3) { // Too close
GrapplingHookAPI.pullPlayerSlightly(player, loc);
} else {
GrapplingHookAPI.pullEntityToLocation(player, loc);
}
if (GrapplingHookAPI.addUse(player, event.getHookItem())) {
GrapplingHookAPI.playGrappleSound(player.getLocation());
}
GrapplingHookAPI.addPlayerCooldown(player, 100);
}
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerInteraction(PlayerInteractEvent event) {
if (event.isCancelled())

View file

@ -1,5 +1,13 @@
package com.projectkorra.projectkorra;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import com.projectkorra.projectkorra.ability.AbilityModuleManager;
import com.projectkorra.projectkorra.ability.combo.ComboManager;
import com.projectkorra.projectkorra.ability.combo.ComboModuleManager;
@ -13,21 +21,12 @@ import com.projectkorra.projectkorra.earthbending.EarthbendingManager;
import com.projectkorra.projectkorra.firebending.FirebendingManager;
import com.projectkorra.projectkorra.object.Preset;
import com.projectkorra.projectkorra.storage.DBConnection;
import com.projectkorra.projectkorra.util.CraftingRecipes;
import com.projectkorra.projectkorra.util.MetricsLite;
import com.projectkorra.projectkorra.util.RevertChecker;
import com.projectkorra.projectkorra.util.Updater;
import com.projectkorra.projectkorra.util.logging.PKLogHandler;
import com.projectkorra.projectkorra.waterbending.WaterbendingManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
public class ProjectKorra extends JavaPlugin {
public static ProjectKorra plugin;
@ -61,7 +60,6 @@ public class ProjectKorra extends JavaPlugin {
new ComboModuleManager();
new ComboManager();
new ChiComboManager();
new CraftingRecipes(this);
DBConnection.host = getConfig().getString("Storage.MySQL.host");
DBConnection.port = getConfig().getInt("Storage.MySQL.port");

View file

@ -1,61 +0,0 @@
package com.projectkorra.projectkorra.event;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.inventory.ItemStack;
public class PlayerGrappleEvent extends Event implements Cancellable {
public static final HandlerList handlers = new HandlerList();
private Player player;
private Entity entity;
private Location pullLocation;
private ItemStack hookItem;
private boolean cancelled = false;
public PlayerGrappleEvent(Player player, Entity entity, Location location) {
this.player = player;
this.entity = entity;
this.pullLocation = location;
this.hookItem = player.getItemInHand();
}
public Player getPlayer() {
return player;
}
public Entity getPulledEntity() {
return entity;
}
public Location getPullLocation() {
return pullLocation;
}
public ItemStack getHookItem() {
return hookItem;
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean set) {
this.cancelled = set;
}
}

View file

@ -1,31 +0,0 @@
package com.projectkorra.projectkorra.util;
import com.projectkorra.projectkorra.ProjectKorra;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.inventory.ShapedRecipe;
public class CraftingRecipes {
static ProjectKorra plugin;
public CraftingRecipes(ProjectKorra plugin) {
CraftingRecipes.plugin = plugin;
registerRecipes();
}
static FileConfiguration config = ProjectKorra.plugin.getConfig();
public static void registerRecipes() {
if (config.getBoolean("Properties.CustomItems.GrapplingHook.Enable")) {
plugin.getServer().addRecipe(ironHookRecipe);
plugin.getServer().addRecipe(goldHookRecipe);
}
}
static ShapedRecipe ironHookRecipe = new ShapedRecipe(GrapplingHookAPI.createHook(config.getInt("Properties.CustomItems.GrapplingHook.IronUses"))).shape(" **", " &*", " ").setIngredient('*', Material.IRON_INGOT).setIngredient('&', Material.FISHING_ROD);
static ShapedRecipe goldHookRecipe = new ShapedRecipe(GrapplingHookAPI.createHook(config.getInt("Properties.CustomItems.GrapplingHook.GoldUses"))).shape(" **", " &*", " ").setIngredient('*', Material.GOLD_INGOT).setIngredient('&', Material.FISHING_ROD);
}

View file

@ -1,164 +0,0 @@
package com.projectkorra.projectkorra.util;
import com.projectkorra.projectkorra.PKListener;
import com.projectkorra.projectkorra.ProjectKorra;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
public class GrapplingHookAPI {
public static ItemStack createHook(int uses) {
ItemStack is = new ItemStack(Material.FISHING_ROD);
ItemMeta im = is.getItemMeta();
im.setDisplayName(ChatColor.GOLD + "Grappling Hook");
ArrayList<String> lore = new ArrayList<String>();
lore.add(ChatColor.GRAY + "Uses Left: " + ChatColor.GREEN + uses);
im.setLore(lore);
is.setItemMeta(im);
return is;
}
public static boolean isGrapplingHook(ItemStack is) {
ItemMeta im = is.getItemMeta();
if (is.getType() == Material.FISHING_ROD && im.getDisplayName() != null && im.getDisplayName().equals(ChatColor.GOLD + "Grappling Hook")) {
return true;
}
return false;
}
public static int getUses(ItemStack is) {
ItemMeta im = is.getItemMeta();
String usesLine = im.getLore().get(0);
String uses = usesLine.substring(usesLine.indexOf("a") + 1, usesLine.length());
if (isInteger(uses)) {
return Integer.parseInt(uses);
} else
return 0;
}
public static boolean playerOnCooldown(Player player) {
if (PKListener.noGrapplePlayers.containsKey(player.getName()))
return true;
return false;
}
public static void removePlayerCooldown(Player player) {
if (PKListener.noGrapplePlayers.containsKey(player.getName())) {
PKListener.noGrapplePlayers.remove(player.getName());
}
}
public static void addPlayerCooldown(final Player player, int seconds) {
if (PKListener.noGrapplePlayers.containsKey(player.getName())) {
Bukkit.getServer().getScheduler().cancelTask(PKListener.noGrapplePlayers.get(player.getName()));
}
int taskId = ProjectKorra.plugin.getServer().getScheduler().scheduleSyncDelayedTask(ProjectKorra.plugin, new Runnable() {
public void run() {
removePlayerCooldown(player);
}
}, (100));
PKListener.noGrapplePlayers.put(player.getName(), taskId);
}
public static void setUses(ItemStack is, int uses) {
ItemMeta im = is.getItemMeta();
List<String> lore = new ArrayList<String>();
lore.add(ChatColor.GRAY + "Uses Left: " + ChatColor.GREEN + uses);
im.setLore(lore);
is.setItemMeta(im);
}
public static boolean addUse(Player player, ItemStack hook) {
if (player.getGameMode() == GameMode.CREATIVE)
return true;
ItemMeta im = hook.getItemMeta();
String usesLine = im.getLore().get(0);
String uses = usesLine.substring(usesLine.indexOf("a") + 1, usesLine.length());
if (isInteger(uses) == false) {
player.setItemInHand(new ItemStack(Material.AIR));
player.getWorld().playSound(player.getLocation(), Sound.ITEM_BREAK, 10f, 1f);
return false;
} else {
int currentUses = Integer.parseInt(uses);
currentUses--;
if (currentUses == 0) {
player.setItemInHand(new ItemStack(Material.AIR));
player.getWorld().playSound(player.getLocation(), Sound.ITEM_BREAK, 10f, 1f);
return false;
} else {
ArrayList<String> lore = new ArrayList<String>();
lore.add(ChatColor.GRAY + "Uses Left: " + ChatColor.GREEN + currentUses);
im.setLore(lore);
hook.setItemMeta(im);
}
}
return true;
}
public static void playGrappleSound(Location loc) {
loc.getWorld().playSound(loc, Sound.MAGMACUBE_JUMP, 10f, 1f);
}
private static boolean isInteger(String s) {
try {
Integer.parseInt(s);
}
catch (NumberFormatException e) {
return false;
}
return true;
}
public static void pullPlayerSlightly(Player p, Location loc) {
if (loc.getY() > p.getLocation().getY()) {
p.setVelocity(new Vector(0, 0.25, 0));
return;
}
Location playerLoc = p.getLocation();
Vector vector = loc.toVector().subtract(playerLoc.toVector());
p.setVelocity(vector);
}
public static void pullEntityToLocation(final Entity e, Location loc) {
Location entityLoc = e.getLocation();
entityLoc.setY(entityLoc.getY() + 0.5);
e.teleport(entityLoc);
double g = -0.08;
double d = loc.distance(entityLoc);
double t = d;
double v_x = (1.0 + 0.07 * t) * (loc.getX() - entityLoc.getX()) / t;
double v_y = (1.0 + 0.03 * t) * (loc.getY() - entityLoc.getY()) / t - 0.5 * g * t;
double v_z = (1.0 + 0.07 * t) * (loc.getZ() - entityLoc.getZ()) / t;
Vector v = e.getVelocity();
v.setX(v_x);
v.setY(v_y);
v.setZ(v_z);
e.setVelocity(v);
}
}

View file

@ -127,7 +127,6 @@ permissions:
bending.earth.metalbending: true
bending.earth.lavabending: true
bending.earth.sandbending: true
bending.earth.grapplinghook: true
bending.ability.LavaSurge: true
bending.ability.LavaFlow: true
bending.ability.EarthSmash: true
@ -169,7 +168,6 @@ permissions:
bending.ability.SwiftKick: true
bending.ability.ChiCombo: true
bending.chi.passive: true
bending.chi.grapplinghook: true
bending.avatar:
default: false
description: Grants the Avatar Color.