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

  • Автор темы Автор темы Bind
  • Дата начала Дата начала

Bind

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

@EventHandler
public void onBlockPlace(BlockPlaceEvent e)
{
config.set("lastid", e.getBlock().getTypeId());
}
 
Всем привет,
я знаю что эта команда усторела, но я не могу найти новую и рабочую. Могли бы помочь?)

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

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

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

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

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

@EventHandler
public void onBlockPlace(BlockPlaceEvent e)
{
config.set("lastid", e.getBlock().getTypeId());
}
Если в файл не пишет, сделай saveConfig();
Сорь что не по теме, не разбирались с конфликтом getHealth() double и int?
А как с ним должны разбираться?
Minecraft 1.6.x uses floats for health instead of integers, which means all plugins expecting integer health need to be updated. Luckily, we've managed to come up with a way to support both old (integer) and new (double) health formats until plugin developers are able to update their plugins accordingly.
 
@Den_Abr, дело в том, что хоть getHealth() и возвращает теперь double, оно всё-равно всегда целое.
 
@Den_Abr, дело в том, что хоть getHealth() и возвращает теперь double, оно всё-равно всегда целое.
Сейчас в либе bukkit.jar содержатся оба метода (с double и int)
Чтобы все скомпилировалось верно, нужно использовать мавен. Или жe в зависимостях вместо bukkit.jar подключать его исходники с гитхаба.
У меня IDEA в таких случаях выдает ошибку (что-то про both method call), но при компиляции проблемы не возникали.

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

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

UPD:
и тут скрывается фишка: float и double может принимать значение NAN
Если поставить его игроку... будет интересный эффект:
дамаг будет наноситься каждый тик, хотя количество сердечек не отображается
 
Немного перебью вас, так алтернатива должна выглядеть так?
Код:
    @EventHandler
    public void onBlockPlace(BlockPlaceEvent e)
    {       
        config.set("lastid", block.setType(Material.valueOf(name)));
    }
 
Назад
Верх