diff --git a/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java b/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java index 18e931ce..4d663920 100644 --- a/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java +++ b/CommonCore/Linkage/src/de/steamwar/linkage/AbstractLinker.java @@ -27,6 +27,7 @@ import lombok.experimental.StandardException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -100,9 +101,12 @@ public abstract class AbstractLinker { instances.forEach((clazz, o) -> { for (Field field : clazz.getFields()) { if (field.getAnnotation(LinkedInstance.class) != null) { - System.out.println("Setting " + field.getName() + " to " + instances.get(field.getType())); try { - field.set(o, instances.get(field.getType())); + if (Modifier.isStatic(field.getModifiers())) { + field.set(null, instances.get(field.getType())); + } else { + field.set(o, instances.get(field.getType())); + } } catch (IllegalAccessException e) { throw new SecurityException(e.getMessage(), e); } diff --git a/TowerRun/build.gradle.kts b/TowerRun/build.gradle.kts index 8eacd66e..e3a6cf74 100644 --- a/TowerRun/build.gradle.kts +++ b/TowerRun/build.gradle.kts @@ -29,6 +29,8 @@ java { dependencies { annotationProcessor(libs.spigotannotations) compileOnly(libs.spigotannotations) + compileOnly(libs.classindex) + annotationProcessor(libs.classindex) compileOnly(project(":SpigotCore", "default")) diff --git a/TowerRun/src/de/steamwar/towerrun/TowerRun.java b/TowerRun/src/de/steamwar/towerrun/TowerRun.java index 4503c5da..440b156c 100644 --- a/TowerRun/src/de/steamwar/towerrun/TowerRun.java +++ b/TowerRun/src/de/steamwar/towerrun/TowerRun.java @@ -19,18 +19,14 @@ package de.steamwar.towerrun; +import de.steamwar.command.SWCommand; +import de.steamwar.linkage.AbstractLinker; +import de.steamwar.linkage.LinkedInstance; +import de.steamwar.linkage.SpigotLinker; import de.steamwar.message.Message; -import de.steamwar.towerrun.commands.StartCommand; import de.steamwar.towerrun.config.WorldConfig; -import de.steamwar.towerrun.countdowns.EndCountdown; import de.steamwar.towerrun.countdowns.GameCountdown; -import de.steamwar.towerrun.countdowns.LobbyCountdown; -import de.steamwar.towerrun.game.TowerRunGame; import de.steamwar.towerrun.generator.TowerGenerator; -import de.steamwar.towerrun.listener.GlobalListener; -import de.steamwar.towerrun.listener.IngameListener; -import de.steamwar.towerrun.listener.LobbyListener; -import de.steamwar.towerrun.listener.NotLobbyListener; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -58,6 +54,7 @@ public class TowerRun extends JavaPlugin { private static TowerGenerator towerGenerator = null; @Getter + @LinkedInstance private static GameCountdown gameCountdown; @@ -70,14 +67,21 @@ public class TowerRun extends JavaPlugin { towerGenerator = new TowerGenerator(WorldConfig.TOWER_GENERATOR_CONFIG); } - new LobbyListener(); - new IngameListener(); - new GlobalListener(); - new NotLobbyListener(); - final LobbyCountdown lobbyCountdown = new LobbyCountdown(); - new EndCountdown(lobbyCountdown); - new StartCommand(lobbyCountdown); - gameCountdown = new GameCountdown(); + SpigotLinker spigotLinker = new SpigotLinker(this, message) { + @Override + protected void linkObject(Object any) { + if (any instanceof SWCommand) { + ((SWCommand) any).setMessage(message); + } + } + }; + try { + spigotLinker.link(); + } catch (AbstractLinker.LinkException e) { + e.printStackTrace(); + Bukkit.shutdown(); + return; + } Bukkit.getScheduler().runTaskTimer(this, new FightInfoPacketSender(), 20, 20); } diff --git a/TowerRun/src/de/steamwar/towerrun/commands/StartCommand.java b/TowerRun/src/de/steamwar/towerrun/commands/StartCommand.java index 262ffff6..dddb2954 100644 --- a/TowerRun/src/de/steamwar/towerrun/commands/StartCommand.java +++ b/TowerRun/src/de/steamwar/towerrun/commands/StartCommand.java @@ -21,18 +21,19 @@ package de.steamwar.towerrun.commands; import de.steamwar.command.SWCommand; import de.steamwar.command.TypeValidator; +import de.steamwar.linkage.Linked; import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.UserPerm; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.countdowns.LobbyCountdown; import org.bukkit.entity.Player; +@Linked public class StartCommand extends SWCommand { - private final LobbyCountdown countdown; + private LobbyCountdown countdown; - public StartCommand(LobbyCountdown countdown) { + public StartCommand() { super("start", "skip"); - this.countdown = countdown; } @Register diff --git a/TowerRun/src/de/steamwar/towerrun/countdowns/EndCountdown.java b/TowerRun/src/de/steamwar/towerrun/countdowns/EndCountdown.java index 6d631e02..3eb32c7d 100644 --- a/TowerRun/src/de/steamwar/towerrun/countdowns/EndCountdown.java +++ b/TowerRun/src/de/steamwar/towerrun/countdowns/EndCountdown.java @@ -19,6 +19,8 @@ package de.steamwar.towerrun.countdowns; +import de.steamwar.linkage.Linked; +import de.steamwar.linkage.LinkedInstance; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.config.Config; import de.steamwar.towerrun.game.TowerRunGame; @@ -29,15 +31,16 @@ import org.bukkit.Sound; import java.util.EnumSet; import java.util.Objects; +@Linked public class EndCountdown extends Countdown { - private final LobbyCountdown lobbyCountdown; + @LinkedInstance + private LobbyCountdown lobbyCountdown; private static final boolean RESETS = Objects.requireNonNull(Bukkit.getWorlds().get(0).getWorldFolder().list((dir, name) -> name.equals("backup"))).length > 0; - public EndCountdown(LobbyCountdown lobbyCountdown) { + public EndCountdown() { super(EnumSet.of(GameStates.END)); - this.lobbyCountdown = lobbyCountdown; } @Override diff --git a/TowerRun/src/de/steamwar/towerrun/countdowns/GameCountdown.java b/TowerRun/src/de/steamwar/towerrun/countdowns/GameCountdown.java index b1d25110..26b69ed7 100644 --- a/TowerRun/src/de/steamwar/towerrun/countdowns/GameCountdown.java +++ b/TowerRun/src/de/steamwar/towerrun/countdowns/GameCountdown.java @@ -19,6 +19,7 @@ package de.steamwar.towerrun.countdowns; +import de.steamwar.linkage.Linked; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.config.Config; import de.steamwar.towerrun.game.TowerRunGame; @@ -26,6 +27,7 @@ import de.steamwar.towerrun.state.GameStates; import java.util.EnumSet; +@Linked public class GameCountdown extends Countdown { private long startTime = 0; diff --git a/TowerRun/src/de/steamwar/towerrun/countdowns/LobbyCountdown.java b/TowerRun/src/de/steamwar/towerrun/countdowns/LobbyCountdown.java index a655c4c3..4377a141 100644 --- a/TowerRun/src/de/steamwar/towerrun/countdowns/LobbyCountdown.java +++ b/TowerRun/src/de/steamwar/towerrun/countdowns/LobbyCountdown.java @@ -19,6 +19,7 @@ package de.steamwar.towerrun.countdowns; +import de.steamwar.linkage.Linked; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.config.Config; import de.steamwar.towerrun.game.TowerRunGame; @@ -31,6 +32,7 @@ import org.bukkit.Sound; import java.util.EnumSet; @Getter +@Linked public class LobbyCountdown extends Countdown { @Setter diff --git a/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java b/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java index c20dd391..343bb97a 100644 --- a/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java +++ b/TowerRun/src/de/steamwar/towerrun/listener/GlobalListener.java @@ -19,6 +19,7 @@ package de.steamwar.towerrun.listener; +import de.steamwar.linkage.Linked; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.config.WorldConfig; import de.steamwar.towerrun.game.TowerRunGame; @@ -36,6 +37,7 @@ import org.bukkit.event.player.*; import java.util.EnumSet; +@Linked public class GlobalListener extends GameStateBukkitListener implements Listener { public GlobalListener() { super(EnumSet.allOf(GameStates.class)); diff --git a/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java b/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java index bc74e57f..abb5d9db 100644 --- a/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java +++ b/TowerRun/src/de/steamwar/towerrun/listener/IngameListener.java @@ -20,6 +20,7 @@ package de.steamwar.towerrun.listener; import de.steamwar.inventory.SWItem; +import de.steamwar.linkage.Linked; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.config.Config; import de.steamwar.towerrun.config.WorldConfig; @@ -47,6 +48,7 @@ import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; +@Linked public class IngameListener extends GameStateBukkitListener { private int time = 0; diff --git a/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java b/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java index 0a4e4358..2b89a81c 100644 --- a/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java +++ b/TowerRun/src/de/steamwar/towerrun/listener/LobbyListener.java @@ -19,6 +19,7 @@ package de.steamwar.towerrun.listener; +import de.steamwar.linkage.Linked; import de.steamwar.sql.SteamwarUser; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.config.Config; @@ -40,6 +41,7 @@ import org.bukkit.event.player.PlayerMoveEvent; import java.util.EnumSet; import java.util.HashMap; +@Linked public class LobbyListener extends GameStateBukkitListener { public LobbyListener() { super(EnumSet.of(GameStates.WAITING)); diff --git a/TowerRun/src/de/steamwar/towerrun/listener/NotLobbyListener.java b/TowerRun/src/de/steamwar/towerrun/listener/NotLobbyListener.java index 6bfb1623..752ed521 100644 --- a/TowerRun/src/de/steamwar/towerrun/listener/NotLobbyListener.java +++ b/TowerRun/src/de/steamwar/towerrun/listener/NotLobbyListener.java @@ -19,6 +19,7 @@ package de.steamwar.towerrun.listener; +import de.steamwar.linkage.Linked; import de.steamwar.towerrun.TowerRun; import de.steamwar.towerrun.config.WorldConfig; import de.steamwar.towerrun.state.GameStateBukkitListener; @@ -29,6 +30,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import java.util.EnumSet; +@Linked public class NotLobbyListener extends GameStateBukkitListener { public NotLobbyListener() { super(EnumSet.complementOf(EnumSet.of(GameStates.WAITING)));