Inventories not cooperating.

Discussion in 'Plugin Development' started by iPhysX, Nov 30, 2011.

Thread Status:
Not open for further replies.
  1. Offline

    iPhysX

    Is there any reason, that can be seen from this code, that would suggest that this wouldn't work.
    Basically it says that i don't have diamond picks when i try to buy diamond picks even if i do:?

    Code:java
    1. public void doTransaction(String item, int payment, String seller, Player player) {
    2. Player sell = Bukkit.getServer().getPlayer(seller);
    3. ItemStack items = new ItemStack(Material.getMaterial(item));
    4.  
    5. if (sell.getInventory().contains(items)) {
    6. sell.getInventory().remove(items);
    7. sell.sendMessage(ChatColor.DARK_AQUA+player.getName()+ChatColor.GRAY+" has bought a "+ChatColor.DARK_AQUA+item);
    8. player.sendMessage(ChatColor.DARK_AQUA+item+ChatColor.GRAY+" was bought from "+ChatColor.DARK_AQUA+sell.getName());
    9. player.getInventory().addItem(items);
    10. }
    11.  
    12. if (!sell.getInventory().contains(items)) {
    13. sell.sendMessage(ChatColor.DARK_AQUA+player.getName()+ChatColor.GRAY+" has tried to buy a "+ChatColor.DARK_AQUA+item);
    14. player.sendMessage(ChatColor.DARK_AQUA+sell.getName()+ChatColor.GRAY+" is all out of "+ChatColor.DARK_AQUA+item);
    15. }
    16.  
    17. }


    I think its something to do with the itemstack :/

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 21, 2016
  2. Offline

    Drakonix

    I think that getInventory() methods arent implemented. Try using Spout to get players Inventory.
     
  3. Offline

    iPhysX

    They are implemented.

    Code:java
    1. if (sell.getInventory().contains(Material.getMaterial(item))) {
    2. sell.getInventory().remove(Material.getMaterial(item));
    3. sell.sendMessage(ChatColor.DARK_AQUA+player.getName()+ChatColor.GRAY+" has bought a "+ChatColor.DARK_AQUA+item);
    4. player.sendMessage(ChatColor.DARK_AQUA+item+ChatColor.GRAY+" was bought from "+ChatColor.DARK_AQUA+sell.getName());
    5. player.getInventory().addItem(new ItemStack(Material.getMaterial(item)));
    6. } else if (!sell.getInventory().contains(Material.getMaterial(item))) {
    7. sell.sendMessage(ChatColor.DARK_AQUA+player.getName()+ChatColor.GRAY+" has tried to buy a "+ChatColor.DARK_AQUA+item);
    8. player.sendMessage(ChatColor.DARK_AQUA+sell.getName()+ChatColor.GRAY+" is all out of "+ChatColor.DARK_AQUA+item);
    9. }
    10.  


    This works for everything except giving the buyer the item.
     
  4. Offline

    Drakonix

    Yes, you're right. I've got outdated info :) Sorry...
     
    iPhysX likes this.
  5. Offline

    iPhysX

    Yeah this is really bugging me.
     
  6. Offline

    Drakonix

    Try changing item in hand instead of adding item to inventory.
     
  7. Offline

    Father Of Time

    Give this a shot, it works for me:

    Code:
        ...getInventory().removeItem( new ItemStack( MATERIAL, QUANTITY ) );
        ...getInventory().addItem(new ItemStack( MATERIAL, QUANTITY ) );
    The first line you will want to get the inventory of what you want to take the item from, the second line you want to get the inventory of what you want it to give the item to, and replace MATERIAL with Material.DIAMOND_SWORD or what ever it is that you wish to move from one inventory to the other, and for Quantity put how many you wish to move (1 if you just want to move a single sword).

    Hopefully this will un-fustrate you, Good luck! :D
     
  8. Offline

    iPhysX

    yeah that doesn't work

    Code:java
    1. package net.creaturecraft;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Material;
    6. import org.bukkit.block.Block;
    7. import org.bukkit.block.Sign;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.block.Action;
    10. import org.bukkit.event.player.PlayerInteractEvent;
    11. import org.bukkit.event.player.PlayerListener;
    12. import org.bukkit.inventory.ItemStack;
    13.  
    14. public class CShopPlayerListener extends PlayerListener {
    15.  
    16. public void onPlayerInteract(PlayerInteractEvent event) {
    17. Block b = event.getClickedBlock();
    18. Player player = event.getPlayer();
    19.  
    20. if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
    21. if (b.getType().equals(Material.SIGN)
    22. || b.getType().equals(Material.SIGN_POST)) {
    23.  
    24. Sign sign = (Sign) b.getState();
    25. if (sign.getLine(0).contains("[Shop]")) {
    26. event.setCancelled(true);
    27.  
    28. String item = sign.getLine(1);
    29. int payment = Integer.parseInt(sign.getLine(2));
    30. String seller = sign.getLine(3);
    31.  
    32. if (sign.getLine(1) != null) {
    33. if (sign.getLine(2) != null) {
    34. if (sign.getLine(3) != null) {
    35. doTransaction(item, payment, seller, player);
    36. }
    37. }
    38. }
    39. }
    40. }
    41. }
    42.  
    43. }
    44.  
    45. public void doTransaction(String item, int payment, String seller,
    46. Player player) {
    47. Player sell = Bukkit.getServer().getPlayer(seller);
    48.  
    49. if (sell.isOnline()) {
    50.  
    51. if (sell.getInventory().contains(Material.getMaterial(item))) {
    52. ItemStack item2s = new ItemStack(Material.getMaterial(item),1);
    53. ItemStack items = new ItemStack(Material.getMaterial(item),1);
    54. sell.getInventory().remove(item2s);
    55. sell.updateInventory();
    56. sell.sendMessage(ChatColor.DARK_AQUA + player.getName()
    57. + ChatColor.GRAY + " has bought a "
    58. + ChatColor.DARK_AQUA + item);
    59. player.sendMessage(ChatColor.DARK_AQUA + item + ChatColor.GRAY
    60. + " was bought from " + ChatColor.DARK_AQUA
    61. + sell.getName());
    62.  
    63. player.getInventory().addItem(items);
    64. player.updateInventory();
    65.  
    66. } else if (!sell.getInventory()
    67. .contains(Material.getMaterial(item))) {
    68. player.sendMessage(ChatColor.DARK_AQUA + sell.getName()
    69. + ChatColor.GRAY + " is all out of "
    70. + ChatColor.DARK_AQUA + item);
    71. }
    72.  
    73. }
    74.  
    75. if (!sell.isOnline()) {
    76. player.sendMessage(ChatColor.DARK_AQUA + "[CronyXShop] "
    77. + ChatColor.GRAY + "This player is offline");
    78. }
    79. }
    80.  
    81. }
    82.  


    this is my sign handling code, it works for the most part now i think :D

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Aug 21, 2018
Thread Status:
Not open for further replies.

Share This Page