DoubleChest

Discussion in 'Plugin Development' started by MCMatters, Aug 13, 2014.

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

    MCMatters

    Code:java
    1. Chest c = (Chest) loc.getBlock().getState();
    2. for(ItemStack i : event.getDrops()){
    3. c.getBlockInventory().addItem(i);
    4. }
    5. loc.getBlock().getRelative(BlockFace.NORTH).setType(Material.CHEST);
    6. Chest c2 = (Chest) loc.getBlock().getRelative(BlockFace.NORTH);
    7. for(ItemStack i : event.getDrops()){
    8. c2.getBlockInventory().addItem(i);
    9. }
    10. }
    11. }

    Im trying to put
    Code:java
    1. event.getDrops();

    but it only fills into one part of chest and rest goes on floor, how can i split the items into a double chest
     
  2. Offline

    fireblast709

    MCMatters addItem(ItemStack...stacks) returns a Map<Integer, ItemStack> which will contain entries when the stack didn't fit. Something like the following pseudocode snippet should automatically attempt to dump the overflow in the second inventory. While not as efficient as you might want it to be, it will at least attempt to use all the space available.
    Code:
    foreach(ItemStack stack in drops)
    {
        Map<Integer, ItemStack> overflow = inv.addItem(stack);
        if(overflow is not empty)
        {
            foreach ostack in overflow
                inv2.addItem(ostack)
        }
    }
     
  3. Offline

    MCMatters

  4. Offline

    fireblast709

    MCMatters which part would need more explanation?
     
  5. Offline

    MCMatters

  6. Offline

    fireblast709

    MCMatters Don't you know the 'foreach loop' or whether a Map 'is not empty'?
    • Some languages use foreach, Java uses
      Code:java
      1. // Iteratable<E> is a Collection (List/Set) or E[]
      2. // Plus any class that manually implements Iteratable
      3. for(E element : Iteratable<E>)
    • is not empty is just the negation of is empty, which has a simple boolean method you can find in the Map javadocs
     
  7. Offline

    MCMatters

    Code:java
    1. for(ItemStack i : event.getDrops()){
    2. Map<Integer, ItemStack> overflow = ?!;
    3. //What Here
    4. }


    how do i see if a inv has slots?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  8. Offline

    fireblast709

    MCMatters addItems(i) will return the overflow Map. Then check if it's not empty, and finally loop over the values in the Map, adding them to the second inventory. All of this is simple logic / googling for the appropiate methods.
    • Map#isEmpty()
    • Map#values()
    • Inventory#addItems(ItemStack...stacks)
     
  9. Offline

    MCMatters

    i dont know what ur talking about! fireblast709

    How do i get the items that arent able to to in the first chest
    ?

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  10. MCMatters How do you get the items that don't fit in the chest?

     
  11. Offline

    fireblast709

  12. Offline

    MCMatters

    AdamQpzm how do i foreach ostack in overflow

    AdamQpzm
    for(ItemStack i2 : overflow.values()){
    c2.getBlockInventory().addItem(i2);
    }
    fireblast709

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  13. MCMatters A for loop is pretty simple Java, and is something that's already been answered on this thread. I'd recommend you first you learn the Java basics before trying to work with plugins. You should get a good Java book, and read the whole thing at least :)
     
  14. Offline

    MCMatters

    AdamQpzm I made a for loop! Are You blind
     
    Funergy likes this.
  15. Offline

    _Filip

  16. Offline

    fireblast709

    MCMatters he is, don't mind him on that. Though I understand his concerns, since I had to explain it thrice. That last snippet you posted does indeed equal
    Code:
    foreach ostack in overflow
    {
        inv2.addItem(ostack)
    }
    AdamQpzmDon't worry Adam, I still love you c:
     
  17. MCMatters Be fair. You asked the question, I clicked the alert, the page loaded, and then you posted your for loop. I hadn't seen it. Good to know that you ask questions which you immediately solve (meaning you probably didn't put in much effort in the first place) and then insult the people trying to help you.

    fireblast709 <3
     
  18. Offline

    MCMatters

    Code:java
    1. int x = player.getLocation().getBlockX();
    2. int y = player.getLocation().getBlockY();
    3. int z = player.getLocation().getBlockZ();
    4. World w = player.getWorld();
    5. Location loc = new Location(w, x, y, z);
    6. Chest c = (Chest) loc.getBlock().getState();
    7. loc.getBlock().getRelative(BlockFace.NORTH).setType(Material.CHEST);
    8. Chest c2 = (Chest) loc.getBlock().getRelative(BlockFace.NORTH);
    9. for(ItemStack i : event.getDrops()){
    10. c.getBlockInventory().addItem(i);
    11. Map<Integer, ItemStack> overflow = c.getBlockInventory().addItem(i);
    12. if(!overflow.isEmpty()){
    13. for(ItemStack i2 : overflow.values()){
    14. c2.getBlockInventory().addItem(i2);
    15. }
    16. }
    17. }


    AdamQpzm fireblast709 that dont work, no error i just fills half the chest and the rest fall on floor

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 9, 2016
  19. Offline

    fireblast709

    MCMatters remove line 10, and I assume you do event.getDrops().clear() afterwards?
     
  20. Offline

    MCMatters

  21. Offline

    fireblast709

    MCMatters after you have attempted to store the items in the chests. So below the
    Code:java
    1. for(ItemStack i : event.getDrops())
    2. {
    3. Map<Integer, ItemStack> overflow = c.getBlockInventory().addItem(i);
    4. if(!overflow.isEmpty())
    5. {
    6. for(ItemStack i2 : overflow.values())
    7. {
    8. c2.getBlockInventory().addItem(i2);
    9. }
    10. }
    11. }
    (Also note that I removed one of the two addItem(i) calls, since this would be duplicating your items :p)
     
  22. Offline

    MCMatters

    fireblast709
    Error:
    Code:error
    1. [04:55:59 INFO]: nerdtron123 issued server command: /kill
    2. [04:55:59 ERROR]: Could not pass event PlayerDeathEvent to DeathChests v1.0
    3. org.bukkit.event.EventException
    4. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    5. at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    6. at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    7. at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    8. at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:379) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    9. at net.minecraft.server.v1_7_R4.EntityPlayer.die(EntityPlayer.java:369) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    10. at org.bukkit.craftbukkit.v1_7_R4.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:85) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    11. at org.bukkit.command.defaults.KillCommand.execute(KillCommand.java:33) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    12. at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    13. at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    14. at net.minecraft.server.v1_7_R4.PlayerConnection.handleCommand(PlayerConnection.java:957) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    15. at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:818) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    16. at net.minecraft.server.v1_7_R4.PacketPlayInChat.a(PacketPlayInChat.java:28) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    17. at net.minecraft.server.v1_7_R4.PacketPlayInChat.handle(PacketPlayInChat.java:47) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    18. at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    19. at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    20. at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    21. at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    22. at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    23. at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    24. at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    25. Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R4.block.CraftBlock cannot be cast to org.bukkit.block.Chest
    26. at com.enduniverse.deaths.Deaths.death(Deaths.java:34) ~[?:?]
    27. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_11]
    28. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_11]
    29. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_11]
    30. at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_11]
    31. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    32. ... 20 more
    33. [04:55:59 INFO]: nerdtron123 died
    34. [04:56:06 INFO]: nerdtron123 has just earned the achievement [Taking Inventory]
    35. [04:57:34 INFO]: nerdtron123 issued server command: /kill
    36. [04:57:34 ERROR]: Could not pass event PlayerDeathEvent to DeathChests v1.0
    37. org.bukkit.event.EventException
    38. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    39. at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    40. at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    41. at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    42. at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callPlayerDeathEvent(CraftEventFactory.java:379) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    43. at net.minecraft.server.v1_7_R4.EntityPlayer.die(EntityPlayer.java:369) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    44. at org.bukkit.craftbukkit.v1_7_R4.entity.CraftLivingEntity.setHealth(CraftLivingEntity.java:85) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    45. at org.bukkit.command.defaults.KillCommand.execute(KillCommand.java:33) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    46. at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    47. at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    48. at net.minecraft.server.v1_7_R4.PlayerConnection.handleCommand(PlayerConnection.java:957) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    49. at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:818) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    50. at net.minecraft.server.v1_7_R4.PacketPlayInChat.a(PacketPlayInChat.java:28) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    51. at net.minecraft.server.v1_7_R4.PacketPlayInChat.handle(PacketPlayInChat.java:47) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    52. at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    53. at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    54. at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    55. at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    56. at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    57. at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    58. at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    59. Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_7_R4.block.CraftBlock cannot be cast to org.bukkit.block.Chest
    60. at com.enduniverse.deaths.Deaths.death(Deaths.java:34) ~[?:?]
    61. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_11]
    62. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_11]
    63. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_11]
    64. at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_11]
    65. at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]
    66. ... 20 more
    67. [04:57:34 INFO]: nerdtron123 died
    68. [04:57:53 WARN]: Can't keep up! Did the system time change, or is the server overloaded? Running 16431ms behind, skipping 328 tick(s)
    69. [04:59:06 INFO]: Stopping server
    70. logout
    71.  
    72. [Process completed]
    73.  
     
  23. Offline

    fireblast709

    MCMatters check if the block's type is Material.CHEST before casting the BlockState
     
Thread Status:
Not open for further replies.

Share This Page