Its the same thing accept then Quickly Accept and decline I can't seem to fix it ...


Code:
	case 13092:
			 if (System.currentTimeMillis() - c.lastButton < 400) {

					c.lastButton = System.currentTimeMillis();

					break;

				} else {

					c.lastButton = System.currentTimeMillis();

				}
			Client ot = (Client) Server.playerHandler.players[c.tradeWith];
			if(ot == null) {
				c.getTradeAndDuel().declineTrade();
				c.sendMessage("Trade declined as the other player has disconnected.");
				break;
			}
			c.getPA().sendFrame126("Waiting for other player...", 3431);
			ot.getPA().sendFrame126("Other player has accepted", 3431);	
			c.goodTrade= true;
			ot.goodTrade= true;
			
			for (GameItem item : c.offeredItems) {
				if (item.id > 0) {
					if(ot.getItems().freeSlots() < c.offeredItems.size()) {					
						c.sendMessage(ot.playerName +" only has "+ot.getItems().freeSlots()+" free slots, please remove "+(c.offeredItems.size() - ot.getItems().freeSlots())+" items.");
						ot.sendMessage(c.playerName +" has to remove "+(c.offeredItems.size() - ot.getItems().freeSlots())+" items or you could offer them "+(c.offeredItems.size() - ot.getItems().freeSlots())+" items.");
						c.goodTrade= false;
						ot.goodTrade= false;
						c.getPA().sendFrame126("Not enough inventory space...", 3431);
						ot.getPA().sendFrame126("Not enough inventory space...", 3431);
							break;
					} else {
						c.getPA().sendFrame126("Waiting for other player...", 3431);				
						ot.getPA().sendFrame126("Other player has accepted", 3431);
						c.goodTrade= true;
						ot.goodTrade= true;
						}
					}	
				}	
				if (c.inTrade && !c.tradeConfirmed && ot.goodTrade && c.goodTrade) {
					c.tradeConfirmed = true;
					if(ot.tradeConfirmed) {
						c.getTradeAndDuel().confirmScreen();
						ot.getTradeAndDuel().confirmScreen();
						break;
					}
							  
				}
			break;
					
			case 13218:
			  if (System.currentTimeMillis() - c.lastButton < 800) {

					c.lastButton = System.currentTimeMillis();

					break;

				} else {

					c.lastButton = System.currentTimeMillis();

				}
			c.tradeAccepted = true;
			Client ot1 = (Client) Server.playerHandler.players[c.tradeWith];
				if (ot1 == null) {
					c.getTradeAndDuel().declineTrade();
					c.sendMessage("Trade declined as the other player has disconnected.");
					break;
				}
				
				if (c.inTrade && c.tradeConfirmed && ot1.tradeConfirmed && !c.tradeConfirmed2) {
					c.tradeConfirmed2 = true;
					if(ot1.tradeConfirmed2) {	
						c.acceptedTrade = true;
						ot1.acceptedTrade = true;
						c.getTradeAndDuel().giveItems();
						ot1.getTradeAndDuel().giveItems();
						break;
					}
					ot1.getPA().sendFrame126("Other player has accepted.", 3535);
					c.getPA().sendFrame126("Waiting for other player...", 3535);
				}
				break;
Code:
package server.model.players;

import java.util.concurrent.CopyOnWriteArrayList;

import server.Config;
import server.Server;
import server.model.items.GameItem;
import server.model.items.Item;
import server.util.Misc;


public class TradeAndDuel{

	private Client c;
	public TradeAndDuel(Client Client) {
		this.c = Client;
	}
	
	/**
	* Trading
	**/
	
	public void requestTrade(int id){
		try {
			Client o = (Client) Server.playerHandler.players[id];
			if (id == c.playerId)
				return;
			c.tradeWith = id;
			if(!c.inTrade && o.tradeRequested && o.tradeWith == c.playerId) {
				c.getTradeAndDuel().openTrade();
				o.getTradeAndDuel().openTrade();			
			} else if(!c.inTrade) {
				
				c.tradeRequested = true;
				c.sendMessage("Sending trade request...");
				o.sendMessage(Misc.formatPlayerName(c.playerName) + ":tradereq:");
			}
		} 
		catch (Exception e) {
			Misc.println("Error requesting trade.");
		}
	}
	
	public void openTrade() {
		Client o = (Client) Server.playerHandler.players[c.tradeWith];
		if(o == null) {
			return;
		}
		c.inTrade = true;
		c.canOffer = true;
		c.tradeStatus = 1;
		c.tradeRequested = false;
		c.getItems().resetItems(3322);
		resetTItems(3415);
		resetOTItems(3416);
		String out = o.playerName;
		if(o.playerRights == 1) {
			out = "@[email protected]" + out;
		} 
		else if(o.playerRights == 2) {
			out = "@[email protected]" + out;
		}
		c.getPA().sendFrame126("Trading with: " +Misc.formatPlayerName(out)+"" ,3417);
		c.getPA().sendFrame126("", 3431);
		c.getPA().sendFrame126("Are you sure you want to make this trade?", 3535);
		c.getPA().sendFrame248(3323, 3321);
		displayWAndI(c);
		c.getPA().resetFollow();
	}	
	
	
	
