[Tutorial/LIB] Создаем Scoreboard'ы

А ты "p" откуда брал ?
Код:
              ISCOREAPI api = new ISCOREAPI();
                api.createObjective(ChatColor.DARK_AQUA+"Teams", "Teams");
                api.createTeam("Player");
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "RED"), 0);
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "BLUE"),
                api.addPlayerToTeam("Player", p));
                api.refreshPlayerScoreboard(p);
Как в коде написано так и писал...
 
Код:
              ISCOREAPI api = new ISCOREAPI();
                api.createObjective(ChatColor.DARK_AQUA+"Teams", "Teams");
                api.createTeam("Player");
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "RED"), 0);
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "BLUE"),
                api.addPlayerToTeam("Player", p));
                api.refreshPlayerScoreboard(p);
Как в коде написано так и писал...
Ты вообще создал эту переменную?
 
Код:
              ISCOREAPI api = new ISCOREAPI();
                api.createObjective(ChatColor.DARK_AQUA+"Teams", "Teams");
                api.createTeam("Player");
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "RED"), 0);
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "BLUE"),
                api.addPlayerToTeam("Player", p));
                api.refreshPlayerScoreboard(p);
Как в коде написано так и писал...
"p" - это игрок , которому мы прикрутим Scoreboard. Например:
PHP:
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
Player p = event.getPlayer();

ISCOREAPI api = new ISCOREAPI();
                api.createObjective(ChatColor.DARK_AQUA+"Teams", "Teams");
                api.createTeam("Player");
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "RED"), 0);
                api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "BLUE"),
                api.addPlayerToTeam("Player", p));
                api.refreshPlayerScoreboard(p);
//Достижение получено: "Кодер через мобилу"//
}
 
ShaGTF, но это уже глупо. Ладно, но это же не английский форум, можно и понять :oops: Подучись кодить (а лучше в скупе добавь, чтобы тем глупых меньше было и я оперативнее помогал :))
 
ShaGTF, но это уже глупо. Ладно, но это же не английский форум, можно и понять :oops: Подучись кодить (а лучше в скупе добавь, чтобы тем глупых меньше было и я оперативнее помогал :))
Да уж, действительно очень ступил.... Извините, учусь только (Банальная отговорка)
 
Гайд хороший, но есть одно но - кидает ошибку этот код:
Код:
private void makeBoard() {
        ISCOREAPI api = new ISCOREAPI();
        api.createObjective(ChatColor.DARK_AQUA + "Очки", "Очки");
        api.createTeam("RED");
        api.createTeam("GREEN");
        api.createTeam("BLUE");
        api.createTeam("YELLOW");
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Красный"), 0);
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "Синий"), 0);
        /*
        * api.addPlayerToTeam("Player", p); api.refreshPlayerScoreboard(p);
        */
    }

    @Override
    public void onEnable() {
        _log.info("[HtH] Hold The Hill enabled!");
        Bukkit.getPluginManager().registerEvents(this, this);
        kits = new KitUtils(this);
        Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
            public void run() {
                addScore();
            }
        }, 1);
        makeBoard();
    }

Ошибка такая:
screenshot_2014_04_03_at_16_24_49.png
[/spiler]
 
Гайд хороший, но есть одно но - кидает ошибку этот код:
Код:
private void makeBoard() {
        ISCOREAPI api = new ISCOREAPI();
        api.createObjective(ChatColor.DARK_AQUA + "Очки", "Очки");
        api.createTeam("RED");
        api.createTeam("GREEN");
        api.createTeam("BLUE");
        api.createTeam("YELLOW");
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Красный"), 0);
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "Синий"), 0);
        /*
        * api.addPlayerToTeam("Player", p); api.refreshPlayerScoreboard(p);
        */
    }

    @Override
    public void onEnable() {
        _log.info("[HtH] Hold The Hill enabled!");
        Bukkit.getPluginManager().registerEvents(this, this);
        kits = new KitUtils(this);
        Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
            public void run() {
                addScore();
            }
        }, 1);
        makeBoard();
    }

Ошибка такая:
screenshot_2014_04_03_at_16_24_49.png
[/spiler]
Не очень понятно, где 59 строка
 
Дело в том, что метод makeBoard нужно прикреплять именно к игроку.
 
Дело в том, что метод makeBoard нужно прикреплять именно к игроку.
Конкретно на создание жалуется - на эту строку:
Код:
ISCOREAPI api = new ISCOREAPI();

На вот это, уже в ISCOREAPI:
Код:
this.board = Bukkit.getScoreboardManager().getNewScoreboard();
Тобишь на создание объекта.
 
