Solved Sorry again. Don't look at this.(stupid mistake again)

Discussion in 'Plugin Development' started by TheDeathMachine, May 26, 2013.

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

    TheDeathMachine

    Hello, i have 2 different packages. So i want to register my listener class. I have this but i throws an error:

    Code:
    package me.ikbenharm.hmagicianfight.attacks;
     
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
     
    public class Lightning implements Listener{
       
        @EventHandler(priority = EventPriority.HIGH)
        public void onJoin(PlayerJoinEvent event){
            Player player = event.getPlayer();
            player.sendMessage("MONKEY");
        }
    }
    and in the main:

    Code:
    package plugin.hmagicianfight.ikbenharm;
     
    import me.ikbenharm.hmagicianfight.attacks.Lightning;
     
    import org.bukkit.plugin.java.JavaPlugin;
       
        public class Main extends JavaPlugin {
           
            public void onEnable(){
                System.out.println("HMagicianFight Enabled");
                System.out.println("Made by IkBenHarm");
                this.saveDefaultConfig();
               
                getServer().getPluginManager().registerEvents(new Lightning(), this);
               
                getCommand("mfsetlobby").setExecutor(new SetLobby(this));
            }
           
            public void onDisable(){
                System.out.println("HMagicianFight Disabled");
                System.out.println("Made by IkBenHarm");
            }
    }
     
  2. Offline

    alf980103

    You need to register your listener in the main class, like here
    Code:
    package plugin.hmagicianfight.ikbenharm;
     
    import me.ikbenharm.hmagicianfight.attacks.Lightning;
     
    import org.bukkit.plugin.java.JavaPlugin;
     
        public class Main extends JavaPlugin {
       
            public void onEnable(){
                System.out.println("HMagicianFight Enabled");
                System.out.println("Made by IkBenHarm");
                this.saveDefaultConfig();
           
                getServer().getPluginManager().registerEvents(new Lightning(), this);
             
                getCommand("mfsetlobby").setExecutor(new SetLobby(this));
    //here!
    new Lightning (this);     
    }
       
            public void onDisable(){
                System.out.println("HMagicianFight Disabled");
                System.out.println("Made by IkBenHarm");
            }
     
     
    
    And then in your listener put this:

    Code:
    package me.ikbenharm.hmagicianfight.attacks;
     
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.EventPriority;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerJoinEvent;
     
    public class Lightning implements Listener{
    Main plugin;
     
    public Lightning(Main plugin) {
    plugin.getServer().getPluginManager().registerEvents(this, plugin);
    this.plugin = plugin;
    }
     
        @EventHandler(priority = EventPriority.HIGH)
        public void onJoin(PlayerJoinEvent event){
            Player player = event.getPlayer();
            player.sendMessage("MONKEY");
        }
    }
    This should work.
    Regards
    PD: Sorry for my english xd
     
  3. Offline

    Jogy34

    That wouldn't change anything. It's perfectly acceptable to register your event listener directly in your onEnable() like what he is doing.

    Your problem comes from, and this has screwed me up too, that the PlayerJoinEvent fires about a tick before the player is actually put into the game so if you try to send them a message like that they won't actually receive it. To fix this you should just be able to register one of bukkit's delayed tasks to run for 1 or 2 ticks then send the player the message.
     
  4. Offline

    TheDeathMachine

    alf980103 does not seem to work with this line:;

    getServer().getPluginManager().registerEvents(new Lightning(), this);

    Jogy34 Tried with playermove event, does not work either. This is the error(shows on server startup):

    Code:
    21:06:33 [SEVERE] Could not load 'plugins\HMagicianFights.jar' in folder 'plugin
    s'
    org.bukkit.plugin.InvalidPluginException: java.lang.ClassNotFoundException: plug
    in.hmagicianfight.ikbenharm
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:184)
            at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.
    java:305)
            at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
    .java:230)
            at org.bukkit.craftbukkit.v1_5_R3.CraftServer.loadPlugins(CraftServer.ja
    va:239)
            at org.bukkit.craftbukkit.v1_5_R3.CraftServer.reload(CraftServer.java:60
    3)
            at org.bukkit.Bukkit.reload(Bukkit.java:185)
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    23)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:18
    9)
            at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchCommand(CraftServe
    r.java:523)
            at org.bukkit.craftbukkit.v1_5_R3.CraftServer.dispatchServerCommand(Craf
    tServer.java:512)
            at net.minecraft.server.v1_5_R3.DedicatedServer.an(DedicatedServer.java:
    262)
            at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:2
    27)
            at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:4
    77)
            at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java
    :410)
            at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:5
    73)
    Caused by: java.lang.ClassNotFoundException: plugin.hmagicianfight.ikbenharm
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader
    .java:80)
            at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.
    java:53)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.Class.forName0(Native Method)
            at java.lang.Class.forName(Unknown Source)
            at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.j
    ava:173)
            ... 14 more
    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 1, 2016
  5. Offline

    gomeow

    alf980103
    You are registering the events twice, and using a constructor to set an unused variable. Don't do that.

    TheDeathMachine
    Can we see your plugin.yml?
     
  6. Offline

    TheDeathMachine

    gomeow sure.

    Code:
    name: HMagicianFight
    version: 1.1.0
    main: plugin.hmagicianfight.ikbenharm
    author: IkBenHarm
    description: Magician Fights!
    commands:
      mfsetlobby:
        description: Sets the lobby spawn
        permission: hmagicianfight.setlobby
        permission-message: You do not have permission to use this command!
     
  7. Offline

    gomeow

    The 'main' key must also contain the name of the main class, change it to this:
    Code:
    plugin.hmagicianfight.ikbenharm.Main
     
  8. Offline

    TheDeathMachine

    gomeow and again, i made a stupid mistake. Thanks for helping!
     
Thread Status:
Not open for further replies.

Share This Page