Solved 2 Classes Not Working In 1 Package

Discussion in 'Plugin Development' started by Evaluations, Sep 29, 2014.

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

    Evaluations

    Basically I'm trying to get 2 classes in 1 package to work without having 2 separate plugins.

    Both these plugins display text only (/help and /staff)

    I get no errors, but only /help works and /staff doesn't.

    http://prntscr.com/4ro61v

    Help.java:
    Code:java
    1. package me.blowns.main;
    2.  
    3. import org.bukkit.plugin.java.JavaPlugin;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.command.*;
    6. import org.bukkit.entity.Player;
    7.  
    8. public class Help extends JavaPlugin {
    9.  
    10. public void onEnable(){
    11. System.out.println("SH Enabled.");
    12.  
    13. }
    14.  
    15. public void onDisable(){
    16. System.out.println("SH Disabled.");
    17. }
    18.  
    19. public Help()
    20. {
    21. }
    22.  
    23. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String args[])
    24. {
    25. Player player = (Player)sender;
    26. if(commandLabel.equalsIgnoreCase("help"))
    27. {
    28. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("World Border: 10,000").toString());
    29. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("Nether Border: 10,000").toString());
    30. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("End Border: 300").toString());
    31. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_AQUA).append("*****Player Commands*****").toString());
    32. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/factions - faction related commands.").toString());
    33. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/rules - displays a list of rules.").toString());
    34. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/spawn - warps you to spawn.").toString());
    35. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/home - used to teleport to your home.").toString());
    36. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/buy - donate for ranks.").toString());
    37. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/kits - lists available kits.").toString());
    38. }
    39. return true;
    40. }
    41. }


    Staff.java
    Code:java
    1. package me.blowns.main;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.command.*;
    5. import org.bukkit.entity.Player;
    6.  
    7. public class Staff {
    8.  
    9. public Staff()
    10. {
    11. }
    12.  
    13. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String args[])
    14. {
    15. Player player = (Player)sender;
    16. if(commandLabel.equalsIgnoreCase("staff"))
    17. {
    18. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_RED).append("****Owners****").toString());
    19. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("TewChaynz, Buildinqs, roastgame, Evaluations").toString());
    20. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_RED).append("****Operators****").toString());
    21. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Pimpay").toString());
    22. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("****Admins****").toString());
    23. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Deextra").toString());
    24. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_PURPLE).append("****Moderators****").toString());
    25. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("pokerface0405").toString());
    26. player.sendMessage((new StringBuilder()).append(ChatColor.YELLOW).append("****T-Mods****").toString());
    27. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Apply!").toString());
    28. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("****YouTubers****").toString());
    29. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Make a video today!").toString());
    30. }
    31. return true;
    32. }
    33. }

    Plugin.yml:
    Code:java
    1. name: SH
    2. version: 1.0
    3. author: Blowns
    4. description: Help
    5. main: me.blowns.main.Help
    6. commands:
    7. help:
    8. usage: /<command>
    9. aliases: []
    10. description: Help
    11. staff:
    12. usage: /<command>
    13. aliases: []
    14. description: Staff


    Would I have to create a new main class file?

    And yes I am obviously new to coding.
     
  2. Offline

    Gerov

    Evaluations You can only have one class that extends JavaPlugin... If you want to rename the class, just click it in your explorer and press F2 if you are in Windows, and why are you doing this? :

    Code:java
    1. (new StringBuilder()).append(ChatColor.DARK_RED).append("****Owners****").toString()


    You can just do this:

    Code:java
    1. ChatColor.GRAY+"TEXTHERE";
     
  3. Offline

    Evaluations

    Help.java is the only one that extends JavaPlugin though

    And thanks, that's just how my friend showed me :b
     
  4. Offline

    teej107

  5. Offline

    Gerov

    Evaluations Ohhh, I thought you meant two main classes by two classes that extended JavaPlugin.
     
  6. Offline

    Evaluations

    Soo what would should I do?
     
  7. Offline

    teej107

  8. Offline

    Jaaakee224

    Evaluations Add an @Override above the onCommand, just teej107 said.
    Code:java
    1. @Override
    2. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String args[])
     
  9. Offline

    teej107

    Jaaakee224 That won't fix it alone. In fact just doing that will cause the compiler to throw an error but it's a good reason of why you should use @Override.

    EDIT: The real answer is in the Plugin Tutorial section about making commands.
     
  10. Offline

    Jaaakee224

    teej107 Actually, that is not all wrong with the class.
    Using @Override is good practice though, I use it in all my plugins.

    Code:java
    1. }
    2. return true;
    3. }
    4. }

    Should be return false;

    Code:java
    1. public class Staff {

    Should be public class staff implements CommandExecutor {

    plugin.yml doesn't need the usage & aliases, pretty pointless since you don't even have aliases.
    You do need descriptions for each command.

    Evaluations ^
    Also, check out this:
    https://forums.bukkit.org/threads/tutorial-using-multiple-classes.179833/

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

    RingOfStorms


    Using a StringBuilder in this case is the same as just the dark_red+string. The compiler/java runtime creates a new StringBuilder for every '+' string you have, so if you are adding together 3 or more strings it is more efficient to use one StringBuilder and append to it, rather than creating a new one for every single string 'addition'.

    This becomes a much more apparent thing when doing large loops that add strings using the plus rather than a StringBuilder and append.
     
  12. Offline

    Evaluations

    I inserted the @Override and commandexecutor :
    Code:java
    1. package me.blowns.main;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.command.*;
    5. import org.bukkit.entity.Player;
    6.  
    7. public class Staff implements CommandExecutor {
    8.  
    9. public Staff()
    10. {
    11. }
    12.  
    13. @Override
    14. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String args[])
    15. {
    16. Player player = (Player)sender;
    17. if(commandLabel.equalsIgnoreCase("staff"))
    18. {
    19. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_RED).append("****Owners****").toString());
    20. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("TewChaynz, Buildinqs, roastgame, Evaluations").toString());
    21. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_RED).append("****Operators****").toString());
    22. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Pimpay").toString());
    23. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("****Admins****").toString());
    24. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Deextra").toString());
    25. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_PURPLE).append("****Moderators****").toString());
    26. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("pokerface0405").toString());
    27. player.sendMessage((new StringBuilder()).append(ChatColor.YELLOW).append("****T-Mods****").toString());
    28. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Apply!").toString());
    29. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("****YouTubers****").toString());
    30. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Make a video today!").toString());
    31. }
    32. return false;
    33. }
    34. }

    But /staff still gives nothing in-game
     
  13. Offline

    Jaaakee224

    Evaluations
    Can you post every class' code? I'm going to fully explain it.
     
  14. Offline

    MomsKnife

    have both commands registered in the plugin.yml, implement commandexecutor in your second command class, and in your onenable method in your main class, do something like:
    Code:java
    1. @Override
    2. public void onEnable(){
    3. // getCommand uses the command's name, where setExecutor uses the name of the class to get the command from
    4. getCommand("staff").setExecutor(new Staff());
    5. }
     
  15. Offline

    Evaluations

    That worked, it shows all the text then "/staff" in white at the bottom. (http://prntscr.com/4rz5ke) Any reason for this?


    Here you go:
    Help.java:
    Code:java
    1. package me.blowns.main;
    2.  
    3. import org.bukkit.plugin.java.JavaPlugin;
    4. import org.bukkit.ChatColor;
    5. import org.bukkit.command.*;
    6. import org.bukkit.entity.Player;
    7.  
    8. public class Help extends JavaPlugin {
    9.  
    10. public void onEnable(){
    11. System.out.println("SH Enabled.");
    12.  
    13. }
    14.  
    15. public void onDisable(){
    16. System.out.println("SH Disabled.");
    17. }
    18.  
    19. public Help()
    20. {
    21. }
    22.  
    23. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String args[])
    24. {
    25. Player player = (Player)sender;
    26. if(commandLabel.equalsIgnoreCase("help"))
    27. {
    28. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("World Border: 10,000").toString());
    29. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("Nether Border: 10,000").toString());
    30. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("End Border: 300").toString());
    31. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_AQUA).append("*****Player Commands*****").toString());
    32. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/factions - faction related commands.").toString());
    33. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/rules - displays a list of rules.").toString());
    34. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/spawn - warps you to spawn.").toString());
    35. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/home - used to teleport to your home.").toString());
    36. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/buy - donate for ranks.").toString());
    37. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("/kits - lists available kits.").toString());
    38. }
    39. return true;
    40. }
    41. }


    Staff.java:
    Code:java
    1. package me.blowns.main;
    2.  
    3. import org.bukkit.ChatColor;
    4. import org.bukkit.command.*;
    5. import org.bukkit.entity.Player;
    6.  
    7. public class Staff implements CommandExecutor {
    8.  
    9. public Staff()
    10. {
    11. }
    12.  
    13. @Override
    14. public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String args[])
    15. {
    16. Player player = (Player)sender;
    17. if(commandLabel.equalsIgnoreCase("staff"))
    18. {
    19. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_RED).append("****Owners****").toString());
    20. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("TewChaynz, Buildinqs, roastgame, Evaluations").toString());
    21. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_RED).append("****Operators****").toString());
    22. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Pimpay").toString());
    23. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("****Admins****").toString());
    24. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Deextra").toString());
    25. player.sendMessage((new StringBuilder()).append(ChatColor.DARK_PURPLE).append("****Moderators****").toString());
    26. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("pokerface0405").toString());
    27. player.sendMessage((new StringBuilder()).append(ChatColor.YELLOW).append("****T-Mods****").toString());
    28. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Apply!").toString());
    29. player.sendMessage((new StringBuilder()).append(ChatColor.RED).append("****YouTubers****").toString());
    30. player.sendMessage((new StringBuilder()).append(ChatColor.GRAY).append("Make a video today!").toString());
    31. }
    32. return false;
    33. }
    34. }


    plugin.yml:
    Code:
    name: SH
    version: 1.0
    author: Blowns
    description: SH
    main: me.blowns.main.Help
    commands:
        help:
            usage: /<command>
            aliases: []
            description: Help
        staff:
            usage: /<command>
            aliases: []
            description: Staff


    EDIT: MomsKnife method worked, I just needed to set it to return true; instead of false in the staff.java.

    Thank you everyone!
     
Thread Status:
Not open for further replies.

Share This Page