From 5193b4aba8794ed8c280c193b72ed8dbdabe805a Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Sat, 24 Jan 2026 22:06:20 +0100 Subject: [PATCH] chore: Updated dependencies --- pom.xml | 44 ++++++++-------- src/main/java/cz/jzitnik/Game.java | 10 ++-- src/main/java/cz/jzitnik/Main.java | 4 +- .../java/cz/jzitnik/game/setup/GameSetup.java | 21 +++++--- .../cz/jzitnik/utils/DependencyManager.java | 50 +++++++++++-------- 5 files changed, 71 insertions(+), 58 deletions(-) diff --git a/pom.xml b/pom.xml index 2b0dc09..cedfc49 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,6 @@ game 1.0-SNAPSHOT - @@ -89,14 +88,9 @@ org.projectlombok lombok - 1.18.38 + 1.18.42 provided - - org.junit.jupiter - junit-jupiter - 5.8.2 - org.reflections @@ -107,25 +101,31 @@ com.google.guava guava - 31.1-jre + 33.5.0-jre - com.fasterxml.jackson.core + tools.jackson.core jackson-databind - 2.18.2 + 3.0.4 - com.fasterxml.jackson.dataformat + tools.jackson.dataformat jackson-dataformat-yaml - 2.18.2 + 3.0.4 - junit - junit - 4.13.2 + org.junit.jupiter + junit-jupiter + 6.0.2 + + + + org.junit.jupiter + junit-jupiter-api + 6.0.2 test @@ -134,21 +134,18 @@ slf4j-api 2.0.17 + ch.qos.logback logback-classic - 1.5.18 + 1.5.25 + com.github.trilarion java-vorbis-support 1.2.1 - - com.esotericsoftware - kryo - 5.6.2 - com.googlecode.lanterna @@ -159,13 +156,13 @@ org.bytedeco javacv-platform - 1.5.10 + 1.5.12 org.bytedeco ffmpeg-platform - 6.1.1-1.5.10 + 7.1.1-1.5.12 @@ -173,6 +170,7 @@ core 2.5 + be.tarsos.dsp jvm diff --git a/src/main/java/cz/jzitnik/Game.java b/src/main/java/cz/jzitnik/Game.java index 55f2c52..1e26c6d 100644 --- a/src/main/java/cz/jzitnik/Game.java +++ b/src/main/java/cz/jzitnik/Game.java @@ -8,6 +8,8 @@ import cz.jzitnik.utils.ScheduledTaskManager; import cz.jzitnik.utils.ThreadManager; import org.reflections.Reflections; +import java.io.IOException; + public class Game { private final DependencyManager dependencyManager = new DependencyManager(new Reflections("cz.jzitnik")); @@ -22,14 +24,10 @@ public class Game { @InjectDependency private GlobalIOHandlerRepository globalIOHandlerRepository; - public void start() { + public void start() throws IOException { dependencyManager.inject(this); - try { - gameSetup.setup(); - } catch (Exception e) { - throw new RuntimeException(e); - } + gameSetup.setup(); threadManager.startAll(); scheduledTaskManager.startAll(); globalIOHandlerRepository.setup(); diff --git a/src/main/java/cz/jzitnik/Main.java b/src/main/java/cz/jzitnik/Main.java index b320606..a649b6d 100644 --- a/src/main/java/cz/jzitnik/Main.java +++ b/src/main/java/cz/jzitnik/Main.java @@ -2,8 +2,10 @@ package cz.jzitnik; // events/handlers/MouseMoveEventHandler.java +import java.io.IOException; + public class Main { - public static void main(String[] args) { + public static void main(String[] args) throws IOException { new Game().start(); } } \ No newline at end of file diff --git a/src/main/java/cz/jzitnik/game/setup/GameSetup.java b/src/main/java/cz/jzitnik/game/setup/GameSetup.java index e7f7ed1..b6cff1a 100644 --- a/src/main/java/cz/jzitnik/game/setup/GameSetup.java +++ b/src/main/java/cz/jzitnik/game/setup/GameSetup.java @@ -1,7 +1,5 @@ package cz.jzitnik.game.setup; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import cz.jzitnik.annotations.Dependency; import cz.jzitnik.annotations.injectors.InjectDependency; import cz.jzitnik.annotations.injectors.InjectState; @@ -9,7 +7,11 @@ import cz.jzitnik.game.GameRoom; import cz.jzitnik.game.GameState; import cz.jzitnik.game.Player; import cz.jzitnik.game.ResourceManager; +import cz.jzitnik.utils.DependencyManager; import lombok.extern.slf4j.Slf4j; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectReader; import java.io.IOException; import java.util.List; @@ -26,15 +28,22 @@ public class GameSetup { @InjectDependency private ObjectMapper objectMapper; + @InjectDependency + private DependencyManager dependencyManager; + public void setup() throws IOException { //gameState.setScreen(new IntroScene(dependencyManager)); - List rooms = objectMapper.readValue( - resourceManager.getResourceAsStream("setup/rooms.yaml"), - new TypeReference<>() { + ObjectReader roomsReader = objectMapper.readerFor( + new TypeReference>() { } + ).with(dependencyManager); + List rooms = roomsReader.readValue( + resourceManager.getResourceAsStream("setup/rooms.yaml") ); - Player player = objectMapper.readValue(resourceManager.getResourceAsStream("setup/player.yaml"), Player.class); + + ObjectReader playerReader = objectMapper.readerFor(Player.class).with(dependencyManager); + Player player = playerReader.readValue(resourceManager.getResourceAsStream("setup/player.yaml")); gameState.setCurrentRoom(rooms.getFirst()); gameState.setPlayer(player); diff --git a/src/main/java/cz/jzitnik/utils/DependencyManager.java b/src/main/java/cz/jzitnik/utils/DependencyManager.java index b75875e..df403be 100644 --- a/src/main/java/cz/jzitnik/utils/DependencyManager.java +++ b/src/main/java/cz/jzitnik/utils/DependencyManager.java @@ -3,8 +3,6 @@ package cz.jzitnik.utils; // Don't blame me that I'm using field injection instead of construction injection. I just like it more, leave me alone. // Yes, I know I'll suffer in the unit tests. (who said there will be any? hmmm) -import com.fasterxml.jackson.databind.*; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; import cz.jzitnik.annotations.Config; @@ -15,8 +13,10 @@ import cz.jzitnik.annotations.injectors.InjectDependency; import cz.jzitnik.annotations.injectors.InjectState; import lombok.extern.slf4j.Slf4j; import org.reflections.Reflections; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.*; +import tools.jackson.dataformat.yaml.YAMLFactory; -import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -31,22 +31,17 @@ public class DependencyManager extends InjectableValues { public DependencyManager(Reflections reflections) { ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - mapper.setInjectableValues(this); data.put(ObjectMapper.class, mapper); data.put(ClassLoader.class, DependencyManager.class.getClassLoader()); Set> configClasses = reflections.getTypesAnnotatedWith(Config.class); for (Class configClass : configClasses) { - try { - Config config = configClass.getAnnotation(Config.class); - assert config != null; - Path filePath = Path.of("config", config.value()); - InputStream stream = DependencyManager.class.getClassLoader().getResourceAsStream(filePath.toString()); - Object instance = mapper.readValue(stream, configClass); - configs.put(configClass, instance); - } catch (IOException e) { - log.error("Failed to instantiate config class: {}", configClass.getName(), e); - } + Config config = configClass.getAnnotation(Config.class); + assert config != null; + Path filePath = Path.of("config", config.value()); + InputStream stream = DependencyManager.class.getClassLoader().getResourceAsStream(filePath.toString()); + Object instance = mapper.readValue(stream, configClass); + configs.put(configClass, instance); } Set> classes = reflections.getTypesAnnotatedWith(Dependency.class); @@ -197,10 +192,7 @@ public class DependencyManager extends InjectableValues { } @Override - public Object findInjectableValue(Object valueId, - DeserializationContext ctxt, - BeanProperty forProperty, - Object beanInstance) throws JsonMappingException { + public Object findInjectableValue(DeserializationContext ctxt, Object valueId, BeanProperty forProperty, Object beanInstance, Boolean optional, Boolean useInput) throws JacksonException { if (valueId instanceof Class clazz) { Object dep = data.getInstance(clazz); if (dep != null) return dep; @@ -210,6 +202,9 @@ public class DependencyManager extends InjectableValues { if (clazz == this.getClass()) return this; + if (optional) { + return null; + } ctxt.reportInputMismatch(forProperty, "No injectable value found for type: %s", clazz.getName()); } else if (valueId instanceof String key) { @@ -220,14 +215,25 @@ public class DependencyManager extends InjectableValues { if (dep.getClass().getName().equalsIgnoreCase(key)) return dep; } + if (optional) { + return null; + } + ctxt.reportInputMismatch(forProperty, "No injectable value found for key: %s", key); - } else { - ctxt.reportInputMismatch(forProperty, - "Unrecognized inject value id type (%s), expecting Class or String", - valueId.getClass().getName()); + } else if (optional) { + return null; } + ctxt.reportInputMismatch(forProperty, + "Unrecognized inject value id type (%s), expecting Class or String", + valueId.getClass().getName()); + + return null; + } + + @Override + public InjectableValues snapshot() { return null; } }