Помогите Проблема со Scoreboard

Статус
Закрыто для дальнейших ответов.

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Народ, очень странная хрень. Как мне сделать поддержку нескольких целей? Дело в том, когда я создаю этот скорборд, все существующее до него - пропадают (есть obj, который добавляет под ником HP, а также есть команда с префиксом (просто цвет)). Помогите:

JavaScript:
package ru.lisenochek.fgmboardinfo.boardList;
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.ScoreboardManager;
import ru.lisenochek.fgmboardinfo.C;
public class HelpBoard {
    public static void getBoard(Player p) {
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Scoreboard board = manager.getNewScoreboard();
        Objective obj = board.registerNewObjective("obj", "dummy");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName(C.c("&a&lПомощь по серверу"));
        obj.getScore(" ").setScore(9);
        obj.getScore(C.c("&6» &d/menu &7- меню сервера.")).setScore(8);
        obj.getScore("  ").setScore(7);
        obj.getScore(C.c("&6» &d/donate &7- донат сервера.")).setScore(6);
        obj.getScore("   ").setScore(5);
        obj.getScore(C.c("&6» &d/shop &7- магазин сервера.")).setScore(4);
        obj.getScore("    ").setScore(3);
        obj.getScore(C.c("&6» &d/clan &7- кланы.")).setScore(2);
        obj.getScore("     ").setScore(1);
        obj.getScore(C.c("&6» &eТекущий онлайн: " + "&a" + Bukkit.getOnlinePlayers().size() + " &e/ " + "&a" + Bukkit.getMaxPlayers())).setScore(0);
        p.setScoreboard(board);
    }
}
 
Чудак человек, ты создал только один objective
Objective obj = board.registerNewObjective("obj","dummy");
и ты его куча раз перезаписываешь.
Создавай несколько object'ивов


Щас попробую...
Скинь что находится в классе ru.lisenochek.fgmboardinfo.C
 
Чудак человек, ты создал только один objective
Objective obj = board.registerNewObjective("obj","dummy");
и ты его куча раз перезаписываешь.
Создавай несколько object'ивов


Щас попробую...
Скинь что находится в классе ru.lisenochek.fgmboardinfo.C
ChatColor.translateColor

И я пробовал несколько целей и знаешь что? Строки дублировались! Например в секции ника было уже два ника, а онлайн просто создал еще одну строчку с обновленным онлайном.
 
Нахер юзать ChatColor когда есть магический символ
§
у меня всё работает, только что проверил
7e141d610ed9494fbea88afa6bc90e12.png


Код:
Java:
    public static void getBoard() {
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Scoreboard board = manager.getNewScoreboard();
        Objective obj = board.registerNewObjective("obj", "dummy");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName("§a§lПомощь по серверу");
        obj.getScore(" ").setScore(9);
        obj.getScore("§6» §d/menu §7- меню сервера.").setScore(8);
        obj.getScore("  ").setScore(7);
        obj.getScore("§6» §d/donate §7- донат сервера.").setScore(6);
        obj.getScore("   ").setScore(5);
        obj.getScore("§6» §d/shop §7- магазин сервера.").setScore(4);
        obj.getScore("    ").setScore(3);
        obj.getScore("§6» §d/clan §7- кланы.").setScore(2);
        obj.getScore("     ").setScore(1);
        obj.getScore("§6» §eТекущий онлайн: " + "§a" + Bukkit.getOnlinePlayers().size() + " §e/ " + "§a" + Bukkit.getMaxPlayers()).setScore(0);
        for (Player p : Bukkit.getOnlinePlayers()) {
            p.setScoreboard(board);
        }
    }
 
Нахер юзать ChatColor когда есть магический символ
§
у меня всё работает, только что проверил
7e141d610ed9494fbea88afa6bc90e12.png


Код:
Java:
    public static void getBoard() {
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Scoreboard board = manager.getNewScoreboard();
        Objective obj = board.registerNewObjective("obj", "dummy");
        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName("§a§lПомощь по серверу");
        obj.getScore(" ").setScore(9);
        obj.getScore("§6» §d/menu §7- меню сервера.").setScore(8);
        obj.getScore("  ").setScore(7);
        obj.getScore("§6» §d/donate §7- донат сервера.").setScore(6);
        obj.getScore("   ").setScore(5);
        obj.getScore("§6» §d/shop §7- магазин сервера.").setScore(4);
        obj.getScore("    ").setScore(3);
        obj.getScore("§6» §d/clan §7- кланы.").setScore(2);
        obj.getScore("     ").setScore(1);
        obj.getScore("§6» §eТекущий онлайн: " + "§a" + Bukkit.getOnlinePlayers().size() + " §e/ " + "§a" + Bukkit.getMaxPlayers()).setScore(0);
        for (Player p : Bukkit.getOnlinePlayers()) {
            p.setScoreboard(board);
        }
    }

