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

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

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

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

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

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

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

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

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Каким?
     
    KoBoT нравится это.
  4. Den_Abr

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

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

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

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

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Scheduler, проверяющий броню.
     
    makssof и Iggi нравится это.
  7. Автор темы
    Iggi

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Что-то не нашел евент надевания брони.
    Он входит в PlayerInventoryEvent?
     
    KoBoT нравится это.
  8. Den_Abr

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

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

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    А если шифтом, он тоже отловит?
     
    KoBoT нравится это.
  10. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Да, но надо проверять, куда вещь переместилась.
     
    Iggi нравится это.
  11. Автор темы
    Iggi

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Вот что я тут наговнокодил.
    Код:
     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 нравится это.
  12. Den_Abr

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

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

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Для теста.
    Чтобы каждые 10 секунд менялась скорость - то 0.5, то 1, но она всегда 0.2 :(
    Убрал. Все равно. Рывок, а потом медленная скорость.
    Den_Abr, что делать? :(
     
    KoBoT нравится это.
  14. Den_Abr

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

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

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Нашел этот плагин. Тут тоже все на евентах сделано. Сейчас попробую тоже на евентах сделать.
     
    KoBoT нравится это.
  16. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Я как смотрел в сторону setWalkSpeed и не стал использовать. Неудобно, остановился на зельях. Всё равно плавнее зелий эффекта не будет.
     
    Iggi нравится это.
  17. Автор темы
    Iggi

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

    Баллы:
    103
    Имя в Minecraft:
    iggi666
    Я бы хотел сделать не просто критическую массу, а чтобы каждая часть брони снижала скорость игрока на какой-то процент. Можно сделать зелья разной "мощности", но я все равно думаю, что такое плавное изменение скорости не сделать зельями.
    fromgate, это прикол какой-то?
    Код:
    @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 нравится это.
  18. Ission

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

    Баллы:
    173
    Skype:
    lokivava
    Изменить скорость можно пакетом Packet202Abilities.
    Код:
    //Где-то в классе//
    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 и Iggi нравится это.
  19. AlexGL

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

    Баллы:
    123
    Подскажите где найти список пакетов и их функции?
     
  20. Автор темы
    Iggi

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

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

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