Бесплатно Java general

Лекция 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
booleantrue / falsetrue
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 + Tabpublic static final