Need a new pair of eyes

Discussion in 'Plugin Development' started by JanTuck, Jan 15, 2017.

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

    JanTuck

    Please have a look at my code what could i make different? What could i improve?

    DeepStorageHandler.java (open)
    DeepStorageHandler.java
    Code:java
    1. package me.jantuck.JCraftMain.DeepStorage;
    2.  
    3. import me.jantuck.JCraftMain.JCraftInitializer;
    4. import me.jantuck.JCraftMain.Money.MoneyHandler;
    5. import me.jantuck.JCraftMain.TokenStorage.Token;
    6. import org.bukkit.Bukkit;
    7. import org.bukkit.ChatColor;
    8. import org.bukkit.Material;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.inventory.Inventory;
    11. import org.bukkit.inventory.ItemStack;
    12. import org.bukkit.inventory.meta.ItemMeta;
    13.  
    14. import java.util.ArrayList;
    15. import java.util.Arrays;
    16. import java.util.List;
    17.  
    18. /**
    19. * Created by Jan on 1/15/2017.
    20. */
    21. public class DeepStorageHandler {
    22.  
    23. private ItemStack[] listToArray(ArrayList<ItemStack> list) {
    24. return list.toArray(new ItemStack[list.size()]);
    25. }
    26.  
    27. private static DeepStorageHandler instance = null;
    28. private JCraftInitializer plugin = null;
    29.  
    30. public static DeepStorageHandler getDeepStoragehandler() {
    31. return instance;
    32. }
    33.  
    34. public void onEnable() {
    35. plugin = JCraftInitializer.getJCraftInitalizer();
    36. plugin.moduleStartup("DeepStorage handler", "Loaded.");
    37. plugin.getServer().getPluginManager().registerEvents(new DeepStorageEvents(), plugin);
    38. instance = this;
    39. }
    40. public ItemStack createItem(Material material, int amount , byte data, String displayName, List<String> lore)
    41. {
    42. ItemStack itemStack = new ItemStack(material, amount, data);
    43. ItemMeta itemMeta = itemStack.getItemMeta();
    44. itemMeta.setDisplayName(displayName);
    45. itemMeta.setLore(lore);
    46. itemStack.setItemMeta(itemMeta);
    47. return itemStack;
    48. }
    49. private final ItemStack BUY_ITEM = createItem(Material.STAINED_GLASS_PANE, 1, (byte) 5, ChatColor.GREEN+"Buy a Deepstorage Container.", Arrays.asList(ChatColor.GOLD+"Costs:"+ ChatColor.GREEN +" 3000$"));
    50. private final ItemStack SELL_ITEM = createItem(Material.STAINED_GLASS_PANE, 1, (byte) 14, ChatColor.RED+"Sell a Deepstorage Container.", Arrays.asList(ChatColor.GOLD+"Return:"+ ChatColor.GREEN +" 1500$", ChatColor.GOLD+"Click this!"));
    51. public void popUp(Player player)
    52. {
    53. Inventory inventory = Bukkit.createInventory(null, 54, ChatColor.GREEN + "DeepStorage");
    54. inventory.setItem(50,SELL_ITEM);
    55. inventory.setItem(48,BUY_ITEM);
    56. Token token = new Token("DeepStoragesList."+player.getUniqueId().toString(), "deepstorage", "data");
    57. if (token.hasData())
    58. {
    59. List<String> stringList = (List<String>) token.getData();
    60. for (int i = 0; i < stringList.size(); i++)
    61. {
    62. inventory.setItem(i, createItem(Material.STAINED_GLASS, 1, (byte) 11, ChatColor.BLUE+"DeepStorage: " + stringList.get(i), Arrays.asList(" ")));
    63. }
    64. }
    65. else
    66. {
    67. token.setData(Arrays.asList("Default"));
    68. inventory.setItem(0, createItem(Material.STAINED_GLASS, 1, (byte) 11, ChatColor.BLUE+"DeepStorage: Default", Arrays.asList(" ")));
    69. token.save();
    70. }
    71. player.openInventory(inventory);
    72. }
    73.  
    74. public void openDeepStorage(Player player, String name)
    75. {
    76. Inventory inventory = Bukkit.createInventory(null, 54, ChatColor.BLUE + "DeepStorage: " + name);
    77. Token token = new Token("DeepStorages."+player.getUniqueId().toString()+"."+name, "deepstorage", "data");
    78. if (token.hasData())
    79. {
    80. ArrayList<ItemStack> contentList = (ArrayList<ItemStack>) token.getData();
    81. ItemStack[] contents = listToArray(contentList);
    82. inventory.setContents(contents);
    83. }
    84. player.openInventory(inventory);
    85. }
    86.  
    87. public void sellDeepstorage(Player player, String name)
    88. {
    89. MoneyHandler.getMoneyHandler().give(player, 1500.0);
    90. Token token = new Token("DeepStoragesList."+player.getUniqueId().toString(), "deepstorage", "data");
    91. if (token.hasData())
    92. {
    93. List<String> stringList = (List<String>) token.getData();
    94. stringList.remove(name);
    95. }
    96. token.save();
    97. token = new Token("DeepStorages."+player.getUniqueId().toString()+"."+name, "deepstorage", "data");
    98. token.setData(null);
    99. token.save();
    100. }
    101. }
    102.  



    DeepStorageEvents.java (open)
    Code:java
    1. package me.jantuck.JCraftMain.DeepStorage;
    2.  
    3. import me.jantuck.JCraftMain.Commands.Executors.DeepStorage;
    4. import me.jantuck.JCraftMain.Money.MoneyHandler;
    5. import me.jantuck.JCraftMain.TokenStorage.Token;
    6. import me.jantuck.JCraftMain.Utils.Playerutils;
    7. import org.bukkit.ChatColor;
    8. import org.bukkit.Material;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.inventory.InventoryClickEvent;
    13. import org.bukkit.event.inventory.InventoryCloseEvent;
    14. import org.bukkit.inventory.Inventory;
    15. import org.bukkit.inventory.ItemStack;
    16.  
    17. import java.util.*;
    18.  
    19. /**
    20. * Created by Jan on 1/15/2017.
    21. */
    22. public class DeepStorageEvents implements Listener {
    23.  
    24. List<UUID> sell = new ArrayList<UUID>();
    25.  
    26. @EventHandler
    27. public void onInventoryClick(InventoryClickEvent event)
    28. {
    29. Player player = (Player) event.getWhoClicked();
    30. Inventory inventory = event.getInventory();
    31. String inventoryTitle = inventory.getTitle();
    32. if (inventoryTitle.equals(ChatColor.GREEN + "DeepStorage"))
    33. {
    34. ItemStack item = event.getCurrentItem();
    35. if (item != null && item.hasItemMeta() && item.getItemMeta().hasDisplayName())
    36. {
    37. String displayName = item.getItemMeta().getDisplayName();
    38. if (displayName.startsWith(ChatColor.BLUE+"DeepStorage: "))
    39. {
    40. String deepstorageName = displayName.replace(ChatColor.BLUE + "DeepStorage: ", "");
    41. if (sell.contains(player.getUniqueId()))
    42. {
    43. DeepStorageHandler.getDeepStoragehandler().sellDeepstorage(player, deepstorageName);
    44. inventory.remove(item);
    45. Playerutils.notify(player, "You have sold the deepstorage unit &a"+deepstorageName);
    46. sell.remove(player.getUniqueId());
    47. inventory.setItem(50, DeepStorageHandler.getDeepStoragehandler().createItem(Material.STAINED_GLASS_PANE, 1, (byte) 14, ChatColor.RED+"Sell a Deepstorage Container.", Arrays.asList(ChatColor.GOLD+"Return:"+ ChatColor.GREEN +" 1500$", ChatColor.GOLD+"Click this!")));
    48. }
    49. else {
    50. DeepStorageHandler.getDeepStoragehandler().openDeepStorage(player, deepstorageName);
    51. }
    52. }
    53. else if (displayName.equalsIgnoreCase(ChatColor.GREEN+"Buy a Deepstorage Container."))
    54. {
    55. boolean purchase = MoneyHandler.getMoneyHandler().purchase(player, 3000);
    56. if (purchase)
    57. {
    58. Token token = new Token("DeepStoragesList."+player.getUniqueId().toString(), "deepstorage", "data");
    59. if (token.hasData())
    60. {
    61. List<String> stringList = (List<String>) token.getData();
    62. if (stringList.size()<45) {
    63. Playerutils.notify(player, "You have bought another deepstorage container.");
    64. stringList.add("N" + (stringList.size()));
    65. token.setData(stringList);
    66. token.save();
    67. DeepStorageHandler.getDeepStoragehandler().popUp(player);
    68. }
    69. else
    70. {
    71. Playerutils.notify(player, "You have the max amount of deepstorages available.");
    72. }
    73. }
    74. }
    75. else
    76. {
    77. Playerutils.notify(player, "You do not have enough money to buy another deepstorage. Your Money: &a" + MoneyHandler.getMoneyHandler().getMoney(player) + "$&6 Cost:&a 3000$");
    78. }
    79. }
    80. else if (displayName.equalsIgnoreCase(ChatColor.RED+"Sell a Deepstorage Container."))
    81. {
    82. if (!sell.contains(player.getUniqueId())) {
    83. inventory.setItem(50, DeepStorageHandler.getDeepStoragehandler().createItem(Material.STAINED_GLASS_PANE, 1, (byte) 14, ChatColor.RED + "Sell a Deepstorage Container.", Arrays.asList(ChatColor.GOLD + "Return:" + ChatColor.GREEN + " 1500$", ChatColor.GOLD + "Click the DeepStorage to sell!", ChatColor.GOLD + "All items will get deleted!",ChatColor.GOLD + "Click again to cancel.")));
    84. sell.add(player.getUniqueId());
    85. }
    86. else
    87. {
    88. inventory.setItem(50, DeepStorageHandler.getDeepStoragehandler().createItem(Material.STAINED_GLASS_PANE, 1, (byte) 14, ChatColor.RED+"Sell a Deepstorage Container.", Arrays.asList(ChatColor.GOLD+"Return:"+ ChatColor.GREEN +" 1500$", ChatColor.GOLD+"Click this!")));
    89. sell.remove(player.getUniqueId());
    90. }
    91. }
    92. }
    93. event.setCancelled(true);
    94. }
    95. }
    96.  
    97. @EventHandler
    98. public void onInventoryClose(InventoryCloseEvent event)
    99. {
    100. Player player = (Player) event.getPlayer();
    101. Inventory inventory = event.getInventory();
    102. String inventoryTitle = inventory.getTitle();
    103. if (ChatColor.stripColor(inventoryTitle).startsWith("DeepStorage: "))
    104. {
    105. String deepstorageName = ChatColor.stripColor(inventoryTitle).replace("DeepStorage: ","");
    106. Token token = new Token("DeepStorages."+player.getUniqueId().toString()+"."+deepstorageName, "deepstorage", "data");
    107. token.setData(inventory.getContents());
    108. token.save();
    109. if (sell.contains(player.getUniqueId()))
    110. {
    111. sell.remove(player.getUniqueId());
    112. }
    113. }
    114. }
    115. }
    116.  


    Deepstorage.java (open)

    Code:java
    1. package me.jantuck.JCraftMain.Commands.Executors;
    2.  
    3. import me.jantuck.JCraftMain.DeepStorage.DeepStorageHandler;
    4. import org.bukkit.command.Command;
    5. import org.bukkit.command.CommandExecutor;
    6. import org.bukkit.command.CommandSender;
    7. import org.bukkit.entity.Player;
    8.  
    9. /**
    10. * Created by Jan on 1/15/2017.
    11. */
    12. public class DeepStorage implements CommandExecutor {
    13. @Override
    14. public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) {
    15. if (!(commandSender instanceof Player)) return false;
    16. Player player = (Player) commandSender;
    17. DeepStorageHandler.getDeepStoragehandler().popUp(player);
    18. return true;
    19. }
    20. }
    21.  

     
  2. Offline

    Zombie_Striker

    There is not anything that stands out. Here are just a few pointers.
    Since this is not a main class, I would recommend calling this method "init".

    Also, why are you using Allman's style instead of K&R?

    BTW: What are you creating? It looks like a shop system, but I don't fully understand what you are doing.
     
  3. Offline

    JanTuck

    Well intellij does this automatic when i ask it to reformat code.

    Im just creating stuff to test my knowledge.

    The init part is actually helpful. I just didnt think much about naming conventions.

    Pretty much a whole bunch of stuff compiled on eachother.
    [​IMG]
     
    Last edited: Jan 15, 2017
  4. Offline

    kameronn

    @JanTuck for the sell arraylist I recommend using hashsets
     
  5. Offline

    JanTuck

    @kameronn

    Done thx, whats so special about hashsets?

    Code:java
    1.  
    2. HashSet<UUID> sell = new HashSet<UUID>();
    3.  
    4.  
     
  6. Offline

    kameronn

    @JanTuck
    It doesnt allow duplicates so you cant add the same UUID twice, plus in my opinion its better for objects
     
  7. Offline

    JanTuck

    @AlvinB
    This is actually really useful thx.
     
Thread Status:
Not open for further replies.

Share This Page