Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Andoroid

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
_Andoroid_
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/
 
Последнее редактирование:
Зачем ты используешь статичный Main в листенере?
 

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

Назад
Верх