[1.8][Forge] Помогите мне перестать офигивать от происходящего

Nao

138
3
В последнее время принял за правило: при разработке мода шерстить все сопутствующие исходники вдоль и поперек. И в Forge для 1.8 начал встречать такие перлы, что руку уже устал к лицу поднимать.

Например метод в классе Block, в котором ни один из параметров сигнатуры не используется
Код:
public Item getItem(World worldIn, BlockPos pos)
{
    return Item.getItemFromBlock(this);
}

Или класс BlockPos, который заменил во всех методах простую передачу трех координат. Что с ним не так? Дело в том, что нельзя больше сделать инкремент/декримент этих самых координат. Раньше можно было написать metor(x +1, y - 2, z), а теперь это просто metod(pos). Есть конечно метод add у данного класса, который позволяет добавить или вычесть к каждой из координат, но тут проблема, как с календарем в старой джаве. Нет возможности добавить значение не изменив исходные данные.
В общем, полный бред!

Кто-нибудь из более опытных местных разрабов может что-то пояснить мне по данному поводу? Все всегда было так, или только сейчас стало? А может я просто что-то не понимаю?
 
675
2
Если я правильно понял, то я не понял проблемы :)
Код:
BlockPos bp = new BlockPos(pos.getX(), pos.getY() - 1, pos.getZ());
Сделай какой-нибудь Helper, если его еще нет и создай метод copy(pos, 0, -1, 0)
 

Nao

138
3
Так именно в том и проблема. API нужно для более удобного создания модов, а в итоге в новой версии стало неудобнее. Явно создавать кучу экземпляров не простого типа, а целой громадины под названием BlockPos каждый раз - это бред! А при написании генераторов будет совсем мрак, там же во вложенных циклах всё происходит.
Я понимаю, что BlockPos вполне удобная штука для передачи в метод, который может использовать почти все её поля, но в более мелких методах, где нужны только координаты оттуда, могли бы не изменять сигнатуру. Не нравится мне костылеориентированное программирование. А когда оно насаждается самим создателем API у меня просто бомбит.
 
905
5
Нао, а тебе не приходило в голову, что эти методы - для других и в стандартном блоке нинужны?
А BlockPos и правда пц.
 
675
2
Тут скорее идет подготовка к mod-API, если вдруг с позицией блока нужно будет добавить новое поле - это будет сделать проще, чем создавать новый метод (..., x, y, z), а старый метить, как устаревший.
 

Nao

138
3
Try4W, в более мелких методах можно было оставить все по старому. Ведь можно просто писать потом metod(pos.getX(), pos.getY(), pos.getZ()) и жить счастливо. Но заменили вообще везде ><. Хотя, твое предположение точно имеет место быть и скорее всего так и есть. Только стало очень неудобно (

А на счет создания своего хелпера, уже сделал CAFCUtil для себя. Утилита имени "Crutches against fucking crutches". Прям как йодатайм.
 
675
2
Думаю, что ребята из Forge допилят что-нибудь нативное от себя, но не скоро. У них на данный момент нет даже API для вкладок в кретиве, теперь их массив четко ограничен - 12, а свою можно впихнуть лишь заменив стандартную.
[merge_posts_bbcode]Добавлено: 18.01.2015 17:02:05[/merge_posts_bbcode]

Nao написал(а):
В более мелких методах можно было оставить все по старому.
Это был бы не правильный подход, как по мне. Лишняя путаница.
 

Nao

138
3
Эх, значит пока нет смысла вообще пытаться пилить что-то под 1.8 :(

Кстати, креативные вкладки есть. Только что добавил свою на 1287. А вот локализация пока не работает, судя по всему.
 
675
2
У меня с локализацией все нормально.
[merge_posts_bbcode]Добавлено: 19.01.2015 02:51:06[/merge_posts_bbcode]

Nao написал(а):
Кстати, креативные вкладки есть. Только что добавил свою на 1287. А вот локализация пока не работает, судя по всему.
Точно, давненько я форж не обновлял :)
 

Nao

138
3
И локализация тоже работает (у BOP по крайней мере). А у меня почему-то нет ) но с этим я разберусь на досуге.
 
905
5
Нао, я имел в виду, что getItem можно заоверрайдить и получать айтем с тайла. Но в большинстве блоков это не нужно.
 
Сверху