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

Помогите С изменением скорости игрока

Discussion in 'Разработка плагинов для новичков' started by Iggi, Nov 22, 2013.

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

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Здравствуйте.
    Помогите, пожалуйста, с замедлением или ускорением игрока.
    В onMove делаю так - event.getPlayer().setWalkSpeed((float) 1.0);
    Но игрок двигается рывками - т.е, то скорость 1, то 0.2 (стандартная для игрока). Как сделать нормальное замедление?
    Зелья не предлагать :)
     
    KoBoT, makssof and slavik123123123 like this.
  2. Хостинг MineCraft
    <
  3. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Конечно, с каждым движением игрока отправлять ему пакет об изменении скорости. Достаточно один раз отправить другим методом.
     
    Iggi likes this.
  4. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Каким?
     
    KoBoT likes this.
  5. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Тут всё зависит от тематики плагина. Способов уйма - по команде, при клике каком-нибудь. При том же движении, но добавить переменную для игрока, которая бы показывала, задана скорость или нет.
     
    The Midnight Wizard and Iggi like this.
  6. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Я хочу, чтобы при ношении брони скорость снижалась. Должен быть евент надевания брони.
    Тут тогда проблема - что если игрок вышел и зашел, броню он не одевает, а скорость нужно снизить.
     
    KoBoT likes this.
  7. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Scheduler, проверяющий броню.
     
    makssof and Iggi like this.
  8. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Что-то не нашел евент надевания брони.
    Он входит в PlayerInventoryEvent?
     
    KoBoT likes this.
  9. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Я же говорю - шедулер, проверяющий броню.
    Если так тянет к ивентам, то InventoryClickEvent
     
    Iggi likes this.
  10. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    А если шифтом, он тоже отловит?
     
    KoBoT likes this.
  11. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Да, но надо проверять, куда вещь переместилась.
     
    Iggi likes this.
  12. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Вот что я тут наговнокодил.
    Code:
     scheduler.scheduleSyncRepeatingTask(this, new Runnable() {
            int i = 1;
                @Override
                public void run() {
                    Bukkit.getPlayer("test").sendMessage("ТЕСТ");
                    if(i==1){
                        Bukkit.getPlayer("test").setWalkSpeed((float) 1.0);
                        i--;
                    }else{
                        Bukkit.getPlayer("test").setWalkSpeed((float) 0.5);
                        i++;
                    }
                   
                }
               
            }, 20L, 100);
    
    Раз в 10 секунд мне пишет ТЕСТ и происходит рывок. Но скорость опять скачет. Т.е. дается на миг, а потом снова стандартная.
    Что я на этот раз не правильно сделал? Как изменить игроку скорость, чтобы она у него сохранилась?
     
    KoBoT likes this.
  13. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Зачем переменная i?
     
  14. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Для теста.
    Чтобы каждые 10 секунд менялась скорость - то 0.5, то 1, но она всегда 0.2 :([DOUBLEPOST=1385133790,1385133134][/DOUBLEPOST]
    Убрал. Все равно. Рывок, а потом медленная скорость.[DOUBLEPOST=1385134705][/DOUBLEPOST]Den_Abr, что делать? :(
     
    KoBoT likes this.
  15. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Странно, это проверять надо, а я не могу сейчас.
     
  16. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Нашел этот плагин. Тут тоже все на евентах сделано. Сейчас попробую тоже на евентах сделать.
     
    KoBoT likes this.
  17. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Я бы хотел сделать не просто критическую массу, а чтобы каждая часть брони снижала скорость игрока на какой-то процент. Можно сделать зелья разной "мощности", но я все равно думаю, что такое плавное изменение скорости не сделать зельями.[DOUBLEPOST=1385145424,1385142907][/DOUBLEPOST]fromgate, это прикол какой-то?
    Code:
    @EventHandler
        public void onJoin(PlayerJoinEvent event){
            event.getPlayer().sendMessage("Игрок вошел в игру");
            event.getPlayer().sendMessage("Скорость1: " + event.getPlayer().getWalkSpeed());
            event.getPlayer().setWalkSpeed((float)1.0);
            event.getPlayer().sendMessage("Скорость2: " + event.getPlayer().getWalkSpeed());
        }
        @EventHandler
        public void onMove(PlayerMoveEvent event){
            event.getPlayer().sendMessage("В МУВЕ евенте: " + event.getPlayer().getWalkSpeed());
         }
    
    [​IMG]
     
    KoBoT likes this.
  18. Ission

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

    Trophy Points:
    173
    Skype:
    lokivava
    Изменить скорость можно пакетом Packet202Abilities.
    Code:
    //Где-то в классе//
    String PackageName = "net.minecraft.server.1_6_R4";
    Class Packet202Abilities = Class.forName(PackageName.concat(".Packet202Abilities"));
    Class PlayerAbilities = Class.forName(PackageName.concat(".PlayerAbilities"));
    Method player_minecraft = Class.forName("org.bukkit.craftbukkit.1_6_R4.entity.CraftPlayer")).getMethod("getHandle", new Class[]{});
    //Где-то в классе//
    Object constructPacket202(Player p, float walk, float fly)
    {
        Object packet = Packet202Abilities.getConstructor(new Class[]{PlayerAbilities}).newInstance(playerAbilities(p));
        fieldSet(packet, "e", (float) fly);//def 0.5
        fieldSet(packet, "f", (float) walk);//def 0.1
        return packet;
    }
    void fieldSet(Object o, String name, Object value)
    {
        Field field = o.getClass().getDeclaredField(name);
        field.setAccessible(true);
        field.set(o, value);
    }
    void sendPacket(Player p, Object packet)
    {
        Object playerConnection = player_minecraft.getReturnType().getField("playerConnection").get(player_minecraft.invoke(p));
        Method sendPacket = playerConnection.getClass().getDeclaredMethod("sendPacket", new Class[]{Packet});
        sendPacket.setAccessible(true);
        sendPacket.invoke(playerConnection, packet);
    }
    //Где-то в классе//
    @EventHandler
    void onPlayerJoin(PlayerJoinEvent e)
    {
        sendPacket(e.getPlayer(), constructPacket202(e.getPlayer(), 0.01F, 0.05F));
    }
    
     
    Mik1313 and Iggi like this.
  19. AlexGL

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

    Trophy Points:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    Подскажите где найти список пакетов и их функции?
     
  20. Автор темы
    Iggi

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

    Trophy Points:
    103
    Имя в Minecraft:
    iggi666
    Спасибо, но это пока трудновато для меня :)
    Буду тогда зельками делать.
     
    KoBoT and zuma2 like this.
  21. Ission

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

    Trophy Points:
    173
    Skype:
    lokivava
    Более явная отправка пакета, работа в более ранних версиях, где нет setWalkSpeed, к тому же я не это хотел написать :)
    Я хотел написать изменение NBT тега abilities:walkSpeed. Эффект от изменения такой же, но сохраняется при перезаходе, да отсутствует необходимость постоянно отправлять какие-то специфичные пакеты.
     

Share This Page