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

Помогите разработка плагина с Netty, создание АПИ, помогите

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    Ты вроде шаришь :) . Я как понимаю когда клиент получает данные они "приходят в метод"
    channelRead(ChannelHandlerContext ctx, Object msg). К примеру я создал метод String get(Strings s)
    В методе я серверу отправляю стоку s и хочу от получить строку, и отправить(return o; к примеру, где o - полученная строка от сервера) полученные данные. Как возможно реализовать это?
     
  2. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    Всё что я придумал - это запускать цикл копа ответ не получен.
     
  3. alexandrage

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

    Баллы:
    173
    NetHandlerPlayClient handleChat читает ответ.
     
  4. alexandrage

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

    Баллы:
    173
    Совсем даун? handleChat сам выполнится. когда ответ идет.
     
  5. alexandrage

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

    Баллы:
    173
    Вот у меня тут идет управление менюшкой
    Код:
        @Override
        public void handleChat(SPacket packet) {
            Map<String, Integer> list = this.plugin.getServerList().list;
            list.put(packet.getServer(), packet.getOnline());
            this.plugin.getMenu().reload(list);
        }
    Заменишь своей логикой и все.
     
  6. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    Я не знаю как это называется когда все методы не знаешь.
     
  7. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    Спасибо, что-то полезное найду точно.
     
  8. alexandrage

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

    Баллы:
    173
    Там есть все что нужно. С тебя регать свои пакеты и писать логику для них.
     
  9. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Мне кажется тебе надо многопоточность подучить перед netty ору, можешь юзать какой-то простенький MQ вместо netty
     
  10. alexandrage

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

    Баллы:
    173
    Это лишнее.
     
  11. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Че лишнее, чел в мультитред не могет, куда ему в нетти
     
  12. alexandrage

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

    Баллы:
    173
    Там и не нужно мочь, само все.
     
  13. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Смысл юзать нетти если челу не нужен жесткий мультитред?
     
  14. alexandrage

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

    Баллы:
    173
    В удобстве. Не нужно писать свое, почти все готовое.
     
  15. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Я бы не сказал что netty удобен для новичка) Любая ентерпрайзная игрушка типо RabbitMQ будет удобнее
     
  16. alexandrage

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

    Баллы:
    173
    Вполне себе удобен и туторов по нему достаточно.
     
  17. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    У тебя с CORE ошибка, или я не ту версию netty использую.
    [07:04:28] [Server thread/ERROR]: Error occurred while enabling core v1.0 (Is it up to date?)
    java.lang.NoClassDefFoundError: io/netty/channel/EventLoopGroup
    at core.Main.onEnable(Main.java:27) ~[?:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) ~[Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:332) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:412) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.craftbukkit.v1_7_R4.CraftServer.loadPlugin(CraftServer.java:476) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.craftbukkit.v1_7_R4.CraftServer.enablePlugins(CraftServer.java:394) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.craftbukkit.v1_7_R4.CraftServer.reload(CraftServer.java:866) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.Bukkit.reload(Bukkit.java:301) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:767) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchServerCommand(CraftServer.java:753) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.DedicatedServer.aB(DedicatedServer.java:326) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:290) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    Caused by: java.lang.ClassNotFoundException: io.netty.channel.EventLoopGroup
    at java.base/java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:101) ~[Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:86) ~[Test.jar:git-Spigot-1.7.9-R0.2-208-ge0f2e95]
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
    ... 17 more


    PHP:
    package core;

    import org.bukkit.Bukkit;
    import org.bukkit.plugin.java.JavaPlugin;
    import io.netty.channel.Channel;
    import netty.CPacket;
    import netty.Client;
    import netty.INetHandlerPlayServer;
    import netty.NetworkManager;
    import netty.Packet;

    public class 
    Main extends JavaPlugin {
        private 
    Channel channel;
        private 
    Menu menu;
        
    ServerList list;
        
    Client client;

        public 
    void setupChannel() {
            if (
    client.getChannel() == null) {
                
    client.start(this);
                
    channel client.getChannel();
            }
        }


        public 
    void onEnable() {
            
    client = new Client();
            
    setupChannel();
            
    getServer().getPluginManager().registerEvents(new EventListener(this), this);
            
    menu = new Menu("Menu");
            list = new 
    ServerList();
            try {
                
    Packet<INetHandlerPlayServerpacket = new CPacket();
                
    NetworkManager.send(getChannel(), packetBukkit.getServer().getMotd(),
                        
    getServer().getOnlinePlayers().size());
            } catch (
    Exception e1) {}
        }

        public 
    Menu getMenu() {
            return 
    menu;
        }

        public 
    ServerList getServerList() {
            return list;
        }

        public 
    Channel getChannel() {
            return 
    channel;
        }

        public 
    Main getPlugin() {
            return 
    this;
        }
    PHP:
     package netty;

    import core.Main;
    import io.netty.bootstrap.Bootstrap;
    import io.netty.channel.Channel;
    import io.netty.channel.EventLoopGroup;
    import io.netty.channel.nio.NioEventLoopGroup;
    import io.netty.channel.socket.nio.NioSocketChannel;

    public class 
    Client {
        private 
    Channel channel;
        private 
    State state;

        public 
    void start(Main plugin) {
            
    state State.client;
            
    EventLoopGroup group = new NioEventLoopGroup();
            try {
                
    Bootstrap bootstrap = new Bootstrap().group(group).channel(NioSocketChannel.class)
                        .
    handler(new Initializer(new NetHandlerPlayClient(plugin), state));
                
    this.channel bootstrap.connect(Config.ipConfig.port).sync().channel();
            } catch (
    Exception e) {
                
    e.printStackTrace();
            }
        }


        public 
    Channel getChannel() {
            return 
    this.channel;
        }

        public 
    State getState() {
            return 
    this.state;
        }
    }


    cтрока ошибки
    PHP:
             client = new Client(); 
     
  18. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    @alexandrage Смотри, твой плагин при входе/выходе изменяет значения меню на серверах, когда вызывается метод reload. А я пытаюсь сделать на прямую. Вызываю метод получить онлайн и метод вернул онлайн с серверов, без reload.
     
  19. Автор темы
    Mukiroku

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

    Баллы:
    76
    Имя в Minecraft:
    Kukuroku
    @alexandrage Или сделать мапу где я буду временно хронить(пока игрок онлайн) его данные а когда выходит загружать новые данные на СЕРВЕР.
     
  20. alexandrage

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

    Баллы:
    173
    Ну так и делай напрямую. Что тебе мешает?
     

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