Skip to content

Instantly share code, notes, and snippets.

@Rojoss
Created February 24, 2016 04:57
Show Gist options
  • Save Rojoss/7a3172e410b47c9cdaad to your computer and use it in GitHub Desktop.
Save Rojoss/7a3172e410b47c9cdaad to your computer and use it in GitHub Desktop.
ArmorEvents
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;
}
}
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;
}
}
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;
}
}
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;
}
}
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;
}
}
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