Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Нужна подсказка по плагину

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

Статус темы:
Закрыта.
  1. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Код:
    package adchat;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.configuration.file.FileConfiguration;
    import org.bukkit.configuration.file.YamlConfiguration;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Plugin extends JavaPlugin {
    
        File configFile;
        FileConfiguration config;
    
        public static ChatColor new_tag_color;
        public static String new_tag;
        public static ChatColor new_msg_color;
    
        public static ChatColor ad_tag_color;
        public static String ad_tag;
        public static ChatColor ad_msg_color;
    
        public static ChatColor help_tag_color;
        public static String help_tag;
        public static ChatColor help_msg_color;
    
        @Override
        public void onDisable() {
            save();
        }
    
        @Override
        public void onEnable() {
            configFile = new File(getDataFolder(), "config.yml");
    
            try {
                firstrun();
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            config = new YamlConfiguration();
            load();
            set();
    
            Commands command = new Commands();
            getCommand("ad").setExecutor(command);
            getCommand("new").setExecutor(command);
            getCommand("helpme").setExecutor(command);
    
            Bukkit.getLogger().info("Плагин AdChat включен!");
        }
    
        public void firstrun() {
            if (!configFile.exists()) {
                getConfig().addDefault("NEWS.TAG_COLOR", "YELLOW");
                getConfig().addDefault("NEWS.TAG", "Новости");
                getConfig().addDefault("NEWS.MESSAGE_COLOR", "GREEN");
                getConfig().addDefault("ADVERTISE.TAG_COLOR", "RED");
                getConfig().addDefault("ADVERTISE.TAG", "Реклама от");
                getConfig().addDefault("ADVERTISE.MESSAGE_COLOR", "WHITE");
                getConfig().addDefault("HELPME.TAG_COLOR", "GREEN");
                getConfig().addDefault("HELPME.TAG", "Крик о помощи от");
                getConfig().addDefault("HELPME.MESSAGE_COLOR", "WHITE");
                getConfig().options().copyDefaults(true);
                saveConfig();
            }
        }
    
        private void set() {
            Plugin.new_tag_color = replace(config.getString("NEWS_TAG_COLOR",
                    "YELLOW"));
            Plugin.new_tag = config.getString("NEWS_TAG", "Новости");
            Plugin.new_msg_color = replace(config.getString("NEWS_MESSAGE_COLOR",
                    "GREEN"));
    
            Plugin.ad_tag_color = replace(config.getString("ADVERTISE_TAG_COLOR",
                    "RED"));
            Plugin.ad_tag = config.getString("ADVERTISE_TAG", "Реклама от");
            Plugin.ad_msg_color = replace(config.getString(
                    "ADVERTISE_MESSAGE_COLOR", "WHITE"));
    
            Plugin.help_tag_color = replace(config.getString("HELPME_TAG_COLOR",
                    "GREEN"));
            Plugin.help_tag = config.getString("HELPME_TAG", "Крик о помощи от");
            Plugin.help_msg_color = replace(config.getString(
                    "HELPME_MESSAGE_COLOR", "WHITE"));
        }
    
        public void load() {
            try {
                config.load(configFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void save() {
            try {
                config.save(configFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private ChatColor replace(String input) {
            switch (input.toLowerCase()) {
            case "red":
                return ChatColor.RED;
            case "yellow":
                return ChatColor.YELLOW;
            case "green":
                return ChatColor.GREEN;
            case "blue":
                return ChatColor.BLUE;
            case "gold":
                return ChatColor.GOLD;
            case "white":
                return ChatColor.WHITE;
            case "aqua":
                return ChatColor.AQUA;
            case "black":
                return ChatColor.BLACK;
            case "dark_aqua":
                return ChatColor.DARK_AQUA;
            case "dark_blue":
                return ChatColor.DARK_BLUE;
            case "dark_gray":
                return ChatColor.DARK_GRAY;
            case "dark_green":
                return ChatColor.DARK_GREEN;
            case "dark_purple":
                return ChatColor.DARK_PURPLE;
            case "dark_red":
                return ChatColor.DARK_RED;
            case "gray":
                return ChatColor.GRAY;
            case "light_purple":
                return ChatColor.LIGHT_PURPLE;
            }
            return ChatColor.WHITE;
        }
    }
    
    Код:
    package adchat;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    public class Commands implements CommandExecutor {
    
        public boolean onCommand(CommandSender p, Command c, String s, String[] a) {
            if (a.length > 0) {
                switch (s) {
                case "new":
                    if (p.hasPermission("adchat.new")) {
                        call(Plugin.new_tag_color + "[" + Plugin.new_tag + "]"
                                + Plugin.new_msg_color, a);
                    }
                    break;
                case "ad":
                    call(Plugin.new_tag_color + "[" + Plugin.ad_tag + " "
                            + p.getName() + "]" + Plugin.ad_msg_color, a);
                    break;
                case "helpme":
                    call(Plugin.help_tag_color + "[" + Plugin.help_tag + " "
                            + p.getName() + "]" + Plugin.help_msg_color, a);
                    break;
                }
            }
            return true;
        }
    
        private void call(String s, String[] a) {
            for (String i : a) {
                s = s + " " + i;
            }
            for (Player p : Bukkit.getOnlinePlayers()) {
                p.sendMessage(s);
            }
        }
    }
    
    Код:
    name: AdChat
    version: 1.0
    main: adchat.Plugin
    commands:
      ad:
      new:
      helpme:
    permissions:
      adchat.new:
        description: Allows you to use news
        default: true
    

    На моём сервере (TLauncher + CraftBukkit 1_8_R1) всё работает, а он тестировал на своём (craftbukkit-1.6.4-R2.0) и ему консолька говорит такое:

    Код:
    2015-04-10 21:54:31 [INFO] sinister issued server command: /new 2
    2015-04-10 21:54:31 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'new' in plugin AdChat v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:192)
    at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServer.java:528)
    at net.minecraft.server.v1_6_R3.PlayerConnection.handleCommand(PlayerConnection.java:968)
    at net.minecraft.server.v1_6_R3.PlayerConnection.chat(PlayerConnection.java:886)
    at net.minecraft.server.v1_6_R3.PlayerConnection.a(PlayerConnection.java:837)
    at net.minecraft.server.v1_6_R3.Packet3Chat.handle(SourceFile:49)
    at net.minecraft.server.v1_6_R3.NetworkManager.b(NetworkManager.java:296)
    at net.minecraft.server.v1_6_R3.PlayerConnection.e(PlayerConnection.java:116)
    at net.minecraft.server.v1_6_R3.ServerConnection.b(SourceFile:37)
    at net.minecraft.server.v1_6_R3.DedicatedServerConnection.b(SourceFile:30)
    at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:592)
    at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:227)
    at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:488)
    at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:421)
    at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
    Caused by: java.lang.NoSuchMethodError: org.bukkit.Bukkit.getOnlinePlayers()Ljava/util/Collection;
    at adchat.Commands.call(Commands.java:37)
    at adchat.Commands.onCommand(Commands.java:16)
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
    ... 15 more

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

    Сколько не думал - никак не пойму, почему не работает. Я вроде не использовал ничего в ядре такого, что есть в 1.8, чего нет в 1.6..
    Подскажите, где я ошибся?
     
  2. Хостинг MineCraft
    <
  3. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    NoSuchMethodError: Bukkit.getOnlinePlayers()Ljava/util/Collection
     
  4. Plasticable

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

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    У меня такое было, когда свой плагин под 1.5.2 ставил на 1.8
     
  5. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Потому что сменился метод, очевидно же.
     
  6. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
  7. LomNar

    LomNar Активный участник Пользователь

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
  8. Автор темы
    lolifrag

    lolifrag Активный участник Пользователь

    Баллы:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
Статус темы:
Закрыта.

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