Ага, а теперь попробуй создать тиму в скорборде, дать ему префикс, затем создать еще одну цель и запихать в BELOWNAME допустим.... ХП, а потом еще пусть зайдет на сервер еще один игрок. Поймешь всю проблему
 
Дык скинь весь код с тимой. А что ты имеешь виду под "Целью?"
 
Дык скинь весь код с тимой. А что ты имеешь виду под "Целью?"
Objective - цель

JavaScript:
    private static void setHealth() {

        obj.setDisplaySlot(DisplaySlot.BELOW_NAME);
        obj.setDisplayName(C.c("&e/ &f20&c♥"));
    }

В общем! Суть проблемы такова. Мой скорборд (панелька (код выше)) "закрывает" скорборд в другом плагине, добавляющий ХП и меняющий цвет ника над головой игрока. Как мне это можно пофиксить?

Да, я пробовал создавать для каждой панельки свой Objective, но когда заходил второй игрок начинаются артефакты, а именно помимо моей информации добавляется и информация другого игрока, а онлайн дублируется под новое значение.
 
Objective - цель

JavaScript:
    private static void setHealth() {

        obj.setDisplaySlot(DisplaySlot.BELOW_NAME);
        obj.setDisplayName(C.c("&e/ &f20&c♥"));
    }

В общем! Суть проблемы такова. Мой скорборд (панелька (код выше)) "закрывает" скорборд в другом плагине, добавляющий ХП и меняющий цвет ника над головой игрока. Как мне это можно пофиксить?

Да, я пробовал создавать для каждой панельки свой Objective, но когда заходил второй игрок начинаются артефакты, а именно помимо моей информации добавляется и информация другого игрока, а онлайн дублируется под новое значение.
Objective - событие
596ed024c07840568128b5189f96344c.png


А так тот плагин может просто не своместим с твоим изза говнокодерства создателя плагина ну или твоего говнокодерства. А вообще пробуй получать скорборд из игрока а не создовать отдельный

Например вот так:
Java:
Scoreboard scoreboard;
for (Player p : Bukkit.getOnlinePlayers()) {
scoreboard = p.getScoreboard();
}
scoreboard.всёчтотыхочешьснимсделать

Только что проверил и всё работает:
450b8f17d11a4f88955598ebd15161d2.png


Код:
p.s. ты это запихай в шедулер чтобы он постоянно обновлял его
Java:
        Scoreboard scoreboard = null;
        Objective obj = null;
        for (Player p : Bukkit.getOnlinePlayers()) {
            scoreboard = p.getScoreboard();
        }
        try {
            obj = scoreboard.registerNewObjective("obj", "dummy");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName("§a§lПомощь по серверу");
            obj.getScore(" ").setScore(9);
            obj.getScore("§6» §d/menu §7- меню сервера.").setScore(8);
            obj.getScore("  ").setScore(7);
            obj.getScore("§6» §d/donate §7- донат сервера.").setScore(6);
            obj.getScore("   ").setScore(5);
            obj.getScore("§6» §d/shop §7- магазин сервера.").setScore(4);
            obj.getScore("    ").setScore(3);
            obj.getScore("§6» §d/clan §7- кланы.").setScore(2);
            obj.getScore("     ").setScore(1);
            obj.getScore("§6» §eТекущий онлайн: " + "§a" + Bukkit.getOnlinePlayers().size() + " §e/ " + "§a" + Bukkit.getMaxPlayers()).setScore(0);
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.setScoreboard(scoreboard);
            }
        } catch (IllegalArgumentException ignored) {}

Оупс он кидает экспешн щас код профикшу
Всё поправил код, пробуй!
 
Objective - событие
596ed024c07840568128b5189f96344c.png


А так тот плагин может просто не своместим с твоим изза говнокодерства создателя плагина ну или твоего говнокодерства. А вообще пробуй получать скорборд из игрока а не создовать отдельный

Например вот так:
Java:
Scoreboard scoreboard;
for (Player p : Bukkit.getOnlinePlayers()) {
scoreboard = p.getScoreboard();
}
scoreboard.всёчтотыхочешьснимсделать

Только что проверил и всё работает:
450b8f17d11a4f88955598ebd15161d2.png