	public void resetTItems(int WriteFrame) {
       		synchronized(c) {
			c.getOutStream().createFrameVarSizeWord(53);
			c.getOutStream().writeWord(WriteFrame);
			int len = c.offeredItems.toArray().length;
			int current = 0;
			c.getOutStream().writeWord(len);
			for (GameItem item : c.offeredItems) {
				if (item.amount > 254) {
					c.getOutStream().writeByte(255);
					c.getOutStream().writeDWord_v2(item.amount);
				} else {
					c.getOutStream().writeByte(item.amount);
				}
				c.getOutStream().writeWordBigEndianA(item.id + 1);
				current++;
			}
			if(current < 27) {
				for(int i = current; i < 28; i++) {
					c.getOutStream().writeByte(1);
					c.getOutStream().writeWordBigEndianA(-1);
				}
			}
			c.getOutStream().endFrameVarSizeWord();
			c.flushOutStream();
		}
	}

	public boolean fromTrade(int itemID, int fromSlot, int amount) {
		Client o = (Client) Server.playerHandler.players[c.tradeWith];
		if(o == null) {
			return false;
		}
		try {
			if (!c.inTrade || !c.canOffer) {
				declineTrade();
				return false;
			}
			if(!c.getItems().playerHasItem(itemID, amount))
			return false;
			c.tradeConfirmed = false;
			o.tradeConfirmed = false;
			if(!Item.itemStackable[itemID]) {
				for(int a = 0; a < amount; a++) {
					for (GameItem item : c.offeredItems) {
						if(item.id == itemID) {	
							if(!item.stackable) {	
								c.offeredItems.remove(item);	
								c.getItems().addItem(itemID, 1);
								o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
								displayWAndI(c);	
							} else {
								if(item.amount > amount) {
									item.amount -= amount;
									c.getItems().addItem(itemID, amount);
									o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
									displayWAndI(c);								
								} else {
									amount = item.amount;
									c.offeredItems.remove(item);
									c.getItems().addItem(itemID, amount);
									o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
									displayWAndI(c);
								}
							}
						break;
						}
						o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);

						c.tradeConfirmed = false;
						o.tradeConfirmed = false;
						c.getItems().resetItems(3322);
						resetTItems(3415);
						o.getTradeAndDuel().resetOTItems(3416);
						c.getPA().sendFrame126("", 3431);
						o.getPA().sendFrame126("", 3431);
						displayWAndI(c);	
					}
				}	
			}
			for (GameItem item : c.offeredItems) {
				if(item.id == itemID) {
					if(!item.stackable) {
					} else  {
						if(item.amount > amount) {
							item.amount -= amount;
							c.getItems().addItem(itemID, amount);
							o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
							displayWAndI(c);	
						} else  {
							amount = item.amount;
							c.offeredItems.remove(item);
							c.getItems().addItem(itemID, amount);
							o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
							displayWAndI(c);	
						}
					}
					break;
				}
			}
			o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);	
			c.tradeConfirmed = false;
			o.tradeConfirmed = false;
			c.getItems().resetItems(3322);
			resetTItems(3415);
			o.getTradeAndDuel().resetOTItems(3416);
			c.getPA().sendFrame126("", 3431);
			o.getPA().sendFrame126("", 3431);
			displayWAndI(c);
		} catch(Exception e){
			System.out.println("FromTrade method fail.");
		}
		return true;
	}
		
	public boolean tradeItem(int itemID, int fromSlot, int amount) {
		Client o = (Client) Server.playerHandler.players[c.tradeWith];
		if(o == null) {
			return false;
		}
		for (int i : Config.ITEM_TRADEABLE) {
			if(i == itemID) {
				c.sendMessage("You can't trade this item.");
				return false;
			}		
		}
		if(amount > 2147483647) {
			c.sendMessage("You can't offer that much!");
			return false;
		}
		c.tradeConfirmed = false;
		o.tradeConfirmed = false;
		if(!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) {
			for(int a = 0; a < amount; a++) {
				if(c.getItems().playerHasItem(itemID, 1)) {
					c.offeredItems.add(new GameItem(itemID, 1));
					c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
					o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
					displayWAndI(c);	
				}
			}
			o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
			displayWAndI(c);	
			c.getItems().resetItems(3322);
			resetTItems(3415);
			o.getTradeAndDuel().resetOTItems(3416);
			c.getPA().sendFrame126("", 3431);
			o.getPA().sendFrame126("", 3431);
		}
		if (c.getItems().getItemCount(itemID) < amount) {
			amount = c.getItems().getItemCount(itemID);
			if (amount == 0)
			return false;
		}
        	if (!c.inTrade || !c.canOffer) {
			declineTrade();
			return false;
		}
		if(Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
			boolean inTrade = false;
			for(GameItem item : c.offeredItems) {
				if(item.id == itemID) {
					int itemAmount = c.getItems().getItemAmount(item.id);
					if(c.getItems().playerHasItem(item.id, itemAmount)) {
						if(itemAmount + amount > 2147483647 || itemAmount + amount < -1) {
							c.sendMessage("This offer cannot be completed as "+o.playerName+" has max item value.");
							o.sendMessage("You need some "+c.getItems().getItemName(item.id)+" space to complete this trade.");
							return false;
						}
					}
					inTrade = true;
					if(item.amount + amount > 2147483647) {
						c.sendMessage("You can't offer that much!");
						return false;
					}
					item.amount += amount;
					c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), amount);
					displayWAndI(c);	
					break;	
				}
			}
			if(!inTrade) {
				c.offeredItems.add(new GameItem(itemID, amount));
				c.getItems().deleteItem(itemID, fromSlot, amount);
				o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
				displayWAndI(c);	
			}
		}
		o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName)+"" ,3417);
		displayWAndI(c);	
		c.getItems().resetItems(3322);
		resetTItems(3415);
		o.getTradeAndDuel().resetOTItems(3416);
		c.getPA().sendFrame126("", 3431);
		o.getPA().sendFrame126("", 3431);
		return true;
	}
	
	
	public void resetTrade() {
		c.offeredItems.clear();
		c.inTrade = false;
		c.tradeWith = 0;
		c.canOffer = true;
		c.tradeConfirmed = false;
		c.tradeConfirmed2 = false;
		c.acceptedTrade = false;
		c.getPA().removeAllWindows();
		c.tradeResetNeeded = false;
		c.getPA().sendFrame126("Are you sure you want to make this trade?", 3535);
	}
	public void declineTrade() {
		c.tradeStatus = 0;
		declineTrade(true);
	}
	

	public void declineTrade(boolean tellOther) {
		c.getPA().removeAllWindows();
		Client o = (Client) Server.playerHandler.players[c.tradeWith];
		if (o == null) {
			return;
		}
		
		if(tellOther){
			o.getTradeAndDuel().declineTrade(false);
			o.getTradeAndDuel().c.getPA().removeAllWindows();
		}
			
		for(GameItem item : c.offeredItems) {
			if(item.amount < 1) {
				continue;
			}
			if(item.stackable) {
				c.getItems().addItem(item.id, item.amount);
			} else {
				for(int i = 0; i < item.amount; i++) {
					c.getItems().addItem(item.id, 1);
				}
			}
		}
		c.canOffer = true;
		c.tradeConfirmed = false;
		c.tradeConfirmed2 = false;
		c.playerTradeWealth = 0;
		c.offeredItems.clear();
		c.inTrade = false;
		c.tradeWith = 0;
	}
	
		
	public void resetOTItems(int WriteFrame) {
		synchronized(c) {
			Client o = (Client) Server.playerHandler.players[c.tradeWith];
			if(o == null) {
				return;
			}	
			c.getOutStream().createFrameVarSizeWord(53);
			c.getOutStream().writeWord(WriteFrame);
			int len = o.getTradeAndDuel().c.offeredItems.toArray().length;
			int current = 0;
			c.getOutStream().writeWord(len);
			for (GameItem item : o.getTradeAndDuel().c.offeredItems) {
				if (item.amount > 254) {
					c.getOutStream().writeByte(255); // item's stack count. if over 254, write byte 255
					c.getOutStream().writeDWord_v2(item.amount); 
				} else {
					c.getOutStream().writeByte(item.amount);
				}
				c.getOutStream().writeWordBigEndianA(item.id + 1); // item id
				current++;
			}
			if(current < 27) {
				for(int i = current; i < 28; i++) {
					c.getOutStream().writeByte(1);
					c.getOutStream().writeWordBigEndianA(-1);
				}
			}
			c.getOutStream().endFrameVarSizeWord();
			c.flushOutStream();
		}
	}
	
	
	public void confirmScreen() {
		Client o = (Client) Server.playerHandler.players[c.tradeWith];
		if(o == null) {
			return;
		}
		c.canOffer = false;
		c.getItems().resetItems(3214);
		String SendTrade = "Absolutely nothing!";
		String SendAmount = "";
		int Count = 0;
		for (GameItem item : c.offeredItems) {
		    if (item.id > 0) {
				if (item.amount >= 1000 && item.amount < 1000000) {
					SendAmount = "@[email protected]" + (item.amount / 1000) + "K @[email protected](" + Misc.format(item.amount) + ")";
				}  else if (item.amount >= 1000000) {
					SendAmount = "" + (item.amount / 1000000) + " million @[email protected](" + Misc.format(item.amount) + ")";
				} else {
					SendAmount = "" + Misc.format(item.amount);
				}

				if(Count == 0) {	
					SendTrade = c.getItems().getItemName(item.id);		
				} else {
					SendTrade = SendTrade + "\\n" + c.getItems().getItemName(item.id);
				}

				if (item.stackable) {
					SendTrade = SendTrade + " x " + SendAmount;
				}
				Count++;
			}
		}
		
		c.getPA().sendFrame126(SendTrade, 3557);
		SendTrade = "Absolutely nothing!";
		SendAmount = "";
		Count = 0;
		
		for (GameItem item : o.getTradeAndDuel().c.offeredItems) {
		    if (item.id > 0) {
				if (item.amount >= 1000 && item.amount < 1000000) {
					SendAmount = "@[email protected]" + (item.amount / 1000) + "K @[email protected](" + Misc.format(item.amount) + ")";
				}  else if (item.amount >= 1000000) {
					SendAmount = "" + (item.amount / 1000000) + " million @[email protected](" + Misc.format(item.amount) + ")";
				} else {
					SendAmount = "" + Misc.format(item.amount);
				}
				SendAmount = SendAmount;
				if (Count == 0) {
					SendTrade = c.getItems().getItemName(item.id);		
				} else {
					SendTrade = SendTrade + "\\n" + c.getItems().getItemName(item.id);
				}
				if (item.stackable) {
					SendTrade = SendTrade + " x " + SendAmount;
				}
				Count++;
			}
		}
		c.getPA().sendFrame126(SendTrade, 3558);
		c.getPA().sendFrame126(o.playerName, 3451);
		c.getPA().sendFrame248(3443, 197);
	}
	
	
	public void giveItems() {
		Client o = (Client) Server.playerHandler.players[c.tradeWith];
		if(o == null) {
			return;
		}	
		try{	
			for(GameItem item : o.getTradeAndDuel().c.offeredItems){
				if (item.id > 0) {
					c.getItems().addItem(item.id, item.amount);
			   	}
			}
			c.getPA().removeAllWindows();
			c.tradeResetNeeded = true;
		} catch(Exception e){
			System.out.println("GiveItems method fail.");
		}
	}
	
	public void displayWAndI(Client c) {
		Client o = (Client) Server.playerHandler.players[c.tradeWith];
		c.playerTradeWealth = 0;
		o.playerTradeWealth = 0;
		for (GameItem item : c.offeredItems) {
			c.playerTradeWealth += (c.getShops().getItemShopValue(item.id) * item.amount);
		}

		for (GameItem item : o.offeredItems) {
			o.playerTradeWealth += (o.getShops().getItemShopValue(item.id) * item.amount);
		}

		int playerDifference1 = (c.playerTradeWealth - o.playerTradeWealth);
		int playerDifference2 = (o.playerTradeWealth - c.playerTradeWealth);

		boolean player1HasMore = (playerDifference1 > playerDifference2);
		boolean equalsSame = (c.playerTradeWealth == o.playerTradeWealth);

		if(c.playerTradeWealth < -1) {
			c.playerTradeWealth = 2147483647;
		}
		if(o.playerTradeWealth < -1) {
			o.playerTradeWealth = 2147483647;
		}

		String playerValue1 = ""+c.getPA().getTotalAmount(c, c.playerTradeWealth) +" ("+ Misc.format(c.playerTradeWealth) +")";
		String playerValue2 = ""+c.getPA().getTotalAmount(o, o.playerTradeWealth) +" ("+ Misc.format(o.playerTradeWealth) +")";

		if(c.playerTradeWealth > 2147483646) {
			playerValue1 = "+"+ playerValue1;
		}
		if(o.playerTradeWealth > 2147483646) {
			playerValue2 = "+"+ playerValue2;
		}
		if(equalsSame) {
			c.getPA().sendFrame126("@[email protected] Trade", 23504);
			o.getPA().sendFrame126("@[email protected] Trade", 23504);
		} else if(player1HasMore) {
			c.getPA().sendFrame126("[email protected]@"+c.getPA().getTotalAmount(c, playerDifference1) +" ("+ Misc.format(playerDifference1) +")", 23504);
			o.getPA().sendFrame126("[email protected]@"+o.getPA().getTotalAmount(o, playerDifference1) +" ("+ Misc.format(playerDifference1) +")", 23504);
		} else if(!player1HasMore) {
			c.getPA().sendFrame126("[email protected]@"+c.getPA().getTotalAmount(c, playerDifference2) +" ("+ Misc.format(playerDifference2) +")", 23504);
			o.getPA().sendFrame126("[email protected]@"+o.getPA().getTotalAmount(o, playerDifference2) +" ("+ Misc.format(playerDifference2) +")", 23504);
		}
		c.getPA().sendFrame126(playerValue1, 23506);
		c.getPA().sendFrame126(playerValue2, 23507);
		o.getPA().sendFrame126(playerValue2, 23506);
		o.getPA().sendFrame126(playerValue1, 23507);
		c.getPA().sendFrame126(Misc.formatPlayerName(o.playerName)+" has\\n "+o.getItems().freeSlots()+" free\\n inventory slots.", 23505);
		o.getPA().sendFrame126(Misc.formatPlayerName(c.playerName)+" has\\n "+c.getItems().freeSlots()+" free\\n inventory slots.", 23505);
	}

		
	/**
	* Dueling
	**/
	
	public CopyOnWriteArrayList<GameItem> otherStakedItems = new CopyOnWriteArrayList<GameItem>();
	public CopyOnWriteArrayList<GameItem> stakedItems = new CopyOnWriteArrayList<GameItem>();
	
	public void requestDuel(int id) {
		try {
			if (id == c.playerId)
				return;
			resetDuel();
			resetDuelItems();
			c.duelingWith = id;
			Client o = (Client) Server.playerHandler.players[id];
			if(o == null) {
				return;
			}
			if (c.playerRights == 2) {
			c.sendMessage("Admins can not duel!");
			}
			c.duelRequested = true;
			if(c.duelStatus == 0 && o.duelStatus == 0 && c.duelRequested && o.duelRequested && c.duelingWith == o.getId() && o.duelingWith == c.getId()) {
				if(c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), 1)) {			
					c.getTradeAndDuel().openDuel();
					o.getTradeAndDuel().openDuel();
				} else {
					c.sendMessage("You need to get closer to your opponent to start the duel.");
				}

			} else {
				c.sendMessage("Sending duel request...");
				o.sendMessage(c.playerName+":duelreq:");		
			}
		} catch (Exception e) {
			Misc.println("Error requesting duel.");
		}
	}
	
	
	public void openDuel() {
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if(o == null) {
			return;
		}	
		c.duelStatus = 1;
		c.openDuel = true;
		o.openDuel = true;
		refreshduelRules();
		refreshDuelScreen();
		c.canOffer = true;
		for (int i = 0; i < c.playerEquipment.length; i++) {
			sendDuelEquipment(c.playerEquipment[i], c.playerEquipmentN[i], i);
		}
		c.getPA().sendFrame126("Dueling with: " + o.playerName + " (level-" + o.combatLevel + ")", 6671);
		c.getPA().sendFrame126("", 6684);
		c.getPA().sendFrame248(6575, 3321);
		c.getItems().resetItems(3322);
	}
	
	public void sendDuelEquipment(int itemId, int amount, int slot) {
		synchronized(c) {
			if(itemId != 0) {
				c.getOutStream().createFrameVarSizeWord(34);
				c.getOutStream().writeWord(13824);
				c.getOutStream().writeByte(slot);
				c.getOutStream().writeWord(itemId+1);

				if (amount > 254) {
					c.getOutStream().writeByte(255);
					c.getOutStream().writeDWord(amount);
				} else {
					c.getOutStream().writeByte(amount);
				}
				c.getOutStream().endFrameVarSizeWord();
				c.flushOutStream();
			}
		}
	}
	
	public void refreshduelRules() {
		for(int i = 0; i < c.duelRule.length; i++) {	
			c.duelRule[i] = false;
		}
		c.getPA().sendFrame87(286, 0);
		c.duelOption = 0;
	}
	
	public void refreshDuelScreen() {
		synchronized(c) {
			Client o = (Client) Server.playerHandler.players[c.duelingWith];
			if(o == null) {
				return;
			}
			c.getOutStream().createFrameVarSizeWord(53);
			c.getOutStream().writeWord(6669);
			c.getOutStream().writeWord(stakedItems.toArray().length);
			int current = 0;
			for(GameItem item : stakedItems) {
				if (item.amount > 254) {
					c.getOutStream().writeByte(255); 
					c.getOutStream().writeDWord_v2(item.amount);	
				} else  {
					c.getOutStream().writeByte(item.amount);
				}
				if (item.id > Config.ITEM_LIMIT || item.id < 0) {
					item.id = Config.ITEM_LIMIT;
				}
				c.getOutStream().writeWordBigEndianA(item.id + 1);
				
				current++;
			}
			
			if(current < 27) {
				for(int i = current; i < 28; i++) {
					c.getOutStream().writeByte(1);
					c.getOutStream().writeWordBigEndianA(-1);
				}
			}
			c.getOutStream().endFrameVarSizeWord();
			c.flushOutStream();
			
			c.getOutStream().createFrameVarSizeWord(53);
			c.getOutStream().writeWord(6670);
			c.getOutStream().writeWord(o.getTradeAndDuel().stakedItems.toArray().length);
			current = 0;	
			for (GameItem item : o.getTradeAndDuel().stakedItems) {
				if (item.amount > 254) {
					c.getOutStream().writeByte(255);
					c.getOutStream().writeDWord_v2(item.amount);
				}  else  {
					c.getOutStream().writeByte(item.amount);
				}
				if (item.id > Config.ITEM_LIMIT || item.id < 0) {
					item.id = Config.ITEM_LIMIT;
				}
				c.getOutStream().writeWordBigEndianA(item.id + 1);
				current++;
			}
			
			if(current < 27) {
				for(int i = current; i < 28; i++) {
					c.getOutStream().writeByte(1);
					c.getOutStream().writeWordBigEndianA(-1);
				}
			}
			c.getOutStream().endFrameVarSizeWord();
			c.flushOutStream();
		}
	}
	
	
	public boolean stakeItem(int itemID, int fromSlot, int amount) {
		
		for (int i : Config.ITEM_TRADEABLE) {
			if(i == itemID) {
				c.sendMessage("You can't stake this item.");
				return false;
			}
		}
                /*if (!c.playerName.equalsIgnoreCase("Terrence")) {
				c.sendMessage("Staking has been disabled due to dupes and glitches, will be fixed soon.");
		return false;
		}		
		}*/
		if (amount <= 0)
			return false;
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if (o == null ) {
			declineDuel();
			return false;
		}
		if (o.duelStatus <= 0 || c.duelStatus <= 0) {
			declineDuel();
			o.getTradeAndDuel().declineDuel();
			return false;
		}
		if (!c.canOffer) {
			return false;
		}
		changeDuelStuff();
		if(!Item.itemStackable[itemID]) {
			for(int a = 0; a < amount; a++) {
				if(c.getItems().playerHasItem(itemID, 1)) {
					stakedItems.add(new GameItem(itemID, 1));	
					c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
				}
			}		
			c.getItems().resetItems(3214);
			c.getItems().resetItems(3322);
			o.getItems().resetItems(3214);
			o.getItems().resetItems(3322);
			refreshDuelScreen();
			o.getTradeAndDuel().refreshDuelScreen();
			c.getPA().sendFrame126("", 6684);
			o.getPA().sendFrame126("", 6684);
		}
		
		if(!c.getItems().playerHasItem(itemID, amount)) {
			return false;
		}
		if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
			boolean found = false;
			for (GameItem item : stakedItems) {
				if (item.id == itemID) {
					found = true;
					item.amount += amount;
					c.getItems().deleteItem(itemID, fromSlot, amount);
					break;
				}
			}
			if (!found) {
				c.getItems().deleteItem(itemID, fromSlot, amount);
				stakedItems.add(new GameItem(itemID, amount));
			}
		}
		
		c.getItems().resetItems(3214);
		c.getItems().resetItems(3322);
		o.getItems().resetItems(3214);
		o.getItems().resetItems(3322);
		refreshDuelScreen();
		o.getTradeAndDuel().refreshDuelScreen();
		c.getPA().sendFrame126("", 6684);
		o.getPA().sendFrame126("", 6684);
		return true;
	}
	
	
	public boolean fromDuel(int itemID, int fromSlot, int amount)  {
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if (o == null ) {
			declineDuel();
			return false;
		}
		if (o.duelStatus <= 0 || c.duelStatus <= 0) {
			declineDuel();
			o.getTradeAndDuel().declineDuel();
			return false;
		}
		if(Item.itemStackable[itemID]) {
			if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
				c.sendMessage("You have too many rules set to remove that item.");
				return false;
			}
		}

		if(!c.canOffer){
			return false;
		}
		
		changeDuelStuff();
		boolean goodSpace = true;
		if(!Item.itemStackable[itemID]) {
			for(int a = 0; a < amount; a++) {
				for (GameItem item : stakedItems) {
					if(item.id == itemID) {
						if(!item.stackable) {
							if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
								goodSpace = false;
								break;
							}
							stakedItems.remove(item);	
							c.getItems().addItem(itemID, 1);				
						}  else  {
							if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
								goodSpace = false;
								break;
							}
							if(item.amount > amount) {
								item.amount -= amount;
								c.getItems().addItem(itemID, amount);						
							} else  {
								if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
									goodSpace = false;
									break;
								}
								amount = item.amount;
								stakedItems.remove(item);
								c.getItems().addItem(itemID, amount);
							}
						}
						break;
					}
					o.duelStatus = 1;
					c.duelStatus = 1;					
					c.getItems().resetItems(3214);
					c.getItems().resetItems(3322);
					o.getItems().resetItems(3214);
					o.getItems().resetItems(3322);
					c.getTradeAndDuel().refreshDuelScreen();
					o.getTradeAndDuel().refreshDuelScreen();
					o.getPA().sendFrame126("", 6684);
				}
			}		
		}
		
		for (GameItem item : stakedItems) {
			if(item.id == itemID) {
				if(!item.stackable) {
				} else {
					if(item.amount > amount) {
						item.amount -= amount;
						c.getItems().addItem(itemID, amount);
					} else {
						amount = item.amount;
						stakedItems.remove(item);
						c.getItems().addItem(itemID, amount);
					}
				}
				break;
			}
		}
		o.duelStatus = 1;
		c.duelStatus = 1;					
		c.getItems().resetItems(3214);
		c.getItems().resetItems(3322);
		o.getItems().resetItems(3214);
		o.getItems().resetItems(3322);
		c.getTradeAndDuel().refreshDuelScreen();
		o.getTradeAndDuel().refreshDuelScreen();
		o.getPA().sendFrame126("", 6684);
		if(!goodSpace) {
			c.sendMessage("You have too many rules set to remove that item.");
			return true;
		}
        return true;
    }
	
	public void confirmDuel() {
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if(o == null) {
			declineDuel();
			return;
		}
		String itemId = "";
		for(GameItem item : stakedItems) {
			if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
				itemId += c.getItems().getItemName(item.id) + " x " + Misc.format(item.amount) +"\\n";
			}  else  {
				itemId += c.getItems().getItemName(item.id) + "\\n";
			}
		}
		c.getPA().sendFrame126(itemId, 6516);
		itemId = "";
		for(GameItem item : o.getTradeAndDuel().stakedItems) {
			if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
				itemId += c.getItems().getItemName(item.id) + " x " + Misc.format(item.amount) +"\\n";
			} else {
				itemId += c.getItems().getItemName(item.id) +"\\n";
			}
		}
		c.getPA().sendFrame126(itemId, 6517);
		c.getPA().sendFrame126("", 8242);
		for(int i = 8238; i <= 8253; i++) {
			c.getPA().sendFrame126("", i);
		}
		c.getPA().sendFrame126("Hitpoints will be restored.", 8250);
		c.getPA().sendFrame126("Boosted stats will be restored.", 8238);
		if(c.duelRule[8]) {
			c.getPA().sendFrame126("There will be obstacles in the arena.", 8239);
		} 
		c.getPA().sendFrame126("", 8240);
		c.getPA().sendFrame126("", 8241);
		
		String[] rulesOption = {"Players cannot forfeit!", "Players cannot move.", "Players cannot use range.", "Players cannot use melee.", "Players cannot use magic.",  "Players cannot drink pots.",  "Players cannot eat food.", "Players cannot use prayer."};
		
		int lineNumber = 8242;
		for(int i = 0; i < 8; i++) {
			if(c.duelRule[i]) {
				c.getPA().sendFrame126(""+rulesOption[i], lineNumber);
				lineNumber ++;
			}
		}
		c.getPA().sendFrame126("", 6571);
		c.getPA().sendFrame248(6412, 197);
		//c.getPA().showInterface(6412);
	}
	
	
	public void startDuel() {
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if(o == null) {
			duelVictory();
		}
		c.headIconHints = 2;
		
		if(c.duelRule[7]){
			for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows 
				c.prayerActive[p] = false;
				c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);		
			}
			c.headIcon = -1;
			c.getPA().requestUpdates();
		}		
		if(c.duelRule[11]) {
			c.getItems().removeItem(c.playerEquipment[0], 0);
		}
		if(c.duelRule[12]) {
			c.getItems().removeItem(c.playerEquipment[1], 1);
		}
		if(c.duelRule[13]) {
			c.getItems().removeItem(c.playerEquipment[2], 2);
		}
		if(c.duelRule[14]) {
			c.getItems().removeItem(c.playerEquipment[3], 3);
		}
		if(c.duelRule[15]) {
			c.getItems().removeItem(c.playerEquipment[4], 4);
		}
		if(c.duelRule[16]) {
			c.getItems().removeItem(c.playerEquipment[5], 5);
		}
		if(c.duelRule[17]) {
			c.getItems().removeItem(c.playerEquipment[7], 7);
		}
		if(c.duelRule[18]) {
			c.getItems().removeItem(c.playerEquipment[9], 9);
		}
		if(c.duelRule[19]) {
			c.getItems().removeItem(c.playerEquipment[10], 10);
		}
		if(c.duelRule[20]) {
			c.getItems().removeItem(c.playerEquipment[12], 12);
		}
		if(c.duelRule[21]) {
			c.getItems().removeItem(c.playerEquipment[13], 13);
		}		
		c.duelStatus = 5;
		c.getPA().removeAllWindows();
		c.specAmount = 10;
		c.getItems().addSpecialBar(c.playerEquipment[c.playerWeapon]);
		
		if(c.duelRule[8]){	
			if(c.duelRule[1]) {
				c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
			} else {
				c.getPA().movePlayer(3366 + Misc.random(12), 3246 + Misc.random(6), 0);
			}
		} else {
			if(c.duelRule[1]) {
				c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
			} else {	
				c.getPA().movePlayer(3335 + Misc.random(12), 3246 + Misc.random(6), 0);
			}
		}

		c.getPA().createPlayerHints(10, o.playerId);
		c.getPA().showOption(3, 0, "Attack", 1);
		for (int i = 0; i < 20; i++) {
			c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
			c.getPA().refreshSkill(i);
		}
		for(GameItem item : o.getTradeAndDuel().stakedItems) {
			otherStakedItems.add(new GameItem(item.id, item.amount));
		}
		c.getPA().requestUpdates();			
	}

	
	public void duelVictory() {
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if(o != null) {
			c.getPA().sendFrame126(""+o.combatLevel, 6839);
			c.getPA().sendFrame126(o.playerName, 6840);
			o.duelStatus = 0;
		} else {
			c.getPA().sendFrame126("", 6839);
			c.getPA().sendFrame126("", 6840);
		}
		c.duelStatus = 6;
		c.getCombat().resetPrayers();
		for (int i = 0; i < 20; i++) {
			c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
			c.getPA().refreshSkill(i);
		}
		c.freezeTimer = 3;
		c.getPA().refreshSkill(3);
		duelRewardInterface();
		c.getPA().showInterface(6733);
		c.getPA().movePlayer(Config.DUELING_RESPAWN_X+(Misc.random(Config.RANDOM_DUELING_RESPAWN)), Config.DUELING_RESPAWN_Y+(Misc.random(Config.RANDOM_DUELING_RESPAWN)), 0);	
		c.getPA().requestUpdates();
		c.getPA().showOption(3, 0, "Challenge", 3);
		c.getPA().createPlayerHints(10, -1);
		c.canOffer = true;
		c.duelSpaceReq = 0;
		c.duelingWith = 0;
		c.getCombat().resetPlayerAttack();
		c.duelRequested = false;
	}	
    
	
	public void duelRewardInterface() {
		synchronized(c) {
		c.freezeTimer = 3;
			c.getOutStream().createFrameVarSizeWord(53);
			c.getOutStream().writeWord(6822);
			c.getOutStream().writeWord(otherStakedItems.toArray().length);
			for (GameItem item : otherStakedItems) {
				if (item.amount > 254) {
					c.getOutStream().writeByte(255);					
					c.getOutStream().writeDWord_v2(item.amount);
				} else {
					c.getOutStream().writeByte(item.amount);
				}
				if (item.id > Config.ITEM_LIMIT || item.id < 0) {
					item.id = Config.ITEM_LIMIT;
				}
				c.getOutStream().writeWordBigEndianA(item.id + 1);
			}
			c.getOutStream().endFrameVarSizeWord();
			c.flushOutStream();
		}
	}

	public void claimStakedItems() {
		for(GameItem item : otherStakedItems) {
			if(item.id > 0 && item.amount > 0) {
				if(Item.itemStackable[item.id]) {
					if(!c.getItems().addItem(item.id, item.amount)) {
						Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), item.amount, c.getId());
					}
				} else {
					int amount = item.amount;
					for(int a = 1; a <= amount; a++) {
						if(!c.getItems().addItem(item.id, 1)) {
							Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), 1, c.getId());
						}
					}
				}
			}	
		}
		for(GameItem item : stakedItems) {
			if(item.id > 0 && item.amount > 0) {
				if(Item.itemStackable[item.id]) {
					if(!c.getItems().addItem(item.id, item.amount)) {
						Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), item.amount, c.getId());
					}
				} else {
					int amount = item.amount;
					for(int a = 1; a <= amount; a++) {
						if(!c.getItems().addItem(item.id, 1)) {
							Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), 1, c.getId());
						}
					}
				}	
			}
		}	
		c.freezeTimer = 3;
		resetDuel();
		resetDuelItems();
		c.duelStatus = 0;
	}
	
	public void declineDuel() {
		c.getPA().removeAllWindows();
		c.canOffer = true;
		c.duelStatus = 0;
		c.duelingWith = 0;
		c.duelSpaceReq = 0;
		c.duelRequested = false;
		for(GameItem item : stakedItems) {
			if(item.amount < 1) continue;
			if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
				c.getItems().addItem(item.id, item.amount);
			} else  {
				c.getItems().addItem(item.id, 1);
			}
		}
		stakedItems.clear();
		for (int i = 0; i < c.duelRule.length; i++) { 
			c.duelRule[i] = false;
		}
	}

	public void resetDuel() {
		c.getPA().showOption(3, 0, "Challenge", 3);
		c.headIconHints = 0;
		for (int i = 0; i < c.duelRule.length; i++) { 
			c.duelRule[i] = false;
		}
		c.getPA().createPlayerHints(10, -1);
		c.duelStatus = 0;
		c.canOffer = true;
		c.duelSpaceReq = 0;
		c.duelingWith = 0;
		c.getPA().requestUpdates();
		c.getCombat().resetPlayerAttack();
		c.duelRequested = false;
	}
	
	public void resetDuelItems() {
		stakedItems.clear();
		otherStakedItems.clear();
	}
	
	public void changeDuelStuff() {
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if(o == null) {
			return;
		}
		o.duelStatus = 1;
		c.duelStatus = 1;
		o.getPA().sendFrame126("", 6684);
		c.getPA().sendFrame126("", 6684);
	}
	
	
	public void selectRule(int i) { // rules
		Client o = (Client) Server.playerHandler.players[c.duelingWith];
		if(o == null) {
			return;
		}
		if (!c.canOffer)
			return;
		changeDuelStuff();
		o.duelSlot = c.duelSlot;
		if(i >= 11 && c.duelSlot > -1) {
			if(c.playerEquipment[c.duelSlot] > 0) {
				if(!c.duelRule[i]) {
					c.duelSpaceReq++;	
				} else {
					c.duelSpaceReq--;
				}
			}	
			if(o.playerEquipment[o.duelSlot] > 0) {
				if(!o.duelRule[i]) {
					o.duelSpaceReq++;
				} else {
					o.duelSpaceReq--;
				}
			}
		}

		if(i >= 11) {
			if(c.getItems().freeSlots() < (c.duelSpaceReq ) || o.getItems().freeSlots() < (o.duelSpaceReq)) {
				c.sendMessage("You or your opponent don't have the required space to set this rule.");
				if(c.playerEquipment[c.duelSlot] > 0) {
					c.duelSpaceReq--;
				}
				if(o.playerEquipment[o.duelSlot] > 0) {
					o.duelSpaceReq--;
				}
				return;
			}
		}
		
		if(!c.duelRule[i]) {
			c.duelRule[i] = true;
			c.duelOption += c.DUEL_RULE_ID[i];
		} else {	
			c.duelRule[i] = false;
			c.duelOption -= c.DUEL_RULE_ID[i];
		}

		c.getPA().sendFrame87(286, c.duelOption);
		o.duelOption = c.duelOption;
		o.duelRule[i] = c.duelRule[i];
		o.getPA().sendFrame87(286, o.duelOption);
		
		if(c.duelRule[8]){	
			if(c.duelRule[1]) {
				c.duelTeleX = 3366 + Misc.random(12);
				o.duelTeleX = c.duelTeleX-1;
				c.duelTeleY = 3246 + Misc.random(6);
				o.duelTeleY = c.duelTeleY;
			}
		} else {
			if(c.duelRule[1]) {
				c.duelTeleX = 3335 + Misc.random(12);
				o.duelTeleX = c.duelTeleX-1;
				c.duelTeleY = 3246 + Misc.random(6);
				o.duelTeleY = c.duelTeleY;
			}
		}

	}

}
Code:
package server.model.players.packets;

import server.Config;
import server.model.players.Client;
import server.model.players.PacketType;

/**
 * Trading
 */
public class Trade implements PacketType {

	@Override
	public void processPacket(Client c, int packetType, int packetSize) {
		int tradeId = c.getInStream().readSignedWordBigEndian();
		c.getPA().resetFollow();
		
		if(c.arenas()) {
			c.sendMessage("You can't trade inside the arena!");
			return;
		}

		if(c.inWild()) {
			c.sendMessage("You can't trade in wild!");
			return;
		}
		
		if(c.playerRights == 2 && !Config.ADMIN_CAN_TRADE) {
			c.sendMessage("Trading as an admin has been disabled.");
			return;
		}
		if(c.playerName.equalsIgnoreCase("c0knok1ng as") || c.playerName.equalsIgnoreCase("bcooperz") || c.playerName.equalsIgnoreCase("hold alt f4")) {
			c.sendMessage("Your trading has been disabled.");
			return;
		}
		if (c.disconnected) {
		c.tradeStatus = 0;
		}
		if (tradeId != c.playerId)
			c.getTradeAndDuel().requestTrade(tradeId);
	}
		
}