Конкретно на создание жалуется - на эту строку:
Код:
ISCOREAPI api = new ISCOREAPI();

На вот это:
Код:
this.board = Bukkit.getScoreboardManager().getNewScoreboard();
Тобишь на создание объекта.
Странно. Вроде все понятно, создаем класс: ISCOREAPI. Регистрируем их в главном классе. Используем, но в метод onEnable не пихай его
 
Странно. Вроде все понятно, создаем класс: ISCOREAPI. Регистрируем их в главном классе. Используем, но в метод onEnable не пихай его
Объясню саму затею - есть 4 команды, в ней игроки. Постояли в специальном регионе 1 тик - добавилось 0,005 очка. Скорбоард нужен именно для этой статистики.

Пробовал как в оигинале сделать - тоже самое.
 
Объясню саму затею - есть 4 команды, в ней игроки. Постояли в специальном регионе 1 тик - добавилось 0,005 очка. Скорбоард нужен именно для этой статистики.

Пробовал как в оигинале сделать - тоже самое.
Дак и пихай ISCOREAPI api = new ISCOREAPI() в метод, где игра начинается.
 
Дак и пихай ISCOREAPI api = new ISCOREAPI() в метод, где игра начинается.
Дык api нужен не локально, а глобально. Полный код класса:
Код:
package me.truelecter.hth;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.logging.Logger;

import me.truelecter.hth.kits.KitUtils;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scoreboard.Team;

public class HoldTheHill extends JavaPlugin implements Listener {
    private static final Logger _log = Logger.getLogger("Minecraft");
    private KitUtils kits;
    ISCOREAPI api;
 
    private void addScore() {

    }

    private void makeBoard() {
        api.createObjective(ChatColor.DARK_AQUA + "Очки", "Очки");
        api.createTeam("RED");
        api.createTeam("GREEN");
        api.createTeam("BLUE");
        api.createTeam("YELLOW");
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.RED + "Красный"), 0);
        api.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE + "Синий"), 0);
        /*
        * api.addPlayerToTeam("Player", p); api.refreshPlayerScoreboard(p);
        */
    }

    @Override
    public void onEnable() {
        api = new ISCOREAPI();
        _log.info("[HtH] Hold The Hill enabled!");
        Bukkit.getPluginManager().registerEvents(this, this);
        kits = new KitUtils(this);
        Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
            public void run() {
                addScore();
            }
        }, 1);
        makeBoard();
    }

    public void sendPlayerToGame(Player player, HTHPlayer p) {
        if ((p != null) && (p.getTeam() != HTHTeam.NONE)) {
            p.setState(PlayerState.GAME);
            player.getInventory().clear();
            player.getInventory().setArmorContents(new ItemStack[4]);
            player.setHealth(20);
            player.setFoodLevel(20);
            player.teleport(p.getTeam().getRandomSpawn());
            kits.equiptKit(player);
        }
    }

    private void joinToTeam(CommandSender sender, String arg) {
        try {
            HTHPlayer p = getPlayer(sender.getName());
            HTHTeam t = HTHTeam.valueOf(arg.toUpperCase());
            if (t != HTHTeam.NONE) {
                this.attemptJoin(t, p);
            }
            throw new IllegalArgumentException();
        } catch (IllegalArgumentException e) {
            sender.sendMessage(ChatColor.RED + "Invalid Team specified!");
        }
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command,
            String label, String[] args) {
        if (command.getName().equalsIgnoreCase("join")) {
            if (args.length == 1) {
                switch (args[0]) {
                case "r": joinToTeam(sender, "RED");
                case "g": joinToTeam(sender, "GREEN");
                case "b": joinToTeam(sender, "BLUE");
                case "y": joinToTeam(sender, "YELLOW");
                default:
                    sender.sendMessage("Доступные команды :" + "\n"
                            + ChatColor.RED + "Красные - r" + ChatColor.RESET
                            + ", " + "\n" + ChatColor.BLUE + "синие - b"
                            + ChatColor.RESET + ", " + "\n" + ChatColor.GOLD
                            + "желтые - y" + ChatColor.RESET + ", " + "\n"
                            + ChatColor.GREEN + "зеленые - g" + ChatColor.RESET
                            + ".");
                }
            }
            return true;
        }
        return false;
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        event.getPlayer().setHealth(20);
        event.getPlayer().setFoodLevel(20);
        event.getPlayer().setGameMode(GameMode.ADVENTURE);
    }

    @EventHandler
    public void onQuit(PlayerQuitEvent event) {
        event.setQuitMessage("");
        getServer().broadcastMessage(
                ChatColor.GRAY + "Игрок " + ChatColor.GOLD
                        + event.getPlayer().getName() + " покинул сервер");
    }

    @EventHandler
    public void onPlayerDeath(PlayerDeathEvent e) {
        e.getEntity().setHealth(20);
        e.getEntity().teleport(
                getPlayer(e.getEntity().getDisplayName()).getTeam()
                        .getRandomSpawn());
    }

    public HTHPlayer getPlayer(String name) {
        return null;
    }

    public void attemptJoin(HTHTeam team, HTHPlayer p) {
        if (p != null) {
            Player player = Bukkit.getPlayer(p.getName());
            if (player != null) {
                if (p.getTeam() == HTHTeam.NONE) {
                    int x = team.getNum();
                    Integer[] counts = teamCounts();
                    if (x + 1 - counts[0].intValue() > 2) {
                        player.sendMessage(ChatColor.RED + "Команда полна!");
                        return;
                    }

                    p.setTeam(team);
                    api.addPlayerToTeam(team.toString(), player);
                    team.setNum(team.getNum() + 1);
                    player.sendMessage(ChatColor.DARK_PURPLE
                            + "Вы подключились к " + team.getColor()
                            + team.toString());
                    sendPlayerToGame(player, p);
                } else {
                    player.sendMessage(ChatColor.RED + "В команде же!");
                }
            }
        }
    }

    public Integer[] teamCounts() {
        ArrayList<Integer> x = new ArrayList();
        for (Team t : api.getTeams()) {
            x.add(Integer.valueOf(t.getSize()));
        }
        Integer[] y = new Integer[4];
        y = (Integer[]) x.toArray(y);
        Arrays.sort(y);
        return y;
    }

}