Код:
p.s. ты это запихай в шедулер чтобы он постоянно обновлял его
Java:
        Scoreboard scoreboard = null;
        Objective obj = null;
        for (Player p : Bukkit.getOnlinePlayers()) {
            scoreboard = p.getScoreboard();
        }
        try {
            obj = scoreboard.registerNewObjective("obj", "dummy");
            obj.setDisplaySlot(DisplaySlot.SIDEBAR);
            obj.setDisplayName("§a§lПомощь по серверу");
            obj.getScore(" ").setScore(9);
            obj.getScore("§6» §d/menu §7- меню сервера.").setScore(8);
            obj.getScore("  ").setScore(7);
            obj.getScore("§6» §d/donate §7- донат сервера.").setScore(6);
            obj.getScore("   ").setScore(5);
            obj.getScore("§6» §d/shop §7- магазин сервера.").setScore(4);
            obj.getScore("    ").setScore(3);
            obj.getScore("§6» §d/clan §7- кланы.").setScore(2);
            obj.getScore("     ").setScore(1);
            obj.getScore("§6» §eТекущий онлайн: " + "§a" + Bukkit.getOnlinePlayers().size() + " §e/ " + "§a" + Bukkit.getMaxPlayers()).setScore(0);
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.setScoreboard(scoreboard);
            }
        } catch (IllegalArgumentException ignored) {}

Оупс он кидает экспешн щас код профикшу
Всё поправил код, пробуй!
Спасибо за совет, щас попробую и отпишусь
А переводчик и английский считает, что ты ошибаешься и это цель, ну ладно.
 
Спасибо за совет, щас попробую и отпишусь

А переводчик и английский считает, что ты ошибаешься и это цель, ну ладно.
Майн обрабатывает objective как событие, все принтензии к разработчикам майна.
кстати измени в
obj = scoreboard.registerNewObjective("obj", "dummy");
"obj" На другое название например на "fgmboardinfo", а то не красиво будет:
081c2ff8a8064208be0d80e82a8561d3.png

Но это так, просто для красоты XD
 
Сложно. Байда та же.

JavaScript:
package ru.lisenochek.fgmboardinfo.boardList;

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 ru.lisenochek.fgmboardinfo.C;

public class HelpBoard {

    private static Scoreboard board;
    private static Objective obj;

    public static void getBoard(Player p) {

        board = p.getScoreboard();
        obj = board.registerNewObjective("obj", "dummy");

        obj.setDisplaySlot(DisplaySlot.SIDEBAR);
        obj.setDisplayName(C.c("&a&lПомощь по серверу"));

        obj.getScore(" ").setScore(9);
        obj.getScore(C.c("&6» &d/menu &7- меню сервера.")).setScore(8);
        obj.getScore("  ").setScore(7);
        obj.getScore(C.c("&6» &d/donate &7- донат сервера.")).setScore(6);
        obj.getScore("   ").setScore(5);
        obj.getScore(C.c("&6» &d/shop &7- магазин сервера.")).setScore(4);
        obj.getScore("    ").setScore(3);
        obj.getScore(C.c("&6» &d/clan &7- кланы.")).setScore(2);
        obj.getScore("     ").setScore(1);
        obj.getScore(C.c("&6» &eТекущий онлайн: " + "&a" + Bukkit.getOnlinePlayers().size() + " &e/ " + "&a" + Bukkit.getMaxPlayers())).setScore(0);

        p.setScoreboard(board);
    }
}

+ постоянно пишет, что цель существует, но даже проверки не помогают.

(входящий аргумент (Player) не обращай внимание, потому что):
JavaScript:
package ru.lisenochek.fgmboardinfo;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import ru.lisenochek.fgmboardinfo.boardList.DonateBoard;
import ru.lisenochek.fgmboardinfo.boardList.HelpBoard;
import ru.lisenochek.fgmboardinfo.boardList.InfoBoard;

public class RunnableManager implements Runnable {

    private int timer = 0;

    @Override
    public void run() {

        for (Player p : Bukkit.getOnlinePlayers()) {

            if (timer % 5 == 0) InfoBoard.getBoard(p);
            if (timer % 10 == 0) DonateBoard.getBoard(p);
            if (timer % 15 == 0) HelpBoard.getBoard(p);
        }

        timer++;
    }
}

Что-то сделал, но вот артефакты...
Y4aMrC5Evaj7OafgRypJ8QxB7SIyLQnKY_BAfjs5xw4BwQSSNhZevVsAzLJvjilAOLC-O8L5AgkqtdTmh76e-g%3D%3D
 
Ало ты мой код то скопируй, я же писал:
 
Все, что надо обновить - дублируется и не заменяется... Все плохо..
Ало ты мой код то скопируй, я же писал:
Какая разница? Все тоже самое, через луп же перебираю игроков то
 
Я кстати попробовал, проблема осталась.
 
Все, что надо обновить - дублируется и не заменяется... Все плохо..

Какая разница? Все тоже самое, через луп же перебираю игроков то
P.s. для того чтобы делать плагины нужны базовые знания Java, без них ты даже не знаешь что делать если ошибками начинает кидаться то их надо ловить
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх