Лекция 1: Основы Java для моддинга
Именование, типы, модификаторы, static/final, пакеты, аннотации, IDE
Синтаксис и структура Java, которые встретятся в первых лекциях по моддингу. Если попалось что-то незнакомое, загляни сюда.
Синтаксис
Именование
Классы пишутся в CamelCase, каждое слово с заглавной:
public class RinovaMod { }
public class PinkyliteStaffItem { }
Переменные и методы — camelCase (первое слово с маленькой):
int itemCount = 10;
void registerItems() { }
Константы — UPPER_SNAKE_CASE:
public static final String MOD_ID = "rinova";
public static final int MAX_STACK_SIZE = 64;
Типы данных
| Тип | Что хранит | Пример |
|---|---|---|
int | Целое число | 100 |
float | Дробное (одинарная точность) | 1.0F |
double | Дробное (двойная точность) | 1.0 |
boolean | true / false | true |
String | Текст | "rinova" |
Многие методы Minecraft принимают float, а не double. Напишете 1.0 — это double, и компилятор выдаст ошибку. Нужна буква F:
level.playSound(null, player.getX(), player.getY(), player.getZ(),
SoundEvents.PLAYER_LEVELUP, SoundSource.PLAYERS,
1.0F, // громкость (float)
1.0F // высота тона (float)
);
Модификаторы доступа
| Модификатор | Кто видит |
|---|---|
public | Все классы |
private | Только этот класс |
protected | Этот класс + наследники |
| (без модификатора) | Классы в том же пакете |
public class RinovaMod {
public static final String MOD_ID = "rinova"; // виден всем
private int counter = 0; // только внутри класса
}
static и final
static принадлежит классу, а не объекту. Создаётся один раз при загрузке.
final запрещает менять значение после присвоения.
public static final String MOD_ID = "rinova";
// static — одна на весь мод, не привязана к экземпляру
// final — значение "rinova" нельзя заменить
Вместе public static final — это константа, доступная отовсюду. В моддинге так объявляют ID мода, значения полей, ключи реестра (напр. при регистрации предметов).
В IntelliJ IDEA можно набрать
psf+ Tab для быстрого вводаpublic static final.
Структура кода
Пакеты
Пакет — это путь к вашему коду. Совпадает со структурой папок:
mod_group_id = com.ringo.rinova
Значит в src/main/java должно быть:
src/main/java/
com/
ringo/
rinova/
RinovaMod.java
Каждый Java-файл начинается с объявления пакета:
package com.ringo.rinova;
Аннотации
Специальные метки над классами и методами. Они говорят Java или фреймворку, что делать с этим кодом:
@Mod(RinovaMod.MOD_ID) // Forge: "это главный класс мода"
public class RinovaMod { }
@SubscribeEvent // Forge: "вызови этот метод при событии"
public void onServerStarting(ServerStartingEvent event) { }
IDE
Горячие клавиши IntelliJ IDEA
| Комбинация | Действие |
|---|---|
Ctrl + Alt + L | Форматирование кода |
Shift + F6 | Переименовать по всему проекту |
Ctrl + Click | Перейти к определению |
Alt + Enter | Быстрое исправление ошибки |
Alt + Insert | Генерация кода (конструктор, getter/setter, override) |
Ctrl + / | Закомментировать строку |
Ctrl + Shift + / | Закомментировать блок |
psf + Tab | public static final |