Solved Won't let me take anything out of my Inventory

Discussion in 'Plugin Development' started by CraigTheMman, May 3, 2014.

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

    CraigTheMman

    I'm making a plugin and i made a compass inventory thing
    out of my liking and the compass part works great, but
    it wont let me take anything out of my creative Inventory!
    Please Help!

    Code:java
    1. package me.CraigTheMailman.ProjectX;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Effect;
    6. import org.bukkit.GameMode;
    7. import org.bukkit.Location;
    8. import org.bukkit.Material;
    9. import org.bukkit.block.Block;
    10. import org.bukkit.block.BlockFace;
    11. import org.bukkit.block.BlockState;
    12. import org.bukkit.block.Chest;
    13. import org.bukkit.entity.Player;
    14. import org.bukkit.event.EventHandler;
    15. import org.bukkit.event.Listener;
    16. import org.bukkit.event.block.Action;
    17. import org.bukkit.event.entity.EntityDamageEvent;
    18. import org.bukkit.event.entity.PlayerDeathEvent;
    19. import org.bukkit.event.inventory.InventoryClickEvent;
    20. import org.bukkit.event.player.PlayerInteractEvent;
    21. import org.bukkit.event.player.PlayerJoinEvent;
    22. import org.bukkit.event.player.PlayerMoveEvent;
    23. import org.bukkit.event.player.PlayerToggleFlightEvent;
    24. import org.bukkit.inventory.Inventory;
    25. import org.bukkit.inventory.ItemStack;
    26. import org.bukkit.inventory.meta.ItemMeta;
    27. import org.bukkit.plugin.java.JavaPlugin;
    28.  
    29. public class ProjectX extends JavaPlugin implements Listener {
    30.  
    31. public void onEnable() {
    32. getServer().getPluginManager().registerEvents(this, this);
    33. getLogger().info("Inventory GUI Enabled");
    34. }
    35.  
    36. @EventHandler
    37. public void onPlayerToggleFlight(PlayerToggleFlightEvent event) {
    38. Player player = event.getPlayer();
    39. if(player.getGameMode()==GameMode.CREATIVE)
    40. return;
    41. event.setCancelled(true);
    42. player.setAllowFlight(false);
    43. player.setFlying(false);
    44. player.setVelocity(player.getLocation().getDirection().multiply(1.5).setY(1));
    45. }
    46.  
    47.  
    48. @EventHandler
    49. public void onPlayerMove(PlayerMoveEvent event) {
    50. Player player = event.getPlayer();
    51. if((player.getGameMode()!=GameMode.CREATIVE)
    52. && (player.getLocation().subtract(0, 1, 0).getBlock().getType()!=Material.AIR)
    53. && (!player.isFlying()));
    54. player.setAllowFlight(true);
    55.  
    56. }
    57.  
    58. @EventHandler
    59. public void EntityBlooc(EntityDamageEvent e) {
    60. e.getEntity().getLocation().getWorld().playEffect(e.getEntity().getLocation().add(0, 1, 0), Effect.STEP_SOUND, 152);
    61. }
    62.  
    63. @EventHandler
    64. public void playerDeath(PlayerDeathEvent e){
    65. e.getDrops().clear();
    66.  
    67. ItemStack[] inv = e.getEntity().getInventory().getContents();
    68. Location loc = e.getEntity().getLocation();
    69. loc.getBlock().setType(Material.CHEST);
    70. Block chest = loc.getBlock();
    71. BlockState state = chest.getState();
    72. Chest c = (Chest) state;
    73. if(inv.length >= 27){
    74. chest.getRelative(BlockFace.NORTH).setType(Material.CHEST);
    75. }
    76.  
    77. c.getInventory().clear();
    78. c.getInventory().setContents(inv);
    79. }
    80.  
    81. public void teleportInWorld(Player player, int x, int y, int z) {
    82. player.teleport(new Location(player.getWorld(), x, y, z));
    83. }
    84.  
    85. private void openGUI(Player player) {
    86. Inventory inv1 = Bukkit.createInventory(null, 9, ChatColor.GOLD
    87. + "Server Selector");
    88.  
    89. ItemStack SurvSelect = new ItemStack (Material.SAPLING);
    90. ItemMeta SurvMeta = SurvSelect.getItemMeta();
    91.  
    92. SurvMeta.setDisplayName(ChatColor.GREEN + "Wilderness");
    93. SurvSelect.setItemMeta(SurvMeta);
    94.  
    95. inv1.setItem(1, SurvSelect);
    96.  
    97. player.openInventory(inv1);
    98. }
    99.  
    100. @EventHandler
    101. public void onInventoryClick(InventoryClickEvent event) {
    102. if(!ChatColor.stripColor(event.getInventory().getName())
    103. .equalsIgnoreCase("Server Selector"))
    104. return;
    105. Player player = (Player) event.getWhoClicked();
    106. event.setCancelled(true);
    107.  
    108. if(event.getCurrentItem()==null || event.getCurrentItem().getType() == Material.AIR) {
    109. player.closeInventory();
    110. return;
    111. }
    112.  
    113. switch(event.getCurrentItem().getType()) {
    114. case SAPLING:
    115. teleportInWorld(player, 0, 0, 0);
    116. player.closeInventory();
    117. player.sendMessage(String.format("%s Teleported to %sWilderness%s!",
    118. ChatColor.GOLD, ChatColor.DARK_GREEN, ChatColor.GOLD));
    119.  
    120. break;
    121. default:
    122. player.closeInventory();
    123. break;
    124. }
    125.  
    126. }
    127.  
    128.  
    129.  
    130. @EventHandler
    131. public void onPlayerJoin(PlayerJoinEvent event) {
    132. event.getPlayer().getInventory()
    133. .addItem(new ItemStack(Material.COMPASS));
    134. }
    135.  
    136. @EventHandler
    137. public void onPlayerInteract(PlayerInteractEvent event) {
    138. Action action = event.getAction();
    139.  
    140. ItemStack is = event.getItem();
    141.  
    142. if(action == Action.PHYSICAL || is == null || is.getType() == Material.AIR)
    143. return;
    144.  
    145. if(is.getType() == Material.COMPASS)
    146. openGUI(event.getPlayer());
    147. }
    148. }
    149.  


    No Errors were presented either!
     
  2. Offline

    NathanG_

    CraigTheMman

    Hi, it looks like in your Inventory Click listener on line 81, you are cancelling the event every time it happens. Maybe you meant something like this which would only cancel the event if the player isn't in creative mode:
    Code:java
    1. Player player = (Player) event.getWhoClicked();
    2. if (!(player.getGameMode() == GameMode.CREATIVE)) {
    3. event.setCancelled(true);
    4. }


    Edit: Nevermind, please refer to the post below me, I misinterpreted what you were doing.
     
  3. Offline

    Arfie99

    Code:java
    1. if(ChatColor.stripColor(event.getInventory().getName())
    2. .equalsIgnoreCase("Server Selector"))
    3. return;

    I think you just got this little line wrong, now you are only cancelling the event (and doing the server sending stuff) when the player is NOT in the server selector. So you just need to put an exclamation point to invert the condition of this if-statement.
     
  4. Offline

    CraigTheMman

    Like this?
    Code:java
    1. @EventHandler
    2. public void onInventoryClick(InventoryClickEvent event) {
    3. if(!ChatColor.stripColor(event.getInventory().getName())
    4. .equalsIgnoreCase("Server Selector"))
    5. return;
     
  5. Offline

    Arfie99

    Exactly :)
     
Thread Status:
Not open for further replies.

Share This Page