- 1,216
- 27
- 172
Агитка от самих JetBrains - https://kotlinlang.org/
Попробовать онлайн(тоже весьма агитка) - http://try.kotlinlang.org/
Котлин - это такой относительно новый язык на основе JVM от JetBrains (которые сделали нам интеллиджу).
Так вот, суть его в том, что он совмещает в себе всё самое хорошее от Java и Scala где из первой берёт читабельность, а из второй - божественно короткий и практичный синтаксис.
О, самое главное и непривычное - nullable types. В котлине нельзя просто присвоить переменной типа String значение null - для этого тип должен быть String? и компилятор будет заставлять вас делать проверки, если вы хотите использовать String, но у вас есть String?
К этому бысто привыкаешь и этого начинает даже не хватать в жабке.
Кстати они совместимы с теми @Nullable аннотациями, что недавно начал завозить фордж, так-что да.
Важно - если вылетает непонятное исключение связанное с котлином, наверняка вы переопределили какой-то метод с типом без ?, а потом вызвали (не вы ибо компилятор блюдит, а майн/фордж) этот метод с тем параметром как null.
Проще говоря - это как значительно сокращённая (синтаксически, функционально он весьма богат) жабка, у которой нету заворотов и СЛОЖНАСТИ скалки, ну есть один очень удобный заворот - эти самые nullable типы.
Научится и перейти на него с жабки несложно, проще чем на скалку, а со скалки вообще легкотня.
Если вы хотите сделать основной класс мода, то, как и в скалке, можно это сделать либо с классом, либо с объектом(да, в Котлине есть объекты которые почти как в скалке(отличие только в объектах-компаньонах, если кто разбирается)).
С классом вообще просто - точно так-же как и в жабке (в фордже нету modLanguage="kotlin", да и не нужен, ну для класса по крайней мере) делаем аннотации типа @Mod и @EventHandler.
Для объекта нужно немного считерить. Если мы навешаем просто @Mod, то фордж будет пытаться рефлексией создать его объект (который кстати запихивает в поля @Instance, если вдруг кому он нужен), что нехорошо. Благо в фордже предусмотрели желание извращенцев самим создавать объекты класса и завезли аннотацию @InstanceFactory, которая вешается на статик метод в классе, который возвращает объект класса.
Однако есть маленькая проблема - в Котлине нет статиков, и, как и в скалке, нужно юзать объекты. Но, к счастью, джет-мозги решили, что если очень хочется, то статик может быть (вообще это для совместимости с жабкой, чтоб писать либы для неё, у них же типа совместимость вообще около 100%).
Делается это аннотацией @JvmStatic на нужном методе, который находится в объекте(насчет методов в классах не уверен, кстати, не проверял).
Итого, смысл в том, что для того чтобы Фордж воспринял наш объект как свой родной, нужно всего-лишь добавить где-нибудь внизу такой метод:
Код:
@InstanceFactory
@JvmStatic
fun hack(): ModObject = this
Кстати таким образом (ну и в скалке тоже, разумеется) можно просто использовать ModObject там, где вам нужен инстанс мода, без использования аннотации @Instance
P.S. Если хотите аннотации на поля, типа @SidedProxy, то нужно над полем писать @field:SidedProxy - особенности полей класса котлина крч(у них там есть просто такие штуки, как в C# - property, типа можно под полем ему геттер-сеттер запилить сразу) - ну и как в скалке геттеры-сеттеры пилить не надо, ибо он сам их пилит и использует (причём пилит не field() и field_$eq(x), а getField() и setField(x), как груви, что удобнее)