Moved ArmorEquipEvent code to kotlin, finally
This commit is contained in:
@@ -1,42 +0,0 @@
|
||||
package com.willfp.eco.spigot.eventlisteners;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.PluginDependent;
|
||||
import com.willfp.eco.core.events.ArmorChangeEvent;
|
||||
import com.willfp.eco.core.events.ArmorEquipEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class ArmorChangeEventListeners extends PluginDependent<EcoPlugin> implements Listener {
|
||||
/**
|
||||
* Pass an {@link EcoPlugin} in order to interface with it.
|
||||
*
|
||||
* @param plugin The plugin to manage.
|
||||
*/
|
||||
public ArmorChangeEventListeners(@NotNull final EcoPlugin plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onArmorChange(@NotNull final ArmorEquipEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
List<ItemStack> before = new ArrayList<>(Arrays.asList(player.getInventory().getArmorContents()));
|
||||
|
||||
this.getPlugin().getScheduler().runLater(() -> {
|
||||
List<ItemStack> after = new ArrayList<>(Arrays.asList(player.getInventory().getArmorContents()));
|
||||
|
||||
ArmorChangeEvent armorChangeEvent = new ArmorChangeEvent(player, before, after);
|
||||
Bukkit.getPluginManager().callEvent(armorChangeEvent);
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
@@ -1,187 +0,0 @@
|
||||
package com.willfp.eco.spigot.eventlisteners;
|
||||
|
||||
import com.willfp.eco.core.events.ArmorEquipEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event.Result;
|
||||
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.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
import org.bukkit.event.inventory.InventoryAction;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.event.inventory.InventoryType.SlotType;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerItemBreakEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class ArmorListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public final void inventoryClick(@NotNull final InventoryClickEvent event) {
|
||||
boolean shift = false;
|
||||
boolean numberkey = false;
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
if (event.getAction() == InventoryAction.NOTHING) {
|
||||
return;
|
||||
}
|
||||
if (event.getClick().equals(ClickType.SHIFT_LEFT) || event.getClick().equals(ClickType.SHIFT_RIGHT)) {
|
||||
shift = true;
|
||||
}
|
||||
if (event.getClick().equals(ClickType.NUMBER_KEY)) {
|
||||
numberkey = true;
|
||||
}
|
||||
if (event.getSlotType() != SlotType.ARMOR && event.getSlotType() != SlotType.QUICKBAR && event.getSlotType() != SlotType.CONTAINER) {
|
||||
return;
|
||||
}
|
||||
if (event.getClickedInventory() != null && !event.getClickedInventory().getType().equals(InventoryType.PLAYER)) {
|
||||
return;
|
||||
}
|
||||
if (!event.getInventory().getType().equals(InventoryType.CRAFTING) && !event.getInventory().getType().equals(InventoryType.PLAYER)) {
|
||||
return;
|
||||
}
|
||||
if (!(event.getWhoClicked() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
ArmorType newArmorType = ArmorType.matchType(shift ? event.getCurrentItem() : event.getCursor());
|
||||
if (!shift && newArmorType != null && event.getRawSlot() != newArmorType.getSlot()) {
|
||||
// Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots slot.
|
||||
return;
|
||||
}
|
||||
if (shift) {
|
||||
newArmorType = ArmorType.matchType(event.getCurrentItem());
|
||||
if (newArmorType != null) {
|
||||
boolean equipping = true;
|
||||
if (event.getRawSlot() == newArmorType.getSlot()) {
|
||||
equipping = false;
|
||||
}
|
||||
if (newArmorType.equals(ArmorType.HELMET)
|
||||
&& (equipping == isAirOrNull(event.getWhoClicked().getInventory().getHelmet()))
|
||||
|| newArmorType.equals(ArmorType.CHESTPLATE)
|
||||
&& (equipping == isAirOrNull(event.getWhoClicked().getInventory().getChestplate()))
|
||||
|| newArmorType.equals(ArmorType.LEGGINGS)
|
||||
&& (equipping == isAirOrNull(event.getWhoClicked().getInventory().getLeggings()))
|
||||
|| newArmorType.equals(ArmorType.BOOTS)
|
||||
&& (equipping == isAirOrNull(event.getWhoClicked().getInventory().getBoots()))) {
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(
|
||||
(Player) event.getWhoClicked()
|
||||
);
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (numberkey) {
|
||||
if (event.getClickedInventory().getType().equals(InventoryType.PLAYER)) {
|
||||
ItemStack hotbarItem = event.getClickedInventory().getItem(event.getHotbarButton());
|
||||
if (!isAirOrNull(hotbarItem)) {
|
||||
newArmorType = ArmorType.matchType(hotbarItem);
|
||||
} else {
|
||||
newArmorType = ArmorType.matchType(!isAirOrNull(event.getCurrentItem()) ? event.getCurrentItem() : event.getCursor());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isAirOrNull(event.getCursor()) && !isAirOrNull(event.getCurrentItem())) {
|
||||
newArmorType = ArmorType.matchType(event.getCurrentItem());
|
||||
}
|
||||
}
|
||||
if (newArmorType != null && event.getRawSlot() == newArmorType.getSlot()) {
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) event.getWhoClicked());
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void playerInteractEvent(@NotNull final PlayerInteractEvent e) {
|
||||
if (e.useItemInHand().equals(Result.DENY)) {
|
||||
return;
|
||||
}
|
||||
if (e.getAction() == Action.PHYSICAL) {
|
||||
return;
|
||||
}
|
||||
if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
Player player = e.getPlayer();
|
||||
if (!e.useInteractedBlock().equals(Result.DENY)) {
|
||||
if (e.getClickedBlock() != null && e.getAction() == Action.RIGHT_CLICK_BLOCK && !player.isSneaking()) {
|
||||
Material mat = e.getClickedBlock().getType();
|
||||
}
|
||||
}
|
||||
ArmorType newArmorType = ArmorType.matchType(e.getItem());
|
||||
if (newArmorType != null) {
|
||||
if (newArmorType.equals(ArmorType.HELMET)
|
||||
&& isAirOrNull(e.getPlayer().getInventory().getHelmet())
|
||||
|| newArmorType.equals(ArmorType.CHESTPLATE)
|
||||
&& isAirOrNull(e.getPlayer().getInventory().getChestplate())
|
||||
|| newArmorType.equals(ArmorType.LEGGINGS)
|
||||
&& isAirOrNull(e.getPlayer().getInventory().getLeggings())
|
||||
|| newArmorType.equals(ArmorType.BOOTS)
|
||||
&& isAirOrNull(e.getPlayer().getInventory().getBoots())) {
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(e.getPlayer());
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void inventoryDrag(@NotNull final InventoryDragEvent event) {
|
||||
ArmorType type = ArmorType.matchType(event.getOldCursor());
|
||||
if (event.getRawSlots().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (type != null && type.getSlot() == event.getRawSlots().stream().findFirst().orElse(0)) {
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent((Player) event.getWhoClicked());
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerJoinEvent(@NotNull final PlayerJoinEvent event) {
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(event.getPlayer());
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerRespawnEvent(@NotNull final PlayerRespawnEvent event) {
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(event.getPlayer());
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void itemBreakEvent(@NotNull final PlayerItemBreakEvent event) {
|
||||
ArmorType type = ArmorType.matchType(event.getBrokenItem());
|
||||
if (type != null) {
|
||||
Player p = event.getPlayer();
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p);
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void playerDeathEvent(@NotNull final PlayerDeathEvent event) {
|
||||
Player p = event.getEntity();
|
||||
if (event.getKeepInventory()) {
|
||||
return;
|
||||
}
|
||||
for (ItemStack i : p.getInventory().getArmorContents()) {
|
||||
if (!isAirOrNull(i)) {
|
||||
Bukkit.getPluginManager().callEvent(new ArmorEquipEvent(p));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isAirOrNull(@Nullable final ItemStack item) {
|
||||
return item == null || item.getType().equals(Material.AIR);
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package com.willfp.eco.spigot.eventlisteners;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public enum ArmorType {
|
||||
HELMET(5),
|
||||
CHESTPLATE(6),
|
||||
LEGGINGS(7),
|
||||
BOOTS(8);
|
||||
|
||||
private final int slot;
|
||||
|
||||
ArmorType(final int slot) {
|
||||
this.slot = slot;
|
||||
}
|
||||
|
||||
public static ArmorType matchType(final ItemStack itemStack) {
|
||||
if (ArmorListener.isAirOrNull(itemStack)) {
|
||||
return null;
|
||||
}
|
||||
String type = itemStack.getType().name();
|
||||
if (type.endsWith("_HELMET") || type.endsWith("_SKULL") || type.endsWith("PLAYER_HEAD")) {
|
||||
return HELMET;
|
||||
} else if (type.endsWith("_CHESTPLATE") || type.endsWith("ELYTRA")) {
|
||||
return CHESTPLATE;
|
||||
} else if (type.endsWith("_LEGGINGS")) {
|
||||
return LEGGINGS;
|
||||
} else if (type.endsWith("_BOOTS")) {
|
||||
return BOOTS;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public int getSlot() {
|
||||
return slot;
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package com.willfp.eco.spigot.eventlisteners;
|
||||
|
||||
import com.willfp.eco.core.events.ArmorEquipEvent;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockDispenseArmorEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class DispenserArmorListener implements Listener {
|
||||
@EventHandler
|
||||
public void dispenseArmorEvent(@NotNull final BlockDispenseArmorEvent event) {
|
||||
ArmorType type = ArmorType.matchType(event.getItem());
|
||||
if (type != null && event.getTargetEntity() instanceof Player p) {
|
||||
ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(p);
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,11 @@ import com.willfp.eco.proxy.SkullProxy
|
||||
import com.willfp.eco.spigot.arrows.ArrowDataListener
|
||||
import com.willfp.eco.spigot.display.*
|
||||
import com.willfp.eco.spigot.drops.CollatedRunnable
|
||||
import com.willfp.eco.spigot.eventlisteners.*
|
||||
import com.willfp.eco.spigot.eventlisteners.EntityDeathByEntityListeners
|
||||
import com.willfp.eco.spigot.eventlisteners.NaturalExpGainListeners
|
||||
import com.willfp.eco.spigot.eventlisteners.PlayerJumpListeners
|
||||
import com.willfp.eco.spigot.eventlisteners.armor.ArmorChangeEventListeners
|
||||
import com.willfp.eco.spigot.eventlisteners.armor.ArmorListener
|
||||
import com.willfp.eco.spigot.gui.GUIListener
|
||||
import com.willfp.eco.spigot.integrations.anticheat.*
|
||||
import com.willfp.eco.spigot.integrations.antigrief.*
|
||||
@@ -163,7 +167,6 @@ abstract class EcoSpigotPlugin : EcoPlugin(
|
||||
return listOf(
|
||||
NaturalExpGainListeners(),
|
||||
ArmorListener(),
|
||||
DispenserArmorListener(),
|
||||
EntityDeathByEntityListeners(this),
|
||||
ShapedRecipeListener(this),
|
||||
PlayerJumpListeners(),
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.willfp.eco.spigot.eventlisteners.armor
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.events.ArmorChangeEvent
|
||||
import com.willfp.eco.core.events.ArmorEquipEvent
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.block.BlockDispenseArmorEvent
|
||||
|
||||
class ArmorChangeEventListeners(
|
||||
private val plugin: EcoPlugin
|
||||
) : Listener {
|
||||
@EventHandler
|
||||
fun onArmorChange(event: ArmorEquipEvent) {
|
||||
val player = event.player
|
||||
val before = player.inventory.armorContents.toMutableList()
|
||||
plugin.scheduler.run {
|
||||
val after = player.inventory.armorContents.toMutableList()
|
||||
val armorChangeEvent = ArmorChangeEvent(player, before, after)
|
||||
Bukkit.getPluginManager().callEvent(armorChangeEvent)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun dispenseArmorEvent(event: BlockDispenseArmorEvent) {
|
||||
val type = ArmorType.matchType(event.item)
|
||||
if (type != null && event.targetEntity is Player) {
|
||||
Bukkit.getPluginManager().callEvent(ArmorEquipEvent(event.targetEntity as Player))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
package com.willfp.eco.spigot.eventlisteners.armor
|
||||
|
||||
import com.willfp.eco.core.events.ArmorEquipEvent
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.Event
|
||||
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.entity.PlayerDeathEvent
|
||||
import org.bukkit.event.inventory.*
|
||||
import org.bukkit.event.player.PlayerInteractEvent
|
||||
import org.bukkit.event.player.PlayerItemBreakEvent
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.bukkit.event.player.PlayerRespawnEvent
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class ArmorListener : Listener {
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
fun inventoryClick(event: InventoryClickEvent) {
|
||||
var shift = false
|
||||
var numberkey = false
|
||||
if (event.isCancelled) {
|
||||
return
|
||||
}
|
||||
if (event.action == InventoryAction.NOTHING) {
|
||||
return
|
||||
}
|
||||
if (event.click == ClickType.SHIFT_LEFT || event.click == ClickType.SHIFT_RIGHT) {
|
||||
shift = true
|
||||
}
|
||||
if (event.click == ClickType.NUMBER_KEY) {
|
||||
numberkey = true
|
||||
}
|
||||
if (event.slotType != InventoryType.SlotType.ARMOR && event.slotType != InventoryType.SlotType.QUICKBAR && event.slotType != InventoryType.SlotType.CONTAINER) {
|
||||
return
|
||||
}
|
||||
if (event.clickedInventory != null && event.clickedInventory!!.type != InventoryType.PLAYER) {
|
||||
return
|
||||
}
|
||||
if (event.inventory.type != InventoryType.CRAFTING && event.inventory.type != InventoryType.PLAYER) {
|
||||
return
|
||||
}
|
||||
if (event.whoClicked !is Player) {
|
||||
return
|
||||
}
|
||||
var newArmorType = ArmorType.matchType(if (shift) event.currentItem else event.cursor)
|
||||
if (!shift && newArmorType != null && event.rawSlot != newArmorType.slot) {
|
||||
// Used for drag and drop checking to make sure you aren't trying to place a helmet in the boots slot.
|
||||
return
|
||||
}
|
||||
if (shift) {
|
||||
newArmorType = ArmorType.matchType(event.currentItem)
|
||||
if (newArmorType != null) {
|
||||
var equipping = true
|
||||
if (event.rawSlot == newArmorType.slot) {
|
||||
equipping = false
|
||||
}
|
||||
if (newArmorType == ArmorType.HELMET && equipping == isAirOrNull(event.whoClicked.inventory.helmet) || newArmorType == ArmorType.CHESTPLATE && equipping == isAirOrNull(
|
||||
event.whoClicked.inventory.chestplate
|
||||
) || newArmorType == ArmorType.LEGGINGS && equipping == isAirOrNull(event.whoClicked.inventory.leggings) || newArmorType == ArmorType.BOOTS && equipping == isAirOrNull(
|
||||
event.whoClicked.inventory.boots
|
||||
)
|
||||
) {
|
||||
val armorEquipEvent = ArmorEquipEvent(
|
||||
(event.whoClicked as Player)
|
||||
)
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (numberkey) {
|
||||
if (event.clickedInventory!!.type == InventoryType.PLAYER) {
|
||||
val hotbarItem = event.clickedInventory!!.getItem(event.hotbarButton)
|
||||
newArmorType = if (!isAirOrNull(hotbarItem)) {
|
||||
ArmorType.matchType(hotbarItem)
|
||||
} else {
|
||||
ArmorType.matchType(if (!isAirOrNull(event.currentItem)) event.currentItem else event.cursor)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isAirOrNull(event.cursor) && !isAirOrNull(event.currentItem)) {
|
||||
newArmorType = ArmorType.matchType(event.currentItem)
|
||||
}
|
||||
}
|
||||
if (newArmorType != null && event.rawSlot == newArmorType.slot) {
|
||||
val armorEquipEvent = ArmorEquipEvent(
|
||||
(event.whoClicked as Player)
|
||||
)
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
fun playerInteractEvent(e: PlayerInteractEvent) {
|
||||
if (e.useItemInHand() == Event.Result.DENY) {
|
||||
return
|
||||
}
|
||||
if (e.action == Action.PHYSICAL) {
|
||||
return
|
||||
}
|
||||
if (e.action == Action.RIGHT_CLICK_AIR || e.action == Action.RIGHT_CLICK_BLOCK) {
|
||||
val player = e.player
|
||||
if (e.useInteractedBlock() != Event.Result.DENY) {
|
||||
if (e.clickedBlock != null && e.action == Action.RIGHT_CLICK_BLOCK && !player.isSneaking) {
|
||||
val mat = e.clickedBlock!!.type
|
||||
}
|
||||
}
|
||||
val newArmorType = ArmorType.matchType(e.item)
|
||||
if (newArmorType != null) {
|
||||
if (newArmorType == ArmorType.HELMET && isAirOrNull(e.player.inventory.helmet) || newArmorType == ArmorType.CHESTPLATE && isAirOrNull(
|
||||
e.player.inventory.chestplate
|
||||
) || newArmorType == ArmorType.LEGGINGS && isAirOrNull(e.player.inventory.leggings) || newArmorType == ArmorType.BOOTS && isAirOrNull(
|
||||
e.player.inventory.boots
|
||||
)
|
||||
) {
|
||||
val armorEquipEvent = ArmorEquipEvent(e.player)
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
fun inventoryDrag(event: InventoryDragEvent) {
|
||||
val type = ArmorType.matchType(event.oldCursor)
|
||||
if (event.rawSlots.isEmpty()) {
|
||||
return
|
||||
}
|
||||
if (type != null && type.slot == event.rawSlots.stream().findFirst().orElse(0)) {
|
||||
val armorEquipEvent = ArmorEquipEvent(
|
||||
(event.whoClicked as Player)
|
||||
)
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun playerJoinEvent(event: PlayerJoinEvent) {
|
||||
val armorEquipEvent = ArmorEquipEvent(event.player)
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent)
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun playerRespawnEvent(event: PlayerRespawnEvent) {
|
||||
val armorEquipEvent = ArmorEquipEvent(event.player)
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent)
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun itemBreakEvent(event: PlayerItemBreakEvent) {
|
||||
val type = ArmorType.matchType(event.brokenItem)
|
||||
if (type != null) {
|
||||
val p = event.player
|
||||
val armorEquipEvent = ArmorEquipEvent(p)
|
||||
Bukkit.getPluginManager().callEvent(armorEquipEvent)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun playerDeathEvent(event: PlayerDeathEvent) {
|
||||
val p = event.entity
|
||||
if (event.keepInventory) {
|
||||
return
|
||||
}
|
||||
for (i in p.inventory.armorContents) {
|
||||
if (!isAirOrNull(i)) {
|
||||
Bukkit.getPluginManager().callEvent(ArmorEquipEvent(p))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun isAirOrNull(item: ItemStack?): Boolean {
|
||||
return item == null || item.type == Material.AIR
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.willfp.eco.spigot.eventlisteners.armor
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
enum class ArmorType(val slot: Int) {
|
||||
HELMET(5), CHESTPLATE(6), LEGGINGS(7), BOOTS(8);
|
||||
|
||||
companion object {
|
||||
fun matchType(itemStack: ItemStack?): ArmorType? {
|
||||
if (ArmorListener.isAirOrNull(itemStack)) {
|
||||
return null
|
||||
}
|
||||
itemStack ?: return null
|
||||
val type = itemStack.type.name
|
||||
return if (type.endsWith("_HELMET") || type.endsWith("_SKULL") || type.endsWith("PLAYER_HEAD")) {
|
||||
HELMET
|
||||
} else if (type.endsWith("_CHESTPLATE") || type.endsWith("ELYTRA")) {
|
||||
CHESTPLATE
|
||||
} else if (type.endsWith("_LEGGINGS")) {
|
||||
LEGGINGS
|
||||
} else if (type.endsWith("_BOOTS")) {
|
||||
BOOTS
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user