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

Помогите getTypeId не работает!

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

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

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

    Trophy Points:
    68
    Всем привет,
    я знаю что эта команда усторела, но я не могу найти новую и рабочую. Могли бы помочь?)

    @EventHandler
    public void onBlockPlace(BlockPlaceEvent e)
    {
    config.set("lastid", e.getBlock().getTypeId());
    }
     
  2. Хостинг MineCraft
    <
  3. Hephest

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

    Trophy Points:
    153
    Skype:
    hephest1904
    Оригинало_о likes this.
  4. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Trophy Points:
    153
    Skype:
    dpohvar
    Она не устарела.
    Просто буккитовцы напутали и вместо @SuppressWarning указали @Deprecared

    На самом деле они указали устаревшими все методы, которые принимают/возвращают число.
    Эти команды якобы могут перестать работать с выходом 1.7
    На данный момент нет альтернатив этим командам. И даже не планируются. Больше похоже не какой-то способ запугать разработчиков.

    Вывод: смело плюём на аннотации и используем эти методы.
    Чтобы не мозолить глаза, можно подключить API постарше.

    UPD:
    Если согласиться с ними и перестать использовать цифровые значения, то данные о блоке можно получить только так:
    block.getType().name()
    а установить - так:
    block.setType(Material.valueOf(name))
    а как быть getData() - хотелось бы знать
     
  5. Jampire

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

    Trophy Points:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Сорь что не по теме, не разбирались с конфликтом getHealth() double и int?
     
  6. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Если в файл не пишет, сделай saveConfig();
    А как с ним должны разбираться?
     
  7. Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    @Den_Abr, дело в том, что хоть getHealth() и возвращает теперь double, оно всё-равно всегда целое.
     
    Goldenix likes this.
  8. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Trophy Points:
    153
    Skype:
    dpohvar
    Сейчас в либе bukkit.jar содержатся оба метода (с double и int)
    Чтобы все скомпилировалось верно, нужно использовать мавен. Или жe в зависимостях вместо bukkit.jar подключать его исходники с гитхаба.
    У меня IDEA в таких случаях выдает ошибку (что-то про both method call), но при компиляции проблемы не возникали.

    ПС: а кто-нибудь пробовал так?
    Number hp = entity.getHealth();
    // hp.intValue();
    // hp.doubleValue();

    UPD
    вариант выше не сработает. Java 6,7 не поддерживает автобоксинг в Number
     
  9. BeYkeR

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

    Trophy Points:
    173
    Только не понимаю, как жизни могут быть в double ? Они будут типо 18.21341 ?
     
  10. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ты не поверишь, но да. Именно в таких значениях.
     
  11. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Половинные значения может быть
     
  12. Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Они в double, но всё-равно integer. Такой вот котяра шредингера :D


    Не могут. Полсердца = 1хп
     
    I-Am-Black-Overlord likes this.
  13. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Как double может быть integer?
     
    zuma2 likes this.
  14. Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Ну например если double округлили.
     
  15. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ты смеёшься? double имеет вид 10.0, когда int просто 10
     
    Bind likes this.
  16. Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    Ну и что? 10.0 == 10.
     
  17. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    На удивление вернулось true, но сказано верно
     
  18. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Trophy Points:
    153
    Skype:
    dpohvar
    Уточню всё-таки.
    Да, значение жизней может быть не целым. То есть, можно десять раз нанести дамаг по 0.2 урона, и в результате количество жизней уменьшится на 2 (одно сердечко). ГУИ всё это дело округляет до целого.
    Но в общем случае, любой моб может иметь 3,14159 ед. жизней. И наносить урон тоже не в целых количествах.
    Старые плагины, которые работали с integer, тут тоже будут работать. Для них все округляется.
    Предлагаю заглянуть в документацию формата NBT у игрока
    integer Health - как и раньше, хранит целое число жизней
    float HealF - позволяет хранить дробное число жизней.
    И еще что интересно: при чтении игрока из NBT, если тег HealF установлен, то Health игнорируется

    UPD:
    и тут скрывается фишка: float и double может принимать значение NAN
    Если поставить его игроку... будет интересный эффект:
    дамаг будет наноситься каждый тик, хотя количество сердечек не отображается
     
  19. Автор темы
    Bind

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

    Trophy Points:
    68
    Немного перебью вас, так алтернатива должна выглядеть так?
    Code:
        @EventHandler
        public void onBlockPlace(BlockPlaceEvent e)
        {       
            config.set("lastid", block.setType(Material.valueOf(name)));
        }
     
  20. Den-Xs

    Den-Xs Старожил Пользователь

    Trophy Points:
    103
    Skype:
    denis_314
    @DPOH-VAR, не знаю как с уроном, неохота проверять, но если 10 раз регенерировать игроку по 0.2 хп, не восстановится нисколько.
     
  21. DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Trophy Points:
    153
    Skype:
    dpohvar
    Bind
    Code:
    config.set("lastid", block.getMaterial().name());
     

Share This Page