Код:
api = new ISCOREAPI();
Поставил это в onEnable()
Перед этим объявил все функций переменную api:
Код:
ISCOREAPI api;
Дак и пихай ISCOREAPI api = new ISCOREAPI() в метод, где игра начинается.
Тут еще беда. При любом использование скорбоарда летят ошибки. Видимо, сборка буккита с ошибкой.

Не могли бы вы протестировать плагин у себя? Достаточно будет просто запустить сервер без посторонних плагинов и клиентом написать комманду /join red
 

Вложения

  • HtH.zip
    HtH.zip
    39,5 КБ · Просмотры: 8
Player[] online = Bukkit.getServer().getOnlinePlayers();
for (int j = 0; j < online.length; j++) {
Player o = online[j];
if(plugin.getConfig().contains("players"+a+"."+o.getName())){
plugin.sapi.setScoreboard(o);
int sc = plugin.sapi.getScores(Bukkit.getOfflinePlayer(ChatColor.RED+ "Красный"));
plugin.sapi.setScore(Bukkit.getOfflinePlayer(ChatColor.RED+ "Красный"), sc + 1); //Присуждаем игроку 1 балл




("players"+a+"."+o.getName())){


что за а ?


plugin какой именно плугин ему нужен чтобы не ругался
 
Player[] online = Bukkit.getServer().getOnlinePlayers();
for (int j = 0; j < online.length; j++) {
Player o = online[j];
if(plugin.getConfig().contains("players"+a+"."+o.getName())){
plugin.sapi.setScoreboard(o);
int sc = plugin.sapi.getScores(Bukkit.getOfflinePlayer(ChatColor.RED+ "Красный"));
plugin.sapi.setScore(Bukkit.getOfflinePlayer(ChatColor.RED+ "Красный"), sc + 1); //Присуждаем игроку 1 балл




("players"+a+"."+o.getName())){


что за а ?


plugin какой именно плугин ему нужен чтобы не ругался
Упс. Удали это, моя вина. (Из своего плагин вытащил)
 
plugin какой именно плугин ему нужен чтобы не ругался
Конструктор класса должен выглядеть как-то так:
Код:
public MyClassHelper( MyPlugin plugin ){
 //sapmle text
}
В методе onEnable самого плагина ( MyPlugin ) пишешь:
Код:
MyClassHelper mch = new MyClassHelper( this );
 
@Override
public void run() {

int sc = sapi.getScores(Bukkit.getOfflinePlayer(ChatColor.BLUE+ "blabla"));
sapi.setScore(Bukkit.getOfflinePlayer(ChatColor.BLUE+ "blabla"), sc - 1);

}


если на сервере 2 человека отнимает по 2 если 1 то по 1 очку
вопрос почему и как это лечить
 
Bukkit.getOfflinePlayer(ChatColor.BLUE+ "blabla")
Игрок с голубым ником? :eek:
 
Назад
Верх