diff --git a/.gitignore b/.gitignore
index 5211a0b..98d8a5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,42 +1 @@
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-.kotlin
-
-### IntelliJ IDEA ###
-.idea/modules.xml
-.idea/jarRepositories.xml
-.idea/compiler.xml
-.idea/libraries/
-.idea/FuzzierSettings.xml
-*.iws
-*.iml
-*.ipr
-
-### Eclipse ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
-
-### Mac OS ###
-.DS_Store
-
logs
diff --git a/.idea/FuzzierSettings.xml b/.idea/FuzzierSettings.xml
new file mode 100644
index 0000000..ff7c62c
--- /dev/null
+++ b/.idea/FuzzierSettings.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..9abc593
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index aa00ffa..fd66ed6 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -1,6 +1,12 @@
+
+
+
+
+
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..09fe16c
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 3202223..86993b2 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,17 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/common/.gitignore b/common/.gitignore
new file mode 100644
index 0000000..480bdf5
--- /dev/null
+++ b/common/.gitignore
@@ -0,0 +1,39 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+.kotlin
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/common/.idea/.gitignore b/common/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/common/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/common/.idea/encodings.xml b/common/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/common/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/.idea/misc.xml b/common/.idea/misc.xml
new file mode 100644
index 0000000..4878ef2
--- /dev/null
+++ b/common/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/.idea/vcs.xml b/common/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/common/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/common/pom.xml b/common/pom.xml
new file mode 100644
index 0000000..66edc42
--- /dev/null
+++ b/common/pom.xml
@@ -0,0 +1,63 @@
+
+
+ 4.0.0
+
+
+ cz.jzitnik
+ game-parent
+ 1.0-SNAPSHOT
+
+
+ common
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.42
+
+
+ 25
+ 25
+
+
+
+
+
+
+
+ tools.jackson.core
+ jackson-databind
+ 3.0.4
+
+
+
+ tools.jackson.dataformat
+ jackson-dataformat-yaml
+ 3.0.4
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.42
+ provided
+
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.17
+
+
+
+
diff --git a/common/src/main/java/cz/jzitnik/common/Config.java b/common/src/main/java/cz/jzitnik/common/Config.java
new file mode 100644
index 0000000..de224e3
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/Config.java
@@ -0,0 +1,5 @@
+package cz.jzitnik.common;
+
+public class Config {
+ public static final int WORLD_PASSWORD_LENGTH = 5;
+}
diff --git a/src/main/java/cz/jzitnik/game/utils/RoomCords.java b/common/src/main/java/cz/jzitnik/common/models/coordinates/RoomCords.java
similarity index 79%
rename from src/main/java/cz/jzitnik/game/utils/RoomCords.java
rename to common/src/main/java/cz/jzitnik/common/models/coordinates/RoomCords.java
index 4d42f2a..4534fb4 100644
--- a/src/main/java/cz/jzitnik/game/utils/RoomCords.java
+++ b/common/src/main/java/cz/jzitnik/common/models/coordinates/RoomCords.java
@@ -1,18 +1,18 @@
-package cz.jzitnik.game.utils;
+package cz.jzitnik.common.models.coordinates;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import cz.jzitnik.game.GameRoomPart;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
+import java.io.Serializable;
import java.util.List;
@Slf4j
@ToString
@Getter
-public class RoomCords implements Cloneable {
+public class RoomCords implements Cloneable, Serializable {
private int x;
private int y;
@@ -29,8 +29,12 @@ public class RoomCords implements Cloneable {
this.y = y;
}
- public void updateCordsWithColliders(List colliders, int x, int y, GameRoomPart playerCollider) {
- var normalizedPlayerCollider = new GameRoomPart(
+ public void updateCords(RoomCords roomCords) {
+ updateCords(roomCords.getX(), roomCords.getY());
+ }
+
+ public void updateCordsWithColliders(List colliders, int x, int y, RoomPart playerCollider) {
+ var normalizedPlayerCollider = new RoomPart(
new RoomCords(playerCollider.getStart().getX() + x, playerCollider.getStart().getY() + y),
new RoomCords(playerCollider.getEnd().getX() + x, playerCollider.getEnd().getY() + y)
);
diff --git a/src/main/java/cz/jzitnik/game/GameRoomPart.java b/common/src/main/java/cz/jzitnik/common/models/coordinates/RoomPart.java
similarity index 82%
rename from src/main/java/cz/jzitnik/game/GameRoomPart.java
rename to common/src/main/java/cz/jzitnik/common/models/coordinates/RoomPart.java
index aba0ac8..3de05c6 100644
--- a/src/main/java/cz/jzitnik/game/GameRoomPart.java
+++ b/common/src/main/java/cz/jzitnik/common/models/coordinates/RoomPart.java
@@ -1,20 +1,20 @@
-package cz.jzitnik.game;
+package cz.jzitnik.common.models.coordinates;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import cz.jzitnik.game.utils.RoomCords;
-import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
+import java.io.Serializable;
+
@Data
@ToString
-public class GameRoomPart {
+public class RoomPart implements Serializable {
private RoomCords start;
private RoomCords end;
@JsonCreator
- public GameRoomPart(
+ public RoomPart(
@JsonProperty("start") RoomCords start,
@JsonProperty("end") RoomCords end
) {
@@ -32,7 +32,7 @@ public class GameRoomPart {
/**
* Checks if this GameRoomPart overlaps with another.
*/
- public boolean isOverlapping(GameRoomPart other) {
+ public boolean isOverlapping(RoomPart other) {
return start.getX() <= other.getEnd().getX() &&
end.getX() >= other.getStart().getX() &&
start.getY() <= other.getEnd().getY() &&
diff --git a/common/src/main/java/cz/jzitnik/common/models/player/PlayerCreation.java b/common/src/main/java/cz/jzitnik/common/models/player/PlayerCreation.java
new file mode 100644
index 0000000..a8587ac
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/models/player/PlayerCreation.java
@@ -0,0 +1,27 @@
+package cz.jzitnik.common.models.player;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import cz.jzitnik.common.models.coordinates.RoomCords;
+import cz.jzitnik.common.models.coordinates.RoomPart;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+@Getter
+public final class PlayerCreation implements Serializable {
+ @Setter
+ private int id;
+ private final RoomCords playerCords;
+ private final RoomPart collider;
+
+ @JsonCreator
+ public PlayerCreation(
+ @JsonProperty("playerCords") RoomCords playerCords,
+ @JsonProperty("collider") RoomPart collider
+ ) {
+ this.playerCords = playerCords;
+ this.collider = collider;
+ }
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/SocketMessage.java b/common/src/main/java/cz/jzitnik/common/socket/SocketMessage.java
new file mode 100644
index 0000000..3134c92
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/SocketMessage.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.common.socket;
+
+import java.io.Serializable;
+
+public interface SocketMessage extends Serializable {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/Test.java b/common/src/main/java/cz/jzitnik/common/socket/messages/Test.java
new file mode 100644
index 0000000..00d3703
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/Test.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.common.socket.messages;
+
+import cz.jzitnik.common.socket.SocketMessage;
+
+public class Test implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/game/connection/ConnectToAGame.java b/common/src/main/java/cz/jzitnik/common/socket/messages/game/connection/ConnectToAGame.java
new file mode 100644
index 0000000..72fc1a2
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/game/connection/ConnectToAGame.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.common.socket.messages.game.connection;
+
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record ConnectToAGame(String gamePass) implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/game/connection/ConnectToAGameResponse.java b/common/src/main/java/cz/jzitnik/common/socket/messages/game/connection/ConnectToAGameResponse.java
new file mode 100644
index 0000000..da7d74a
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/game/connection/ConnectToAGameResponse.java
@@ -0,0 +1,25 @@
+package cz.jzitnik.common.socket.messages.game.connection;
+
+import cz.jzitnik.common.models.player.PlayerCreation;
+import cz.jzitnik.common.socket.SocketMessage;
+
+import java.util.List;
+
+public record ConnectToAGameResponse(ResponseType responseType, PlayerCreation playerCreation, List existingPlayers) implements SocketMessage {
+ private enum ResponseType {
+ GAME_DOES_NOT_EXIST,
+ SUCCESS
+ }
+
+ public ConnectToAGameResponse() {
+ this(ResponseType.GAME_DOES_NOT_EXIST, null, null);
+ }
+
+ public ConnectToAGameResponse(PlayerCreation playerCreation, List existingPlayers) {
+ this(ResponseType.SUCCESS, playerCreation, existingPlayers);
+ }
+
+ public boolean success() {
+ return responseType == ResponseType.SUCCESS;
+ }
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/game/creation/CreateGame.java b/common/src/main/java/cz/jzitnik/common/socket/messages/game/creation/CreateGame.java
new file mode 100644
index 0000000..ad4a593
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/game/creation/CreateGame.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.common.socket.messages.game.creation;
+
+import cz.jzitnik.common.socket.SocketMessage;
+
+public class CreateGame implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/game/creation/CreateGameResponse.java b/common/src/main/java/cz/jzitnik/common/socket/messages/game/creation/CreateGameResponse.java
new file mode 100644
index 0000000..732c852
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/game/creation/CreateGameResponse.java
@@ -0,0 +1,13 @@
+package cz.jzitnik.common.socket.messages.game.creation;
+
+import cz.jzitnik.common.models.player.PlayerCreation;
+import cz.jzitnik.common.socket.SocketMessage;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public class CreateGameResponse implements SocketMessage {
+ private final String gamePassword;
+ private final PlayerCreation ownerPlayer;
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/items/ItemTookFromChest.java b/common/src/main/java/cz/jzitnik/common/socket/messages/items/ItemTookFromChest.java
new file mode 100644
index 0000000..f1b3897
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/items/ItemTookFromChest.java
@@ -0,0 +1,9 @@
+package cz.jzitnik.common.socket.messages.items;
+
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record ItemTookFromChest(
+ String roomId, // For faster lookup i guess
+ int id
+) implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerArrivalChange.java b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerArrivalChange.java
new file mode 100644
index 0000000..d661795
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerArrivalChange.java
@@ -0,0 +1,8 @@
+package cz.jzitnik.common.socket.messages.player;
+
+import cz.jzitnik.common.models.coordinates.RoomCords;
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record PlayerArrivalChange(int id, RoomCords playerCords, PlayerRotation playerRotation,
+ boolean arrived, boolean rerender) implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerDisconnected.java b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerDisconnected.java
new file mode 100644
index 0000000..85fad63
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerDisconnected.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.common.socket.messages.player;
+
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record PlayerDisconnected(int playerId) implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerJoined.java b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerJoined.java
new file mode 100644
index 0000000..c60aa5b
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerJoined.java
@@ -0,0 +1,7 @@
+package cz.jzitnik.common.socket.messages.player;
+
+import cz.jzitnik.common.models.player.PlayerCreation;
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record PlayerJoined(PlayerCreation playerCreation) implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerMove.java b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerMove.java
new file mode 100644
index 0000000..fdd52d9
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerMove.java
@@ -0,0 +1,7 @@
+package cz.jzitnik.common.socket.messages.player;
+
+import cz.jzitnik.common.models.coordinates.RoomCords;
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record PlayerMove(RoomCords newCords, PlayerRotation playerRotation) implements SocketMessage {
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerMovedInUrRoom.java b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerMovedInUrRoom.java
new file mode 100644
index 0000000..0870792
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerMovedInUrRoom.java
@@ -0,0 +1,14 @@
+package cz.jzitnik.common.socket.messages.player;
+
+import cz.jzitnik.common.models.coordinates.RoomCords;
+import cz.jzitnik.common.socket.SocketMessage;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public class PlayerMovedInUrRoom implements SocketMessage {
+ private int playerId;
+ private RoomCords cords;
+ private PlayerRotation playerRotation;
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerRotation.java b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerRotation.java
new file mode 100644
index 0000000..968721b
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/player/PlayerRotation.java
@@ -0,0 +1,5 @@
+package cz.jzitnik.common.socket.messages.player;
+
+public enum PlayerRotation {
+ FRONT, BACK, LEFT, RIGHT
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoom.java b/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoom.java
new file mode 100644
index 0000000..631fd6c
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoom.java
@@ -0,0 +1,8 @@
+package cz.jzitnik.common.socket.messages.room;
+
+import cz.jzitnik.common.models.coordinates.RoomCords;
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record MovePlayerRoom(String newRoomId, RoomCords oldCords, RoomCords newCords) implements SocketMessage {
+
+}
diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoomResponse.java b/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoomResponse.java
new file mode 100644
index 0000000..1d283d2
--- /dev/null
+++ b/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoomResponse.java
@@ -0,0 +1,22 @@
+package cz.jzitnik.common.socket.messages.room;
+
+import cz.jzitnik.common.models.coordinates.RoomCords;
+import cz.jzitnik.common.socket.SocketMessage;
+import cz.jzitnik.common.socket.messages.player.PlayerRotation;
+
+import java.io.Serializable;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public record MovePlayerRoomResponse(Set players) implements SocketMessage {
+ public record Registry(int id, RoomCords cords, PlayerRotation playerRotation) implements Serializable {}
+
+ public Optional getById(int id) {
+ return players.stream().filter(registry -> registry.id == id).findFirst();
+ }
+
+ public Set getIds() {
+ return players.stream().map(Registry::id).collect(Collectors.toSet());
+ }
+}
diff --git a/game/.gitignore b/game/.gitignore
new file mode 100644
index 0000000..5211a0b
--- /dev/null
+++ b/game/.gitignore
@@ -0,0 +1,42 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+.kotlin
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+.idea/FuzzierSettings.xml
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
+
+logs
diff --git a/game/.idea/.gitignore b/game/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/game/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/game/.idea/encodings.xml b/game/.idea/encodings.xml
new file mode 100644
index 0000000..fd66ed6
--- /dev/null
+++ b/game/.idea/encodings.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/game/.idea/misc.xml b/game/.idea/misc.xml
new file mode 100644
index 0000000..1044c37
--- /dev/null
+++ b/game/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/game/.idea/vcs.xml b/game/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/game/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/game/pom.xml b/game/pom.xml
new file mode 100644
index 0000000..3a308de
--- /dev/null
+++ b/game/pom.xml
@@ -0,0 +1,190 @@
+
+
+ 4.0.0
+
+
+ cz.jzitnik
+ game-parent
+ 1.0-SNAPSHOT
+
+
+ game
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.38
+
+
+ 25
+ 25
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.1
+
+
+ package
+
+ shade
+
+
+
+
+
+
+ cz.jzitnik.client.Main
+
+
+ false
+ false
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+
+
+ java
+
+
+
+
+ cz.jzitnik.client.Main
+ compile
+ false
+
+
+
+
+
+
+
+
+ be.0110.repo-releases
+ 0110.be repository
+ https://mvn.0110.be/releases
+
+
+
+
+
+ cz.jzitnik
+ common
+ 1.0-SNAPSHOT
+
+
+ org.projectlombok
+ lombok
+ 1.18.42
+ provided
+
+
+
+ org.reflections
+ reflections
+ 0.10.2
+
+
+
+ com.google.guava
+ guava
+ 33.5.0-jre
+
+
+
+ tools.jackson.core
+ jackson-databind
+ 3.0.4
+
+
+
+ tools.jackson.dataformat
+ jackson-dataformat-yaml
+ 3.0.4
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 6.0.2
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 6.0.2
+ test
+
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.17
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.5.25
+
+
+
+ com.github.trilarion
+ java-vorbis-support
+ 1.2.1
+
+
+
+ com.googlecode.lanterna
+ lanterna
+ 3.1.3
+
+
+
+ org.bytedeco
+ javacv-platform
+ 1.5.12
+
+
+
+ org.bytedeco
+ ffmpeg-platform
+ 7.1.1-1.5.12
+
+
+
+ be.tarsos.dsp
+ core
+ 2.5
+
+
+
+ be.tarsos.dsp
+ jvm
+ 2.5
+
+
+
+ org.glassfish.tyrus.bundles
+ tyrus-standalone-client
+ 2.2.2
+
+
+
diff --git a/src/main/java/cz/jzitnik/Cli.java b/game/src/main/java/cz/jzitnik/client/Cli.java
similarity index 78%
rename from src/main/java/cz/jzitnik/Cli.java
rename to game/src/main/java/cz/jzitnik/client/Cli.java
index 8b4aa52..5f32d35 100644
--- a/src/main/java/cz/jzitnik/Cli.java
+++ b/game/src/main/java/cz/jzitnik/client/Cli.java
@@ -1,18 +1,18 @@
-package cz.jzitnik;
+package cz.jzitnik.client;
import com.googlecode.lanterna.input.KeyStroke;
import com.googlecode.lanterna.screen.TerminalScreen;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
import com.googlecode.lanterna.terminal.MouseCaptureMode;
-import cz.jzitnik.annotations.Dependency;
-import cz.jzitnik.annotations.injectors.InjectDependency;
-import cz.jzitnik.annotations.injectors.InjectState;
-import cz.jzitnik.events.KeyboardPressEvent;
-import cz.jzitnik.events.MouseAction;
-import cz.jzitnik.events.TerminalResizeEvent;
-import cz.jzitnik.states.RunningState;
-import cz.jzitnik.states.TerminalState;
-import cz.jzitnik.utils.events.EventManager;
+import cz.jzitnik.client.annotations.Dependency;
+import cz.jzitnik.client.annotations.injectors.InjectDependency;
+import cz.jzitnik.client.annotations.injectors.InjectState;
+import cz.jzitnik.client.events.KeyboardPressEvent;
+import cz.jzitnik.client.events.MouseAction;
+import cz.jzitnik.client.events.TerminalResizeEvent;
+import cz.jzitnik.client.states.RunningState;
+import cz.jzitnik.client.states.TerminalState;
+import cz.jzitnik.client.utils.events.EventManager;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
@@ -31,8 +31,7 @@ public class Cli implements Runnable {
@Override
public void run() {
- eventManager.start(); // Start event manager thread
-
+ // Start event manager thread
try (TerminalScreen terminal = new DefaultTerminalFactory()
.setMouseCaptureMode(MouseCaptureMode.CLICK_RELEASE_DRAG_MOVE)
.createScreen()) {
diff --git a/game/src/main/java/cz/jzitnik/client/Game.java b/game/src/main/java/cz/jzitnik/client/Game.java
new file mode 100644
index 0000000..71f774e
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/Game.java
@@ -0,0 +1,49 @@
+package cz.jzitnik.client;
+
+import cz.jzitnik.client.annotations.injectors.InjectDependency;
+import cz.jzitnik.client.game.setup.GameSetup;
+import cz.jzitnik.client.socket.Client;
+import cz.jzitnik.client.socket.SocketEventManager;
+import cz.jzitnik.client.utils.DependencyManager;
+import cz.jzitnik.client.utils.GlobalIOHandlerRepository;
+import cz.jzitnik.client.utils.ScheduledTaskManager;
+import cz.jzitnik.client.utils.ThreadManager;
+import cz.jzitnik.client.utils.events.EventManager;
+import jakarta.websocket.DeploymentException;
+import org.reflections.Reflections;
+
+import java.io.IOException;
+
+public class Game {
+ private final DependencyManager dependencyManager = new DependencyManager(new Reflections("cz.jzitnik.client"));
+
+ @InjectDependency
+ private GameSetup gameSetup;
+ @InjectDependency
+ private EventManager eventManager;
+ @InjectDependency
+ private SocketEventManager socketEventManager;
+ @InjectDependency
+ private Cli cli;
+ @InjectDependency
+ private ThreadManager threadManager;
+ @InjectDependency
+ private ScheduledTaskManager scheduledTaskManager;
+ @InjectDependency
+ private GlobalIOHandlerRepository globalIOHandlerRepository;
+
+ public void start() throws IOException {
+ dependencyManager.inject(this);
+
+ eventManager.start();
+ socketEventManager.start();
+
+ threadManager.startAll();
+ scheduledTaskManager.startAll();
+ globalIOHandlerRepository.setup();
+
+ gameSetup.setup();
+
+ cli.run();
+ }
+}
diff --git a/src/main/java/cz/jzitnik/Main.java b/game/src/main/java/cz/jzitnik/client/Main.java
similarity index 87%
rename from src/main/java/cz/jzitnik/Main.java
rename to game/src/main/java/cz/jzitnik/client/Main.java
index a649b6d..41515de 100644
--- a/src/main/java/cz/jzitnik/Main.java
+++ b/game/src/main/java/cz/jzitnik/client/Main.java
@@ -1,4 +1,4 @@
-package cz.jzitnik;
+package cz.jzitnik.client;
// events/handlers/MouseMoveEventHandler.java
diff --git a/src/main/java/cz/jzitnik/annotations/Config.java b/game/src/main/java/cz/jzitnik/client/annotations/Config.java
similarity index 87%
rename from src/main/java/cz/jzitnik/annotations/Config.java
rename to game/src/main/java/cz/jzitnik/client/annotations/Config.java
index 163c563..882f382 100644
--- a/src/main/java/cz/jzitnik/annotations/Config.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/Config.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations;
+package cz.jzitnik.client.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/Dependency.java b/game/src/main/java/cz/jzitnik/client/annotations/Dependency.java
similarity index 89%
rename from src/main/java/cz/jzitnik/annotations/Dependency.java
rename to game/src/main/java/cz/jzitnik/client/annotations/Dependency.java
index 87ed5a5..288c601 100644
--- a/src/main/java/cz/jzitnik/annotations/Dependency.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/Dependency.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations;
+package cz.jzitnik.client.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/EventHandler.java b/game/src/main/java/cz/jzitnik/client/annotations/EventHandler.java
similarity index 77%
rename from src/main/java/cz/jzitnik/annotations/EventHandler.java
rename to game/src/main/java/cz/jzitnik/client/annotations/EventHandler.java
index e9c7d2c..79bdc30 100644
--- a/src/main/java/cz/jzitnik/annotations/EventHandler.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/EventHandler.java
@@ -1,6 +1,6 @@
-package cz.jzitnik.annotations;
+package cz.jzitnik.client.annotations;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/PostInit.java b/game/src/main/java/cz/jzitnik/client/annotations/PostInit.java
similarity index 86%
rename from src/main/java/cz/jzitnik/annotations/PostInit.java
rename to game/src/main/java/cz/jzitnik/client/annotations/PostInit.java
index 7861229..2998554 100644
--- a/src/main/java/cz/jzitnik/annotations/PostInit.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/PostInit.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations;
+package cz.jzitnik.client.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/ScheduledTask.java b/game/src/main/java/cz/jzitnik/client/annotations/ScheduledTask.java
similarity index 89%
rename from src/main/java/cz/jzitnik/annotations/ScheduledTask.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ScheduledTask.java
index f60c113..9856180 100644
--- a/src/main/java/cz/jzitnik/annotations/ScheduledTask.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ScheduledTask.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations;
+package cz.jzitnik.client.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/game/src/main/java/cz/jzitnik/client/annotations/SocketEventHandler.java b/game/src/main/java/cz/jzitnik/client/annotations/SocketEventHandler.java
new file mode 100644
index 0000000..bf6fdd9
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/annotations/SocketEventHandler.java
@@ -0,0 +1,14 @@
+package cz.jzitnik.client.annotations;
+
+import cz.jzitnik.common.socket.SocketMessage;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface SocketEventHandler {
+ Class extends SocketMessage> value();
+}
diff --git a/src/main/java/cz/jzitnik/annotations/State.java b/game/src/main/java/cz/jzitnik/client/annotations/State.java
similarity index 86%
rename from src/main/java/cz/jzitnik/annotations/State.java
rename to game/src/main/java/cz/jzitnik/client/annotations/State.java
index bf23ec3..0d9646b 100644
--- a/src/main/java/cz/jzitnik/annotations/State.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/State.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations;
+package cz.jzitnik.client.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/ThreadRegistry.java b/game/src/main/java/cz/jzitnik/client/annotations/ThreadRegistry.java
similarity index 87%
rename from src/main/java/cz/jzitnik/annotations/ThreadRegistry.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ThreadRegistry.java
index ea4dfdd..ff3ec98 100644
--- a/src/main/java/cz/jzitnik/annotations/ThreadRegistry.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ThreadRegistry.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations;
+package cz.jzitnik.client.annotations;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/injectors/InjectConfig.java b/game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectConfig.java
similarity index 84%
rename from src/main/java/cz/jzitnik/annotations/injectors/InjectConfig.java
rename to game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectConfig.java
index b95916e..3371552 100644
--- a/src/main/java/cz/jzitnik/annotations/injectors/InjectConfig.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectConfig.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.injectors;
+package cz.jzitnik.client.annotations.injectors;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/cz/jzitnik/annotations/injectors/InjectDependency.java b/game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectDependency.java
similarity index 84%
rename from src/main/java/cz/jzitnik/annotations/injectors/InjectDependency.java
rename to game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectDependency.java
index 5c6fd13..2b8d0d6 100644
--- a/src/main/java/cz/jzitnik/annotations/injectors/InjectDependency.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectDependency.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.injectors;
+package cz.jzitnik.client.annotations.injectors;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/cz/jzitnik/annotations/injectors/InjectState.java b/game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectState.java
similarity index 84%
rename from src/main/java/cz/jzitnik/annotations/injectors/InjectState.java
rename to game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectState.java
index d01eaa7..0c6ae48 100644
--- a/src/main/java/cz/jzitnik/annotations/injectors/InjectState.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/injectors/InjectState.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.injectors;
+package cz.jzitnik.client.annotations.injectors;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/cz/jzitnik/annotations/ui/KeyboardPressHandler.java b/game/src/main/java/cz/jzitnik/client/annotations/ui/KeyboardPressHandler.java
similarity index 88%
rename from src/main/java/cz/jzitnik/annotations/ui/KeyboardPressHandler.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ui/KeyboardPressHandler.java
index d5e6eaa..b8c172a 100644
--- a/src/main/java/cz/jzitnik/annotations/ui/KeyboardPressHandler.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ui/KeyboardPressHandler.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.ui;
+package cz.jzitnik.client.annotations.ui;
import com.googlecode.lanterna.input.KeyType;
diff --git a/src/main/java/cz/jzitnik/annotations/ui/KeyboardPressHandlers.java b/game/src/main/java/cz/jzitnik/client/annotations/ui/KeyboardPressHandlers.java
similarity index 87%
rename from src/main/java/cz/jzitnik/annotations/ui/KeyboardPressHandlers.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ui/KeyboardPressHandlers.java
index b8892ae..32d1abf 100644
--- a/src/main/java/cz/jzitnik/annotations/ui/KeyboardPressHandlers.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ui/KeyboardPressHandlers.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.ui;
+package cz.jzitnik.client.annotations.ui;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/src/main/java/cz/jzitnik/annotations/ui/MouseHandler.java b/game/src/main/java/cz/jzitnik/client/annotations/ui/MouseHandler.java
similarity index 87%
rename from src/main/java/cz/jzitnik/annotations/ui/MouseHandler.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ui/MouseHandler.java
index e18ed7c..5ea0f70 100644
--- a/src/main/java/cz/jzitnik/annotations/ui/MouseHandler.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ui/MouseHandler.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.ui;
+package cz.jzitnik.client.annotations.ui;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/ui/MouseHandlerType.java b/game/src/main/java/cz/jzitnik/client/annotations/ui/MouseHandlerType.java
similarity index 60%
rename from src/main/java/cz/jzitnik/annotations/ui/MouseHandlerType.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ui/MouseHandlerType.java
index 26e46d7..158904b 100644
--- a/src/main/java/cz/jzitnik/annotations/ui/MouseHandlerType.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ui/MouseHandlerType.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.ui;
+package cz.jzitnik.client.annotations.ui;
public enum MouseHandlerType {
CLICK,
diff --git a/src/main/java/cz/jzitnik/annotations/ui/Render.java b/game/src/main/java/cz/jzitnik/client/annotations/ui/Render.java
similarity index 85%
rename from src/main/java/cz/jzitnik/annotations/ui/Render.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ui/Render.java
index 6a2a79c..0f60582 100644
--- a/src/main/java/cz/jzitnik/annotations/ui/Render.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ui/Render.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.ui;
+package cz.jzitnik.client.annotations.ui;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/annotations/ui/UI.java b/game/src/main/java/cz/jzitnik/client/annotations/ui/UI.java
similarity index 85%
rename from src/main/java/cz/jzitnik/annotations/ui/UI.java
rename to game/src/main/java/cz/jzitnik/client/annotations/ui/UI.java
index 9980fcf..c74f7e2 100644
--- a/src/main/java/cz/jzitnik/annotations/ui/UI.java
+++ b/game/src/main/java/cz/jzitnik/client/annotations/ui/UI.java
@@ -1,4 +1,4 @@
-package cz.jzitnik.annotations.ui;
+package cz.jzitnik.client.annotations.ui;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/src/main/java/cz/jzitnik/config/CoreLogic.java b/game/src/main/java/cz/jzitnik/client/config/CoreLogic.java
similarity index 81%
rename from src/main/java/cz/jzitnik/config/CoreLogic.java
rename to game/src/main/java/cz/jzitnik/client/config/CoreLogic.java
index 31a1484..545b613 100644
--- a/src/main/java/cz/jzitnik/config/CoreLogic.java
+++ b/game/src/main/java/cz/jzitnik/client/config/CoreLogic.java
@@ -1,9 +1,8 @@
-package cz.jzitnik.config;
+package cz.jzitnik.client.config;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import cz.jzitnik.annotations.Config;
-import lombok.Getter;
+import cz.jzitnik.client.annotations.Config;
@Config("core_logic.yaml")
public record CoreLogic(int itemDropDisappearMinutes) {
diff --git a/src/main/java/cz/jzitnik/config/Debugging.java b/game/src/main/java/cz/jzitnik/client/config/Debugging.java
similarity index 89%
rename from src/main/java/cz/jzitnik/config/Debugging.java
rename to game/src/main/java/cz/jzitnik/client/config/Debugging.java
index b5ac702..287cdff 100644
--- a/src/main/java/cz/jzitnik/config/Debugging.java
+++ b/game/src/main/java/cz/jzitnik/client/config/Debugging.java
@@ -1,8 +1,8 @@
-package cz.jzitnik.config;
+package cz.jzitnik.client.config;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import cz.jzitnik.annotations.Config;
+import cz.jzitnik.client.annotations.Config;
@Config("debugging.yaml")
public record Debugging(boolean renderColliders, boolean renderPlayerCollider, boolean showPlayerCordsLogs) {
diff --git a/src/main/java/cz/jzitnik/config/MicrophoneConfig.java b/game/src/main/java/cz/jzitnik/client/config/MicrophoneConfig.java
similarity index 82%
rename from src/main/java/cz/jzitnik/config/MicrophoneConfig.java
rename to game/src/main/java/cz/jzitnik/client/config/MicrophoneConfig.java
index a55bda2..b07ba83 100644
--- a/src/main/java/cz/jzitnik/config/MicrophoneConfig.java
+++ b/game/src/main/java/cz/jzitnik/client/config/MicrophoneConfig.java
@@ -1,8 +1,8 @@
-package cz.jzitnik.config;
+package cz.jzitnik.client.config;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import cz.jzitnik.annotations.Config;
+import cz.jzitnik.client.annotations.Config;
@Config("microphone.yaml")
public record MicrophoneConfig(float volumeThreshold) {
diff --git a/src/main/java/cz/jzitnik/config/PlayerConfig.java b/game/src/main/java/cz/jzitnik/client/config/PlayerConfig.java
similarity index 90%
rename from src/main/java/cz/jzitnik/config/PlayerConfig.java
rename to game/src/main/java/cz/jzitnik/client/config/PlayerConfig.java
index 1e355a6..78079ce 100644
--- a/src/main/java/cz/jzitnik/config/PlayerConfig.java
+++ b/game/src/main/java/cz/jzitnik/client/config/PlayerConfig.java
@@ -1,9 +1,9 @@
-package cz.jzitnik.config;
+package cz.jzitnik.client.config;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import cz.jzitnik.annotations.Config;
-import cz.jzitnik.events.handlers.PlayerMoveEventHandler;
+import cz.jzitnik.client.annotations.Config;
+import cz.jzitnik.client.events.handlers.PlayerMoveEventHandler;
@Config("player.yaml")
public record PlayerConfig(
diff --git a/src/main/java/cz/jzitnik/config/ThreadPoolConfig.java b/game/src/main/java/cz/jzitnik/client/config/ThreadPoolConfig.java
similarity index 85%
rename from src/main/java/cz/jzitnik/config/ThreadPoolConfig.java
rename to game/src/main/java/cz/jzitnik/client/config/ThreadPoolConfig.java
index 2dc4110..b1c2dfc 100644
--- a/src/main/java/cz/jzitnik/config/ThreadPoolConfig.java
+++ b/game/src/main/java/cz/jzitnik/client/config/ThreadPoolConfig.java
@@ -1,9 +1,8 @@
-package cz.jzitnik.config;
+package cz.jzitnik.client.config;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
-import cz.jzitnik.annotations.Config;
-import lombok.Getter;
+import cz.jzitnik.client.annotations.Config;
@Config("threads.yaml")
public record ThreadPoolConfig(int eventThreadCount, int taskThreadCount) {
diff --git a/game/src/main/java/cz/jzitnik/client/events/DroppedItemRerender.java b/game/src/main/java/cz/jzitnik/client/events/DroppedItemRerender.java
new file mode 100644
index 0000000..1f421de
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/events/DroppedItemRerender.java
@@ -0,0 +1,7 @@
+package cz.jzitnik.client.events;
+
+import cz.jzitnik.client.game.objects.DroppedItem;
+import cz.jzitnik.client.utils.events.Event;
+
+public record DroppedItemRerender(DroppedItem droppedItem) implements Event {
+}
diff --git a/src/main/java/cz/jzitnik/events/ExitEvent.java b/game/src/main/java/cz/jzitnik/client/events/ExitEvent.java
similarity index 52%
rename from src/main/java/cz/jzitnik/events/ExitEvent.java
rename to game/src/main/java/cz/jzitnik/client/events/ExitEvent.java
index 1649807..0a5761d 100644
--- a/src/main/java/cz/jzitnik/events/ExitEvent.java
+++ b/game/src/main/java/cz/jzitnik/client/events/ExitEvent.java
@@ -1,6 +1,6 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
/** Custom event without any handler **/
public class ExitEvent implements Event {
diff --git a/game/src/main/java/cz/jzitnik/client/events/FullRedrawEvent.java b/game/src/main/java/cz/jzitnik/client/events/FullRedrawEvent.java
new file mode 100644
index 0000000..cc88a6e
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/events/FullRedrawEvent.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.client.events;
+
+import cz.jzitnik.client.utils.events.Event;
+
+public class FullRedrawEvent implements Event {
+}
diff --git a/src/main/java/cz/jzitnik/events/FullRoomDraw.java b/game/src/main/java/cz/jzitnik/client/events/FullRoomDraw.java
similarity index 73%
rename from src/main/java/cz/jzitnik/events/FullRoomDraw.java
rename to game/src/main/java/cz/jzitnik/client/events/FullRoomDraw.java
index 1268625..7097833 100644
--- a/src/main/java/cz/jzitnik/events/FullRoomDraw.java
+++ b/game/src/main/java/cz/jzitnik/client/events/FullRoomDraw.java
@@ -1,7 +1,6 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
-import cz.jzitnik.utils.events.Event;
-import lombok.AllArgsConstructor;
+import cz.jzitnik.client.utils.events.Event;
import lombok.Getter;
import lombok.NoArgsConstructor;
diff --git a/game/src/main/java/cz/jzitnik/client/events/InventoryRerender.java b/game/src/main/java/cz/jzitnik/client/events/InventoryRerender.java
new file mode 100644
index 0000000..998db13
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/events/InventoryRerender.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.client.events;
+
+import cz.jzitnik.client.utils.events.Event;
+
+public class InventoryRerender implements Event {
+}
diff --git a/src/main/java/cz/jzitnik/events/KeyboardPressEvent.java b/game/src/main/java/cz/jzitnik/client/events/KeyboardPressEvent.java
similarity index 73%
rename from src/main/java/cz/jzitnik/events/KeyboardPressEvent.java
rename to game/src/main/java/cz/jzitnik/client/events/KeyboardPressEvent.java
index 52ec8ae..19b2e2b 100644
--- a/src/main/java/cz/jzitnik/events/KeyboardPressEvent.java
+++ b/game/src/main/java/cz/jzitnik/client/events/KeyboardPressEvent.java
@@ -1,7 +1,7 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
import com.googlecode.lanterna.input.KeyStroke;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/cz/jzitnik/events/MouseAction.java b/game/src/main/java/cz/jzitnik/client/events/MouseAction.java
similarity index 86%
rename from src/main/java/cz/jzitnik/events/MouseAction.java
rename to game/src/main/java/cz/jzitnik/client/events/MouseAction.java
index 6959efc..605e5db 100644
--- a/src/main/java/cz/jzitnik/events/MouseAction.java
+++ b/game/src/main/java/cz/jzitnik/client/events/MouseAction.java
@@ -1,8 +1,8 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
import com.googlecode.lanterna.TerminalPosition;
import com.googlecode.lanterna.input.MouseActionType;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
public class MouseAction extends com.googlecode.lanterna.input.MouseAction implements Event {
public MouseAction(MouseActionType actionType, int button, TerminalPosition position) {
diff --git a/src/main/java/cz/jzitnik/events/MouseMoveEvent.java b/game/src/main/java/cz/jzitnik/client/events/MouseMoveEvent.java
similarity index 68%
rename from src/main/java/cz/jzitnik/events/MouseMoveEvent.java
rename to game/src/main/java/cz/jzitnik/client/events/MouseMoveEvent.java
index 9bb769b..e4c4e82 100644
--- a/src/main/java/cz/jzitnik/events/MouseMoveEvent.java
+++ b/game/src/main/java/cz/jzitnik/client/events/MouseMoveEvent.java
@@ -1,6 +1,6 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/cz/jzitnik/events/PlayerMoveEvent.java b/game/src/main/java/cz/jzitnik/client/events/PlayerMoveEvent.java
similarity index 73%
rename from src/main/java/cz/jzitnik/events/PlayerMoveEvent.java
rename to game/src/main/java/cz/jzitnik/client/events/PlayerMoveEvent.java
index 41169ce..34ed568 100644
--- a/src/main/java/cz/jzitnik/events/PlayerMoveEvent.java
+++ b/game/src/main/java/cz/jzitnik/client/events/PlayerMoveEvent.java
@@ -1,7 +1,7 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
import com.googlecode.lanterna.input.KeyStroke;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/game/src/main/java/cz/jzitnik/client/events/RenderStats.java b/game/src/main/java/cz/jzitnik/client/events/RenderStats.java
new file mode 100644
index 0000000..2df5177
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/events/RenderStats.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.client.events;
+
+import cz.jzitnik.client.utils.events.Event;
+
+public class RenderStats implements Event {
+}
diff --git a/src/main/java/cz/jzitnik/events/RerenderPart.java b/game/src/main/java/cz/jzitnik/client/events/RerenderPart.java
similarity index 75%
rename from src/main/java/cz/jzitnik/events/RerenderPart.java
rename to game/src/main/java/cz/jzitnik/client/events/RerenderPart.java
index 77de5b9..bd79e2d 100644
--- a/src/main/java/cz/jzitnik/events/RerenderPart.java
+++ b/game/src/main/java/cz/jzitnik/client/events/RerenderPart.java
@@ -1,6 +1,6 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/src/main/java/cz/jzitnik/events/RerenderScreen.java b/game/src/main/java/cz/jzitnik/client/events/RerenderScreen.java
similarity index 93%
rename from src/main/java/cz/jzitnik/events/RerenderScreen.java
rename to game/src/main/java/cz/jzitnik/client/events/RerenderScreen.java
index 5ef8e58..404d48c 100644
--- a/src/main/java/cz/jzitnik/events/RerenderScreen.java
+++ b/game/src/main/java/cz/jzitnik/client/events/RerenderScreen.java
@@ -1,13 +1,11 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
import com.googlecode.lanterna.TerminalPosition;
import com.googlecode.lanterna.TerminalSize;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
import lombok.AllArgsConstructor;
import lombok.Data;
-import java.awt.*;
-
public record RerenderScreen(ScreenPart[] parts) implements Event {
public RerenderScreen(ScreenPart part) {
this(new ScreenPart[]{part});
diff --git a/game/src/main/java/cz/jzitnik/client/events/RoomChangeEvent.java b/game/src/main/java/cz/jzitnik/client/events/RoomChangeEvent.java
new file mode 100644
index 0000000..7573d09
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/events/RoomChangeEvent.java
@@ -0,0 +1,7 @@
+package cz.jzitnik.client.events;
+
+import cz.jzitnik.client.events.handlers.FullRoomDrawHandler;
+import cz.jzitnik.client.utils.events.Event;
+
+public record RoomChangeEvent(FullRoomDrawHandler.DoorPosition door) implements Event {
+}
diff --git a/game/src/main/java/cz/jzitnik/client/events/SendSocketMessageEvent.java b/game/src/main/java/cz/jzitnik/client/events/SendSocketMessageEvent.java
new file mode 100644
index 0000000..291299a
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/events/SendSocketMessageEvent.java
@@ -0,0 +1,7 @@
+package cz.jzitnik.client.events;
+
+import cz.jzitnik.client.utils.events.Event;
+import cz.jzitnik.common.socket.SocketMessage;
+
+public record SendSocketMessageEvent(SocketMessage message) implements Event {
+}
diff --git a/src/main/java/cz/jzitnik/events/TerminalResizeEvent.java b/game/src/main/java/cz/jzitnik/client/events/TerminalResizeEvent.java
similarity index 73%
rename from src/main/java/cz/jzitnik/events/TerminalResizeEvent.java
rename to game/src/main/java/cz/jzitnik/client/events/TerminalResizeEvent.java
index f5749d1..7f3af38 100644
--- a/src/main/java/cz/jzitnik/events/TerminalResizeEvent.java
+++ b/game/src/main/java/cz/jzitnik/client/events/TerminalResizeEvent.java
@@ -1,7 +1,7 @@
-package cz.jzitnik.events;
+package cz.jzitnik.client.events;
import com.googlecode.lanterna.TerminalSize;
-import cz.jzitnik.utils.events.Event;
+import cz.jzitnik.client.utils.events.Event;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/game/src/main/java/cz/jzitnik/client/events/TerminalTooSmallEvent.java b/game/src/main/java/cz/jzitnik/client/events/TerminalTooSmallEvent.java
new file mode 100644
index 0000000..a2795b5
--- /dev/null
+++ b/game/src/main/java/cz/jzitnik/client/events/TerminalTooSmallEvent.java
@@ -0,0 +1,6 @@
+package cz.jzitnik.client.events;
+
+import cz.jzitnik.client.utils.events.Event;
+
+public class TerminalTooSmallEvent implements Event {
+}
diff --git a/src/main/java/cz/jzitnik/events/handlers/CliHandler.java b/game/src/main/java/cz/jzitnik/client/events/handlers/CliHandler.java
similarity index 85%
rename from src/main/java/cz/jzitnik/events/handlers/CliHandler.java
rename to game/src/main/java/cz/jzitnik/client/events/handlers/CliHandler.java
index 3385631..989838a 100644
--- a/src/main/java/cz/jzitnik/events/handlers/CliHandler.java
+++ b/game/src/main/java/cz/jzitnik/client/events/handlers/CliHandler.java
@@ -1,19 +1,19 @@
-package cz.jzitnik.events.handlers;
+package cz.jzitnik.client.events.handlers;
import com.googlecode.lanterna.TextColor;
import com.googlecode.lanterna.graphics.TextGraphics;
-import cz.jzitnik.annotations.EventHandler;
-import cz.jzitnik.annotations.injectors.InjectState;
-import cz.jzitnik.events.RerenderScreen;
-import cz.jzitnik.game.Constants;
-import cz.jzitnik.states.RenderState;
-import cz.jzitnik.states.ScreenBuffer;
-import cz.jzitnik.states.TerminalState;
-import cz.jzitnik.ui.pixels.AlphaPixel;
-import cz.jzitnik.ui.pixels.ColoredPixel;
-import cz.jzitnik.ui.pixels.Empty;
-import cz.jzitnik.ui.pixels.Pixel;
-import cz.jzitnik.utils.events.AbstractEventHandler;
+import cz.jzitnik.client.annotations.EventHandler;
+import cz.jzitnik.client.annotations.injectors.InjectState;
+import cz.jzitnik.client.events.RerenderScreen;
+import cz.jzitnik.client.game.Constants;
+import cz.jzitnik.client.states.RenderState;
+import cz.jzitnik.client.states.ScreenBuffer;
+import cz.jzitnik.client.states.TerminalState;
+import cz.jzitnik.client.ui.pixels.AlphaPixel;
+import cz.jzitnik.client.ui.pixels.ColoredPixel;
+import cz.jzitnik.client.ui.pixels.Empty;
+import cz.jzitnik.client.ui.pixels.Pixel;
+import cz.jzitnik.client.utils.events.AbstractEventHandler;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
diff --git a/src/main/java/cz/jzitnik/events/handlers/DialogEventHandler.java b/game/src/main/java/cz/jzitnik/client/events/handlers/DialogEventHandler.java
similarity index 90%
rename from src/main/java/cz/jzitnik/events/handlers/DialogEventHandler.java
rename to game/src/main/java/cz/jzitnik/client/events/handlers/DialogEventHandler.java
index 6d30233..9ed1700 100644
--- a/src/main/java/cz/jzitnik/events/handlers/DialogEventHandler.java
+++ b/game/src/main/java/cz/jzitnik/client/events/handlers/DialogEventHandler.java
@@ -1,24 +1,24 @@
-package cz.jzitnik.events.handlers;
+package cz.jzitnik.client.events.handlers;
import com.googlecode.lanterna.TerminalPosition;
import com.googlecode.lanterna.TerminalSize;
import com.googlecode.lanterna.TextColor;
-import cz.jzitnik.annotations.EventHandler;
-import cz.jzitnik.annotations.injectors.InjectDependency;
-import cz.jzitnik.annotations.injectors.InjectState;
-import cz.jzitnik.events.RerenderScreen;
-import cz.jzitnik.game.dialog.Dialog;
-import cz.jzitnik.game.dialog.OnEnd;
-import cz.jzitnik.states.DialogState;
-import cz.jzitnik.states.ScreenBuffer;
-import cz.jzitnik.states.TerminalState;
-import cz.jzitnik.ui.pixels.AlphaPixel;
-import cz.jzitnik.ui.pixels.ColoredPixel;
-import cz.jzitnik.ui.pixels.Empty;
-import cz.jzitnik.utils.DependencyManager;
-import cz.jzitnik.utils.TextRenderer;
-import cz.jzitnik.utils.events.AbstractEventHandler;
-import cz.jzitnik.utils.events.EventManager;
+import cz.jzitnik.client.annotations.EventHandler;
+import cz.jzitnik.client.annotations.injectors.InjectDependency;
+import cz.jzitnik.client.annotations.injectors.InjectState;
+import cz.jzitnik.client.events.RerenderScreen;
+import cz.jzitnik.client.game.dialog.Dialog;
+import cz.jzitnik.client.game.dialog.OnEnd;
+import cz.jzitnik.client.states.DialogState;
+import cz.jzitnik.client.states.ScreenBuffer;
+import cz.jzitnik.client.states.TerminalState;
+import cz.jzitnik.client.ui.pixels.AlphaPixel;
+import cz.jzitnik.client.ui.pixels.ColoredPixel;
+import cz.jzitnik.client.ui.pixels.Empty;
+import cz.jzitnik.client.utils.DependencyManager;
+import cz.jzitnik.client.utils.TextRenderer;
+import cz.jzitnik.client.utils.events.AbstractEventHandler;
+import cz.jzitnik.client.utils.events.EventManager;
import lombok.extern.slf4j.Slf4j;
import java.awt.*;
@@ -105,7 +105,7 @@ public class DialogEventHandler extends AbstractEventHandler