Call method from another class

Discussion in 'Plugin Development' started by Ultracrepadarian, Jul 20, 2015.

Thread Status:
Not open for further replies.
  1. Hey! So what I'm trying to do it make a whole new class for all my startup, that runs when the plugin starts. I have tried many things and hav'nt found any suitable way to do this. I think what my Startup file should extend the MainFile, But I'm not sure how the MainFile would reference to the Startup file. So basically I made a method in Startup and I want my MainFile to call that method on startup. My current code is this:

    MainFile (open)

    package com.krazytar.plugins;

    import java.io.File;
    import java.io.IOException;
    import java.util.logging.Logger;

    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.AsyncPlayerChatEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.event.server.ServerListPingEvent;
    import org.bukkit.permissions.Permission;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    import com.krazytar.plugins.Startup;

    public class MainFile extends JavaPlugin implements Listener
    {

    String chatSenderName;
    String chatTargetName;
    boolean onCommand;
    MainFile configGetter;
    String motd;
    String message;
    String np = new String(ChatColor.BLUE + "[KrazyFunStuff] " + ChatColor.RED + "You do not have permission for this command! (");
    long pos;

    public Permission sethearts = new Permission("krazyfunstuff.sethearts");
    public Permission welcome = new Permission("krazyfunstuff.welcome");
    public Permission setmotd = new Permission("krazyfunstuff.setmotd");
    public Permission tpplayer = new Permission("krazyfunstuff.tpplayer");
    public final Logger logger = this.getLogger();

    File file = new File("plugins/KrazyFunStuff/players.yml");
    YamlConfiguration playersF = YamlConfiguration.loadConfiguration(file);


    @Override
    public void onEnable()
    {
    com.krazytar.plugins.Startup.Start();
    }

    @Override
    public void onDisable()
    {
    this.logger.info(ChatColor.GOLD + "[KrazyFunStuff] " + ChatColor.BLUE + "KrazyFunStuff Has been disabled! :(");
    this.logger.info(ChatColor.GOLD + "[KrazyFunStuff] " + ChatColor.BLUE + "I... I hope it was for the greater cause... :(");

    }

    public void loadConfiguration()
    {
    this.getConfig().addDefault("welcome-message", "Welcome to the server!");
    this.getConfig().addDefault("motd", null);
    motd = this.getConfig().getString("motd");
    this.getConfig().options().copyDefaults(true);
    this.saveConfig();
    }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
    Player player = (Player) sender;
    if(cmd.getName().equalsIgnoreCase("tppl") && sender instanceof Player || cmd.getName().equalsIgnoreCase("tpplayer"))
    {
    if(sender instanceof Player)
    {
    World world = player.getWorld();
    if(args.length == 0)
    {
    player.sendMessage(ChatColor.AQUA + "[KrazyFunStuff] " + ChatColor.BLUE + "Please specify a player!");
    }
    if(args.length == 1)
    {
    int pos = playersF.getInt(args[0]);
    Location loc = new Location(world, pos, pos, pos);
    player.teleport(loc);
    }
    if(!playersF.contains(args[0]))
    {
    player.sendMessage(ChatColor.AQUA + "[KrazyFunStuff] " + ChatColor.BLUE + "Player has never quit the game before!");
    }
    } else
    {
    sender.sendMessage("This command is not supported for the console!");
    }
    }
    if(cmd.getName().equalsIgnoreCase("setmotd"))
    {
    if(player.hasPermission("krazyfunstuff.setmotd"))
    {
    if(args.length == 1)
    {
    this.getConfig().set("motd", args[0]);
    this.saveConfig();
    this.reloadConfig();
    player.sendMessage(ChatColor.AQUA + "[KrazyFunStuff] " + ChatColor.BLUE + "Motd set to '" + ChatColor.GREEN + "" + args[0] + ChatColor.BLUE + "'!");
    } else if (args.length == 0)
    {
    player.sendMessage("Usage: /setmotd <Motd>");
    }
    }
    if(!player.hasPermission("krazyfunstuff.setmotd"))
    {
    player.sendMessage(np + "krazyfunstuff.setmotd)");
    }

    }
    if(cmd.getName().equalsIgnoreCase("forcechat") && sender instanceof Player || cmd.getName().equalsIgnoreCase("fc") && sender instanceof Player)
    {
    if(args.length == 1)
    {
    for(Player target : Bukkit.getServer().getOnlinePlayers())
    {
    if(target.getName().equalsIgnoreCase(args[0]))
    {
    onCommand = true;
    chatSenderName = player.getName();
    chatTargetName = args[0];
    player.sendMessage("You are now speaking for " + chatTargetName);
    } else {
    player.sendMessage(ChatColor.DARK_RED + "Error: " + ChatColor.RED + "Player not found!");
    }
    }
    }

    }
    if(cmd.getName().equalsIgnoreCase("welcome") && sender instanceof Player)
    {
    if(player.hasPermission("krazyfunstuff.welcome"))
    {
    String welcome = this.getConfig().getString("welcome-message");
    player.chat(welcome);
    } else
    {
    player.sendMessage(np + "krazyfunstuff.welcome)");
    }
    }
    if(cmd.getName().equalsIgnoreCase("sethearts") && sender instanceof Player)
    {
    if(player.hasPermission("krazyfunstuff.sethearts"))
    {
    if(new Float(args[1]) > 1000)
    {
    player.sendMessage(ChatColor.RED + "The max amount of hearts must be under 1000");

    } else {

    if(args.length == 0)
    {
    player.sendMessage(ChatColor.RED + "Usage: /sethearts <Player> <Amount>");
    }

    for(Player target : Bukkit.getServer().getOnlinePlayers())
    {
    if(target.getName().equalsIgnoreCase(args[0]))
    {
    target.setMaxHealth(new Float(args[1]) * 2);
    target.setHealth(new Float(args[1]) * 2);
    }
    }
    }

    return true;
    } else
    {
    player.sendMessage(np + "krazyfunstuff.sethearts)");
    }
    }
    return false;
    }

    @SuppressWarnings("deprecation")
    @EventHandler
    public void PlayerChat(AsyncPlayerChatEvent e)
    {
    if(onCommand == true)
    {
    if(e.getPlayer().equals(chatSenderName))
    {
    e.setCancelled(true);
    Player target = Bukkit.getPlayer(chatTargetName);
    message = e.getMessage();
    target.chat(message);
    }
    }
    }

    @EventHandler
    public void ServerPing(ServerListPingEvent e)
    {
    String Motd = this.getConfig().getString("motd");
    String NewMotd = Motd.replaceAll("_", " ");
    String NewestMotd = NewMotd.replaceAll("&", "\u00a7");
    e.setMotd(NewestMotd);
    }
    @EventHandler
    public void OnPlayerLeave(PlayerQuitEvent e)
    {
    if(!this.playersF.contains(e.getPlayer().getName()))
    {
    this.playersF.addDefault(e.getPlayer().getName(), e.getPlayer().getLocation());
    }
    if(this.playersF.contains(e.getPlayer().getName()))
    {
    this.playersF.set(e.getPlayer().getName(), e.getPlayer().getLocation());
    }
    this.saveConfig();
    this.reloadConfig();
    }
    }


    Startup File (open)

    package com.krazytar.plugins;

    import java.io.IOException;

    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.plugin.PluginManager;

    public class Startup extends MainFile
    {
    public static void Start()
    {
    if(!file.exists())
    {
    try {
    file.createNewFile();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    loadConfiguration();
    PluginManager pm = getServer().getPluginManager();
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
    onCommand = false;
    this.logger.info(ChatColor.GOLD + "[KrazyFunStuff] " + ChatColor.BLUE + "KrazyFunStuff Has been enabled!");
    pm.addPermission(welcome);
    pm.addPermission(sethearts);
    pm.addPermission(setmotd);
    pm.addPermission(tpplayer);
    }
    }


    I'd also like to note that if I dont make the Start method static, then for some reason it wont recognize it in the MainFile. But when I do, Many many errors pop up all saying one of these errors:
    "Cannot make a static reference to the non-static method <BlaBla> from the type MainFile"
    "Cannot make a static reference to the non-static field <BlaBla>"
    "Cannot use this in a static context"

    As always, Thanks in advance!
     
  2. Offline

    Shortninja66

    To call a method from a different class, you need to make an instance of that object. Here's an example:
    Code:
    SecondClass object = new SecondClass();
    
    object.[method]
    This is basic Java knowledge, you should watch TheNewBoston on YouTube to learn more :p
     
  3. Offline

    AcePilot10

    @Ultracrepadarian @Shortninja66 is right, you need to learn basic java before you can use bukkit. Also start with some stuff a little more simple instead of jumping in and attempting to create a new file, as it will only cause more errors :/
     
  4. Offline

    Shortninja66

    (it was marked, nevermind)
     
  5. I solved that problem, But now my problem is when I initialize my plugin, It says "Plugin already initialized!". Well, For one, My plugin is definitely NOT initialized. I know it has something to do with how I referenced my scripts together. Please help!

    I referenced my three classes together with this:

    Note: All lines of code are in the MainFile
    Code:
    Commands command = new Commands();
    Code:
    Startup start = new Startup();
    Thanks! And yes, I know I'm a noob, But my friend (Who usually helps me with this little stuff) Is away :/
     
    Last edited: Jul 22, 2015
  6. *Bump* Still need help :D
     
  7. Offline

    AcePilot10

  8. Use a constructor to get an instance of your main class.
     
  9. No problem @AcePilot10
    MainFile (open)

    package com.krazytar.plugins;

    import java.util.logging.Logger;

    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.event.server.ServerListPingEvent;
    import org.bukkit.permissions.Permission;
    import org.bukkit.plugin.java.JavaPlugin;

    public class MainFile extends JavaPlugin implements Listener
    {

    static String chatSenderName;
    static String chatTargetName;
    static boolean onCommand;
    static MainFile configGetter;
    static String motd;
    static String message;
    static String np = new String(ChatColor.BLUE + "[KrazyFunStuff] " + ChatColor.RED + "You do not have permission for this command! (");
    static long pos;
    static Startup start = new Startup();
    static Commands command = new Commands();

    public Permission sethearts = new Permission("krazyfunstuff.sethearts");
    public Permission welcome = new Permission("krazyfunstuff.welcome");
    public Permission setmotd = new Permission("krazyfunstuff.setmotd");
    public Permission tpplayer = new Permission("krazyfunstuff.tpplayer");
    public final Logger logger = this.getLogger();


    @Override
    public void onEnable()
    {
    start.Starting();
    }

    @Override
    public void onDisable()
    {
    this.logger.info(ChatColor.GOLD + "[KrazyFunStuff] " + ChatColor.BLUE + "KrazyFunStuff Has been disabled! :(");
    this.logger.info(ChatColor.GOLD + "[KrazyFunStuff] " + ChatColor.BLUE + "I... I hope it was for the greater cause... :(");

    }

    @EventHandler
    public void ServerPing(ServerListPingEvent e)
    {
    String Motd = this.getConfig().getString("motd");
    String NewMotd = Motd.replaceAll("_", " ");
    String NewestMotd = NewMotd.replaceAll("&", "\u00a7");
    e.setMotd(NewestMotd);
    }
    @EventHandler
    public void OnPlayerLeave(PlayerQuitEvent e)
    {
    if(!this.getConfig().contains(e.getPlayer().getName()))
    {
    this.getConfig().addDefault(e.getPlayer().getName(), e.getPlayer().getLocation());
    }
    if(this.getConfig().contains(e.getPlayer().getName()))
    {
    this.getConfig().set(e.getPlayer().getName(), e.getPlayer().getLocation());
    }
    this.saveConfig();
    }
    }

    Commands Class (open)

    package com.krazytar.plugins;

    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.player.AsyncPlayerChatEvent;

    public class Commands extends MainFile
    {
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
    Player player = (Player) sender;
    if(cmd.getName().equalsIgnoreCase("tppl") && sender instanceof Player || cmd.getName().equalsIgnoreCase("tpplayer"))
    {
    if(sender instanceof Player)
    {
    World world = player.getWorld();
    if(args.length == 0)
    {
    player.sendMessage(ChatColor.AQUA + "[KrazyFunStuff] " + ChatColor.BLUE + "Please specify a player!");
    }
    if(args.length == 1)
    {
    int pos = getConfig().getInt(args[0]);
    Location loc = new Location(world, pos, pos, pos);
    player.teleport(loc);
    }
    if(!getConfig().contains(args[0]))
    {
    player.sendMessage(ChatColor.AQUA + "[KrazyFunStuff] " + ChatColor.BLUE + "Player has never quit the game before!");
    }
    } else
    {
    sender.sendMessage("This command is not supported for the console!");
    }
    }
    if(cmd.getName().equalsIgnoreCase("setmotd"))
    {
    if(player.hasPermission("krazyfunstuff.setmotd"))
    {
    if(args.length == 1)
    {
    this.getConfig().set("motd", args[0]);
    this.saveConfig();
    this.reloadConfig();
    player.sendMessage(ChatColor.AQUA + "[KrazyFunStuff] " + ChatColor.BLUE + "Motd set to '" + ChatColor.GREEN + "" + args[0] + ChatColor.BLUE + "'!");
    } else if (args.length == 0)
    {
    player.sendMessage("Usage: /setmotd <Motd>");
    }
    }
    if(!player.hasPermission("krazyfunstuff.setmotd"))
    {
    player.sendMessage(np + "krazyfunstuff.setmotd)");
    }

    }
    if(cmd.getName().equalsIgnoreCase("forcechat") && sender instanceof Player || cmd.getName().equalsIgnoreCase("fc") && sender instanceof Player)
    {
    if(args.length == 1)
    {
    for(Player target : Bukkit.getServer().getOnlinePlayers())
    {
    if(target.getName().equalsIgnoreCase(args[0]))
    {
    onCommand = true;
    chatSenderName = player.getName();
    chatTargetName = args[0];
    player.sendMessage("You are now speaking for " + chatTargetName);
    } else {
    player.sendMessage(ChatColor.DARK_RED + "Error: " + ChatColor.RED + "Player not found!");
    }
    }
    }

    }
    if(cmd.getName().equalsIgnoreCase("welcome") && sender instanceof Player)
    {
    if(player.hasPermission("krazyfunstuff.welcome"))
    {
    String welcome = this.getConfig().getString("welcome-message");
    player.chat(welcome);
    } else
    {
    player.sendMessage(np + "krazyfunstuff.welcome)");
    }
    }
    if(cmd.getName().equalsIgnoreCase("sethearts") && sender instanceof Player)
    {
    if(player.hasPermission("krazyfunstuff.sethearts"))
    {
    if(new Float(args[1]) > 1000)
    {
    player.sendMessage(ChatColor.RED + "The max amount of hearts must be under 1000");

    } else {

    if(args.length == 0)
    {
    player.sendMessage(ChatColor.RED + "Usage: /sethearts <Player> <Amount>");
    }

    for(Player target : Bukkit.getServer().getOnlinePlayers())
    {
    if(target.getName().equalsIgnoreCase(args[0]))
    {
    target.setMaxHealth(new Float(args[1]) * 2);
    target.setHealth(new Float(args[1]) * 2);
    }
    }
    }

    return true;
    } else
    {
    player.sendMessage(np + "krazyfunstuff.sethearts)");
    }
    }
    return false;
    }

    @SuppressWarnings("deprecation")
    @EventHandler
    public void PlayerChat(AsyncPlayerChatEvent e)
    {
    if(onCommand == true)
    {
    if(e.getPlayer().equals(chatSenderName))
    {
    e.setCancelled(true);
    Player target = Bukkit.getPlayer(chatTargetName);
    message = e.getMessage();
    target.chat(message);
    }
    }
    }
    }


    Startup Class (open)

    package com.krazytar.plugins;

    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.plugin.PluginManager;

    public class Startup extends MainFile {
    public void Starting() {
    PluginManager pm = getServer().getPluginManager();
    Bukkit.getServer().getPluginManager().registerEvents(this, this);
    onCommand = false;
    this.logger.info(ChatColor.GOLD + "[KrazyFunStuff] " + ChatColor.BLUE + "KrazyFunStuff Has been enabled!");
    pm.addPermission(welcome);
    pm.addPermission(sethearts);
    pm.addPermission(setmotd);
    pm.addPermission(tpplayer);
    this.getConfig().addDefault("welcome-message", null);
    this.getConfig().addDefault("motd", null);
    motd = this.getConfig().getString("motd");
    this.getConfig().options().copyDefaults(true);
    this.saveConfig();
    }
    }

    @MrBlackIsBack Mind telling me what that constructor would contain?
     
  10. Offline

    AcePilot10

  11. @AcePilot10
    Ah, Thanks! I'll try it and get back to you!

    EDIT: Doesn't work :/
    The error message is this:
    Error (open)

    [00:31:28 INFO]: [KrazyFunStuff] Enabling KrazyFunStuff v2.0
    [00:31:28 ERROR]: Error occurred while enabling KrazyFunStuff v2.0 (Is it up to
    date?)
    java.lang.IllegalArgumentException: Plugin already initialized!
    at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader
    .java:122) ~[spigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot
    .jar:git-Spigot-870264a-0a645a2]
    at com.krazytar.plugins.MainFile.<init>(MainFile.java:13) ~[?:?]
    at com.krazytar.plugins.Startup.<init>(Startup.java:7) ~[?:?]
    at com.krazytar.plugins.MainFile.onEnable(MainFile.java:35) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[s
    pigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader
    .java:335) [spigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManage
    r.java:405) [spigot.jar:git-Spigot-870264a-0a645a2]
    at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:285) [PlugM
    an.jar:?]
    at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:238) [PlugM
    an.jar:?]
    at com.rylinaux.plugman.util.PluginUtil.reload(PluginUtil.java:299) [Plu
    gMan.jar:?]
    at com.rylinaux.plugman.command.ReloadCommand.execute(ReloadCommand.java
    :122) [PlugMan.jar:?]
    at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHa
    ndler.java:104) [PlugMan.jar:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) [spig
    ot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
    1) [spigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchCommand(CraftServe
    r.java:646) [spigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.craftbukkit.v1_8_R2.CraftServer.dispatchServerCommand(Craf
    tServer.java:632) [spigot.jar:git-Spigot-870264a-0a645a2]
    at net.minecraft.server.v1_8_R2.DedicatedServer.aN(DedicatedServer.java:
    405) [spigot.jar:git-Spigot-870264a-0a645a2]
    at net.minecraft.server.v1_8_R2.DedicatedServer.A(DedicatedServer.java:3
    69) [spigot.jar:git-Spigot-870264a-0a645a2]
    at net.minecraft.server.v1_8_R2.MinecraftServer.z(MinecraftServer.java:6
    51) [spigot.jar:git-Spigot-870264a-0a645a2]
    at net.minecraft.server.v1_8_R2.MinecraftServer.run(MinecraftServer.java
    :554) [spigot.jar:git-Spigot-870264a-0a645a2]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_45]
    Caused by: java.lang.IllegalStateException: Initial initialization
    at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader
    .java:125) ~[spigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[spigot
    .jar:git-Spigot-870264a-0a645a2]
    at com.krazytar.plugins.MainFile.<init>(MainFile.java:13) ~[?:?]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    ~[?:1.8.0_45]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    ~[?:1.8.0_45]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
    rce) ~[?:1.8.0_45]
    at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_4
    5]
    at java.lang.Class.newInstance(Unknown Source) ~[?:1.8.0_45]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.jav
    a:76) ~[spigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:131) ~[spigot.jar:git-Spigot-870264a-0a645a2]
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
    java:329) ~[spigot.jar:git-Spigot-870264a-0a645a2]
    at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:275) ~[?:?]

    ... 13 more
     
    Last edited: Jul 22, 2015
  12. @Ultracrepadarian
    Check your plugins folder and make sure you don't have duplicate JARs
     
  13. @megamichiel I understood the error message, If you read the original post, I said I'm positive that my plugin wasn't already initialized. Thanks though!
     
  14. Click the hyperlink in my message. It will tell you all you need to know about constructors! Use this knowledge to create a constructor in your command class with your main class passed as arguments.

    It is recommended that you know the basics of java before creating bukkit plugins (JAVA)
     
  15. Thanks @MrBlackIsBack ! I'll try it!

    EDIT: Alright @MrBlackIsBack
    I've taken a look at the link, and I think I may need a little help with creating the constructors. So first question, I would create the constructor to the class IN the class itself, Correct?
    Next question, How would I put the main class as the arguments?
    Thats it :D Thanks in advance! I'll start experimenting around and see if I figure anything out.

    P.S I'm actually not a total beginner in java, I'm just new to connecting multiple classes.
     
    Last edited: Jul 23, 2015
Thread Status:
Not open for further replies.

Share This Page