Боевая система
Настоящий .jv модуль с локальным классом и накопительным счётчиком через Variable Bridge.
Этот модуль — реальный код, написанный и проверенный во время стресс-теста версии 1.1: он успешно скомпилировался и выполнился на Paper 26.1.2 / Skript 2.16.1.
// modules/combat_core.jv
class Hit {
final String attacker;
final double damage;
Hit(String attacker, double damage) { this.attacker = attacker; this.damage = damage; }
}
java.util.List<Hit> hits = new java.util.ArrayList<>();
hits.add(new Hit("Zombie", 4.5));
hits.add(new Hit("Skeleton", 3.0));
hits.add(new Hit("Creeper", 22.0));
double total = 0;
StringBuilder summaryBuilder = new StringBuilder();
for (int i = 0; i < hits.size(); i++) {
Hit hit = (Hit) hits.get(i);
total += hit.damage;
if (i > 0) {
summaryBuilder.append(", ");
}
summaryBuilder.append(hit.attacker).append("=").append(hit.damage);
}
String summary = summaryBuilder.toString();
setVar("combat_total_damage", total);
setVar("combat_summary", summary);
setVar("combat_hit_count", hits.size());
sender.sendMessage("[Combat] total=" + total + " hits=" + hits.size() + " (" + summary + ")");
Запускается из команды:
command /combat:
trigger:
run jv "modules/combat_core.jv"
Что здесь демонстрируется
- Локальный класс (
class Hit { ... }) — работает в Janino без модификатораfinal, см. Матрицу совместимости. - Явный каст
(Hit) hits.get(i)— обходит известное ограничение: generic-тип коллекции с локальным классом Janino типизирует какObject. setVarдля сбора результатов.
Значения из этого примера видны в рамках одного вызова (например, через /jvdebug vars combat),
но не переживают отдельные срабатывания команды. Подробности —
Область видимости.