Facebook
From coremax, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 212
  1. package net.riixo.wcore.objects;
  2.  
  3. import net.riixo.wcore.basic.*;
  4. import org.bukkit.entity.*;
  5. import org.bukkit.inventory.*;
  6. import org.bukkit.*;
  7. import net.riixo.wcore.utils.*;
  8. import org.bukkit.scheduler.*;
  9. import org.bukkit.plugin.*;
  10. import java.util.*;
  11.  
  12. public class Trade
  13. {
  14.     private Main plugin;
  15.     private Player tradeRequester;
  16.     private Player tradeAccepter;
  17.     private Inventory requesterInventory;
  18.     private Inventory accepterInventory;
  19.     private ItemStack[] requesterTradeRequestItems;
  20.     private ItemStack[] accepterTradeRequestItems;
  21.     private boolean countdownInProgress;
  22.     private boolean tradeAccepted;
  23.     private boolean requesterReady;
  24.     private boolean accepterReady;
  25.     private boolean tradeReady;
  26.     private boolean cancelled;
  27.     private int countdown;
  28.    
  29.     public Trade(final Main plugin, final Player tradeRequester, final Player tradeAccepter) {
  30.         this.tradeRequester = null;
  31.         this.tradeAccepter = null;
  32.         this.requesterInventory = null;
  33.         this.accepterInventory = null;
  34.         this.requesterTradeRequestItems = new ItemStack[0];
  35.         this.accepterTradeRequestItems = new ItemStack[0];
  36.         this.countdownInProgress = false;
  37.         this.tradeAccepted = false;
  38.         this.requesterReady = false;
  39.         this.accepterReady = false;
  40.         this.tradeReady = false;
  41.         this.cancelled = false;
  42.         this.countdown = -1;
  43.         this.plugin = plugin;
  44.         this.tradeRequester = tradeRequester;
  45.         this.tradeAccepter = tradeAccepter;
  46.         ChatUtil.sendMsg(tradeRequester, "&8>> &aWymiana wyslana do gracza &7" + tradeAccepter.getName());
  47.         ChatUtil.sendMsg(tradeAccepter, "&8>> &aGracz &7" + tradeRequester.getName() + " &azaprosil cie do wymiany, masz 15 sekund by akceptowac &7/wymiana akceptuj&a.");
  48.         this.startTimeOutCounter();
  49.     }
  50.    
  51.     public void openTrade() {
  52.         if (!this.isCancelled()) {
  53.             if (this.tradeRequester.isOnline() && this.tradeAccepter.isOnline() && this.tradeRequester.getLocation().distance(this.tradeAccepter.getLocation()) <= 10.0) {
  54.                 final String invName = ChatUtil.fixColor("&8>>&aTy                  &8>>&cOn");
  55.                 final Inventory inv = Bukkit.createInventory((InventoryHolder)null, 45, invName);
  56.                 final ItemStack divider = TradeUtil.getItem(Material.IRON_FENCE, 1, 0, " ");
  57.                 final ItemStack declineTrade = TradeUtil.getItem(Material.MAGMA_CREAM, 1, 0, ChatUtil.fixColor("&cKliknij, aby anulowac!"));
  58.                 final ItemStack acceptTrade = TradeUtil.getItem(Material.SLIME_BALL, 1, 0, ChatUtil.fixColor("&aKliknij, aby akceptowac!"));
  59.                 final ItemStack notReady = TradeUtil.getItem(Material.INK_SACK, 1, 8, ChatUtil.fixColor("&cNie gotowy"));
  60.                 inv.setItem(4, divider);
  61.                 inv.setItem(13, divider);
  62.                 inv.setItem(22, divider);
  63.                 inv.setItem(31, divider);
  64.                 inv.setItem(40, divider);
  65.                 inv.setItem(36, acceptTrade);
  66.                 inv.setItem(37, declineTrade);
  67.                 inv.setItem(39, notReady);
  68.                 inv.setItem(44, notReady);
  69.                 (this.requesterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName)).setContents(inv.getContents());
  70.                 (this.accepterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName)).setContents(inv.getContents());
  71.                 this.tradeRequester.openInventory(this.requesterInventory);
  72.                 this.tradeAccepter.openInventory(this.accepterInventory);
  73.             }
  74.             else {
  75.                 this.cancelTrade(true);
  76.             }
  77.         }
  78.     }
  79.    
  80.     public void closeTrade() {
  81.         if (this.tradeRequester.isOnline() && this.tradeRequester.getOpenInventory() != null && this.tradeRequester.getOpenInventory().getTopInventory() != null) {
  82.             this.tradeRequester.closeInventory();
  83.             this.tradeRequester.updateInventory();
  84.         }
  85.         if (this.tradeAccepter.isOnline() && this.tradeAccepter.getOpenInventory() != null && this.tradeAccepter.getOpenInventory().getTopInventory() != null) {
  86.             this.tradeAccepter.closeInventory();
  87.             this.tradeAccepter.updateInventory();
  88.         }
  89.     }
  90.    
  91.     public void startTimeOutCounter() {
  92.         new BukkitRunnable() {
  93.             int seconds = 0;
  94.            
  95.             public void run() {
  96.                 if (!Trade.this.isCancelled()) {
  97.                     if (this.seconds < 15) {
  98.                         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) {
  99.                             Trade.this.cancelTrade(true);
  100.                             this.cancel();
  101.                         }
  102.                         if (Trade.this.isTradeAccepted()) {
  103.                             this.cancel();
  104.                         }
  105.                     }
  106.                     else {
  107.                         Trade.this.cancelTrade(true);
  108.                         this.cancel();
  109.                     }
  110.                     ++this.seconds;
  111.                 }
  112.                 else {
  113.                     this.cancel();
  114.                 }
  115.             }
  116.         }.runTaskTimer((Plugin)this.plugin, 20L, 20L);
  117.     }
  118.    
  119.     public void startReadyCounter() {
  120.         this.countdownInProgress = true;
  121.         this.countdown = 5;
  122.         new BukkitRunnable() {
  123.             int seconds = 0;
  124.            
  125.             public void run() {
  126.                 if (!Trade.this.isCancelled()) {
  127.                     Trade.this.updateOpenTrade();
  128.                     if (this.seconds < 5) {
  129.                         if (!Trade.this.tradeRequester.isOnline() || !Trade.this.tradeAccepter.isOnline() || !Trade.this.hasTradeWindowOpen(Trade.this.tradeRequester) || !Trade.this.hasTradeWindowOpen(Trade.this.tradeAccepter)) {
  130.                             Trade.this.cancelTrade(true);
  131.                             this.cancel();
  132.                         }
  133.                     }
  134.                     else {
  135.                         Trade.this.cancelTrade(false);
  136.                         this.cancel();
  137.                     }
  138.                     final Trade this$2;
  139.                     final Trade this$0 = this$2 = Trade.this;
  140.                     Trade.access$3(this$2, this$2.countdown - 1);
  141.                     ++this.seconds;
  142.                 }
  143.                 else {
  144.                     this.cancel();
  145.                 }
  146.             }
  147.         }.runTaskTimer((Plugin)this.plugin, 20L, 20L);
  148.     }
  149.    
  150.     public boolean isCountdownInProgress() {
  151.         return this.countdownInProgress;
  152.     }
  153.    
  154.     public void giveItemsFromTrade() {
  155.         final ItemStack[] empty = new ItemStack[0];
  156.         this.tradeRequester.getInventory().addItem(this.getAccepterTradeRequestItems());
  157.         this.setAccepterTradeRequestItems(empty);
  158.         this.tradeAccepter.getInventory().addItem(this.getRequesterTradeRequestItems());
  159.         this.setRequesterTradeRequestItems(empty);
  160.     }
  161.    
  162.     public void returnItems() {
  163.         final ItemStack[] empty = new ItemStack[0];
  164.         this.tradeRequester.getInventory().addItem(this.getRequesterTradeRequestItems());
  165.         this.setRequesterTradeRequestItems(empty);
  166.         this.tradeAccepter.getInventory().addItem(this.getAccepterTradeRequestItems());
  167.         this.setAccepterTradeRequestItems(empty);
  168.     }
  169.    
  170.     public boolean hasTradeWindowOpen(final Player p) {
  171.         boolean open = false;
  172.         if (p.getOpenInventory() != null) {
  173.             final Inventory inv = p.getOpenInventory().getTopInventory();
  174.             if (inv.getSize() == 45 && inv.getTitle().contains(ChatUtil.fixColor("&8>>&aTy                  &8>>&cOn"))) {
  175.                 open = true;
  176.             }
  177.         }
  178.         return open;
  179.     }
  180.    
  181.     public void updateOpenTrade() {
  182.         if (!this.isCancelled()) {
  183.             if (this.tradeRequester.isOnline() && this.tradeAccepter.isOnline() && this.tradeRequester.getLocation().distance(this.tradeAccepter.getLocation()) <= 10.0) {
  184.                 this.setRequesterTradeRequestItems(Main.tradeManager.getItemsRequester(this.getRequester()));
  185.                 this.setAccepterTradeRequestItems(Main.tradeManager.getItemsAccepter(this.getAccepter()));
  186.                 final String invName = ChatUtil.fixColor("&8>>&aTy                  &8>>&cOn");
  187.                 final Inventory inv = Bukkit.createInventory((InventoryHolder)null, 45, invName);
  188.                 int dividerCountdown = 1;
  189.                 if (this.countdown > 0) {
  190.                     dividerCountdown = this.countdown;
  191.                 }
  192.                 final ItemStack divider = TradeUtil.getItem(Material.IRON_FENCE, dividerCountdown, 0, " ", null);
  193.                 final ItemStack declineTrade = TradeUtil.getItem(Material.MAGMA_CREAM, 1, 0, ChatUtil.fixColor("&cKliknij, aby anulowac!"));
  194.                 final ItemStack acceptTrade = TradeUtil.getItem(Material.SLIME_BALL, 1, 0, ChatUtil.fixColor("&aKliknij, aby akceptowac!"));
  195.                 final ItemStack ready = TradeUtil.getItem(Material.INK_SACK, 1, 10, ChatUtil.fixColor("&aGotowy"));
  196.                 final ItemStack notReady = TradeUtil.getItem(Material.INK_SACK, 1, 8, ChatUtil.fixColor("&cNie gotowy"));
  197.                 inv.setItem(4, divider);
  198.                 inv.setItem(13, divider);
  199.                 inv.setItem(22, divider);
  200.                 inv.setItem(31, divider);
  201.                 inv.setItem(40, divider);
  202.                 inv.setItem(36, acceptTrade);
  203.                 inv.setItem(37, declineTrade);
  204.                 inv.setItem(39, notReady);
  205.                 inv.setItem(44, notReady);
  206.                 Inventory requesterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName);
  207.                 requesterInventory.setContents(inv.getContents());
  208.                 requesterInventory = Main.tradeManager.setItemsLeft(requesterInventory, this.getRequesterTradeRequestItems());
  209.                 requesterInventory = Main.tradeManager.setItemsRight(requesterInventory, this.getAccepterTradeRequestItems());
  210.                 Inventory accepterInventory = Bukkit.createInventory((InventoryHolder)null, 45, invName);
  211.                 accepterInventory.setContents(inv.getContents());
  212.                 accepterInventory = Main.tradeManager.setItemsLeft(accepterInventory, this.getAccepterTradeRequestItems());
  213.                 accepterInventory = Main.tradeManager.setItemsRight(accepterInventory, this.getRequesterTradeRequestItems());
  214.                 if (this.isRequesterReady()) {
  215.                     requesterInventory.setItem(39, ready);
  216.                     accepterInventory.setItem(44, ready);
  217.                 }
  218.                 if (this.isAccepterReady()) {
  219.                     requesterInventory.setItem(44, ready);
  220.                     accepterInventory.setItem(39, ready);
  221.                 }
  222.                 this.tradeRequester.getOpenInventory().getTopInventory().setContents(requesterInventory.getContents());
  223.                 this.tradeAccepter.getOpenInventory().getTopInventory().setContents(accepterInventory.getContents());
  224.             }
  225.             else {
  226.                 this.cancelTrade(true);
  227.             }
  228.         }
  229.     }
  230.    
  231.     public void setRequesterTradeRequestItems(final ItemStack[] items) {
  232.         this.requesterTradeRequestItems = items;
  233.     }
  234.    
  235.     public ItemStack[] getRequesterTradeRequestItems() {
  236.         return this.requesterTradeRequestItems;
  237.     }
  238.    
  239.     public void setAccepterTradeRequestItems(final ItemStack[] items) {
  240.         this.accepterTradeRequestItems = items;
  241.     }
  242.    
  243.     public ItemStack[] getAccepterTradeRequestItems() {
  244.         return this.accepterTradeRequestItems;
  245.     }
  246.    
  247.     public void setTradeAccepted(final boolean bool) {
  248.         ChatUtil.sendMsg(this.tradeRequester, "&8>> &aWymiana zostala akceptowana!");
  249.         ChatUtil.sendMsg(this.tradeAccepter, "&8>> &aWymiana zostala akceptowana!");
  250.         this.openTrade();
  251.         this.tradeAccepted = bool;
  252.     }
  253.    
  254.     public boolean isTradeAccepted() {
  255.         return this.tradeAccepted;
  256.     }
  257.    
  258.     public void setRequesterReady(final boolean bool) {
  259.         this.requesterReady = bool;
  260.         this.updateOpenTrade();
  261.         if (this.isRequesterReady() && this.isAccepterReady() && !this.isCountdownInProgress()) {
  262.             this.startReadyCounter();
  263.         }
  264.     }
  265.    
  266.     public boolean isRequesterReady() {
  267.         return this.requesterReady;
  268.     }
  269.    
  270.     public void setAccepterReady(final boolean bool) {
  271.         this.accepterReady = bool;
  272.         this.updateOpenTrade();
  273.         if (this.isRequesterReady() && this.isAccepterReady() && !this.isCountdownInProgress()) {
  274.             this.startReadyCounter();
  275.         }
  276.     }
  277.    
  278.     public boolean isAccepterReady() {
  279.         return this.accepterReady;
  280.     }
  281.    
  282.     public void setTradeReady(final boolean bool) {
  283.         this.tradeReady = bool;
  284.     }
  285.    
  286.     public boolean isTradeReady() {
  287.         return this.tradeReady;
  288.     }
  289.    
  290.     public void cancelTrade(final boolean cancelled) {
  291.         this.cancelled = true;
  292.         if (cancelled) {
  293.             this.returnItems();
  294.             this.closeTrade();
  295.             if (this.tradeRequester.getLocation().distance(this.tradeAccepter.getLocation()) > 10.0) {
  296.                 if (this.tradeRequester.isOnline()) {
  297.                     ChatUtil.sendMsg(this.tradeRequester, "&8>> &cJestes za daleko od gracza, minimalna odleglosc to 10 metrow!");
  298.                 }
  299.                 if (this.tradeAccepter.isOnline()) {
  300.                     ChatUtil.sendMsg(this.tradeAccepter, "&8>> &cJestes za daleko od gracza, minimalna odleglosc to 10 metrow!");
  301.                 }
  302.             }
  303.             if (this.tradeRequester.isOnline()) {
  304.                 ChatUtil.sendMsg(this.tradeRequester, "&8>> &cWymiana zostala anulowana!");
  305.             }
  306.             if (this.tradeAccepter.isOnline()) {
  307.                 ChatUtil.sendMsg(this.tradeAccepter, "&8>> &cWymiana zostala anulowana!");
  308.             }
  309.         }
  310.         else {
  311.             this.giveItemsFromTrade();
  312.             this.closeTrade();
  313.             if (this.tradeRequester.isOnline()) {
  314.                 ChatUtil.sendMsg(this.tradeRequester, "&8>> &aWymiana zostala zakonczona sukcesem!");
  315.             }
  316.             if (this.tradeAccepter.isOnline()) {
  317.                 ChatUtil.sendMsg(this.tradeAccepter, "&8>> &aWymiana zostala zakonczona sukcesem!");
  318.             }
  319.         }
  320.         this.countdownInProgress = false;
  321.         Main.tradeManager.removeTrade(this);
  322.     }
  323.    
  324.     public boolean isCancelled() {
  325.         return this.cancelled;
  326.     }
  327.    
  328.     public Player getRequester() {
  329.         return this.tradeRequester;
  330.     }
  331.    
  332.     public Player getAccepter() {
  333.         return this.tradeAccepter;
  334.     }
  335.    
  336.     static /* synthetic */ void access$3(final Trade trade, final int countdown) {
  337.         trade.countdown = countdown;
  338.     }
  339. }
  340.