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

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

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

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

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

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

    @EventHandler
    public void onBlockPlace(BlockPlaceEvent e)
    {
    config.set("lastid", e.getBlock().getTypeId());
    }
     
  2. Hephest

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

    Баллы:
    153
    Skype:
    hephest1904
    Оригинало_о нравится это.
  3. DPOH-VAR

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

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

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

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

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

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

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

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

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

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

    Баллы:
    103
    Skype:
    denis_314
    @Den_Abr, дело в том, что хоть getHealth() и возвращает теперь double, оно всё-равно всегда целое.
     
    Goldenix нравится это.
  7. DPOH-VAR

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

    Баллы:
    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
     
  8. BeYkeR

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

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

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

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

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

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

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

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


    Не могут. Полсердца = 1хп
     
    I-Am-Black-Overlord нравится это.
  12. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Как double может быть integer?
     
    zuma2 нравится это.
  13. Den-Xs

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

    Баллы:
    103
    Skype:
    denis_314
    Ну например если double округлили.
     
  14. Den_Abr

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

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ты смеёшься? double имеет вид 10.0, когда int просто 10
     
    Bind нравится это.
  15. Den-Xs

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

    Баллы:
    103
    Skype:
    denis_314
    Ну и что? 10.0 == 10.
     
  16. Den_Abr

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

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

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

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

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

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

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

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

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

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

    Баллы:
    153
    Skype:
    dpohvar
    Bind
    Код:
    config.set("lastid", block.getMaterial().name());
     

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