Created
February 24, 2016 04:57
-
-
Save Rojoss/7a3172e410b47c9cdaad to your computer and use it in GitHub Desktop.
ArmorEvents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.clashwars.sober.events.armor; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.Cancellable; | |
import org.bukkit.event.HandlerList; | |
import org.bukkit.event.player.PlayerEvent; | |
import org.bukkit.inventory.ItemStack; | |
public class ArmorEquipEvent extends PlayerEvent implements Cancellable { | |
private static final HandlerList handlers = new HandlerList(); | |
private ItemStack item; | |
private int slot; | |
boolean cancelled = false; | |
public ArmorEquipEvent(Player who, ItemStack item, int slot) { | |
super(who); | |
this.item = item; | |
this.slot = slot; | |
} | |
public ItemStack getItem() { | |
return this.item; | |
} | |
public int getSlot() { | |
return slot; | |
} | |
public boolean isCancelled() { | |
return this.cancelled; | |
} | |
public void setCancelled(boolean cancel) { | |
this.cancelled = cancel; | |
} | |
public HandlerList getHandlers() { | |
return handlers; | |
} | |
public static HandlerList getHandlerList() { | |
return handlers; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.clashwars.sober.events.armor; | |
import org.bukkit.Material; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.Listener; | |
import org.bukkit.event.block.Action; | |
import org.bukkit.event.inventory.InventoryClickEvent; | |
import org.bukkit.event.inventory.InventoryDragEvent; | |
import org.bukkit.event.inventory.InventoryType; | |
import org.bukkit.event.player.PlayerInteractEvent; | |
import org.bukkit.inventory.ItemStack; | |
import org.bukkit.plugin.Plugin; | |
import org.bukkit.scheduler.BukkitRunnable; | |
public class ArmorEventListener implements Listener { | |
private Plugin plugin; | |
public ArmorEventListener(Plugin plugin) { | |
this.plugin = plugin; | |
} | |
@EventHandler | |
private void clickArmor(final InventoryClickEvent event) { | |
final Player player = (Player)event.getWhoClicked(); | |
//Shift clicking armor items to equip and unequip. | |
if (event.isShiftClick()) { | |
//Only check armor | |
ItemStack item = event.getCurrentItem(); | |
if (item == null || item.getType() == Material.AIR || !isArmorItem(item.getType())) { | |
return; | |
} | |
if (event.getSlotType() == InventoryType.SlotType.ARMOR) { | |
//Unequip - Full inventory check. | |
if (player.getInventory().firstEmpty() < 0) { | |
return; | |
} | |
ArmorUnequipEvent armorEvent = new ArmorUnequipEvent(player, item, event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} else { | |
//Equip - Check for empty slot | |
if (!hasFreeArmorSpot(player, item.getType())) { | |
return; | |
} | |
//Can't shift click pumpkins | |
if (item.getType() == Material.PUMPKIN) { | |
return; | |
} | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(player, item, getFreeArmorSlot(player, item.getType())); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
return; | |
} | |
//When not shift clicking only check for clicking armor slots. | |
if (event.getSlotType() != InventoryType.SlotType.ARMOR) { | |
return; | |
} | |
if (event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR) { | |
final int slot = event.getSlot(); | |
final ItemStack slotItem = player.getInventory().getItem(slot); | |
//Equip | |
new BukkitRunnable() { | |
@Override | |
public void run() { | |
ItemStack item = player.getInventory().getItem(slot); | |
if (item == null || item.getType() == Material.AIR || !isArmorItem(item.getType())) { | |
return; | |
} | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(player, item, slot); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
player.getInventory().setItem(slot, slotItem); | |
event.setCursor(item); | |
} | |
} | |
}.runTaskLater(plugin, 1); | |
} else { | |
if (event.getCursor() != null && event.getCursor().getType() != Material.AIR) { | |
//Swapping items (for example clicking with a gold helmet on current equiped iron helmet unequip iron and equip gold. | |
if (!isArmorItem(event.getCursor().getType())) { | |
return; | |
} | |
String cursorItem = event.getCursor().getType().toString(); | |
String slotItem = event.getCurrentItem().getType().toString(); | |
if ((cursorItem.endsWith("HELMET") && slotItem.endsWith("HELMET")) || | |
(cursorItem.endsWith("CHESTPLATE") && slotItem.endsWith("CHESTPLATE")) || | |
(cursorItem.endsWith("LEGGINGS") && slotItem.endsWith("LEGGINGS")) || | |
(cursorItem.endsWith("BOOTS") && slotItem.endsWith("BOOTS")) || | |
(cursorItem.endsWith("HELMET") && slotItem.equals("PUMPKIN")) || | |
(cursorItem.equals("PUMPKIN") && slotItem.endsWith("HELMET")) || | |
(cursorItem.equals("PUMPKIN") && slotItem.equals("PUMPKIN"))) { | |
ArmorUnequipEvent armorEvent = new ArmorUnequipEvent(player, event.getCurrentItem(), event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} else { | |
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(player, event.getCursor(), event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEquipEvent); | |
if (armorEquipEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
} | |
return; | |
} | |
//Unequip | |
ItemStack item = event.getCurrentItem(); | |
ArmorUnequipEvent armorEvent = new ArmorUnequipEvent(player, item, event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
} | |
@EventHandler | |
private void dragArmor(InventoryDragEvent event) { | |
Player player = (Player)event.getWhoClicked(); | |
ItemStack item = event.getOldCursor(); | |
if (item == null || item.getType() == Material.AIR || !isArmorItem(item.getType())) { | |
return; | |
} | |
int armorSlot = getFreeArmorSlot(player, event.getOldCursor().getType()); | |
if (armorSlot < 0) { | |
return; | |
} | |
if (!event.getInventorySlots().contains(armorSlot)) { | |
return; | |
} | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(player, item, armorSlot); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
@EventHandler | |
private void equipArmor(final PlayerInteractEvent event) { | |
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) { | |
return; | |
} | |
final ItemStack item = event.getPlayer().getItemInHand(); | |
if (item == null || item.getType() == Material.AIR) { | |
return; | |
} | |
final int amount = item.getAmount(); | |
final int armorSlot = getFreeArmorSlot(event.getPlayer(), item.getType()); | |
if (armorSlot < 0) { | |
return; | |
} | |
new BukkitRunnable() { | |
@Override | |
public void run() { | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(event.getPlayer(), item, armorSlot); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.getPlayer().getInventory().setItem(armorSlot, new ItemStack(Material.AIR)); | |
ItemStack returnItem = item.clone(); | |
returnItem.setAmount(amount); | |
event.getPlayer().setItemInHand(returnItem); | |
event.getPlayer().updateInventory(); | |
} | |
} | |
}.runTaskLater(plugin, 1); | |
} | |
private boolean isArmorItem(Material mat) { | |
if (mat.toString().endsWith("HELMET") || mat.toString().endsWith("CHESTPLATE") || mat.toString().endsWith("LEGGINGS") || mat.toString().endsWith("BOOTS") || mat == Material.PUMPKIN) { | |
return true; | |
} | |
return false; | |
} | |
private boolean hasFreeArmorSpot(Player player) { | |
for (ItemStack itemStack : player.getInventory().getArmorContents()) { | |
if (itemStack == null || itemStack.getType() == Material.AIR) { | |
return true; | |
} | |
} | |
return false; | |
} | |
private boolean hasFreeArmorSpot(Player player, Material mat) { | |
if (mat.toString().endsWith("HELMET") || mat == Material.PUMPKIN) { | |
if (player.getInventory().getHelmet() == null || player.getInventory().getHelmet().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} else if (mat.toString().endsWith("CHESTPLATE")) { | |
if (player.getInventory().getChestplate() == null || player.getInventory().getChestplate().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} else if (mat.toString().endsWith("LEGGINGS")) { | |
if (player.getInventory().getLeggings() == null || player.getInventory().getLeggings().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} else if (mat.toString().endsWith("BOOTS")) { | |
if (player.getInventory().getBoots() == null || player.getInventory().getBoots().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} | |
return false; | |
} | |
private int getFreeArmorSlot(Player player, Material mat) { | |
if (!hasFreeArmorSpot(player, mat)) { | |
return -1; | |
} | |
if (mat.toString().endsWith("HELMET") || mat == Material.PUMPKIN) { | |
return 39; | |
} else if (mat.toString().endsWith("CHESTPLATE")) { | |
return 38; | |
} else if (mat.toString().endsWith("LEGGINGS")) { | |
return 37; | |
} else if (mat.toString().endsWith("BOOTS")) { | |
return 36; | |
} | |
return -1; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.clashwars.sober.events.armor; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.Cancellable; | |
import org.bukkit.event.HandlerList; | |
import org.bukkit.event.player.PlayerEvent; | |
import org.bukkit.inventory.ItemStack; | |
public class ArmorUnequipEvent extends PlayerEvent implements Cancellable { | |
private static final HandlerList handlers = new HandlerList(); | |
private ItemStack item; | |
private int slot; | |
boolean cancelled = false; | |
public ArmorUnequipEvent(Player who, ItemStack item, int slot) { | |
super(who); | |
this.item = item; | |
this.slot = slot; | |
} | |
public ItemStack getItem() { | |
return this.item; | |
} | |
public int getSlot() { | |
return slot; | |
} | |
public boolean isCancelled() { | |
return this.cancelled; | |
} | |
public void setCancelled(boolean cancel) { | |
this.cancelled = cancel; | |
} | |
public HandlerList getHandlers() { | |
return handlers; | |
} | |
public static HandlerList getHandlerList() { | |
return handlers; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.clashwars.sober.events.armor; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.Cancellable; | |
import org.bukkit.event.HandlerList; | |
import org.bukkit.event.player.PlayerEvent; | |
import org.bukkit.inventory.ItemStack; | |
public class ArmorEquipEvent extends PlayerEvent implements Cancellable { | |
private static final HandlerList handlers = new HandlerList(); | |
private ItemStack item; | |
private int slot; | |
boolean cancelled = false; | |
public ArmorEquipEvent(Player who, ItemStack item, int slot) { | |
super(who); | |
this.item = item; | |
this.slot = slot; | |
} | |
public ItemStack getItem() { | |
return this.item; | |
} | |
public int getSlot() { | |
return slot; | |
} | |
public boolean isCancelled() { | |
return this.cancelled; | |
} | |
public void setCancelled(boolean cancel) { | |
this.cancelled = cancel; | |
} | |
public HandlerList getHandlers() { | |
return handlers; | |
} | |
public static HandlerList getHandlerList() { | |
return handlers; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.clashwars.sober.events.armor; | |
import org.bukkit.Material; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.EventHandler; | |
import org.bukkit.event.Listener; | |
import org.bukkit.event.block.Action; | |
import org.bukkit.event.inventory.InventoryClickEvent; | |
import org.bukkit.event.inventory.InventoryDragEvent; | |
import org.bukkit.event.inventory.InventoryType; | |
import org.bukkit.event.player.PlayerInteractEvent; | |
import org.bukkit.inventory.ItemStack; | |
import org.bukkit.plugin.Plugin; | |
import org.bukkit.scheduler.BukkitRunnable; | |
public class ArmorEventListener implements Listener { | |
private Plugin plugin; | |
public ArmorEventListener(Plugin plugin) { | |
this.plugin = plugin; | |
} | |
@EventHandler | |
private void clickArmor(final InventoryClickEvent event) { | |
final Player player = (Player)event.getWhoClicked(); | |
//Shift clicking armor items to equip and unequip. | |
if (event.isShiftClick()) { | |
//Only check armor | |
ItemStack item = event.getCurrentItem(); | |
if (item == null || item.getType() == Material.AIR || !isArmorItem(item.getType())) { | |
return; | |
} | |
if (event.getSlotType() == InventoryType.SlotType.ARMOR) { | |
//Unequip - Full inventory check. | |
if (player.getInventory().firstEmpty() < 0) { | |
return; | |
} | |
ArmorUnequipEvent armorEvent = new ArmorUnequipEvent(player, item, event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} else { | |
//Equip - Check for empty slot | |
if (!hasFreeArmorSpot(player, item.getType())) { | |
return; | |
} | |
//Can't shift click pumpkins | |
if (item.getType() == Material.PUMPKIN) { | |
return; | |
} | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(player, item, getFreeArmorSlot(player, item.getType())); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
return; | |
} | |
//When not shift clicking only check for clicking armor slots. | |
if (event.getSlotType() != InventoryType.SlotType.ARMOR) { | |
return; | |
} | |
if (event.getCurrentItem() == null || event.getCurrentItem().getType() == Material.AIR) { | |
final int slot = event.getSlot(); | |
final ItemStack slotItem = player.getInventory().getItem(slot); | |
//Equip | |
new BukkitRunnable() { | |
@Override | |
public void run() { | |
ItemStack item = player.getInventory().getItem(slot); | |
if (item == null || item.getType() == Material.AIR || !isArmorItem(item.getType())) { | |
return; | |
} | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(player, item, slot); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
player.getInventory().setItem(slot, slotItem); | |
event.setCursor(item); | |
} | |
} | |
}.runTaskLater(plugin, 1); | |
} else { | |
if (event.getCursor() != null && event.getCursor().getType() != Material.AIR) { | |
//Swapping items (for example clicking with a gold helmet on current equiped iron helmet unequip iron and equip gold. | |
if (!isArmorItem(event.getCursor().getType())) { | |
return; | |
} | |
String cursorItem = event.getCursor().getType().toString(); | |
String slotItem = event.getCurrentItem().getType().toString(); | |
if ((cursorItem.endsWith("HELMET") && slotItem.endsWith("HELMET")) || | |
(cursorItem.endsWith("CHESTPLATE") && slotItem.endsWith("CHESTPLATE")) || | |
(cursorItem.endsWith("LEGGINGS") && slotItem.endsWith("LEGGINGS")) || | |
(cursorItem.endsWith("BOOTS") && slotItem.endsWith("BOOTS")) || | |
(cursorItem.endsWith("HELMET") && slotItem.equals("PUMPKIN")) || | |
(cursorItem.equals("PUMPKIN") && slotItem.endsWith("HELMET")) || | |
(cursorItem.equals("PUMPKIN") && slotItem.equals("PUMPKIN"))) { | |
ArmorUnequipEvent armorEvent = new ArmorUnequipEvent(player, event.getCurrentItem(), event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} else { | |
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(player, event.getCursor(), event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEquipEvent); | |
if (armorEquipEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
} | |
return; | |
} | |
//Unequip | |
ItemStack item = event.getCurrentItem(); | |
ArmorUnequipEvent armorEvent = new ArmorUnequipEvent(player, item, event.getSlot()); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
} | |
@EventHandler | |
private void dragArmor(InventoryDragEvent event) { | |
Player player = (Player)event.getWhoClicked(); | |
ItemStack item = event.getOldCursor(); | |
if (item == null || item.getType() == Material.AIR || !isArmorItem(item.getType())) { | |
return; | |
} | |
int armorSlot = getFreeArmorSlot(player, event.getOldCursor().getType()); | |
if (armorSlot < 0) { | |
return; | |
} | |
if (!event.getInventorySlots().contains(armorSlot)) { | |
return; | |
} | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(player, item, armorSlot); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.setCancelled(true); | |
} | |
} | |
@EventHandler | |
private void equipArmor(final PlayerInteractEvent event) { | |
if (event.getAction() != Action.RIGHT_CLICK_AIR && event.getAction() != Action.RIGHT_CLICK_BLOCK) { | |
return; | |
} | |
final ItemStack item = event.getPlayer().getItemInHand(); | |
if (item == null || item.getType() == Material.AIR) { | |
return; | |
} | |
final int amount = item.getAmount(); | |
final int armorSlot = getFreeArmorSlot(event.getPlayer(), item.getType()); | |
if (armorSlot < 0) { | |
return; | |
} | |
new BukkitRunnable() { | |
@Override | |
public void run() { | |
ArmorEquipEvent armorEvent = new ArmorEquipEvent(event.getPlayer(), item, armorSlot); | |
plugin.getServer().getPluginManager().callEvent(armorEvent); | |
if (armorEvent.isCancelled()) { | |
event.getPlayer().getInventory().setItem(armorSlot, new ItemStack(Material.AIR)); | |
ItemStack returnItem = item.clone(); | |
returnItem.setAmount(amount); | |
event.getPlayer().setItemInHand(returnItem); | |
event.getPlayer().updateInventory(); | |
} | |
} | |
}.runTaskLater(plugin, 1); | |
} | |
private boolean isArmorItem(Material mat) { | |
if (mat.toString().endsWith("HELMET") || mat.toString().endsWith("CHESTPLATE") || mat.toString().endsWith("LEGGINGS") || mat.toString().endsWith("BOOTS") || mat == Material.PUMPKIN) { | |
return true; | |
} | |
return false; | |
} | |
private boolean hasFreeArmorSpot(Player player) { | |
for (ItemStack itemStack : player.getInventory().getArmorContents()) { | |
if (itemStack == null || itemStack.getType() == Material.AIR) { | |
return true; | |
} | |
} | |
return false; | |
} | |
private boolean hasFreeArmorSpot(Player player, Material mat) { | |
if (mat.toString().endsWith("HELMET") || mat == Material.PUMPKIN) { | |
if (player.getInventory().getHelmet() == null || player.getInventory().getHelmet().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} else if (mat.toString().endsWith("CHESTPLATE")) { | |
if (player.getInventory().getChestplate() == null || player.getInventory().getChestplate().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} else if (mat.toString().endsWith("LEGGINGS")) { | |
if (player.getInventory().getLeggings() == null || player.getInventory().getLeggings().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} else if (mat.toString().endsWith("BOOTS")) { | |
if (player.getInventory().getBoots() == null || player.getInventory().getBoots().getType() == Material.AIR) { | |
return true; | |
} | |
return false; | |
} | |
return false; | |
} | |
private int getFreeArmorSlot(Player player, Material mat) { | |
if (!hasFreeArmorSpot(player, mat)) { | |
return -1; | |
} | |
if (mat.toString().endsWith("HELMET") || mat == Material.PUMPKIN) { | |
return 39; | |
} else if (mat.toString().endsWith("CHESTPLATE")) { | |
return 38; | |
} else if (mat.toString().endsWith("LEGGINGS")) { | |
return 37; | |
} else if (mat.toString().endsWith("BOOTS")) { | |
return 36; | |
} | |
return -1; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.clashwars.sober.events.armor; | |
import org.bukkit.entity.Player; | |
import org.bukkit.event.Cancellable; | |
import org.bukkit.event.HandlerList; | |
import org.bukkit.event.player.PlayerEvent; | |
import org.bukkit.inventory.ItemStack; | |
public class ArmorUnequipEvent extends PlayerEvent implements Cancellable { | |
private static final HandlerList handlers = new HandlerList(); | |
private ItemStack item; | |
private int slot; | |
boolean cancelled = false; | |
public ArmorUnequipEvent(Player who, ItemStack item, int slot) { | |
super(who); | |
this.item = item; | |
this.slot = slot; | |
} | |
public ItemStack getItem() { | |
return this.item; | |
} | |
public int getSlot() { | |
return slot; | |
} | |
public boolean isCancelled() { | |
return this.cancelled; | |
} | |
public void setCancelled(boolean cancel) { | |
this.cancelled = cancel; | |
} | |
public HandlerList getHandlers() { | |
return handlers; | |
} | |
public static HandlerList getHandlerList() { | |
return handlers; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment