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

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

Discussion in 'Разработка плагинов для новичков' started by lolifrag, Apr 11, 2015.

Thread Status:
Not open for further replies.
  1. Автор темы
    lolifrag

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

    Trophy Points:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
    Code:
    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;
        }
    }
    
    Code:
    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);
            }
        }
    }
    
    Code:
    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) и ему консолька говорит такое:

    Code:
    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 Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    shkurovs
    NoSuchMethodError: Bukkit.getOnlinePlayers()Ljava/util/Collection
     
  4. Plasticable

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

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

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

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

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
  7. LomNar

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

    Trophy Points:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
  8. Автор темы
    lolifrag

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

    Trophy Points:
    66
    Skype:
    frosti.village
    Имя в Minecraft:
    meow
Thread Status:
Not open for further replies.

Share This Page