示例#1
0
  public synchronized ArrayList<ItemForSale> getSellerItems(Player player, int page) {
    PlayerInventoryAccount pia = this.getPlayerAccount(player);

    if (pia == null) {
      return new ArrayList<>();
    }

    return this.getItemsForSale("AND seller_id = " + pia.getdbId(), page);
  }
示例#2
0
  public synchronized InventoryActionResponse attemptToHandBackToSeller(Player player, int itemId) {
    ItemForSale ifs = this.getItemForSale(itemId);

    if (ifs == null) {
      return new InventoryActionResponse(
          null, false, "Invalid item id! (The item may have already been sold)");
    }

    // double check the player is this player
    PlayerInventoryAccount sellerAccount = this.getSellerAccount(ifs);

    if (sellerAccount == null) {
      return new InventoryActionResponse(null, false, "Invalid seller account... Awhaaa?");
    }

    if (!sellerAccount.getUUID().equals(player.getUniqueId())) {
      return new InventoryActionResponse(
          null, false, "It seems like you aren't the seller of this item.");
    }

    try {
      PreparedStatement markAsSold =
          this.con.prepareStatement(
              "UPDATE "
                  + this.TBL_ITEMS
                  + " SET sold=1,buyer_id=?,sold_at=? WHERE id = ? LIMIT 1;");
      markAsSold.setInt(1, sellerAccount.getdbId());
      markAsSold.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()));
      markAsSold.setInt(3, itemId);

      markAsSold.executeUpdate();

      this.logger.log(
          Level.INFO,
          "set item id:{0} is:{1} given back to seller {3} {4}",
          new Object[] {
            itemId, ifs.getItemStack(), sellerAccount.getUsername(), sellerAccount.getUUID()
          });
    } catch (Exception ex) {
      this.logger.log(Level.SEVERE, null, ex);

      return new InventoryActionResponse(null, false, "Unable to remove the for sale item");
    }

    return new InventoryActionResponse(
        ifs.getItemStack(),
        true,
        "You retrieved your " + ifs.getItemStack().getType().name() + " from your shop!");
  }
示例#3
0
  public synchronized InventoryActionResponse attemptToBuy(Player player, int itemId) {
    PlayerInventoryAccount buyerInventoryAccount = this.getPlayerAccount(player);

    if (buyerInventoryAccount == null) {
      return new InventoryActionResponse(null, false, "Unable to query database for your info!");
    }

    ItemForSale ifs = this.getItemForSale(itemId);

    if (ifs == null) {
      return new InventoryActionResponse(
          null, false, "Invalid item id! (The item may have already been sold)");
    }

    double price = ifs.getPrice();

    if (!plugin.economy.has(player.getName(), price)) {
      return new InventoryActionResponse(
          null, false, "You don't have " + plugin.economy.format(price));
    }

    PlayerInventoryAccount sellerInventoryAccount = this.getSellerAccount(ifs);

    if (sellerInventoryAccount == null) {
      return new InventoryActionResponse(null, false, "Unable to query database for seller info!");
    }

    EconomyResponse buyerWithdrawlResponse = plugin.economy.withdrawPlayer(player.getName(), price);

    if (buyerWithdrawlResponse.type.equals(ResponseType.SUCCESS)) {
      try {
        PreparedStatement markAsSold =
            this.con.prepareStatement(
                "UPDATE "
                    + this.TBL_ITEMS
                    + " SET sold=1,buyer_id=?,sold_at=? WHERE id = ? LIMIT 1;");
        markAsSold.setInt(1, buyerInventoryAccount.getdbId());
        markAsSold.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()));
        markAsSold.setInt(3, itemId);

        markAsSold.executeUpdate();

        this.logger.log(
            Level.INFO,
            "set item id:{0} is:{1} sold to {2}({3}) for {4}",
            new Object[] {
              itemId,
              ifs.getItemStack(),
              buyerInventoryAccount.getUsername(),
              buyerInventoryAccount.getUUID(),
              price
            });

        EconomyResponse sellerDepositResponse =
            plugin.economy.depositPlayer(sellerInventoryAccount.getUsername(), price);

        if (sellerDepositResponse.type.equals(ResponseType.SUCCESS)) {
          Player seller = Bukkit.getPlayer(sellerInventoryAccount.getUUID());
          ItemStack itemSold = ifs.getItemStack();

          // message if online, mail otherwise
          if (seller != null) {
            seller.sendMessage(
                "LonelyShop: You sold "
                    + itemSold.getAmount()
                    + " "
                    + itemSold.getType()
                    + " for "
                    + plugin.economy.format(price));
          } else {
            Bukkit.getServer()
                .dispatchCommand(
                    Bukkit.getServer().getConsoleSender(),
                    "mail "
                        + sellerInventoryAccount.getUsername()
                        + " You sold "
                        + ifs.getItemStack().getType()
                        + " for "
                        + plugin.economy.format(price));
          }
        }
        // really shouldn't ever happen... Even with LonelyEconomy the money was just given to the
        // server to hand to the player
        else {
          Bukkit.getServer()
              .dispatchCommand(
                  Bukkit.getServer().getConsoleSender(),
                  "mail ne0nx3r0 that scary error happened at "
                      + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date())
                      + " with "
                      + ifs.getItemStack().getType()
                      + " for "
                      + plugin.economy.format(price));
          Bukkit.getServer()
              .dispatchCommand(
                  Bukkit.getServer().getConsoleSender(),
                  "mail "
                      + sellerInventoryAccount.getUsername()
                      + " an error occurred selling "
                      + ifs.getItemStack().getType()
                      + " for "
                      + plugin.economy.format(price)
                      + ", sorry but you did not receive the money for it. Ne0nx3r0 should have been notified.");
        }
      } catch (SQLException ex) {
        this.logger.log(Level.SEVERE, null, ex);

        player.sendMessage(
            ChatColor.RED + "Something bad happened and you really should mention it.");
      }

      return new InventoryActionResponse(
          ifs.getItemStack(),
          true,
          "You bought "
              + ifs.getItemStack().getType().name()
              + " for "
              + plugin.economy.format(price)
              + "!");
    }

    return new InventoryActionResponse(null, false, buyerWithdrawlResponse.errorMessage);
  }
