- package net.riixo.wcore.objects;
- import net.riixo.wcore.basic.*;
- import org.bukkit.entity.*;
- import org.bukkit.inventory.*;
- import org.bukkit.*;
- import net.riixo.wcore.utils.*;
- import org.bukkit.scheduler.*;
- import org.bukkit.plugin.*;
- import java.util.*;
- public class Trade
- {
- private Main plugin;
- private Player tradeRequester;
- private Player tradeAccepter;
- private Inventory requesterInventory;
- private Inventory accepterInventory;
- private ItemStack[] requesterTradeRequestItems;
- private ItemStack[] accepterTradeRequestItems;
- private boolean countdownInProgress;
- private boolean tradeAccepted;
- private boolean requesterReady;
- private boolean accepterReady;
- private boolean tradeReady;
- private boolean cancelled;
- private int countdown;
- public Trade(final Main plugin, final Player tradeRequester, final Player tradeAccepter) {
- this.tradeRequester = null;
- this.tradeAccepter = null;
- this.requesterInventory = null;
- this.accepterInventory = null;
- this.requesterTradeRequestItems = new ItemStack[0];
- this.accepterTradeRequestItems = new ItemStack[0];
- this.countdownInProgress = false;
- this.tradeAccepted = false;
- this.requesterReady = false;
- this.accepterReady = false;
- this.tradeReady = false;
- this.cancelled = false;
- this.countdown = -1;
- this.plugin = plugin;
- this.tradeRequester = tradeRequester;
- this.tradeAccepter = tradeAccepter;
- ChatUtil.sendMsg(tradeRequester, "&8>> &aWymiana wyslana do gracza &7" + tradeAccepter.getName());
- ChatUtil.sendMsg(tradeAccepter, "&8>> &aGracz &7" + tradeRequester.getName() + " &azaprosil cie do wymiany, masz 15 sekund by akceptowac &7/wymiana akceptuj&a.");
- this.startTimeOutCounter();
- }
- public void openTrade() {
- if (!this.isCancelled()) {
- if (this.tradeRequester.isOnline() && this.tradeAccepter.isOnline() && this.tradeRequester.getLocation().distance(this.tradeAccepter.getLocation()) <= 10.0) {
- final String invName = ChatUtil.fixColor("&8>>&aTy &8>>&cOn");
- final Inventory inv = Bukkit.createInventory((InventoryHolder)null, 45, invName);
- final ItemStack divider = TradeUtil.getItem(Material.IRON_FENCE, 1, 0, " ");
- final ItemStack declineTrade = TradeUtil.getItem(Material.MAGMA_CREAM, 1, 0, ChatUtil.fixColor("&cKliknij, aby anulowac!"));
- final ItemStack acceptTrade = TradeUtil.getItem(Material.SLIME_BALL, 1, 0, ChatUtil.fixColor("&aKliknij, aby akceptowac!"));
- final ItemStack notReady = TradeUtil.getItem(Material.INK_SACK, 1, 8, ChatUtil.fixColor("&cNie gotowy"));
- inv.setItem(4, divider);
- inv.setItem(13, divider);
- inv.setItem(22, divider);
- inv.setItem(31, divider);
- inv.setItem(40, divider);
- inv.setItem(36, acceptTrade);
- inv.setItem(37, declineTrade);
- inv.setItem(39, notReady);
- inv.setItem(44, notReady);
- (this.requesterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName)).setContents(inv.getContents());
- (this.accepterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName)).setContents(inv.getContents());
- this.tradeRequester.openInventory(this.requesterInventory);
- this.tradeAccepter.openInventory(this.accepterInventory);
- }
- else {
- this.cancelTrade(true);
- }
- }
- }
- public void closeTrade() {
- if (this.tradeRequester.isOnline() && this.tradeRequester.getOpenInventory() != null && this.tradeRequester.getOpenInventory().getTopInventory() != null) {
- this.tradeRequester.closeInventory();
- this.tradeRequester.updateInventory();
- }
- if (this.tradeAccepter.isOnline() && this.tradeAccepter.getOpenInventory() != null && this.tradeAccepter.getOpenInventory().getTopInventory() != null) {
- this.tradeAccepter.closeInventory();
- this.tradeAccepter.updateInventory();
- }
- }
- public void startTimeOutCounter() {
- new BukkitRunnable() {
- int seconds = 0;
- public void run() {
- if (!Trade.this.isCancelled()) {
- if (this.seconds < 15) {
- if (!Trade.this.tradeRequester.isOnline() || !Trade.this.tradeAccepter.isOnline() || !Trade.this.tradeRequester.getWorld().getName().equalsIgnoreCase(Trade.this.tradeAccepter.getWorld().getName()) || Trade.this.tradeRequester.getLocation().distance(Trade.this.tradeAccepter.getLocation()) > 10.0) {
- Trade.this.cancelTrade(true);
- this.cancel();
- }
- if (Trade.this.isTradeAccepted()) {
- this.cancel();
- }
- }
- else {
- Trade.this.cancelTrade(true);
- this.cancel();
- }
- ++this.seconds;
- }
- else {
- this.cancel();
- }
- }
- }.runTaskTimer((Plugin)this.plugin, 20L, 20L);
- }
- public void startReadyCounter() {
- this.countdownInProgress = true;
- this.countdown = 5;
- new BukkitRunnable() {
- int seconds = 0;
- public void run() {
- if (!Trade.this.isCancelled()) {
- Trade.this.updateOpenTrade();
- if (this.seconds < 5) {
- if (!Trade.this.tradeRequester.isOnline() || !Trade.this.tradeAccepter.isOnline() || !Trade.this.hasTradeWindowOpen(Trade.this.tradeRequester) || !Trade.this.hasTradeWindowOpen(Trade.this.tradeAccepter)) {
- Trade.this.cancelTrade(true);
- this.cancel();
- }
- }
- else {
- Trade.this.cancelTrade(false);
- this.cancel();
- }
- final Trade this$2;
- final Trade this$0 = this$2 = Trade.this;
- Trade.access$3(this$2, this$2.countdown - 1);
- ++this.seconds;
- }
- else {
- this.cancel();
- }
- }
- }.runTaskTimer((Plugin)this.plugin, 20L, 20L);
- }
- public boolean isCountdownInProgress() {
- return this.countdownInProgress;
- }
- public void giveItemsFromTrade() {
- final ItemStack[] empty = new ItemStack[0];
- this.tradeRequester.getInventory().addItem(this.getAccepterTradeRequestItems());
- this.setAccepterTradeRequestItems(empty);
- this.tradeAccepter.getInventory().addItem(this.getRequesterTradeRequestItems());
- this.setRequesterTradeRequestItems(empty);
- }
- public void returnItems() {
- final ItemStack[] empty = new ItemStack[0];
- this.tradeRequester.getInventory().addItem(this.getRequesterTradeRequestItems());
- this.setRequesterTradeRequestItems(empty);
- this.tradeAccepter.getInventory().addItem(this.getAccepterTradeRequestItems());
- this.setAccepterTradeRequestItems(empty);
- }
- public boolean hasTradeWindowOpen(final Player p) {
- boolean open = false;
- if (p.getOpenInventory() != null) {
- final Inventory inv = p.getOpenInventory().getTopInventory();
- if (inv.getSize() == 45 && inv.getTitle().contains(ChatUtil.fixColor("&8>>&aTy &8>>&cOn"))) {
- open = true;
- }
- }
- return open;
- }
- public void updateOpenTrade() {
- if (!this.isCancelled()) {
- if (this.tradeRequester.isOnline() && this.tradeAccepter.isOnline() && this.tradeRequester.getLocation().distance(this.tradeAccepter.getLocation()) <= 10.0) {
- this.setRequesterTradeRequestItems(Main.tradeManager.getItemsRequester(this.getRequester()));
- this.setAccepterTradeRequestItems(Main.tradeManager.getItemsAccepter(this.getAccepter()));
- final String invName = ChatUtil.fixColor("&8>>&aTy &8>>&cOn");
- final Inventory inv = Bukkit.createInventory((InventoryHolder)null, 45, invName);
- int dividerCountdown = 1;
- if (this.countdown > 0) {
- dividerCountdown = this.countdown;
- }
- final ItemStack divider = TradeUtil.getItem(Material.IRON_FENCE, dividerCountdown, 0, " ", null);
- final ItemStack declineTrade = TradeUtil.getItem(Material.MAGMA_CREAM, 1, 0, ChatUtil.fixColor("&cKliknij, aby anulowac!"));
- final ItemStack acceptTrade = TradeUtil.getItem(Material.SLIME_BALL, 1, 0, ChatUtil.fixColor("&aKliknij, aby akceptowac!"));
- final ItemStack ready = TradeUtil.getItem(Material.INK_SACK, 1, 10, ChatUtil.fixColor("&aGotowy"));
- final ItemStack notReady = TradeUtil.getItem(Material.INK_SACK, 1, 8, ChatUtil.fixColor("&cNie gotowy"));
- inv.setItem(4, divider);
- inv.setItem(13, divider);
- inv.setItem(22, divider);
- inv.setItem(31, divider);
- inv.setItem(40, divider);
- inv.setItem(36, acceptTrade);
- inv.setItem(37, declineTrade);
- inv.setItem(39, notReady);
- inv.setItem(44, notReady);
- Inventory requesterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName);
- requesterInventory.setContents(inv.getContents());
- requesterInventory = Main.tradeManager.setItemsLeft(requesterInventory, this.getRequesterTradeRequestItems());
- requesterInventory = Main.tradeManager.setItemsRight(requesterInventory, this.getAccepterTradeRequestItems());
- Inventory accepterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName);
- accepterInventory.setContents(inv.getContents());
- accepterInventory = Main.tradeManager.setItemsLeft(accepterInventory, this.getAccepterTradeRequestItems());
- accepterInventory = Main.tradeManager.setItemsRight(accepterInventory, this.getRequesterTradeRequestItems());
- if (this.isRequesterReady()) {
- requesterInventory.setItem(39, ready);
- accepterInventory.setItem(44, ready);
- }
- if (this.isAccepterReady()) {
- requesterInventory.setItem(44, ready);
- accepterInventory.setItem(39, ready);
- }
- this.tradeRequester.getOpenInventory().getTopInventory().setContents(requesterInventory.getContents());
- this.tradeAccepter.getOpenInventory().getTopInventory().setContents(accepterInventory.getContents());
- }
- else {
- this.cancelTrade(true);
- }
- }
- }
- public void setRequesterTradeRequestItems(final ItemStack[] items) {
- this.requesterTradeRequestItems = items;
- }
- public ItemStack[] getRequesterTradeRequestItems() {
- return this.requesterTradeRequestItems;
- }
- public void setAccepterTradeRequestItems(final ItemStack[] items) {
- this.accepterTradeRequestItems = items;
- }
- public ItemStack[] getAccepterTradeRequestItems() {
- return this.accepterTradeRequestItems;
- }
- public void setTradeAccepted(final boolean bool) {
- ChatUtil.sendMsg(this.tradeRequester, "&8>> &aWymiana zostala akceptowana!");
- ChatUtil.sendMsg(this.tradeAccepter, "&8>> &aWymiana zostala akceptowana!");
- this.openTrade();
- this.tradeAccepted = bool;
- }
- public boolean isTradeAccepted() {
- return this.tradeAccepted;
- }
- public void setRequesterReady(final boolean bool) {
- this.requesterReady = bool;
- this.updateOpenTrade();
- if (this.isRequesterReady() && this.isAccepterReady() && !this.isCountdownInProgress()) {
- this.startReadyCounter();
- }
- }
- public boolean isRequesterReady() {
- return this.requesterReady;
- }
- public void setAccepterReady(final boolean bool) {
- this.accepterReady = bool;
- this.updateOpenTrade();
- if (this.isRequesterReady() && this.isAccepterReady() && !this.isCountdownInProgress()) {
- this.startReadyCounter();
- }
- }
- public boolean isAccepterReady() {
- return this.accepterReady;
- }
- public void setTradeReady(final boolean bool) {
- this.tradeReady = bool;
- }
- public boolean isTradeReady() {
- return this.tradeReady;
- }
- public void cancelTrade(final boolean cancelled) {
- this.cancelled = true;
- if (cancelled) {
- this.returnItems();
- this.closeTrade();
- if (this.tradeRequester.getLocation().distance(this.tradeAccepter.getLocation()) > 10.0) {
- if (this.tradeRequester.isOnline()) {
- ChatUtil.sendMsg(this.tradeRequester, "&8>> &cJestes za daleko od gracza, minimalna odleglosc to 10 metrow!");
- }
- if (this.tradeAccepter.isOnline()) {
- ChatUtil.sendMsg(this.tradeAccepter, "&8>> &cJestes za daleko od gracza, minimalna odleglosc to 10 metrow!");
- }
- }
- if (this.tradeRequester.isOnline()) {
- ChatUtil.sendMsg(this.tradeRequester, "&8>> &cWymiana zostala anulowana!");
- }
- if (this.tradeAccepter.isOnline()) {
- ChatUtil.sendMsg(this.tradeAccepter, "&8>> &cWymiana zostala anulowana!");
- }
- }
- else {
- this.giveItemsFromTrade();
- this.closeTrade();
- if (this.tradeRequester.isOnline()) {
- ChatUtil.sendMsg(this.tradeRequester, "&8>> &aWymiana zostala zakonczona sukcesem!");
- }
- if (this.tradeAccepter.isOnline()) {
- ChatUtil.sendMsg(this.tradeAccepter, "&8>> &aWymiana zostala zakonczona sukcesem!");
- }
- }
- this.countdownInProgress = false;
- Main.tradeManager.removeTrade(this);
- }
- public boolean isCancelled() {
- return this.cancelled;
- }
- public Player getRequester() {
- return this.tradeRequester;
- }
- public Player getAccepter() {
- return this.tradeAccepter;
- }
- static /* synthetic */ void access$3(final Trade trade, final int countdown) {
- trade.countdown = countdown;
- }
- }