1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Стартап Туториал — создание плагинов BungeeCord

Тема в разделе "Разработка плагинов для новичков", создана пользователем Andoroid, 12 июл 2018.

  1. Автор темы
    Andoroid

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

    Баллы:
    76
    BungeeCord — это прокси написанный md_5 и командой SpigotMC, который позволяет соединить несколько серверов Minecraft в один.

    Создание плагинов под Spigot и информацию о Java можно найти тут. Если вы разберётесь в этом, с BungeeCord будет очено просто.

    Для создания плагинов используется API из ядра BungeeCord.

    После создания пакетов, класов и импортирования библиотек BungeeCord мы можем начинать.

    Часть 1. Основы.

    Наш главный клас должен наследоватся от Plugin:
    PHP:
    package ua.andoroid.testbungee;

    import net.md_5.bungee.api.plugin.Plugin;

    public class 
    Main extends Plugin{
     
    }

    Методы теже что и в CraftBukkit: onEnable, onDisable, onLoad:
    PHP:
    package ua.andoroid.testbungee;

    import net.md_5.bungee.api.plugin.Plugin;

    public class 
    Main extends Plugin{
        @
    Override
        
    public void onEnable() {
      
        }

        @
    Override
        
    public void onDisable() {
      
        }

        @
    Override
        
    public void onLoad() {
      
        }
    }

    Часть 2. Работа с конфигами.

    В BungeeCord нет getConfig или FileConfiguration. Но есть альтернатива.

    Создадим наш файл.
    PHP:
    File configFile = new File(getDataFolder(), "config.yml");
    Альтернативой для FileConfiguration есть Configuration.
    Вот пример создания Configuration:
    PHP:
    Configuration configuration ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
    Но он требует обработки IOExeption.

    И того у нас есть:
    PHP:
    package ua.andoroid.testbungee;

    import net.md_5.bungee.api.plugin.Plugin;
    import net.md_5.bungee.config.Configuration;
    import net.md_5.bungee.config.ConfigurationProvider;
    import net.md_5.bungee.config.YamlConfiguration;

    import java.io.File;
    import java.io.IOException;

    public class 
    Main extends Plugin{
        public static 
    File configFile;
        public static 
    Configuration configuration;

        @
    Override
        
    public void onEnable(){
            
    configLoad();
        }

        private 
    void configLoad() {
            try {
                
    configFile = new File(getDataFolder(), "config.yml");
                if (!
    configFile.exists()) {
                    
    configFile.createNewFile();
                }
                
    configuration ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
            } catch (
    IOException ex){
                
    getLogger().info("Could not create config!");
            }
        }
    }

    А также Configuration должен быть импортирован именно так:
    PHP:
    import net.md_5.bungee.config.Configuration;
    а не так:
    PHP:
    import net.md_5.bungee.conf.Configuration;
    Часть 3. Ивенты.

    Создадим новый клас для работы с ивентами. Пусть это будет "Events". В главном класе зарегистрируем ивенты.
    PHP:
    getProxy().getPluginManager().registerListener(this, new Events());
    Список ивентов для BungeeCord (думаю название говорит само за себя):

    Сделаем так, чтобы игрока кикало при подключении если его ник содержит в себе слово admin.

    PHP:
    package ua.andoroid.testbungee;

    import net.md_5.bungee.api.chat.TextComponent;
    import net.md_5.bungee.api.event.PostLoginEvent;
    import net.md_5.bungee.api.plugin.Listener;
    import net.md_5.bungee.event.EventHandler;

    public class 
    Events implements Listener {
        @
    EventHandler
        
    public void onJoin(PostLoginEvent e){
            if(
    e.getPlayer().getName().contains("admin")){
                
    TextComponent component = new TextComponent("Ваш ник содержит слово \"admin\"");
                
    e.getPlayer().disconnect(component);
            }
        }
    }

    Часть 4. Перенаправление игрока.

    Тут мы рассмотрим как перекидывать игрока между серверами.
    Сделаем так чтобы при заходе игрока кидало на сервер survival обходя авторизацию если его ник имеет букву B а также его IP это 127.0.0.1. Никогда не используйте это для защиты аккаунта админитратора.

    PHP:
    package ua.andoroid.testbungee;

    import net.md_5.bungee.api.config.ServerInfo;
    import net.md_5.bungee.api.event.PostLoginEvent;
    import net.md_5.bungee.api.plugin.Listener;
    import net.md_5.bungee.event.EventHandler;

    public class 
    Events implements Listener {
        private static 
    Main pl Main.plugin;

        @
    EventHandler
        
    public void onJoin(PostLoginEvent e){
            
    String playerIP e.getPlayer().getAddress().getAddress().getHostAddress();
            if(
    playerIP.equalsIgnoreCase("127.0.0.1") && e.getPlayer.getName.contains("B"){
                
    ServerInfo serverInfo pl.getProxy().getServerInfo("survival");
                
    e.getPlayer().connect(serverInfo);
            }
        }
    }

    В след. частях я раскажу как создавать команды.

    В тексте могут быть ошибки! Слабонервным не смотреть!

    Информацию взято с https://www.spigotmc.org/wiki/bungeecord-plugin-development/
     
    Последнее редактирование: 13 июл 2018
  2. Energy warrior

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

    Баллы:
    76
    Лойс! Ждём следующие части!
     
  3. xDark

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

    Баллы:
    96
    without maven/gradle? D:
     
  4. Автор темы
    Andoroid

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

    Баллы:
    76
    With maven
     
  5. Slavkaa

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

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Зачем ты используешь статичный Main в листенере?
     
  6. Автор темы
    Andoroid

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

    Баллы:
    76
    Чтобы получить ServerInfo и перенаправить игрока.
     
  7. alexandrage

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

    Баллы:
    173
    В конструкторы не умеет. Как и многие на этом форуме.
     
  8. Slavkaa

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

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    О конструкторах не слышал? Да и даже, если без конструктора, то в самом листенере статик не нужен.
     

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