1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

как вынести scoreboard в отдельный класс?

Тема в разделе "Разработка плагинов для новичков", создана пользователем artem2015, 22 сен 2013.

  1. Автор темы
    artem2015

    artem2015 Участник

    Баллы:
    33
    Имя в Minecraft:
    admin
    если пишу так:


    Код:
    package test;
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.Team;
     
     
    public class main extends JavaPlugin implements Listener{
     
        Scoreboard sb;
        Objective obj;
        Team team;
     
        public ScoreB score;
     
        public  void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this); // register plugin on server
            //score.init();
            sb= Bukkit.getScoreboardManager().getNewScoreboard();
            obj=sb.registerNewObjective("SCORE", "admin");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName("allscores");
            team=sb.registerNewTeam("myteam");
            team.setCanSeeFriendlyInvisibles(true);
            team.setAllowFriendlyFire(false);
        }
     
     
     
        @EventHandler
        public void onPlayerMove(PlayerMoveEvent event) throws Exception
        {
            //score.Setscore();
            for (Player p : Bukkit.getOnlinePlayers()){
                org.bukkit.scoreboard.Score s = obj.getScore(p);
                s.setScore(555);
                p.setScoreboard(sb);
                }
       
            return;
        }
     
    }
     
    
    то работает

    если пытаюсь вынести scoreboard в отдельный класс:

    Код:
    package test;
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.scoreboard.DisplaySlot;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.Team;
     
     
    public class ScoreB {
        Scoreboard sb;
        Objective obj;
        Team team;
     
        public void init() {
        sb= Bukkit.getScoreboardManager().getNewScoreboard();
        obj=sb.registerNewObjective("SCORE", "admin");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName("allscores");
        team=sb.registerNewTeam("myteam");
        team.setCanSeeFriendlyInvisibles(true);
        team.setAllowFriendlyFire(false);
        }
     
        public void Setscore() {
     
        for (Player p : Bukkit.getOnlinePlayers()){
        org.bukkit.scoreboard.Score s = obj.getScore(p);
        s.setScore(555);
        p.setScoreboard(sb);
        }
        }
    }
    

    и вызывать его из главного:


    Код:
    package test;
    import org.bukkit.Bukkit;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scoreboard.Objective;
    import org.bukkit.scoreboard.Scoreboard;
    import org.bukkit.scoreboard.Team;
     
     
    public class main extends JavaPlugin implements Listener{
     
        Scoreboard sb;
        Objective obj;
        Team team;
     
        public ScoreB score;
     
        public  void onEnable() {
            Bukkit.getPluginManager().registerEvents(this, this); // register plugin on server
            score.init();
        }
     
     
     
        @EventHandler
        public void onPlayerMove(PlayerMoveEvent event) throws Exception
        {
            score.Setscore();
            return;
        }
     
    }
    
    то при инициализации плугина в строке score.init();
    выдаёт ошибку:
    [test5] Enabling test5 v1.0
    2013-09-22 13:19:04 [SEVERE] Error occurred while enabling test5 v1.0 (Is it up to date?)
    java.lang.NullPointerException
    at test.main.onEnable(main.java:23)
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:382)
    at org.bukkit.craftbukkit.v1_6_R2.CraftServer.loadPlugin(CraftServer.java:286)
    at org.bukkit.craftbukkit.v1_6_R2.CraftServer.enablePlugins(CraftServer.java:268)
    at net.minecraft.server.v1_6_R2.MinecraftServer.l(MinecraftServer.java:319)
    at net.minecraft.server.v1_6_R2.MinecraftServer.f(MinecraftServer.java:296)
    at net.minecraft.server.v1_6_R2.MinecraftServer.a(MinecraftServer.java:256)
    at net.minecraft.server.v1_6_R2.DedicatedServer.init(DedicatedServer.java:164)
    at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:397)
    at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)

    и далее в другой строке score.Setscore(); другую ошибку:

    Could not pass event PlayerMoveEvent to test5 v1.0
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.TimedRegisteredListener.callEvent(TimedRegisteredListener.java:30)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:478)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:463)
    at net.minecraft.server.v1_6_R2.PlayerConnection.a(PlayerConnection.java:229)
    at net.minecraft.server.v1_6_R2.Packet10Flying.handle(SourceFile:136)
    at net.minecraft.server.v1_6_R2.NetworkManager.b(NetworkManager.java:296)
    at net.minecraft.server.v1_6_R2.PlayerConnection.e(PlayerConnection.java:118)
    at net.minecraft.server.v1_6_R2.ServerConnection.b(SourceFile:37)
    at net.minecraft.server.v1_6_R2.DedicatedServerConnection.b(SourceFile:30)
    at net.minecraft.server.v1_6_R2.MinecraftServer.t(MinecraftServer.java:592)
    at net.minecraft.server.v1_6_R2.DedicatedServer.t(DedicatedServer.java:239)
    at net.minecraft.server.v1_6_R2.MinecraftServer.s(MinecraftServer.java:481)
    at net.minecraft.server.v1_6_R2.MinecraftServer.run(MinecraftServer.java:413)
    at net.minecraft.server.v1_6_R2.ThreadServerApplication.run(SourceFile:582)
    Caused by: java.lang.NullPointerException
    at test.main.onPlayerMove(main.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
     
  2. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    мб:
    Код:
    public ScoreB score = new ScoreB();
    
     
    slavik123123123 нравится это.
  3. Автор темы
    artem2015

    artem2015 Участник

    Баллы:
    33
    Имя в Minecraft:
    admin
    спасибо, заработало :)
     

Поделиться этой страницей