Currency/Shop plugin

Discussion in 'Plugin Development' started by BrushPainter, Mar 7, 2014.

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

    BrushPainter

    Hey everyone,

    I just started working on a currency plugin for my server, Gems. I found a tutorial here as I have never made a currency/shop plugin before. https://forums.bukkit.org/threads/tutorial-making-a-simple-currency-with-a-the-config-file.175585/ But it came with tons of errors, but anyway I fixed them all. But now I went to go upload my plugin with the custom shop as I have no errors and the plugin isn't working, but it is loaded. Just when I type /gems nothing happens and when I type /pbgun buy <name> it says unknown command. Here is my code:

    Code:java
    1. package me.BrushPainter.Gems;
    2.  
    3. import org.bukkit.Bukkit;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.Material;
    6. import org.bukkit.command.Command;
    7. import org.bukkit.command.CommandSender;
    8. import org.bukkit.entity.Player;
    9. import org.bukkit.event.EventHandler;
    10. import org.bukkit.event.Listener;
    11. import org.bukkit.event.player.PlayerJoinEvent;
    12. import org.bukkit.inventory.ItemStack;
    13. import org.bukkit.inventory.meta.ItemMeta;
    14. import org.bukkit.plugin.PluginManager;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16.  
    17. public class Main extends JavaPlugin implements Listener{
    18.  
    19. public void onEnable() {
    20. this.saveDefaultConfig();
    21. getLogger().info("Gems Enabled");
    22. PluginManager pm = Bukkit.getPluginManager();
    23. pm.registerEvents(this, this);
    24. }
    25.  
    26. public void onDisable() {
    27.  
    28. getLogger().info("Gems Disabled");
    29.  
    30. }
    31.  
    32. @EventHandler
    33. public void onJoin(PlayerJoinEvent e)
    34. {
    35. Player p = e.getPlayer();
    36. getConfig().set(p.getName() + ".money" + p,(getConfig().getInt(p.getName() + ".money")));
    37. saveConfig();
    38. }
    39.  
    40. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
    41.  
    42. {
    43.  
    44. if(cmd.getName().equalsIgnoreCase("pbgun"))
    45. {
    46. if(args.length == 0)
    47. {
    48. Player p = (Player) sender;
    49. p.sendMessage(ChatColor.DARK_RED + "" + ChatColor.BOLD + "List of Paintball guns:");
    50. p.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "SemiAuto - Free [Default]");
    51. p.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "ThreeBurst - 500" + ChatColor.AQUA + "G");
    52. p.sendMessage(ChatColor.DARK_GRAY + "" + ChatColor.ITALIC + "FullyAuto- 1000" + ChatColor.AQUA + "G");
    53.  
    54. }
    55. else
    56. {
    57. if (sender instanceof Player)
    58.  
    59. {
    60.  
    61. if(args.length >= 2)
    62.  
    63. {
    64. if (args[1].equalsIgnoreCase("buy")) {
    65. final Player p = (Player)sender;
    66. p.sendMessage(ChatColor.DARK_RED + "Correct usage:" + ChatColor.RED + "/pbgun buy <GunName>");
    67. p.sendMessage(ChatColor.DARK_GRAY + "Type /pbgun for a list of guns.");
    68. }
    69. if (args[2].equalsIgnoreCase("fullyauto")) {
    70. final Player p = (Player)sender;
    71. Player pl = (Player) sender;
    72. p.getPlayer().getInventory().addItem(new ItemStack(Material.DIAMOND_BARDING, 1));
    73. ItemStack is1 = new ItemStack(Material.DIAMOND_BARDING);
    74. ItemMeta im1 = is1.getItemMeta();
    75. im1.setDisplayName(ChatColor.AQUA + "" + ChatColor.BOLD + "Fully-Auto Paintball Gun");
    76. is1.setItemMeta(im1);
    77. pl.getInventory().addItem(is1);
    78.  
    79. p.sendMessage(ChatColor.DARK_GRAY + "You have purchased a Full-Auto PB gun for 500" + ChatColor.AQUA + "b" + ChatColor.DARK_GRAY + "!");
    80. p.sendMessage(ChatColor.DARK_GRAY + "From now on you can type:");
    81. p.sendMessage(ChatColor.DARK_GRAY + "/fullyauto to get your gun back!");
    82.  
    83. Player t = Bukkit.getPlayer(args[2]);
    84. getConfig().set(t.getName() + ".money", getConfig().getInt(t.getName() + ".money") - 500);
    85. }
    86. if (args[2].equalsIgnoreCase("threeburst")) {
    87. final Player p = (Player)sender;
    88. Player pl = (Player) sender;
    89. p.getPlayer().getInventory().addItem(new ItemStack(Material.GOLD_BARDING, 1));
    90. ItemStack is2 = new ItemStack(Material.GOLD_BARDING);
    91. ItemMeta im2 = is2.getItemMeta();
    92. im2.setDisplayName(ChatColor.GOLD + "" + ChatColor.BOLD + "3-Burst Paintball Gun");
    93. is2.setItemMeta(im2);
    94. pl.getInventory().addItem(is2);
    95. p.sendMessage(ChatColor.DARK_GRAY + "You have purchased a 3-Burst PB gun for 1000" + ChatColor.AQUA + "b" + ChatColor.DARK_GRAY + "!");
    96. p.sendMessage(ChatColor.DARK_GRAY + "From now on you can type:");
    97. p.sendMessage(ChatColor.DARK_GRAY + "/threeburst to get your gun back!");
    98.  
    99. Player t = Bukkit.getPlayer(args[2]);
    100. getConfig().set(t.getName() + ".money", getConfig().getInt(t.getName() + ".money") - 1000);
    101. }
    102. else {
    103. final Player p = (Player)sender;
    104. p.sendMessage(ChatColor.DARK_GRAY + "That is not a paintball gun or you do not have enough" + ChatColor.AQUA + " Gems" + ChatColor.DARK_GRAY + "!");
    105. p.sendMessage(ChatColor.YELLOW + "Type /pbgun for a list of guns.");
    106. }
    107. }
    108. }
    109. }
    110.  
    111. if(cmd.getName().equalsIgnoreCase("gems"))
    112.  
    113. {
    114.  
    115. if(args.length == 0)
    116. {
    117. final Player p = (Player)sender;
    118. p.sendMessage("§7" + getConfig().getInt(p.getName() + ".money" + "§bG", 0));
    119.  
    120. }
    121. else
    122. {
    123. if (sender instanceof Player)
    124.  
    125. {
    126.  
    127. final Player p = (Player)sender;
    128.  
    129. if(args.length >= 1)
    130.  
    131. {
    132.  
    133. {
    134.  
    135. switch (args.length)
    136.  
    137. {
    138.  
    139. case 1:
    140.  
    141. case 2:
    142.  
    143. case 3:
    144.  
    145. p.sendMessage("§4Error: §cNot enough arguments, or too many.");
    146.  
    147. p.sendMessage("§7/Gems");
    148.  
    149. p.sendMessage("§7/Gems give <player> <amount>");
    150.  
    151. p.sendMessage("§7/Gems set <player> <amount>");
    152.  
    153. saveConfig();
    154.  
    155. break;
    156.  
    157.  
    158.  
    159. case 4:
    160.  
    161. Player t = Bukkit.getPlayer(args[2]);
    162.  
    163. if (t == null)
    164.  
    165. p.sendMessage( "§4Error: §cPlease enter a valid player.");
    166.  
    167. else try
    168.  
    169. {
    170.  
    171. int value = Integer.parseInt(args[3]);
    172.  
    173. if (args[1].equalsIgnoreCase("give")) {
    174.  
    175. getConfig().set(t.getName() + ".money", getConfig().getInt(t.getName() + ".money") + value);
    176.  
    177. p.sendMessage("§7You gave §bG" + args[3] + "§7's to §e" + t.getName());
    178.  
    179. t.sendMessage("§7You got §bG" + args[3] + "§7 from §e" + p.getName());
    180.  
    181. saveConfig();
    182.  
    183. }
    184.  
    185.  
    186.  
    187. if (args[1].equalsIgnoreCase("set"))
    188.  
    189. {
    190.  
    191. getConfig().set(t.getName() + ".money", value);
    192.  
    193. p.sendMessage("§7You set §e" + t.getName() + "§e's §bGems §7to §b" + value);
    194.  
    195. t.sendMessage("§7Your §bGems §7were set to §bG" + value + "§7 by §e" + p.getName());
    196.  
    197. saveConfig();
    198.  
    199. }
    200.  
    201. }
    202.  
    203. catch (final NumberFormatException e)
    204.  
    205. {
    206.  
    207. p.sendMessage( "§4Error: §cYou need to specify a valid amount.");
    208.  
    209. }
    210.  
    211.  
    212.  
    213. return true;
    214.  
    215. }
    216. }
    217. }
    218.  
    219. else if(args[0].equalsIgnoreCase("pay"))
    220.  
    221. {
    222.  
    223. switch (args.length)
    224.  
    225. {
    226.  
    227. case 1:
    228.  
    229. case 2:
    230.  
    231. p.sendMessage( "§4Error: §cYou need to specify an amount.");
    232.  
    233. p.sendMessage( "§7/Gems pay <player> <amount>");
    234.  
    235. break;
    236.  
    237. case 3:
    238.  
    239. Player t = Bukkit.getPlayer(args[1]);
    240.  
    241. if(t == null)
    242.  
    243. p.sendMessage( "§4Error: §cPlease enter a valid player.");
    244.  
    245. else try
    246.  
    247. {
    248.  
    249. getConfig().set(t.getName() + ".money", getConfig().getInt(t.getName() + ".money") + Integer.parseInt(args[2]));
    250.  
    251. getConfig().set(p.getName() + ".money", getConfig().getInt(p.getName() + ".money") - Integer.parseInt(args[2]));
    252.  
    253. p.sendMessage("§7You gave §bG" + args[2] + "§7's to §e" + t.getName());
    254.  
    255. t.sendMessage("§7You got §bG" + args[2] + "§7's from §e" + p.getName());
    256.  
    257. saveConfig();
    258.  
    259. break;
    260.  
    261. }
    262.  
    263. catch (final NumberFormatException e)
    264.  
    265. {
    266.  
    267. p.sendMessage( "§4Error: §cYou need to specify a valid amount.");
    268.  
    269. }
    270.  
    271.  
    272.  
    273. return true;
    274.  
    275.  
    276.  
    277. }
    278.  
    279. }
    280.  
    281. }
    282.  
    283. }
    284.  
    285. }
    286.  
    287. {
    288. return false;
    289. }
    290. }
    291. return false;
    292. }
    293. }


    I never used args lengths before so it might be a problem with that or line 84 and or 100 because I did "-" instead of + trying to deduct Gems from the player after they buy a gun but I wasn't sure how to do it.

    Thanks in advance -Brush:)
     
  2. Offline

    Monkeyboystein

    Well args.length checks how many args there are,

    if you want to add an argyment arrow you could do this:

    if(args.length==0)
    {
    sender.sendMessage("Sorry. Recheck your arguments");
    }

    its a good way to make sure a player knows what theyre doing, also if can me used to check if its not null.
     
  3. Offline

    BrushPainter

  4. Offline

    ClassyInvader69

    BrushPainter The problem is your args checking. Minecraft numbers always start from 0.
    Example " /pbgun buy Lol ".
    When you do args[1], you are checking for the second argument which is 'Lol'
    So to solve your problem, do args[0] instead.
     
Thread Status:
Not open for further replies.

Share This Page