示例#4
0
  public synchronized InventoryActionResponse putItemForSale(
      Player player, ItemStack inHand, double price) {
    PlayerInventoryAccount sellerAccount = this.getPlayerAccount(player);

    Iterator iterator = this.PERMISSION_LIMIT_GROUPS.entrySet().iterator();
    int maxItems = 0;

    while (iterator.hasNext()) {
      Entry<String, Integer> next = (Entry<String, Integer>) iterator.next();

      if (player.hasPermission("lonelyshop.sell.max." + next.getKey())) {
        if (next.getValue() > maxItems) {
          maxItems = next.getValue();
        }
      }
    }

    try {
      PreparedStatement getPlayerItemsCount =
          this.con.prepareStatement(
              "SELECT COUNT(*) as playerItems FROM "
                  + this.TBL_ITEMS
                  + " WHERE sold = 0 AND seller_id = ?");

      getPlayerItemsCount.setInt(1, sellerAccount.getdbId());

      ResultSet result = getPlayerItemsCount.executeQuery();

      if (result.next()) {
        int playerItemsCount = result.getInt("playerItems");

        if (playerItemsCount >= maxItems) {
          return new InventoryActionResponse(
              null,
              false,
              "You cannot put more than " + playerItemsCount + " items for sale at your rank!");
        }
      }

    } catch (SQLException ex) {
      Logger.getLogger(InventoryManager.class.getName()).log(Level.SEVERE, null, ex);

      return new InventoryActionResponse(null, false, "A database error occurred!");
    }

    try {
      PreparedStatement createPlayerItem =
          this.con.prepareStatement(
              "INSERT INTO "
                  + this.TBL_ITEMS
                  + "(seller_id,material,data,amount,item_data,posted,price,price_per_item) "
                  + "VALUES(?,?,?,?,?,?,?,?);");

      createPlayerItem.setInt(1, sellerAccount.getdbId());
      createPlayerItem.setInt(2, inHand.getTypeId());
      createPlayerItem.setInt(3, inHand.getData().getData());
      createPlayerItem.setInt(4, inHand.getAmount());
      createPlayerItem.setString(5, ItemStackConvertor.fromItemStack(inHand));
      createPlayerItem.setTimestamp(6, new java.sql.Timestamp(new java.util.Date().getTime()));
      createPlayerItem.setDouble(7, price);
      createPlayerItem.setDouble(8, price / inHand.getAmount());

      createPlayerItem.executeUpdate();

      this.logger.log(
          Level.INFO,
          "is:{0} put for sale by {1}({2}) for {3}",
          new Object[] {inHand, sellerAccount.getUsername(), sellerAccount.getUUID(), price});

    } catch (SQLException ex) {
      Logger.getLogger(InventoryManager.class.getName()).log(Level.SEVERE, null, ex);

      return new InventoryActionResponse(null, false, "A database error occurred!");
    }

    return new InventoryActionResponse(inHand, true, "Item successfully put for sale!");
  }