Я делаю систему заклинаний для плагина Minecraft Spigot, и у меня много уровней наследования.
public class Spell {
protected void onActivate(Player p) {
}
public Spell() {
}
}
Это мой базовый класс Spell. Затем у меня есть класс для заклинаний с перезарядкой.
public class CooldownSpell extends Spell {
protected int cooldownTicks = 0;
protected int maxCooldownTicks = 0;
protected void onActivate(Player p) {
super.onActivate(p);
if (cooldownTicks > 0) {
return;
} else {
cooldownTicks = maxCooldownTicks;
}
}
public CooldownSpell(int cooldown) {
this.maxCooldownTicks = maxCooldownTicks;
}
// I am using a Bukkit scheduler to decrease cooldown ticks every tick
public void decreaseCooldownTicks() {
cooldownTicks--;
}
public int getMaxCooldownTicks() {
return maxCooldownTicks;
}
public void setMaxCooldownTicks(int maxCooldownTicks) {
this.maxCooldownTicks = maxCooldownTicks;
}
}
Для тех, кто не знает, галочка в Minecraft составляет 1/20 секунды.
В onActivate () , есть оператор if: если cooldownTicks больше 0, я хочу вернуться из этого метода и всех методов, вызывающих super.onActivate (). Однако это не работает в подклассах.
public class DamageSpell extends CooldownSpell {
private double radius;
private double damage;
public DamageSpell(int cooldown, double radius, double damage) {
super(cooldown);
this.maxCooldownTicks = cooldown;
this.radius = radius;
this.damage = damage;
}
@Override
public void onActivate(Player p) {
super.onActivate(p);
// spell code stuff here
}
Используя приведенный выше код, который является заклинанием, унаследованным от CooldownSpell, я хочу иметь ту же систему восстановления, что и суперкласс, но только оператор return возвращается из метода суперкласса, а не из метода DamageSpell.
Как мне сделать так, чтобы оператор return в методе onActivate класса CooldownSpell возвращался из метода onActivate в любых подклассах?