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

Идея С сервера на сервер телепортом без "экрана земли"

Тема в разделе "Запросы на разработку плагинов", создана пользователем Devel, 2 мар 2018.

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

    Devel Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TBOYA_MAMKA
    Категория плагина: BungeeCord

    Предлагаемое название: пусть будет BungeeServerTeleport

    Версия сервера: 1.8 - 1.12.x

    Что я хочу: Чтобы на сервер можно было попасть по BungeeCord'у без "экрана земли", а как бы телепортом. Ну и чтобы при бане не было вот так: Kicked whilst... : You have been banned, а просто "телепортировало" в лобби и при попытке подключиться просто в чате бы писало то, что указано в конфиге.
    Ну короче просто вместо "экрана земли" телепорт (это как на TeslaCraft) и кастомный текст неудачной попытки подключения к серверу.
    И да, скиньте уже готовый .jar файл, а не код.

    Идеи для команд: ну тут, например, чтобы попасть на какой-то сервер, необходимо было просто ввести определённую команду, указанную в конфиге; Например: скайварс - /sw.

    Когда мне это нужно? Конечно, желательно поскорее =)
     
    Последнее редактирование: 4 мар 2018
  2. Автор темы
    Devel

    Devel Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TBOYA_MAMKA
  3. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Это как бы нельзя реализовать, т.к., сервера разные, банджа просто на стороне сервера перекидывает игрока, чтоб игрок не перезаходил и не писал другой ip и заходил
     
  4. Автор темы
    Devel

    Devel Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TBOYA_MAMKA
    ну посмотри как на TeslaCraft
    UPD: там всё на бандже
     
    Последнее редактирование: 2 мар 2018
  5. Konstantin773

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

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    Банжи специально меняет dimensionId мира два раза, чтобы избежать ряда багов:
    1. Чанки предыдущего мира не отгрузятся
    2. С мобами и игроками тоже самое
    3. Проблемы с табом
    4. Не выполнится сборка мусора в клиенте

    Если так хочется, то достаточно принудительно подменить dimensionId в Respawn-пакете на валидный

    Возможные решения проблем:
    1. Держать миры в одних и тех же координатах (чанки нового мира заменят чанки старого)
    2. В момент смены сервера (до отправки пакета респавна) телепортировать игрока подальше от спавна
    3. Отслеживать id'шники мобов/игроков, отсылаемых игроку и отправлять игроку пакеты их удаления при смене сервера (медленно для Банжи), либо предыдущий пункт выполнять непосредственно на сервере за один тик до телепорта (таким образом сервер сам и чанки клиенту отгрузит и мобов удалит)
     
  6. Автор темы
    Devel

    Devel Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TBOYA_MAMKA
    Как это?!
     
    Последнее редактирование: 3 мар 2018
  7. Konstantin773

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

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    Код:
    package shitcode;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.List;
    import io.netty.channel.Channel;
    import io.netty.channel.ChannelHandlerContext;
    import io.netty.handler.codec.MessageToMessageEncoder;
    import net.md_5.bungee.UserConnection;
    import net.md_5.bungee.api.connection.ProxiedPlayer;
    import net.md_5.bungee.protocol.DefinedPacket;
    import net.md_5.bungee.protocol.packet.Respawn;
    
    public class RespawnPacketInterceptor extends MessageToMessageEncoder<DefinedPacket> {
        private ProxiedPlayer p;
    
        public RespawnPacketInterceptor(ProxiedPlayer p) {
            this.p = p;
        }
    
        protected void encode(ChannelHandlerContext context, DefinedPacket packet, List<Object> list) throws Exception {
            if ((packet instanceof Respawn)) {
                Respawn respawn = (Respawn) packet;
    
                UserConnection con = (UserConnection) this.p;
                if (con.getDimension() != respawn.getDimension()) {
                    respawn.setDimension(con.getDimension());
                }
            }
            list.add(packet);
        }
     
        public static void inject(ProxiedPlayer p) {
            try {
                Field f = p.getClass().getDeclaredField("ch");
                f.setAccessible(true);
                Object ch = f.get(p);
                Method method = ch.getClass().getDeclaredMethod("getHandle");
                Channel channel = (Channel) method.invoke(ch);
                channel.pipeline().addAfter("packet-encoder", "respawn_interceptor", new RespawnPacketInterceptor(p));
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    

    Код:
    @EventHandler
    public void onPostLogin(PostLoginEvent e)
    {
          RespawnPacketInterceptor.inject(e.getPlayer());
    }
    
     
  8. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
    куда Usage вставлять надо?
    вроде плагин созан, а вроде и нет...
    12:48:25 [WARNING] Error enabling plugin BungeeServerTeleport
    java.lang.NoSuchMethodException: nomcraft.RespawnPacketInterceptor.<init>()
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.getDeclaredConstructor(Unknown Source)
    at net.md_5.bungee.api.plugin.PluginManager.enablePlugin(PluginManager.java:
    305)
    at net.md_5.bungee.api.plugin.PluginManager.loadPlugins(PluginManager.java:2
    12)
    at net.md_5.bungee.BungeeCord.start(BungeeCord.java:268)
    at net.md_5.bungee.BungeeCordLauncher.main(BungeeCordLauncher.java:56)
    at net.md_5.bungee.Bootstrap.main(Bootstrap.java:15)
     
    Последнее редактирование: 3 мар 2018
  9. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
  10. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    Учи джаву и учись правильно копировать код.
     
  11. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Без этого программистом не стать :D
     
  12. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    ))0
     
  13. JustDevel

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

    Баллы:
    61
    Имя в Minecraft:
    TBOYA_MAMKA
    Ну я как-бы в эклипс вставил код; package поменял; после вставил Usage.. Вроде ошибок нет, плагин создан, но не робит..
     
  14. Автор темы
    Devel

    Devel Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    TBOYA_MAMKA
    Ребят я решил проблему спасибо всем, кто писал по делу ;)
     
Статус темы:
Закрыта.

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