package net.riixo.wcore.listeners; import org.bukkit.entity.*; import net.riixo.wcore.basic.*; import net.riixo.wcore.utils.*; import org.bukkit.scheduler.*; import net.riixo.wcore.objects.*; import org.bukkit.plugin.*; import java.util.*; import org.bukkit.event.*; import org.bukkit.event.entity.*; import org.bukkit.*; import org.bukkit.event.inventory.*; public class TradeListener implements Listener { @EventHandler public void onInventoryDrag(final InventoryDragEvent e) { if (e.getWhoClicked() instanceof Player) { final Player p = (Player)e.getWhoClicked(); Trade trade = null; if (Main.tradeManager.getTradeFromAccepter(p) != null) { trade = Main.tradeManager.getTradeFromAccepter(p); } if (Main.tradeManager.getTradeFromRequester(p) != null) { trade = Main.tradeManager.getTradeFromRequester(p); } if (trade != null && trade.hasTradeWindowOpen(p)) { for (final int rawSlot : e.getRawSlots()) { if (TradeUtil.canPlaceItem(p, rawSlot) && !trade.isCountdownInProgress()) { final Trade finalTrade = trade; new BukkitRunnable() { public void run() { finalTrade.updateOpenTrade(); Main.tradeManager.addTrade(finalTrade); } }.runTaskLater((Plugin)Main.getMain(), 1L); } else { e.setCancelled(true); } } } } } @EventHandler public void onEntityDamage(final EntityDamageEvent e) { if (e.getEntity() instanceof Player && e.getDamage() > 0.0 && !e.isCancelled()) { final Player p = (Player)e.getEntity(); final double startHealth = p.getHealthScale(); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask((Plugin)Main.getMain(), (Runnable)new Runnable() { @Override public void run() { if (p.getHealthScale() != startHealth) { Trade trade = null; if (Main.tradeManager.getTradeFromAccepter(p) != null) { trade = Main.tradeManager.getTradeFromAccepter(p); } if (Main.tradeManager.getTradeFromRequester(p) != null) { trade = Main.tradeManager.getTradeFromRequester(p); } if (trade != null) { trade.cancelTrade(true); } trade = null; } } }, 0L); } } @EventHandler public void onInventoryClick(final InventoryClickEvent e) { if (e.getWhoClicked() instanceof Player) { final Player p = (Player)e.getWhoClicked(); Trade trade = null; boolean isRequester = false; if (Main.tradeManager.getTradeFromAccepter(p) != null) { trade = Main.tradeManager.getTradeFromAccepter(p); isRequester = false; } if (Main.tradeManager.getTradeFromRequester(p) != null) { trade = Main.tradeManager.getTradeFromRequester(p); isRequester = true; } if (trade != null && trade.hasTradeWindowOpen(p)) { if (e.getClick() == ClickType.LEFT || e.getClick() == ClickType.RIGHT) { if (TradeUtil.canPlaceItem(p, e.getRawSlot()) && !trade.isCountdownInProgress()) { final Trade finalTrade = trade; new BukkitRunnable() { public void run() { finalTrade.updateOpenTrade(); Main.tradeManager.addTrade(finalTrade); } }.runTaskLater((Plugin)Main.getMain(), 1L); } else { if (e.getRawSlot() == 36) { if (isRequester) { trade.setRequesterReady(true); Main.tradeManager.addTrade(trade); } else { trade.setAccepterReady(true); Main.tradeManager.addTrade(trade); } } else if (e.getRawSlot() == 38) { trade.cancelTrade(true); } e.setCancelled(true); } } else { e.setCancelled(true); } } trade = null; } } @EventHandler public void onInventoryClose(final InventoryCloseEvent e) { if (e.getPlayer() instanceof Player) { final Player p = (Player)e.getPlayer(); Trade trade = null; if (Main.tradeManager.getTradeFromAccepter(p) != null) { trade = Main.tradeManager.getTradeFromAccepter(p); } if (Main.tradeManager.getTradeFromRequester(p) != null) { trade = Main.tradeManager.getTradeFromRequester(p); } if (trade != null && trade.hasTradeWindowOpen(p) && !trade.isCancelled()) { trade.cancelTrade(true); } trade = null; } } }