Как правильно работать с сайдбаром?

Bezobrazie

Активный участник
Пользователь
Баллы
46
Имя в Minecraft
MySoulIsCry
У меня есть подобие мини игры, в которой при ломании определенного блока у тебя в сайдбаре начисляется переменная сломаных блоков, проблема в том что при ломании блока 2мя людьми с разу он начинает багатся то откатывает число у когото то он вообще не показывается,
upload_2021-5-24_0-46-53.png
думаю мб это происходит из за того что одновременно две части кода пытаются вывести в сайд бар что-то.
Код:
objective.getScore(p.getDisplayName()).setScore(plugin.getConfig().getInt(String.valueOf(p.getDisplayName()) + ".progress"));
    objective2.getScore(p.getDisplayName()).setScore(plugin.getConfig().getInt(String.valueOf(p.getDisplayName()) + ".progress"));
objective.setDisplaySlot(DisplaySlot.BELOW_NAME);
objective2.setDisplayName("Блоков");
objective2.setDisplaySlot(DisplaySlot.SIDEBAR);
objective2.setDisplayName("§6§lСломано блоков: ");
 

Вложения

  • upload_2021-5-24_0-46-51.png
    upload_2021-5-24_0-46-51.png
    41,5 КБ · Просмотры: 2
Последнее редактирование:
Попробуй так сделать что-ли
PHP:
    private Scoreboard scoreboard;
    private Objective brokenBlocksObjective;

    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        if (manager != null) {
            scoreboard = manager.getMainScoreboard();
            brokenBlocksObjective = scoreboard.registerNewObjective("BrokenBlocks", "Blocks", "Broken blocks", RenderType.INTEGER);
            brokenBlocksObjective.setDisplaySlot(DisplaySlot.SIDEBAR);
            for (Player player : Bukkit.getOnlinePlayers())
                brokenBlocksObjective.getScore(player.getName()).setScore(0);
        }
    }

    @Override
    public void onDisable() {
        if (scoreboard == null) return;
        if (brokenBlocksObjective != null) brokenBlocksObjective.unregister();
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        if (scoreboard != null) {
            if (brokenBlocksObjective != null)
                brokenBlocksObjective.getScore(e.getPlayer().getName()).setScore(0);
        }
    }

    @EventHandler
    public void onBreak(BlockBreakEvent event) {
        if (scoreboard != null) {
            if (brokenBlocksObjective != null) {
                Score score = brokenBlocksObjective.getScore(event.getPlayer().getName());
                score.setScore(score.getScore() + 1);
            }
        }
    }
 
Назад
Верх