From b1442f04bfa5b3bac31e8b35f5feeb8091463909 Mon Sep 17 00:00:00 2001
From: Samiker <168203446+Samiker69@users.noreply.github.com>
Date: Sun, 1 Feb 2026 22:34:49 +0300
Subject: [PATCH] =?UTF-8?q?Refactor=20(project):=20=D0=94=D0=BE=D0=B1?=
=?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=81=D0=B1=D0=BE=D1=80?=
=?UTF-8?q?=D0=BA=D0=B0=20=D0=B0=D0=BD=D0=B4=D1=80=D0=BE=D0=B8=D0=B4=D0=B0?=
=?UTF-8?q?=20-=20src/main=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?=
=?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D0=B0=205=20=D1=87=D0=B0=D1=81=D1=82?=
=?UTF-8?q?=D0=B5=D0=B9:=20=20=20-=20`src/main/.../client`=20->=20core=20?=
=?UTF-8?q?=20=20-=20`src/main/.../core`=20->=20shared=20=20=20-=20`src/ma?=
=?UTF-8?q?in/.../server`=20->=20server=20=20=20-=20=D0=BD=D0=BE=D0=B2?=
=?UTF-8?q?=D1=8B=D0=B5:=20=20=20=20=20-=20android=20-=20=D1=81=D0=BF?=
=?UTF-8?q?=D0=B5=D1=86=D0=B8=D1=84=D0=B8=D1=87=D0=BD=D0=BE=D0=B5=20=D0=B4?=
=?UTF-8?q?=D0=BB=D1=8F=20=D0=B4=D1=80=D0=BE=D0=B8=D0=B4=D0=B0=20=20=20=20?=
=?UTF-8?q?=20-=20lwjgl3=20-=20=D1=81=D0=BF=D0=B5=D1=86=D0=B8=D1=84=D0=B8?=
=?UTF-8?q?=D1=87=D0=BD=D0=BE=D0=B5=20=D0=B4=D0=BB=D1=8F=20=D0=B4=D0=B5?=
=?UTF-8?q?=D1=81=D0=BA=D1=82=D0=BE=D0=BF=D0=B0=20-=20=D0=94=D0=BE=D1=80?=
=?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BD=20=D0=B4=D0=B5=D1=82=D0=B5?=
=?UTF-8?q?=D0=BA=D1=82=20=D0=BC=D0=BE=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE?=
=?UTF-8?q?=D0=B9=20=D1=81=D1=80=D0=B5=D0=B4=D1=8B=20`Main.isMobile`=20-?=
=?UTF-8?q?=20=D1=8D=D1=82=D0=BE=20=D0=BF=D0=B8=D0=B7=D0=B4=D0=B5=D1=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/gradle.yml | 37 ++---
.idea/gradle.xml | 5 +
.idea/misc.xml | 2 +-
README.md | 7 +
android/build.gradle.kts | 105 +++++++++++++
android/src/main/AndroidManifest.xml | 21 +++
.../theendlessweave/AndroidLauncher.java | 44 ++++++
.../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 6938 bytes
android/src/main/res/values/strings.xml | 4 +
android/src/main/res/values/styles.xml | 8 +
.../assets => assets}/textures/tiles/door.png | Bin
.../textures/tiles/floor_1.png | Bin
.../assets => assets}/textures/tiles/wall.png | Bin
.../assets => assets}/ui/default.fnt | 0
.../assets => assets}/ui/default.png | Bin
.../assets => assets}/ui/uiskin.atlas | 0
.../assets => assets}/ui/uiskin.json | 0
.../assets => assets}/ui/uiskin.png | Bin
build.gradle.kts | 142 +++---------------
core/build.gradle.kts | 62 ++++++++
.../xyz/samiker/theendlessweave/Main.java | 14 +-
.../assetsManager}/AssetLoadCallback.java | 2 +-
.../assetsManager}/ManifestAssetManager.java | 2 +-
.../assetsManager}/ResourceManifest.java | 2 +-
.../assetsManager}/SoundManager.java | 2 +-
.../assetsManager}/TextureManager.java | 2 +-
.../theendlessweave}/custom/InputManager.java | 6 +-
.../theendlessweave}/network/GameClient.java | 14 +-
.../theendlessweave}/screens/AssetAware.java | 4 +-
.../screens/GameDataAware.java | 7 +
.../theendlessweave}/screens/GameScreen.java | 47 +++---
.../screens/GenerationScreen.java | 8 +-
.../screens/LoadingScreen.java | 4 +-
.../screens/MainMenuScreen.java | 4 +-
.../screens/SettingsScreen.java | 8 +-
.../systems/CameraSystem.java | 18 +--
.../systems/ClientNetworkEventSystem.java | 22 +--
.../systems/ClientNetworkReceiverSystem.java | 32 ++--
.../systems/ClientProjectileSystem.java | 18 +--
.../systems/DebugRenderSystem.java | 10 +-
.../systems/HudRenderSystem.java | 16 +-
.../theendlessweave}/systems/InputSystem.java | 19 ++-
.../systems/RenderSystem.java | 22 +--
.../systems/TileRenderSystem.java | 17 +--
.../systems/WorldUIRenderer.java | 12 +-
gradle.properties | 5 +
local.properties | 1 +
lwjgl3/build.gradle.kts | 36 +++++
.../theendlessweave}/ClientLauncher.java | 12 +-
.../xyz/samiker/theendlessweave/Launcher.java | 3 -
server/build.gradle.kts | 21 +++
.../theendlessweave}/ServerLauncher.java | 4 +-
.../samiker/theendlessweave}/ServerLoop.java | 10 +-
.../theendlessweave}/network/GameServer.java | 29 ++--
.../theendlessweave}/systems/AISystem.java | 30 ++--
.../systems/AttackSystem.java | 18 +--
.../systems/DamageSystem.java | 14 +-
.../systems/MovementSystem.java | 24 +--
.../systems/ProjectileSystem.java | 18 +--
.../systems/ServerDebugSystem.java | 10 +-
.../systems/ServerEntityEventSystem.java | 22 +--
.../systems/ServerInputSystem.java | 22 +--
.../systems/ServerSnapshotSenderSystem.java | 22 +--
.../systems/WeaponSystem.java | 10 +-
settings.gradle.kts | 1 +
shared/build.gradle.kts | 13 ++
.../samiker/theendlessweave}/GameData.java | 4 +-
.../entities/EntitiesFabric.java | 4 +-
.../theendlessweave}/entities/Entity.java | 4 +-
.../entities/ProjectilePool.java | 10 +-
.../entities/components/AIComponent.java | 4 +-
.../entities/components/AttackComponent.java | 2 +-
.../components/CameraTargetComponent.java | 2 +-
.../entities/components/Component.java | 4 +
.../entities/components/ComponentType.java | 2 +-
.../entities/components/HealthComponent.java | 2 +-
.../entities/components/LevelComponent.java | 2 +-
.../entities/components/NameComponent.java | 2 +-
.../components/PathfindingComponent.java | 6 +-
.../entities/components/PatternConfig.java | 2 +-
.../components/PlayerTagComponent.java | 4 +
.../components/PositionComponent.java | 2 +-
.../components/ProjectileComponent.java | 4 +-
.../entities/components/RenderComponent.java | 2 +-
.../components/RotationComponent.java | 2 +-
.../entities/components/ScaleComponent.java | 2 +-
.../entities/components/ScoreComponent.java | 2 +-
.../components/ShowNameTagComponent.java | 2 +-
.../components/VelocityComponent.java | 2 +-
.../entities/components/WeaponComponent.java | 2 +-
.../gamemap/EnemyFactory.java | 16 +-
.../gamemap/EnemySpawnData.java | 2 +-
.../theendlessweave}/gamemap/GameMap.java | 10 +-
.../gamemap/MapGenerator.java | 12 +-
.../gamemap/MapGeneratorSettings.java | 2 +-
.../theendlessweave}/gamemap/Room.java | 4 +-
.../gamemap/RoomObjectPlacer.java | 8 +-
.../gamemap/RoomShapeGenerator.java | 8 +-
.../theendlessweave}/gamemap/RoomType.java | 2 +-
.../samiker/theendlessweave}/logic/Game.java | 32 ++--
.../theendlessweave}/logic/GameState.java | 2 +-
.../samiker/theendlessweave}/logic/Loop.java | 6 +-
.../logic/PerformanceMonitor.java | 6 +-
.../logic/ai/EntityAIState.java | 2 +-
.../logic/ai/LineOfSightUtil.java | 10 +-
.../logic/ai/astar/AStarPathfinder.java | 8 +-
.../logic/ai/astar/PathNode.java | 6 +-
.../logic/utils/SpatialGrid.java | 10 +-
.../network/NetworkRegister.java | 16 +-
.../network/packets/Packet.java | 4 +
.../network/packets/PacketDestroyEntity.java | 2 +-
.../network/packets/PacketEntityUpdate.java | 2 +-
.../network/packets/PacketInput.java | 2 +-
.../network/packets/PacketLoginRequest.java | 4 +-
.../network/packets/PacketLoginResponse.java | 4 +-
.../network/packets/PacketSnapshot.java | 2 +-
.../network/packets/PacketSpawnEntity.java | 6 +-
.../network/utils/BitFlags.java | 2 +-
.../network/utils/PacketPool.java | 6 +-
.../settings/ClientSettings.java | 2 +-
.../settings/ServerSettings.java | 2 +-
.../settings/SettingsManager.java | 4 +-
.../theendlessweave/systems/ISystem.java | 8 +
.../samiker/theendlessweave}/tile/Tile.java | 2 +-
.../theendlessweave}/tile/TileObject.java | 2 +-
.../theendlessweave}/tile/TileType.java | 2 +-
.../theendlessweave}/tile/TileUtils.java | 4 +-
.../samiker/theendlessweave}/utils/Array.java | 2 +-
.../theendlessweave}/utils/Constants.java | 2 +-
.../theendlessweave}/utils/IntObjectMap.java | 2 +-
.../client/screens/GameDataAware.java | 7 -
.../core/entities/components/Component.java | 4 -
.../components/PlayerTagComponent.java | 4 -
.../core/network/packets/Packet.java | 4 -
.../theendlessweave/core/systems/ISystem.java | 8 -
135 files changed, 809 insertions(+), 594 deletions(-)
create mode 100644 android/build.gradle.kts
create mode 100644 android/src/main/AndroidManifest.xml
create mode 100644 android/src/main/java/xyz/samiker/theendlessweave/AndroidLauncher.java
create mode 100644 android/src/main/res/mipmap-mdpi/ic_launcher.png
create mode 100644 android/src/main/res/values/strings.xml
create mode 100644 android/src/main/res/values/styles.xml
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/textures/tiles/door.png (100%)
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/textures/tiles/floor_1.png (100%)
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/textures/tiles/wall.png (100%)
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/ui/default.fnt (100%)
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/ui/default.png (100%)
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/ui/uiskin.atlas (100%)
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/ui/uiskin.json (100%)
rename {src/main/resources/xyz/samiker/theendlessweave/assets => assets}/ui/uiskin.png (100%)
create mode 100644 core/build.gradle.kts
rename {src => core/src}/main/java/xyz/samiker/theendlessweave/Main.java (74%)
rename {src/main/java/xyz/samiker/theendlessweave/client/assets => core/src/main/java/xyz/samiker/theendlessweave/assetsManager}/AssetLoadCallback.java (88%)
rename {src/main/java/xyz/samiker/theendlessweave/client/assets => core/src/main/java/xyz/samiker/theendlessweave/assetsManager}/ManifestAssetManager.java (98%)
rename {src/main/java/xyz/samiker/theendlessweave/client/assets => core/src/main/java/xyz/samiker/theendlessweave/assetsManager}/ResourceManifest.java (98%)
rename {src/main/java/xyz/samiker/theendlessweave/client/assets => core/src/main/java/xyz/samiker/theendlessweave/assetsManager}/SoundManager.java (96%)
rename {src/main/java/xyz/samiker/theendlessweave/client/assets => core/src/main/java/xyz/samiker/theendlessweave/assetsManager}/TextureManager.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/custom/InputManager.java (98%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/network/GameClient.java (83%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/screens/AssetAware.java (64%)
create mode 100644 core/src/main/java/xyz/samiker/theendlessweave/screens/GameDataAware.java
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/screens/GameScreen.java (89%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/screens/GenerationScreen.java (98%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/screens/LoadingScreen.java (93%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/screens/MainMenuScreen.java (94%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/screens/SettingsScreen.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/CameraSystem.java (85%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/ClientNetworkEventSystem.java (82%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/ClientNetworkReceiverSystem.java (75%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/ClientProjectileSystem.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/DebugRenderSystem.java (71%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/HudRenderSystem.java (82%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/InputSystem.java (81%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/RenderSystem.java (79%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/TileRenderSystem.java (84%)
rename {src/main/java/xyz/samiker/theendlessweave/client => core/src/main/java/xyz/samiker/theendlessweave}/systems/WorldUIRenderer.java (90%)
create mode 100644 gradle.properties
create mode 100644 local.properties
create mode 100644 lwjgl3/build.gradle.kts
rename {src/main/java/xyz/samiker/theendlessweave/client => lwjgl3/src/main/java/xyz/samiker/theendlessweave}/ClientLauncher.java (85%)
rename {src => lwjgl3/src}/main/java/xyz/samiker/theendlessweave/Launcher.java (71%)
create mode 100644 server/build.gradle.kts
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/ServerLauncher.java (89%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/ServerLoop.java (88%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/network/GameServer.java (83%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/AISystem.java (88%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/AttackSystem.java (94%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/DamageSystem.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/MovementSystem.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/ProjectileSystem.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/ServerDebugSystem.java (66%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/ServerEntityEventSystem.java (75%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/ServerInputSystem.java (78%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/ServerSnapshotSenderSystem.java (77%)
rename {src/main/java/xyz/samiker/theendlessweave/server => server/src/main/java/xyz/samiker/theendlessweave}/systems/WeaponSystem.java (58%)
create mode 100644 shared/build.gradle.kts
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/GameData.java (93%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/EntitiesFabric.java (95%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/Entity.java (93%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/ProjectilePool.java (68%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/AIComponent.java (94%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/AttackComponent.java (96%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/CameraTargetComponent.java (50%)
create mode 100644 shared/src/main/java/xyz/samiker/theendlessweave/entities/components/Component.java
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/ComponentType.java (84%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/HealthComponent.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/LevelComponent.java (95%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/NameComponent.java (71%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/PathfindingComponent.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/PatternConfig.java (98%)
create mode 100644 shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PlayerTagComponent.java
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/PositionComponent.java (81%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/ProjectileComponent.java (95%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/RenderComponent.java (86%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/RotationComponent.java (72%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/ScaleComponent.java (79%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/ScoreComponent.java (81%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/ShowNameTagComponent.java (72%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/VelocityComponent.java (88%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/entities/components/WeaponComponent.java (85%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/EnemyFactory.java (83%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/EnemySpawnData.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/GameMap.java (90%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/MapGenerator.java (98%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/MapGeneratorSettings.java (99%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/Room.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/RoomObjectPlacer.java (95%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/RoomShapeGenerator.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/gamemap/RoomType.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/Game.java (87%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/GameState.java (57%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/Loop.java (91%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/PerformanceMonitor.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/ai/EntityAIState.java (62%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/ai/LineOfSightUtil.java (91%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/ai/astar/AStarPathfinder.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/ai/astar/PathNode.java (88%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/logic/utils/SpatialGrid.java (88%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/NetworkRegister.java (67%)
create mode 100644 shared/src/main/java/xyz/samiker/theendlessweave/network/packets/Packet.java
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/packets/PacketDestroyEntity.java (55%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/packets/PacketEntityUpdate.java (96%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/packets/PacketInput.java (71%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/packets/PacketLoginRequest.java (89%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/packets/PacketLoginResponse.java (62%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/packets/PacketSnapshot.java (57%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/packets/PacketSpawnEntity.java (92%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/utils/BitFlags.java (81%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/network/utils/PacketPool.java (84%)
rename {src/main/java/xyz/samiker/theendlessweave/client => shared/src/main/java/xyz/samiker/theendlessweave}/settings/ClientSettings.java (94%)
rename {src/main/java/xyz/samiker/theendlessweave/server => shared/src/main/java/xyz/samiker/theendlessweave}/settings/ServerSettings.java (87%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/settings/SettingsManager.java (97%)
create mode 100644 shared/src/main/java/xyz/samiker/theendlessweave/systems/ISystem.java
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/tile/Tile.java (96%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/tile/TileObject.java (97%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/tile/TileType.java (58%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/tile/TileUtils.java (70%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/utils/Array.java (98%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/utils/Constants.java (92%)
rename {src/main/java/xyz/samiker/theendlessweave/core => shared/src/main/java/xyz/samiker/theendlessweave}/utils/IntObjectMap.java (97%)
delete mode 100644 src/main/java/xyz/samiker/theendlessweave/client/screens/GameDataAware.java
delete mode 100644 src/main/java/xyz/samiker/theendlessweave/core/entities/components/Component.java
delete mode 100644 src/main/java/xyz/samiker/theendlessweave/core/entities/components/PlayerTagComponent.java
delete mode 100644 src/main/java/xyz/samiker/theendlessweave/core/network/packets/Packet.java
delete mode 100644 src/main/java/xyz/samiker/theendlessweave/core/systems/ISystem.java
diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
index cd7f874..8ac1d14 100644
--- a/.github/workflows/gradle.yml
+++ b/.github/workflows/gradle.yml
@@ -1,4 +1,4 @@
-name: Build Multi-Platform
+name: Build and upload project
on:
push:
@@ -9,35 +9,30 @@ on:
jobs:
build:
runs-on: ubuntu-latest
- name: Build Universal Jar
-
+ name: Build All
steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up JDK 21
- uses: actions/setup-java@v4
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
+ - uses: gradle/actions/setup-gradle@v4
- - name: Grant execute permission for gradlew
- run: chmod +x gradlew
-
- - name: Setup Gradle
- uses: gradle/actions/setup-gradle@v4
-
- - name: Build Client (ShadowJar) & Server
- run: ./gradlew shadowJar buildServer
+ - name: Build Desktop & Server
+ run: ./gradlew :lwjgl3:shadowJar :server:buildServer
- name: Upload Client Shadow Jar
uses: actions/upload-artifact@v4
with:
- name: TheEndlessWeave-Client-Universal
- path: build/libs/*-client.jar
-
+ name: TheEndlessWeave-Desktop
+ path: lwjgl3/build/libs/*-client.jar
- name: Upload Server Jar
uses: actions/upload-artifact@v4
with:
- name: TheEndlessWeave-Server-x64
- path: build/libs/*-server.jar
\ No newline at end of file
+ name: TheEndlessWeave-Server
+ path: lwjgl3/build/libs/*-server.jar
+ - name: Upload Android APK
+ uses: actions/upload-artifact@v4
+ with:
+ name: TheEndlessWeave-Android
+ path: android/build/outputs/apk/debug/*.apk
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index ce1c62c..df4118f 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -8,6 +8,11 @@
diff --git a/.idea/misc.xml b/.idea/misc.xml
index f0c744c..43b1638 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
-
+
\ No newline at end of file
diff --git a/README.md b/README.md
index fac1f6f..3e6bf5d 100644
--- a/README.md
+++ b/README.md
@@ -50,10 +50,17 @@ java -jar filename-client.jar --server
- [X] создать ветку и настроить `build.gradle.kts`.
- Баги/проблемы (исправить)
- ? Из-за написанного кода под javafx, на клиенте могут возникать проблемы с логикой из-за другой системы координат в libgdx, например, при просчёте логики полёта пуль, необходимо домножать скорость на размер тайлов.
+ - [ ] коллизия/рендер пулек поломались и они могут заходить сквозь стены.
+ - ? вероятно при нестандарных размерах экрана рендер ломается.
- [X] сервер не удаляет игрока, если он отключился.
- [ ] клиент рендерит других игроков как врагов.
- [X] ui не масштабируется как надо при изменении размера окна.
- [ ] при очень высоких значениях fps плавное движение камеры менее заметно.
+ - [ ] при fullscreen размер окна равен разрешению в настройках
+ - [ ] если на мобильном устройстве поменять разрешение в настройках то игра крашнет
+ - solution: скрыть для мобильных устройств настройки разрешения.
+ - сделать в Main метод isMobile для проверки среды без и с учётом выбранного управления
+
- [ ] Сделать возможность подключения к внешним серверам. Обезопасить интегрированный сервер от не локальных подключений.
- ! Вернуться к фазовым планам.
---
diff --git a/android/build.gradle.kts b/android/build.gradle.kts
new file mode 100644
index 0000000..03d11f0
--- /dev/null
+++ b/android/build.gradle.kts
@@ -0,0 +1,105 @@
+plugins {
+ id("com.android.application")
+ kotlin("android")
+}
+evaluationDependsOn(":core")
+
+val gdxVersion: String by project
+
+val natives = configurations.create("natives")
+
+android {
+ namespace = "xyz.samiker.theendlessweave"
+ compileSdk = 35
+
+ defaultConfig {
+ applicationId = "xyz.samiker.theendlessweave"
+ minSdk = 28
+ targetSdk = 35
+ versionCode = 1
+ versionName = "0.4.0"
+ }
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ isCoreLibraryDesugaringEnabled = true
+ }
+
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+
+ sourceSets {
+ getByName("main") {
+ assets.srcDirs("../assets")
+ jniLibs.srcDirs("libs")
+
+ val coreProjectDir = project(":core").projectDir
+ assets.srcDir("$coreProjectDir/build/generated/resources")
+ }
+ }
+
+ applicationVariants.all {
+ val variant = this
+ variant.outputs.all {
+ val output = this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
+ val name = "TheEndlessWeave.apk"
+ output.outputFileName = name
+ }
+ }
+}
+
+dependencies {
+ implementation(project(":core"))
+ implementation("com.badlogicgames.gdx:gdx-backend-android:$gdxVersion")
+
+ add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a")
+ add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a")
+ add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86")
+ add("natives", "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64")
+
+ coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
+}
+
+tasks.register("copyAndroidNatives") {
+ doFirst {
+ file("libs/armeabi-v7a/").mkdirs()
+ file("libs/arm64-v8a/").mkdirs()
+ file("libs/x86_64/").mkdirs()
+ file("libs/x86/").mkdirs()
+
+ natives.files.forEach { jar ->
+ var outputDir: File? = null
+ if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a/")
+ if (jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a/")
+ if (jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64/")
+ if (jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86/")
+
+ if (outputDir != null) {
+ copy {
+ from(zipTree(jar))
+ into(outputDir)
+ include("*.so")
+ }
+ }
+ }
+ }
+}
+
+tasks.matching { it.name.contains("merge") && it.name.contains("JniLibFolders") }.configureEach {
+ dependsOn("copyAndroidNatives")
+}
+
+val generateManifestTask = project(":core").tasks.named("generateResourceManifest")
+
+tasks.withType().configureEach {
+ dependsOn(generateManifestTask)
+}
+
+afterEvaluate {
+ val genTask = project(":core").tasks.named("generateResourceManifest")
+ tasks.withType().configureEach {
+ dependsOn(genTask)
+ }
+}
\ No newline at end of file
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..9d21d1e
--- /dev/null
+++ b/android/src/main/AndroidManifest.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/src/main/java/xyz/samiker/theendlessweave/AndroidLauncher.java b/android/src/main/java/xyz/samiker/theendlessweave/AndroidLauncher.java
new file mode 100644
index 0000000..4cec128
--- /dev/null
+++ b/android/src/main/java/xyz/samiker/theendlessweave/AndroidLauncher.java
@@ -0,0 +1,44 @@
+package xyz.samiker.theendlessweave;
+
+import android.os.Bundle;
+import com.badlogic.gdx.backends.android.AndroidApplication;
+import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
+import xyz.samiker.theendlessweave.Main;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.FileOutputStream;
+import java.util.Date;
+
+public class AndroidLauncher extends AndroidApplication {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
+
+ config.useAccelerometer = false;
+ config.useCompass = false;
+ config.useImmersiveMode = true;
+
+ initialize(new Main(), config);
+
+ Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+ @Override
+ public void uncaughtException(Thread thread, Throwable throwable) {
+ logError(throwable);
+ System.exit(1);
+ }
+ });
+ }
+ private void logError(Throwable t) {
+ File logFile = new File(getExternalFilesDir(null), "crash_log.txt");
+ try (PrintWriter pw = new PrintWriter(new FileOutputStream(logFile, true))) {
+ pw.println("\n--- CRASH ---");
+ pw.println("Date: " + new Date());
+ t.printStackTrace(pw);
+ pw.flush();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/android/src/main/res/mipmap-mdpi/ic_launcher.png b/android/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c75ef0fdf8f80adf44d64a9a19dc8758835c53b
GIT binary patch
literal 6938
zcmV+#8|CDQP)004&$004{-009bl004Z&003_)009S%002Da000@!k>5z(000b3
zX+uL$Nkc;*P;zf(X>4Tx09eDVS7%sL$r_$hQXvEgL_kXDO%Rb1KuQQLfb=4WN=O2P
z5@SM8v7?I$u3bd1qN^Z^9T2f$R~E(I7Yi!Nx~Pj?xf23dcJGh-Ja?XF&b;THZ{GR7
z@60)K1^{|HUnd~%*tiC03bBZCe?T&2Vr
zD%_;RX)1iF&n7O03-MzB$m)E)ECT?IZpgFp1sPC>4x+?aW
z|5cG4&r#`P+Lg4Z;Bz1OOILz?udof-E3z?W*sBcdDKszy~sr0Yt!|pBWgD
z*w-V0*H};h{)9*bb>x&Nv(Q7>MJWJ>dzVjqs3gjnGcGH9=e``^n4EpdIQ5_2(z;`~2WmP}3Fn$GxFC
zRK}UO0dT-w;5;1M7tZVoS#H1I%B-+{(*7ZW@19V<9mR=)Qif3cC^kQj)UeZV9aK@~
z`uqH-d`%n7H+Qh-=lQwcWnT!}u%9il1=v3940aqlhc#jKfQ22!8n71Zuo4fhxW|1f
zZeX^UK7X>Ij`$z*4Ln(8Cgn~wPMuDlRegD)DS675kvma3RVL2J%wuujjv-?4Bm&1_
zEN3TYR{)gzkLvUGCc1B5L6|MyxVe7-;C-~WxA)LDF7zk>d)(nC;ovvUh7GqCH2}^Y
z6ewi*Dh^j(2=L26hi{)g+~3TB4UESbxB)NV2LeGThy-yU35*bJ(`POul$gC=ksoCX)bC2$Sgfvcwjya3(cE%<~W2nnGf3`8F>K`aq_
z#2H~DK1d)Ej>I5INGg(nNDu`w9hr-iAj^?*WD`=2>_HA9$B}bL8*&SIfOI0Sk&h^b
zs-rrn5o(1FN7*O`4MXG5acBlQ2`xb9p^MQnv=ZHc)}hDI3+Oep9esiJU;tCYn3yT%
zfUz+y7KtTe>6i?gi4|j|SS41AHNxk71#8E;un#y9XW%T{0j}T>JRTR|lkl1NBD@^0
z!t3yp_!ayC-i?1H&L|Q}IK{`shOzI%LC##W7$j;;-
zaxz&$E+m(dx08>MFO#2=KT$L(mK0A)Bt=M>N?AhLLTRL2q;ya|QMIVnRBvh=HH$ij
zT1Ks%~mT@+pTt1?Sa|{b!~M!b*_4fxbKP2
z&}cL(njbBhmPcDmtEQcx-KV|RU}!jM@HB)PvotC+>NGBEyrfg;mUIq%JiUNkO5aDn
zNbl05Xj*APKnM=omQQ0U2R<#-2~k!x)r*Ib=#R3(~8Ms
z<}jBq_cE_DKMpY(!WkkOvT#W4kjq2f=?&HM(-Y|x>+RCJruR{wr5~uDt-nmaUjLo}
zZeV8+Z7|tjy}>DiuAw?Zy@m>g77yJ!^tK^tXlEE>IL&agVT)mpk+D&*k<@67(Fvn2
zW2Uj6ahCB)<0HnMCJYlF6S2uklcOfjS-LC^D~DCaI?3ubH8c$|RhVuvZ8iO5W^ER4
zR%o`%?4CK*oNb#{WQW?h+GW~R*j=(<~?pWwp@Az`K#qi|e%Z8sB{?*CVDaUDx)1498BSJ?M
zj%Xb5+S$%o;9TK+btG+M(8yUM8%Dlzv3C)!?XlhoXtmQPCCAPhv*I
zOpiGe%ZQy2yFK=8oPXSsxI6JS@rwB71bRYBLUqEs#DK)*iS1*CkC`#%LXts}IH@6-
zl$?;fHMwVO;Mi4TJ5pRzic+qRvmQ5P+_~`v<8#Izo0+RHBUF4K4=v278@b9^aa~tOw&6_>%(J#Tj)D&qH
z$%<~w_nN<90lq-IpmpKMg=-dmEfyA^FL5duyC2M8z%D-1lSaq({rF6q;>T1R6_OkG@hBX#zmah3+
zo>_ja!oOnITEn#q*S=dPTz7fB-}>4OMjJ{teB3DBcym+mrn*Y2%F@lm&H0<3Y)RO1
z<~R0l)msg=mTdj9O|q@MDyHgWwR?5-cEjyUYS0=*P3Ml39hY_n>};rYsNJ-SxvOM1
z*sa+8d{640>wClYHt%EatKDz8f9(Orf#N!(Zfae3eP(@oLsCQA!O(-vjb4oh4mlp$
z)@0gLaai~8k|We3^N#c$EjZe9OnR*Ac*gNZ%@dmMoEUTB>dEMnt*63Hojo0N`otN|
znWJaD&o-U&Ja_Os`+WTcw+nSGt}O?Ccm4f9t6OW`MfZyhmpm>twvB2#a@qIt@hbsW
zPG99+y>Kn!THE#b>o;$t+-Scky!q@_&aGFs^KXB;Gy5*#Zt*?Md!_dc?^pg|`^TJsb$MVOYJLWy1Jt=)^^0fMy^RuSTpw3Ir$3E|PA${?wtLRUy
zKi9srdAa{DzrR|#$8>kRlD+DEz37epn{9u){N3CW)pP%C?%PlAir?$Mulm6LaOPv;
z$ETkreR8qJu&*Gh
zGi@IN{|&3okbT7sfLi!ZAKeB2Zf*dudkX+oP@kRxKokvtI1hl1964AA&T@U{PGup&
zv%yB*m$clpe>?N3&ZOV@{c{VHsxIKi)&=|rxMPDb!Wuu)00009a7bBm000ic000ic
z0Tn1pfB*mvI7vi7RA@u(nQ3s7XO@MhYW{Y0^~`ils-`>BS%8KRFkv&cA;ty*fey{E
zCP18qge@!yX2%Ba`zqU#CE1c?SzaVtvgLil3kE~L7zkT{5D38`VKM0t2&$&-^&<%k}5Gce&YrlbbjD`R2jn?_T&D!YcxgA3w&FlZ`1mi!b{A
zI*Hr&?s1{JgVW|L&SZpfA#nqrWvr)98_LI~U7TsLasAd;?sxxucwGZ_b0PZFRLmMR
zSHG8uM{*rDS#ZvrORet&8Yc(hobwuWf1FL{wCVJ`_9~a(nnT}~g`7xU%ee#1-+l0B
z!fOIuEzM-d#!_BjBrh$M%a<;~093Erh|bralF)S&r^jMeCu1$rP*#|YIU|mOxZN0+
zhR`%BkmJFx(DBM-I@D@~_|JjY1kRs6P14St*o+1$Oayc>nNbM
zOpnu|p+u8}Eiav#5-oM*1{`(+#;{E|{HD+`I+*goqu7(Jc7OAe!D|9{Zr?@~6C=f(
zNS&<=huKX0)~#ej@5GoEMe2@Fxi%6nnFwFInw_gx5V3XzDcj%2QIJKA5HzJmVGo!}
z$JiiB#!ljk%a`5X?mfIF;6hQZhMjBHC>^P#s!E91$c~F8{M|K@oiJjzY$YXp7g=#}
zLM)p2?K_AH-9*Z^_o)_H)!2;`#O$PU++=EhKbEf4O!qf?k0&C~R#(TCx8G*%>#r+P
z>TIYdU+O`Vn1nhZL5e(u61|Q>=~&w2WF=!c@d=WtEhKJUPlX{9r;spic@O7Ee;m{2
zaOch)_qTh8Cn9j>!{bDUhO%bSBIU8Xz<@3#nW~~9Dy2(x*4J^MwMnjKx*8j(7pdiE
zWGESl-?p91-CLZ4LXH8fkG<(B0C+!96VsiOlF2;x@fUxfHj(OowUid@7$GMSE1d
z``f+46A?Ii_z+29F0F52^}2BjdgOg*Otz16-0r#$a#MM(he0<~}wWTHOYpCT&
zSBGTBBxI9`+q?x`;%+HukZvWUD6+YD>>%fR_H(kklVe?NBBxpoij-U#XsfQG!DdC5nnsp%t@_FW3ZxDyeF7*R
zGl{;lXWbDzht~w|-@i}kt8++wD}=Pz7+I8)>f&M=D{Qnnt7xfo&>@TNkV01^RB5NZ
zrrKQ(^|Z_T+iGe^3*Uy*s#gd&Mh0LRI+hd8T6YxB;WdHFM~|Zq2tpORgIsB&2lwou
zuB?>34RuNZyCl=y+{8X9-UBkVn<~m_t*TTAxN4z63c9yzFU7fPjH+0QRq+)11!EmD
zhW5B5cNEXzHGvZ?ZJ5`uL!S{XUB|5Ka=o>b{j%7Kyj&Vxf4c}M1#A~W#nN#~_@Hf%
zLZZecHF@t|X}zk5?NnEaC6PL?4IYDI>2kdFt6mX!C~mYeBAViy1j-FLvdfK%glbBP
zm057Ov69YOC;R1jR~Bk4Mbs8su<5l@Cyhd^Q6c1#k}C_^gjh=R(*h^&G|%7_fxgopp;@qylDsr(iitw^X`cK?Dn%yy?kA=WLsY&Yc5BDGOd
zXjF=~O=_gE+^Wd!$lgwj>8V)6FO})jF!={lFx;05y+_^AJcCyRj!2OeN%3XLj@4VO
zqW@N!?B&$S->17WQa91u(#TQDI<+mn;E-NM?qGW6t6~+&|x7^ZqSmkdoxy37W!#3DR^ci9~2b1
zBYFmp30ypUgtS2;F(vJ$s@TY(j&?;B);v8M7tUq&3xkMXwuBE`YuMv-(p6v2vG!)F
zWZ|a7SSr#JNEB1&vK;$d1myFzrDhDNkrW#<$$MuxhTjgSEh*g{(KC2VpfgoPrtd^b
zO)ByDxgvp1=|Y9XZ`w$USwrFG5F+PIp)pS-^`H}p+30O=VZWn@S;Gdg)Ype4eq)JR
z`!3zmjlLsLBpZ-MVQw<|t?#4%-3XkUceo>Z29F3l8W_O3;7xL;&Y(ngD?c?!(Qvsj
zA6;}fdyCYxWp1N2eG4Cm->)mk72lIdgXq2QXctA>-=QIH9r+tWuxc`uHhZYOP1X&d#w{s>0EsPU_$(uWmB58ZB_IE_uphE^%m)*iwy{+`s
zYq-%_$i)r^k8gcSMZQ+C3>P}8_^d(4_5EcylQvUtDPXVE&%w4S5
z{)MsF7KQLoHq29aM4-RFpRF%VByPq`ag$ro#6@v*Ul$G15{pIK53ii&oIRK0rZ^s6
zI?lkYOPrUY-nnKqJ+(Hj?J@CLT^1MX4YWI~%FJ*LHP>t~q{=kbrecl>LpOXp@qshA
zedil@lC)5C4@x}AF`ySQ9az`b*a=#w789v5-Ss`bqM_vg??ZIiQa0*7S~Ig3nubM7!)JI}x;y$oFXkbx^gtw
zQ`huk;OrqWQ78EP&>s1WS=?!hQbT1rEul*mke?hu?3xuU{OvH7zv#=&YuDUSe;OVW
zIMs8A<)g=wyK4(skzq<7Z?ad=Sg7Uk)iZGYV+KBx3|u?My^oJ_t+k4~AIZW$KO^L1
zx=LocZ3S|i%u@znk8FS`GmWqnA>>4FN3}hadB1*^O|Q)6;iHG{s6P#l34D9^HYU+&
z#@lbAjg`(Lmig%ZE^_3Un7w;DpP$?>TKfXNzQWfZv~uTQ6JONZc;H%m-x(fDX3n%%
z(^lnBe3EMevZHp9x^)A3Iou?!UB#?l{)YVxjqZq^!Lu5;e^2~<4Q*M;e3+j_g^d4p
zXN44EE2ScXh)tVVI?j)>q*$(BkOkkmC>c2iU&;aH_7!;WB@Eo;(qYM3dAZ_~_KUSn
zlHQ*au@y^pBI~D5r&wlsCbZEqnd8EUS-Tw7
zj-Bpk-oYaR---{isZuy!q~oI^J-ylt(pRmbP%pm01ku3lH7+(9&=b7^K
zGrasS|Hg!0{VQ{R`D=oI@hklQ`4>bkUPiCTuCA<1&d^m@C6iI>-l0^h=I-6Q?r7e@
zLkZo-p-SewMbC}8a%$st5&8UZ(%x9ghPRjT2Y-K-4)P&n$Y|d9-5}hCp8=1HxVNQ|a~3TpO7k$iyAu6K
ze+ozV5fT*4j44xCJaiPxBm)bdAHuxfJWb%Jmk1d40yBL^uw>{;L*H3#D|2Ds=(uOQ2|&dOi}JKt45Azh0KT8F#%XcPb6vW2GlX}#I4)F#{Zg2
z$lwvoe|9)?pBXCsK8D=1G%6x?aI@A*k6wi~Y!hGI>UT%^OB@ovl^GeqiJl(!GyfAF
z6Zlr_gyj$ODH<7oO^luEvinWNH11^_4GwJQ=$toZ-8R}m%zmOnRw
z6@I~}Qj!Q4N2^^hpJQe%R~=?rOH4eHv-bD#NOpXmOl#LKLAgnZ^!>=)YmW)sA9##q
z?qW)Pz9UefWMC?#zCo0Z4aPWm0vQwi$PSA@9T`J|cKwXiTvdr)4n7XC9d!zQ1!BWb6{FTMq
z<*F0{)qc~c7$1yto*(%$r(?*FV`H`&ZE^<2g|j%aDu{C5VASIR$r<6RNKY-K)V_g)
zKl=h2k)`W52iL+~3vH@&V9U>=R*YV$Ua$Nj^keXtfGf#{c}pmf?o%ZTcgn)6<+09x
z8pg2`shcF%@aFr8XHKdkTnXKjFG;mUmQ=-tOXnt
zU(_kqdQY_zr^P~Jg|up!6$PqHK0b5$y9N9JJSN~m(W(t(Kj(v4cC<)z?;>IyKbbPQ
z>P82WyCIYktsaXIFy*K*&YDZ5EY_7VovX;@GsWYAlt;6C#xnY4a>f6dS4)osRtUH2SY!cSry0@QT2VFTX_n+I(_foFKaxgnG;*qDG9TBVan^6Q_}v
zkVHw228${ilUhT;>;+N-0YWyAyfG6gk=_43fkNqK+E?e$Ddw)bxmmfJ;Udvwx65(W
g!0|)kW`7j$-zXsfGDlA|-v9sr07*qoM6N<$f=&Bz5C8xG
literal 0
HcmV?d00001
diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
new file mode 100644
index 0000000..39aeb38
--- /dev/null
+++ b/android/src/main/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ The Endless Weave
+
\ No newline at end of file
diff --git a/android/src/main/res/values/styles.xml b/android/src/main/res/values/styles.xml
new file mode 100644
index 0000000..43ddf59
--- /dev/null
+++ b/android/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/textures/tiles/door.png b/assets/textures/tiles/door.png
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/textures/tiles/door.png
rename to assets/textures/tiles/door.png
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/textures/tiles/floor_1.png b/assets/textures/tiles/floor_1.png
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/textures/tiles/floor_1.png
rename to assets/textures/tiles/floor_1.png
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/textures/tiles/wall.png b/assets/textures/tiles/wall.png
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/textures/tiles/wall.png
rename to assets/textures/tiles/wall.png
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/ui/default.fnt b/assets/ui/default.fnt
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/ui/default.fnt
rename to assets/ui/default.fnt
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/ui/default.png b/assets/ui/default.png
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/ui/default.png
rename to assets/ui/default.png
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/ui/uiskin.atlas b/assets/ui/uiskin.atlas
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/ui/uiskin.atlas
rename to assets/ui/uiskin.atlas
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/ui/uiskin.json b/assets/ui/uiskin.json
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/ui/uiskin.json
rename to assets/ui/uiskin.json
diff --git a/src/main/resources/xyz/samiker/theendlessweave/assets/ui/uiskin.png b/assets/ui/uiskin.png
similarity index 100%
rename from src/main/resources/xyz/samiker/theendlessweave/assets/ui/uiskin.png
rename to assets/ui/uiskin.png
diff --git a/build.gradle.kts b/build.gradle.kts
index 369598d..f570c95 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,133 +1,25 @@
-import java.util.Date
-
-plugins {
- java
- application
- id("com.github.johnrengelman.shadow") version "8.1.1"
-}
-
-group = "xyz.samiker"
-version = "0.4.0"
-
-val gdxVersion = "1.14.0"
-
-repositories {
- mavenCentral()
- maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots/") }
- maven { url = uri("https://oss.sonatype.org/content/repositories/releases/") }
-}
-
-java {
- toolchain {
- languageVersion = JavaLanguageVersion.of(21)
- vendor.set(JvmVendorSpec.ADOPTIUM)
- }
-}
-
-application {
- mainClass.set("xyz.samiker.theendlessweave.Launcher")
-}
-
-dependencies {
- implementation("com.badlogicgames.gdx:gdx:$gdxVersion")
- implementation("com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion")
- implementation("com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop")
- implementation("com.esotericsoftware:kryonet:2.22.0-RC1")
-}
-
-tasks.withType {
- options.encoding = "UTF-8"
-}
-
-tasks.named("run") {
- if (org.gradle.internal.os.OperatingSystem.current().isMacOsX) {
- jvmArgs("-XstartOnFirstThread")
- }
-}
-
-tasks.register("buildServer") {
- group = "build"
- description = "Билдит сервер без графического бэкенда и нативов"
-
- archiveClassifier.set("server")
-
- manifest {
- attributes["Main-Class"] = "xyz.samiker.theendlessweave.server.ServerLauncher"
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
}
-
- from(sourceSets.main.get().output) {
- exclude("xyz/samiker/theendlessweave/client/**")
-
- exclude("assets/**")
- }
-
- val serverClasspath = configurations.runtimeClasspath.get().filter { file ->
- val name = file.name.lowercase()
- !name.contains("gdx-backend-lwjgl3") &&
- !name.contains("natives")
- }
-
- from(serverClasspath.map { if (it.isDirectory) it else zipTree(it) }) {
- exclude("META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA")
- exclude("META-INF/MANIFEST.MF")
- exclude("module-info.class")
+ dependencies {
+ classpath("com.android.tools.build:gradle:8.2.1")
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22")
}
-
- duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
-tasks.named("shadowJar") {
- archiveClassifier.set("client")
- configurations = listOf(project.configurations.runtimeClasspath.get())
+allprojects {
+ apply(plugin = "eclipse")
- mergeServiceFiles()
+ version = "0.4.0"
+ group = "xyz.samiker"
- manifest {
- attributes["Main-Class"] = "xyz.samiker.theendlessweave.Launcher"
+ repositories {
+ google()
+ mavenCentral()
+ maven("https://oss.sonatype.org/content/repositories/snapshots/")
+ maven("https://oss.sonatype.org/content/repositories/releases/")
+ maven("https://jitpack.io")
}
-}
-
-tasks.register("generateResourceManifest") {
- description = "Generates a manifest of all resource files."
- group = "build"
-
- val resourceDir = project.layout.projectDirectory.dir("src/main/resources")
- inputs.dir(resourceDir)
-
- val outputDir = layout.buildDirectory.dir("resources/generateResourceManifest")
- val manifestFile = outputDir.get().file("resources-manifest.txt")
- outputs.file(manifestFile)
-
- doLast {
- println("Generating resource manifest to: ${manifestFile.asFile.path}")
- val manifestContent = StringBuilder()
- manifestContent.append("# Resource Manifest\n")
- manifestContent.append("# Generated on: ${Date()}\n\n")
-
- resourceDir.asFile.walk().forEach { file ->
- if (file.isFile) {
- val relativePath = file.relativeTo(resourceDir.asFile).path
- manifestContent.append("resource.name=${file.name}\n")
- manifestContent.append("resource.path=${relativePath.replace(File.separatorChar, '/')}\n\n")
- }
- }
- outputDir.get().asFile.mkdirs()
- manifestFile.asFile.writeText(manifestContent.toString())
- }
-}
-
-sourceSets {
- main {
- resources {
- srcDir(layout.buildDirectory.dir("resources/generateResourceManifest"))
- }
- }
-}
-
-tasks.named("processResources") {
- dependsOn(tasks.named("generateResourceManifest"))
-}
-
-tasks.withType {
- useJUnitPlatform()
}
\ No newline at end of file
diff --git a/core/build.gradle.kts b/core/build.gradle.kts
new file mode 100644
index 0000000..b96542e
--- /dev/null
+++ b/core/build.gradle.kts
@@ -0,0 +1,62 @@
+import java.util.Date
+
+plugins {
+ java
+ id("java-library")
+}
+
+val gdxVersion: String by project
+
+dependencies {
+ api(project(":shared"))
+ api(project(":server"))
+ api("com.badlogicgames.gdx:gdx:$gdxVersion")
+}
+
+tasks.register("generateResourceManifest") {
+ description = "Generates a manifest of all resource files."
+ group = "build"
+
+ val resourceDir = project.layout.projectDirectory.dir("../assets")
+ inputs.dir(resourceDir)
+
+ val outputDir = layout.buildDirectory.dir("generated/resources")
+ val manifestFile = outputDir.get().file("resources-manifest.txt")
+ outputs.file(manifestFile)
+
+ doLast {
+ if (!resourceDir.asFile.exists()) {
+ println("Warning: assets directory not found at ${resourceDir.asFile.path}")
+ return@doLast
+ }
+
+ val manifestContent = StringBuilder()
+ manifestContent.append("# Resource Manifest\n")
+ manifestContent.append("# Generated on: ${Date()}\n\n")
+
+ resourceDir.asFile.walk().forEach { file ->
+ if (file.isFile) {
+ val relativePath = file.relativeTo(resourceDir.asFile).path
+ manifestContent.append("resource.name=${file.name}\n")
+ manifestContent.append("resource.path=${relativePath.replace(File.separatorChar, '/')}\n\n")
+ }
+ }
+ outputDir.get().asFile.mkdirs()
+ manifestFile.asFile.writeText(manifestContent.toString())
+ println("Manifest generated: ${manifestFile.asFile.path}")
+ }
+}
+
+sourceSets {
+ main {
+ resources {
+ srcDir(layout.buildDirectory.dir("generated/resources"))
+ }
+ }
+}
+
+tasks.named("processResources") {
+ dependsOn("generateResourceManifest")
+}
+
+java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
\ No newline at end of file
diff --git a/src/main/java/xyz/samiker/theendlessweave/Main.java b/core/src/main/java/xyz/samiker/theendlessweave/Main.java
similarity index 74%
rename from src/main/java/xyz/samiker/theendlessweave/Main.java
rename to core/src/main/java/xyz/samiker/theendlessweave/Main.java
index ef1f9e0..675f69b 100644
--- a/src/main/java/xyz/samiker/theendlessweave/Main.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/Main.java
@@ -1,25 +1,29 @@
package xyz.samiker.theendlessweave;
+import com.badlogic.gdx.Application;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import xyz.samiker.theendlessweave.client.assets.ManifestAssetManager;
-import xyz.samiker.theendlessweave.client.assets.ResourceManifest;
-import xyz.samiker.theendlessweave.client.screens.LoadingScreen;
-import xyz.samiker.theendlessweave.client.settings.ClientSettings;
-import xyz.samiker.theendlessweave.core.settings.SettingsManager;
+import xyz.samiker.theendlessweave.assetsManager.ManifestAssetManager;
+import xyz.samiker.theendlessweave.assetsManager.ResourceManifest;
+import xyz.samiker.theendlessweave.screens.LoadingScreen;
+import xyz.samiker.theendlessweave.settings.ClientSettings;
+import xyz.samiker.theendlessweave.settings.SettingsManager;
import java.io.IOException;
public class Main extends Game {
public SpriteBatch batch;
private ManifestAssetManager assetManager;
+ public static boolean isMobile;
+
@Override
public void create() {
batch = new SpriteBatch();
try {
assetManager = new ManifestAssetManager(ResourceManifest.load());
+ isMobile = (Gdx.app.getType() == Application.ApplicationType.Android || Gdx.app.getType() == Application.ApplicationType.iOS) || SettingsManager.getString(ClientSettings.CONTROL).contains("mobile");
} catch (IOException e) {
throw new RuntimeException(e);
}
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/assets/AssetLoadCallback.java b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/AssetLoadCallback.java
similarity index 88%
rename from src/main/java/xyz/samiker/theendlessweave/client/assets/AssetLoadCallback.java
rename to core/src/main/java/xyz/samiker/theendlessweave/assetsManager/AssetLoadCallback.java
index 3388a22..5c0a465 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/assets/AssetLoadCallback.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/AssetLoadCallback.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.assets;
+package xyz.samiker.theendlessweave.assetsManager;
public interface AssetLoadCallback {
void onCategoryStart(String category);
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/assets/ManifestAssetManager.java b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/ManifestAssetManager.java
similarity index 98%
rename from src/main/java/xyz/samiker/theendlessweave/client/assets/ManifestAssetManager.java
rename to core/src/main/java/xyz/samiker/theendlessweave/assetsManager/ManifestAssetManager.java
index 20cf2cc..a60654e 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/assets/ManifestAssetManager.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/ManifestAssetManager.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.assets;
+package xyz.samiker.theendlessweave.assetsManager;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.assets.loaders.TextureLoader;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/assets/ResourceManifest.java b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/ResourceManifest.java
similarity index 98%
rename from src/main/java/xyz/samiker/theendlessweave/client/assets/ResourceManifest.java
rename to core/src/main/java/xyz/samiker/theendlessweave/assetsManager/ResourceManifest.java
index 622a88d..05691f9 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/assets/ResourceManifest.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/ResourceManifest.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.assets;
+package xyz.samiker.theendlessweave.assetsManager;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/assets/SoundManager.java b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/SoundManager.java
similarity index 96%
rename from src/main/java/xyz/samiker/theendlessweave/client/assets/SoundManager.java
rename to core/src/main/java/xyz/samiker/theendlessweave/assetsManager/SoundManager.java
index 8adab91..f2dd94e 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/assets/SoundManager.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/SoundManager.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.assets;
+package xyz.samiker.theendlessweave.assetsManager;
import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Sound;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/assets/TextureManager.java b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/TextureManager.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/client/assets/TextureManager.java
rename to core/src/main/java/xyz/samiker/theendlessweave/assetsManager/TextureManager.java
index 067cff7..89fe010 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/assets/TextureManager.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/assetsManager/TextureManager.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.assets;
+package xyz.samiker.theendlessweave.assetsManager;
import com.badlogic.gdx.graphics.Texture;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/custom/InputManager.java b/core/src/main/java/xyz/samiker/theendlessweave/custom/InputManager.java
similarity index 98%
rename from src/main/java/xyz/samiker/theendlessweave/client/custom/InputManager.java
rename to core/src/main/java/xyz/samiker/theendlessweave/custom/InputManager.java
index c04389c..75c8ea8 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/custom/InputManager.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/custom/InputManager.java
@@ -1,11 +1,11 @@
-package xyz.samiker.theendlessweave.client.custom;
+package xyz.samiker.theendlessweave.custom;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.InputProcessor;
-import xyz.samiker.theendlessweave.core.utils.Array;
-import xyz.samiker.theendlessweave.core.utils.IntObjectMap;
+import xyz.samiker.theendlessweave.utils.Array;
+import xyz.samiker.theendlessweave.utils.IntObjectMap;
import java.util.Arrays;
import java.util.function.Consumer;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/network/GameClient.java b/core/src/main/java/xyz/samiker/theendlessweave/network/GameClient.java
similarity index 83%
rename from src/main/java/xyz/samiker/theendlessweave/client/network/GameClient.java
rename to core/src/main/java/xyz/samiker/theendlessweave/network/GameClient.java
index bb3e9a9..1d18034 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/network/GameClient.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/network/GameClient.java
@@ -1,15 +1,15 @@
-package xyz.samiker.theendlessweave.client.network;
+package xyz.samiker.theendlessweave.network;
import com.badlogic.gdx.Gdx;
import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
-import xyz.samiker.theendlessweave.core.GameData;
-import xyz.samiker.theendlessweave.core.network.NetworkRegister;
-import xyz.samiker.theendlessweave.core.network.packets.PacketLoginRequest;
-import xyz.samiker.theendlessweave.core.network.packets.PacketLoginResponse;
-import xyz.samiker.theendlessweave.core.network.packets.PacketSnapshot;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.GameData;
+import xyz.samiker.theendlessweave.network.NetworkRegister;
+import xyz.samiker.theendlessweave.network.packets.PacketLoginRequest;
+import xyz.samiker.theendlessweave.network.packets.PacketLoginResponse;
+import xyz.samiker.theendlessweave.network.packets.PacketSnapshot;
+import xyz.samiker.theendlessweave.utils.Array;
import java.io.IOException;
import java.util.function.Consumer;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/screens/AssetAware.java b/core/src/main/java/xyz/samiker/theendlessweave/screens/AssetAware.java
similarity index 64%
rename from src/main/java/xyz/samiker/theendlessweave/client/screens/AssetAware.java
rename to core/src/main/java/xyz/samiker/theendlessweave/screens/AssetAware.java
index 7870e30..b410104 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/screens/AssetAware.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/screens/AssetAware.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.client.screens;
+package xyz.samiker.theendlessweave.screens;
-import xyz.samiker.theendlessweave.client.assets.ManifestAssetManager;
+import xyz.samiker.theendlessweave.assetsManager.ManifestAssetManager;
import java.net.URL;
import java.util.ResourceBundle;
diff --git a/core/src/main/java/xyz/samiker/theendlessweave/screens/GameDataAware.java b/core/src/main/java/xyz/samiker/theendlessweave/screens/GameDataAware.java
new file mode 100644
index 0000000..09ac50f
--- /dev/null
+++ b/core/src/main/java/xyz/samiker/theendlessweave/screens/GameDataAware.java
@@ -0,0 +1,7 @@
+package xyz.samiker.theendlessweave.screens;
+
+import xyz.samiker.theendlessweave.GameData;
+
+public interface GameDataAware {
+ void setData(GameData data);
+}
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/screens/GameScreen.java b/core/src/main/java/xyz/samiker/theendlessweave/screens/GameScreen.java
similarity index 89%
rename from src/main/java/xyz/samiker/theendlessweave/client/screens/GameScreen.java
rename to core/src/main/java/xyz/samiker/theendlessweave/screens/GameScreen.java
index caf18d2..d77d487 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/screens/GameScreen.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/screens/GameScreen.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.screens;
+package xyz.samiker.theendlessweave.screens;
import com.badlogic.gdx.*;
import com.badlogic.gdx.graphics.OrthographicCamera;
@@ -15,20 +15,20 @@
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.badlogic.gdx.utils.viewport.Viewport;
import xyz.samiker.theendlessweave.Main;
-import xyz.samiker.theendlessweave.client.assets.ManifestAssetManager;
-import xyz.samiker.theendlessweave.client.custom.InputManager;
-import xyz.samiker.theendlessweave.client.network.GameClient;
-import xyz.samiker.theendlessweave.client.settings.ClientSettings;
-import xyz.samiker.theendlessweave.client.systems.*;
-import xyz.samiker.theendlessweave.core.GameData;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.logic.GameState;
-import xyz.samiker.theendlessweave.core.logic.Loop;
-import xyz.samiker.theendlessweave.core.network.packets.PacketLoginResponse;
-import xyz.samiker.theendlessweave.core.settings.SettingsManager;
-import xyz.samiker.theendlessweave.server.ServerLauncher;
+import xyz.samiker.theendlessweave.assetsManager.ManifestAssetManager;
+import xyz.samiker.theendlessweave.custom.InputManager;
+import xyz.samiker.theendlessweave.network.GameClient;
+import xyz.samiker.theendlessweave.settings.ClientSettings;
+import xyz.samiker.theendlessweave.systems.*;
+import xyz.samiker.theendlessweave.GameData;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.logic.GameState;
+import xyz.samiker.theendlessweave.logic.Loop;
+import xyz.samiker.theendlessweave.network.packets.PacketLoginResponse;
+import xyz.samiker.theendlessweave.settings.SettingsManager;
+import xyz.samiker.theendlessweave.ServerLauncher;
import java.io.IOException;
@@ -54,7 +54,6 @@ public class GameScreen implements Screen {
private Touchpad moveStick;
private Touchpad aimStick;
private TextButton attackBtn;
- private boolean isMobile;
private Game gameLogic;
private Loop gameLoop;
@@ -86,7 +85,7 @@ public void show() {
uiStage = new Stage(new ScreenViewport());
- skin = new Skin(Gdx.files.internal("xyz/samiker/theendlessweave/assets/ui/uiskin.json"));
+ skin = new Skin(Gdx.files.internal("ui/uiskin.json"));
setupUI();
@@ -132,9 +131,7 @@ private void setupUI() {
private void setupMobileControls() {
String controlMode = SettingsManager.getString(ClientSettings.CONTROL);
if ("auto".equals(controlMode)) {
- controlMode = (Gdx.app.getType() == Application.ApplicationType.Android ||
- Gdx.app.getType() == Application.ApplicationType.iOS)
- ? "mobile_aim_joystick" : "pc";
+ controlMode = Main.isMobile ? "mobile_aim_joystick" : "pc";
}
if ("pc".equals(controlMode)) return;
@@ -172,9 +169,9 @@ public void touchUp(InputEvent event, float x, float y, int pointer, int button)
private void updateUI() {
debugLabel.setPosition(10, Gdx.graphics.getHeight() / 2f);
- if (isMobile) {
- aimStick.setBounds(Gdx.graphics.getWidth() - 250, 50, 200, 200);
- attackBtn.setPosition(Gdx.graphics.getWidth() - 150, Gdx.graphics.getHeight() - 300);
+ if (Main.isMobile) {
+ if (aimStick != null) aimStick.setBounds(Gdx.graphics.getWidth() - 250, 50, 200, 200);
+ if (attackBtn != null) attackBtn.setPosition(Gdx.graphics.getWidth() - 150, Gdx.graphics.getHeight() - 300);
}
}
@@ -260,7 +257,7 @@ private void initializeGameSession(PacketLoginResponse serverData) {
var map = gameLogic.getGameMap();
var profiler = gameLogic.getProfiler();
InputSystem inputSystem = new InputSystem(client, gameLogic, gameCamera);
- inputSystem.setInputMode(isMobile);
+ inputSystem.setInputMode(Main.isMobile);
gameLogic.addLogicSystem(new ClientNetworkEventSystem(client, gameLogic));
gameLogic.addLogicSystem(inputSystem);
@@ -300,7 +297,7 @@ public void render(float delta) {
gameCamera.update();
batch.setProjectionMatrix(gameCamera.combined);
- if (isMobile) {
+ if (Main.isMobile) {
double deadzone = 0.3;
if (moveStick != null) {
InputManager.handleAxis(moveStick.getKnobPercentX(), deadzone, Input.Keys.D, Input.Keys.A);
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/screens/GenerationScreen.java b/core/src/main/java/xyz/samiker/theendlessweave/screens/GenerationScreen.java
similarity index 98%
rename from src/main/java/xyz/samiker/theendlessweave/client/screens/GenerationScreen.java
rename to core/src/main/java/xyz/samiker/theendlessweave/screens/GenerationScreen.java
index 6e9e2c1..9299bdb 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/screens/GenerationScreen.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/screens/GenerationScreen.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.screens;
+package xyz.samiker.theendlessweave.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
@@ -12,8 +12,8 @@
import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import xyz.samiker.theendlessweave.Main;
-import xyz.samiker.theendlessweave.core.GameData;
-import xyz.samiker.theendlessweave.core.gamemap.MapGeneratorSettings;
+import xyz.samiker.theendlessweave.GameData;
+import xyz.samiker.theendlessweave.gamemap.MapGeneratorSettings;
import java.util.Random;
@@ -68,7 +68,7 @@ public void show() {
stage = new Stage(new ScreenViewport());
Gdx.input.setInputProcessor(stage);
- skin = new Skin(Gdx.files.internal("xyz/samiker/theendlessweave/assets/ui/uiskin.json"));
+ skin = new Skin(Gdx.files.internal("ui/uiskin.json"));
buildUI();
loadDefaultSettings();
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/screens/LoadingScreen.java b/core/src/main/java/xyz/samiker/theendlessweave/screens/LoadingScreen.java
similarity index 93%
rename from src/main/java/xyz/samiker/theendlessweave/client/screens/LoadingScreen.java
rename to core/src/main/java/xyz/samiker/theendlessweave/screens/LoadingScreen.java
index f93ef5d..57841bd 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/screens/LoadingScreen.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/screens/LoadingScreen.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.screens;
+package xyz.samiker.theendlessweave.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.ScreenAdapter;
@@ -27,7 +27,7 @@ public LoadingScreen(Main game) {
@Override
public void show() {
stage = new Stage(new ScreenViewport());
- Skin skin = new Skin(Gdx.files.internal("xyz/samiker/theendlessweave/assets/ui/uiskin.json"));
+ Skin skin = new Skin(Gdx.files.internal("ui/uiskin.json"));
Table table = new Table();
table.setFillParent(true);
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/screens/MainMenuScreen.java b/core/src/main/java/xyz/samiker/theendlessweave/screens/MainMenuScreen.java
similarity index 94%
rename from src/main/java/xyz/samiker/theendlessweave/client/screens/MainMenuScreen.java
rename to core/src/main/java/xyz/samiker/theendlessweave/screens/MainMenuScreen.java
index 557f4b8..8a5124b 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/screens/MainMenuScreen.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/screens/MainMenuScreen.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.screens;
+package xyz.samiker.theendlessweave.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
@@ -25,7 +25,7 @@ public MainMenuScreen(Main game) {
public void show() {
stage = new Stage(new ScreenViewport());
Gdx.input.setInputProcessor(stage);
- skin = new Skin(Gdx.files.internal("xyz/samiker/theendlessweave/assets/ui/uiskin.json"));
+ skin = new Skin(Gdx.files.internal("ui/uiskin.json"));
Table table = new Table();
table.setFillParent(true);
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/screens/SettingsScreen.java b/core/src/main/java/xyz/samiker/theendlessweave/screens/SettingsScreen.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/client/screens/SettingsScreen.java
rename to core/src/main/java/xyz/samiker/theendlessweave/screens/SettingsScreen.java
index dc46ed7..dc4fcfa 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/screens/SettingsScreen.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/screens/SettingsScreen.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.screens;
+package xyz.samiker.theendlessweave.screens;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Graphics;
@@ -12,8 +12,8 @@
import com.badlogic.gdx.utils.ScreenUtils;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import xyz.samiker.theendlessweave.Main;
-import xyz.samiker.theendlessweave.client.settings.ClientSettings;
-import xyz.samiker.theendlessweave.core.settings.SettingsManager;
+import xyz.samiker.theendlessweave.settings.ClientSettings;
+import xyz.samiker.theendlessweave.settings.SettingsManager;
public class SettingsScreen implements Screen {
@@ -35,7 +35,7 @@ public void show() {
stage = new Stage(new ScreenViewport());
Gdx.input.setInputProcessor(stage);
- skin = new Skin(Gdx.files.internal("xyz/samiker/theendlessweave/assets/ui/uiskin.json"));
+ skin = new Skin(Gdx.files.internal("ui/uiskin.json"));
buildLayout();
showGeneralSettings();
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/CameraSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/CameraSystem.java
similarity index 85%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/CameraSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/CameraSystem.java
index b25aadf..11d0586 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/CameraSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/CameraSystem.java
@@ -1,16 +1,16 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
-import xyz.samiker.theendlessweave.client.custom.InputManager;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.CameraTargetComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
-
-import static xyz.samiker.theendlessweave.core.utils.Constants.ENTITY_SIZE;
+import xyz.samiker.theendlessweave.custom.InputManager;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.CameraTargetComponent;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
+
+import static xyz.samiker.theendlessweave.utils.Constants.ENTITY_SIZE;
public class CameraSystem implements ISystem {
private final OrthographicCamera camera;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/ClientNetworkEventSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/ClientNetworkEventSystem.java
similarity index 82%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/ClientNetworkEventSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/ClientNetworkEventSystem.java
index cf52afa..af5783d 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/ClientNetworkEventSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/ClientNetworkEventSystem.java
@@ -1,16 +1,16 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.client.network.GameClient;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.network.packets.PacketDestroyEntity;
-import xyz.samiker.theendlessweave.core.network.packets.PacketSpawnEntity;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.network.GameClient;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.network.packets.PacketDestroyEntity;
+import xyz.samiker.theendlessweave.network.packets.PacketSpawnEntity;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class ClientNetworkEventSystem implements ISystem {
private final GameClient client;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/ClientNetworkReceiverSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/ClientNetworkReceiverSystem.java
similarity index 75%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/ClientNetworkReceiverSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/ClientNetworkReceiverSystem.java
index 9a8bc89..d5e0275 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/ClientNetworkReceiverSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/ClientNetworkReceiverSystem.java
@@ -1,20 +1,20 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.client.network.GameClient;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.HealthComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.RotationComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.network.packets.Packet;
-import xyz.samiker.theendlessweave.core.network.packets.PacketDestroyEntity;
-import xyz.samiker.theendlessweave.core.network.packets.PacketEntityUpdate;
-import xyz.samiker.theendlessweave.core.network.packets.PacketSnapshot;
-import xyz.samiker.theendlessweave.core.network.utils.PacketPool;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
-import xyz.samiker.theendlessweave.core.utils.IntObjectMap;
+import xyz.samiker.theendlessweave.network.GameClient;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.HealthComponent;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.RotationComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.network.packets.Packet;
+import xyz.samiker.theendlessweave.network.packets.PacketDestroyEntity;
+import xyz.samiker.theendlessweave.network.packets.PacketEntityUpdate;
+import xyz.samiker.theendlessweave.network.packets.PacketSnapshot;
+import xyz.samiker.theendlessweave.network.utils.PacketPool;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
+import xyz.samiker.theendlessweave.utils.IntObjectMap;
public class ClientNetworkReceiverSystem implements ISystem {
private final GameClient client;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/ClientProjectileSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/ClientProjectileSystem.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/ClientProjectileSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/ClientProjectileSystem.java
index 73fcb0b..706b96c 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/ClientProjectileSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/ClientProjectileSystem.java
@@ -1,12 +1,12 @@
-package xyz.samiker.theendlessweave.client.systems;
-
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PlayerTagComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+package xyz.samiker.theendlessweave.systems;
+
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PlayerTagComponent;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
public class ClientProjectileSystem implements ISystem {
private Entity cachedPlayer;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/DebugRenderSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/DebugRenderSystem.java
similarity index 71%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/DebugRenderSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/DebugRenderSystem.java
index 913125e..8191def 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/DebugRenderSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/DebugRenderSystem.java
@@ -1,10 +1,10 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.logic.PerformanceMonitor;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.logic.PerformanceMonitor;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
public class DebugRenderSystem implements ISystem {
private final PerformanceMonitor profiler;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/HudRenderSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/HudRenderSystem.java
similarity index 82%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/HudRenderSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/HudRenderSystem.java
index 76272af..199e188 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/HudRenderSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/HudRenderSystem.java
@@ -1,14 +1,14 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ProgressBar;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.HealthComponent;
-import xyz.samiker.theendlessweave.core.entities.components.LevelComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PlayerTagComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ScoreComponent;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.HealthComponent;
+import xyz.samiker.theendlessweave.entities.components.LevelComponent;
+import xyz.samiker.theendlessweave.entities.components.PlayerTagComponent;
+import xyz.samiker.theendlessweave.entities.components.ScoreComponent;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
public class HudRenderSystem implements ISystem {
private final ProgressBar healthBar;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/InputSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/InputSystem.java
similarity index 81%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/InputSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/InputSystem.java
index b0e3122..f6aa0f9 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/InputSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/InputSystem.java
@@ -1,19 +1,18 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector3;
-import xyz.samiker.theendlessweave.client.custom.InputManager;
-import xyz.samiker.theendlessweave.client.network.GameClient;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PlayerTagComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.network.packets.PacketInput;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.custom.InputManager;
+import xyz.samiker.theendlessweave.network.GameClient;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PlayerTagComponent;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.network.packets.PacketInput;
+import xyz.samiker.theendlessweave.utils.Array;
public class InputSystem implements ISystem {
private final GameClient client;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/RenderSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/RenderSystem.java
similarity index 79%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/RenderSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/RenderSystem.java
index 1e18bfa..f2cbddf 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/RenderSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/RenderSystem.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera;
@@ -6,16 +6,16 @@
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.RenderComponent;
-import xyz.samiker.theendlessweave.core.entities.components.RotationComponent;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
-
-import static xyz.samiker.theendlessweave.core.utils.Constants.ENTITY_SIZE;
-import static xyz.samiker.theendlessweave.core.utils.Constants.PROJECTILE_SIZE;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.RenderComponent;
+import xyz.samiker.theendlessweave.entities.components.RotationComponent;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
+
+import static xyz.samiker.theendlessweave.utils.Constants.ENTITY_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.PROJECTILE_SIZE;
public class RenderSystem implements ISystem {
private final SpriteBatch batch;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/TileRenderSystem.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/TileRenderSystem.java
similarity index 84%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/TileRenderSystem.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/TileRenderSystem.java
index 86cc7cf..78d897f 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/TileRenderSystem.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/TileRenderSystem.java
@@ -1,19 +1,18 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
-import xyz.samiker.theendlessweave.client.assets.ManifestAssetManager;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.gamemap.GameMap;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.assetsManager.ManifestAssetManager;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.gamemap.GameMap;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
+import xyz.samiker.theendlessweave.utils.Array;
import java.util.EnumMap;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class TileRenderSystem implements ISystem {
private final SpriteBatch batch;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/systems/WorldUIRenderer.java b/core/src/main/java/xyz/samiker/theendlessweave/systems/WorldUIRenderer.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/client/systems/WorldUIRenderer.java
rename to core/src/main/java/xyz/samiker/theendlessweave/systems/WorldUIRenderer.java
index cc68046..2fb4ef8 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/systems/WorldUIRenderer.java
+++ b/core/src/main/java/xyz/samiker/theendlessweave/systems/WorldUIRenderer.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.systems;
+package xyz.samiker.theendlessweave.systems;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera;
@@ -8,12 +8,12 @@
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.utils.Align;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.*;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.*;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
-import static xyz.samiker.theendlessweave.core.utils.Constants.ENTITY_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.ENTITY_SIZE;
public class WorldUIRenderer implements ISystem {
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..49a0849
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,5 @@
+gdxVersion=1.14.0
+kryoVersion=2.22.0-RC1
+appName=The Endless Weave
+android.useAndroidX=true
+android.enableJetifier=true
\ No newline at end of file
diff --git a/local.properties b/local.properties
new file mode 100644
index 0000000..7038e58
--- /dev/null
+++ b/local.properties
@@ -0,0 +1 @@
+sdk.dir=C:/droid-sdk
\ No newline at end of file
diff --git a/lwjgl3/build.gradle.kts b/lwjgl3/build.gradle.kts
new file mode 100644
index 0000000..3347c80
--- /dev/null
+++ b/lwjgl3/build.gradle.kts
@@ -0,0 +1,36 @@
+plugins {
+ id("application")
+ id("com.github.johnrengelman.shadow") version "8.1.1"
+}
+
+val gdxVersion: String by project
+
+dependencies {
+ implementation(project(":core"))
+ implementation(project(":server"))
+ implementation("com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion")
+ implementation("com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop")
+}
+
+application {
+ mainClass.set("xyz.samiker.theendlessweave.Launcher")
+}
+
+sourceSets {
+ main {
+ resources {
+ srcDir("../assets")
+ }
+ }
+}
+
+tasks.named("run") {
+ workingDir = file("../assets")
+}
+
+tasks.named("shadowJar") {
+ archiveFileName.set("TheEndlessWeave-Client.jar")
+ configurations = listOf(project.configurations.runtimeClasspath.get())
+ mergeServiceFiles()
+ manifest { attributes["Main-Class"] = "xyz.samiker.theendlessweave.Launcher" }
+}
\ No newline at end of file
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/ClientLauncher.java b/lwjgl3/src/main/java/xyz/samiker/theendlessweave/ClientLauncher.java
similarity index 85%
rename from src/main/java/xyz/samiker/theendlessweave/client/ClientLauncher.java
rename to lwjgl3/src/main/java/xyz/samiker/theendlessweave/ClientLauncher.java
index f242532..f2e69a8 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/ClientLauncher.java
+++ b/lwjgl3/src/main/java/xyz/samiker/theendlessweave/ClientLauncher.java
@@ -1,10 +1,9 @@
-package xyz.samiker.theendlessweave.client;
+package xyz.samiker.theendlessweave;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
-import xyz.samiker.theendlessweave.Main;
-import xyz.samiker.theendlessweave.client.settings.ClientSettings;
-import xyz.samiker.theendlessweave.core.settings.SettingsManager;
+import xyz.samiker.theendlessweave.settings.ClientSettings;
+import xyz.samiker.theendlessweave.settings.SettingsManager;
import java.io.FileWriter;
import java.io.IOException;
@@ -12,6 +11,7 @@
import java.io.StringWriter;
import java.time.LocalDateTime;
+
public class ClientLauncher {
public static void main(String[] args) {
Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
@@ -21,6 +21,7 @@ public static void main(String[] args) {
if (SettingsManager.getBoolean(ClientSettings.VSYNC)) {
config.useVsync(SettingsManager.getBoolean(ClientSettings.VSYNC));
}
+
if (SettingsManager.getBoolean(ClientSettings.FPS_LIMIT_ENABLED)) {
config.setForegroundFPS(SettingsManager.getInt(ClientSettings.FPS_LIMIT));
}
@@ -28,9 +29,10 @@ public static void main(String[] args) {
config.setResizable(false);
config.setTitle("TheEndlessWeave");
- new Lwjgl3Application(new Main(), config);
+ new Lwjgl3Application(new xyz.samiker.theendlessweave.Main(), config);
} catch (Throwable t) {
logError(t);
+ System.exit(1);
}
}
private static void logError(Throwable t) {
diff --git a/src/main/java/xyz/samiker/theendlessweave/Launcher.java b/lwjgl3/src/main/java/xyz/samiker/theendlessweave/Launcher.java
similarity index 71%
rename from src/main/java/xyz/samiker/theendlessweave/Launcher.java
rename to lwjgl3/src/main/java/xyz/samiker/theendlessweave/Launcher.java
index 351b63e..7f92c3e 100644
--- a/src/main/java/xyz/samiker/theendlessweave/Launcher.java
+++ b/lwjgl3/src/main/java/xyz/samiker/theendlessweave/Launcher.java
@@ -1,8 +1,5 @@
package xyz.samiker.theendlessweave;
-import xyz.samiker.theendlessweave.client.ClientLauncher;
-import xyz.samiker.theendlessweave.server.ServerLauncher;
-
public class Launcher {
public static void main(String[] args) {
if (args.length > 0 && args[0].equalsIgnoreCase("--server")) {
diff --git a/server/build.gradle.kts b/server/build.gradle.kts
new file mode 100644
index 0000000..c2d7c7d
--- /dev/null
+++ b/server/build.gradle.kts
@@ -0,0 +1,21 @@
+plugins {
+ java
+ id("java-library")
+}
+
+dependencies {
+ api(project(":shared"))
+}
+
+tasks.register("buildServer") {
+ group = "build"
+ archiveBaseName.set("TheEndlessWeave")
+ archiveClassifier.set("server")
+ archiveVersion.set(project.version.toString())
+ manifest { attributes["Main-Class"] = "xyz.samiker.theendlessweave.ServerLauncher" }
+
+ from(project(":server").sourceSets.main.get().output)
+ from(project(":shared").sourceSets.main.get().output)
+}
+
+java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
\ No newline at end of file
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/ServerLauncher.java b/server/src/main/java/xyz/samiker/theendlessweave/ServerLauncher.java
similarity index 89%
rename from src/main/java/xyz/samiker/theendlessweave/server/ServerLauncher.java
rename to server/src/main/java/xyz/samiker/theendlessweave/ServerLauncher.java
index 1d5c55d..db92de3 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/ServerLauncher.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/ServerLauncher.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.server;
+package xyz.samiker.theendlessweave;
-import xyz.samiker.theendlessweave.server.network.GameServer;
+import xyz.samiker.theendlessweave.network.GameServer;
import java.io.IOException;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/ServerLoop.java b/server/src/main/java/xyz/samiker/theendlessweave/ServerLoop.java
similarity index 88%
rename from src/main/java/xyz/samiker/theendlessweave/server/ServerLoop.java
rename to server/src/main/java/xyz/samiker/theendlessweave/ServerLoop.java
index 6ad0ba4..c27b153 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/ServerLoop.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/ServerLoop.java
@@ -1,9 +1,9 @@
-package xyz.samiker.theendlessweave.server;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.logic.GameState;
+package xyz.samiker.theendlessweave;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.logic.GameState;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TARGET_TPS;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TIME_PER_TICK;
+import static xyz.samiker.theendlessweave.utils.Constants.TARGET_TPS;
+import static xyz.samiker.theendlessweave.utils.Constants.TIME_PER_TICK;
public class ServerLoop {
private Game game;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/network/GameServer.java b/server/src/main/java/xyz/samiker/theendlessweave/network/GameServer.java
similarity index 83%
rename from src/main/java/xyz/samiker/theendlessweave/server/network/GameServer.java
rename to server/src/main/java/xyz/samiker/theendlessweave/network/GameServer.java
index 61df6d2..eb1beec 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/network/GameServer.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/network/GameServer.java
@@ -1,21 +1,20 @@
-package xyz.samiker.theendlessweave.server.network;
+package xyz.samiker.theendlessweave.network;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server;
-import xyz.samiker.theendlessweave.core.GameData;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.gamemap.MapGeneratorSettings;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.network.NetworkRegister;
-import xyz.samiker.theendlessweave.core.network.packets.PacketInput;
-import xyz.samiker.theendlessweave.core.network.packets.PacketLoginRequest;
-import xyz.samiker.theendlessweave.core.network.packets.PacketLoginResponse;
-import xyz.samiker.theendlessweave.core.network.packets.PacketSnapshot;
-import xyz.samiker.theendlessweave.server.ServerLauncher;
-import xyz.samiker.theendlessweave.server.ServerLoop;
-import xyz.samiker.theendlessweave.server.systems.*;
+import xyz.samiker.theendlessweave.GameData;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.gamemap.MapGeneratorSettings;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.network.packets.PacketInput;
+import xyz.samiker.theendlessweave.network.packets.PacketLoginRequest;
+import xyz.samiker.theendlessweave.network.packets.PacketLoginResponse;
+import xyz.samiker.theendlessweave.network.packets.PacketSnapshot;
+import xyz.samiker.theendlessweave.ServerLauncher;
+import xyz.samiker.theendlessweave.ServerLoop;
+import xyz.samiker.theendlessweave.systems.*;
import java.io.IOException;
import java.util.Map;
@@ -76,7 +75,7 @@ public void dispose() {
loop.dispose();
server.stop();
if (aiExecutor != null) {
- aiExecutor.close();
+ aiExecutor.shutdown();
}
}
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/AISystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/AISystem.java
similarity index 88%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/AISystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/AISystem.java
index ff694f6..33b9a74 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/AISystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/AISystem.java
@@ -1,23 +1,23 @@
-package xyz.samiker.theendlessweave.server.systems;
-
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.AIComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PathfindingComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PlayerTagComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.gamemap.GameMap;
-import xyz.samiker.theendlessweave.core.logic.ai.EntityAIState;
-import xyz.samiker.theendlessweave.core.logic.ai.LineOfSightUtil;
-import xyz.samiker.theendlessweave.core.logic.ai.astar.AStarPathfinder;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.utils.Array;
+package xyz.samiker.theendlessweave.systems;
+
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.AIComponent;
+import xyz.samiker.theendlessweave.entities.components.PathfindingComponent;
+import xyz.samiker.theendlessweave.entities.components.PlayerTagComponent;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.gamemap.GameMap;
+import xyz.samiker.theendlessweave.logic.ai.EntityAIState;
+import xyz.samiker.theendlessweave.logic.ai.LineOfSightUtil;
+import xyz.samiker.theendlessweave.logic.ai.astar.AStarPathfinder;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.utils.Array;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutorService;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class AISystem implements ISystem {
private final GameMap gameMap;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/AttackSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/AttackSystem.java
similarity index 94%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/AttackSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/AttackSystem.java
index 88fd4b7..855a15a 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/AttackSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/AttackSystem.java
@@ -1,14 +1,14 @@
-package xyz.samiker.theendlessweave.server.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.*;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.logic.ai.EntityAIState;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.*;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.logic.ai.EntityAIState;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
-import static xyz.samiker.theendlessweave.core.utils.Constants.SECONDS_PER_TICK;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.SECONDS_PER_TICK;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class AttackSystem implements ISystem {
private final Game game;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/DamageSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/DamageSystem.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/DamageSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/DamageSystem.java
index e8521dc..a5b9cdf 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/DamageSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/DamageSystem.java
@@ -1,12 +1,12 @@
-package xyz.samiker.theendlessweave.server.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.*;
-import xyz.samiker.theendlessweave.core.logic.utils.SpatialGrid;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.*;
+import xyz.samiker.theendlessweave.logic.utils.SpatialGrid;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
-import static xyz.samiker.theendlessweave.core.utils.Constants.COLLISION_RADIUS;
+import static xyz.samiker.theendlessweave.utils.Constants.COLLISION_RADIUS;
public class DamageSystem implements ISystem {
private final SpatialGrid spatialGrid;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/MovementSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/MovementSystem.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/MovementSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/MovementSystem.java
index 302dbfe..6e511b0 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/MovementSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/MovementSystem.java
@@ -1,15 +1,15 @@
-package xyz.samiker.theendlessweave.server.systems;
-
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.*;
-import xyz.samiker.theendlessweave.core.gamemap.GameMap;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
-import xyz.samiker.theendlessweave.core.utils.Array;
-
-import static xyz.samiker.theendlessweave.core.utils.Constants.COLLISION_RADIUS;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+package xyz.samiker.theendlessweave.systems;
+
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.*;
+import xyz.samiker.theendlessweave.gamemap.GameMap;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
+import xyz.samiker.theendlessweave.utils.Array;
+
+import static xyz.samiker.theendlessweave.utils.Constants.COLLISION_RADIUS;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class MovementSystem implements ISystem {
private final GameMap gameMap;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/ProjectileSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/ProjectileSystem.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/ProjectileSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/ProjectileSystem.java
index f5bd622..89a706f 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/ProjectileSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/ProjectileSystem.java
@@ -1,12 +1,12 @@
-package xyz.samiker.theendlessweave.server.systems;
-
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PlayerTagComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+package xyz.samiker.theendlessweave.systems;
+
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PlayerTagComponent;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
public class ProjectileSystem implements ISystem {
private Entity cachedPlayer;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerDebugSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerDebugSystem.java
similarity index 66%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/ServerDebugSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/ServerDebugSystem.java
index f6ee0f2..dd9ad56 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerDebugSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerDebugSystem.java
@@ -1,9 +1,9 @@
-package xyz.samiker.theendlessweave.server.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.logic.PerformanceMonitor;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.logic.PerformanceMonitor;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
public class ServerDebugSystem implements ISystem {
private final PerformanceMonitor profiler;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerEntityEventSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerEntityEventSystem.java
similarity index 75%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/ServerEntityEventSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/ServerEntityEventSystem.java
index ab20b59..d6c1b97 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerEntityEventSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerEntityEventSystem.java
@@ -1,15 +1,15 @@
-package xyz.samiker.theendlessweave.server.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.RenderComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.network.packets.PacketSpawnEntity;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
-import xyz.samiker.theendlessweave.server.network.GameServer;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.RenderComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.network.packets.PacketSpawnEntity;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
+import xyz.samiker.theendlessweave.network.GameServer;
public class ServerEntityEventSystem implements ISystem {
private final GameServer server;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerInputSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerInputSystem.java
similarity index 78%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/ServerInputSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/ServerInputSystem.java
index 2001464..2e923b2 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerInputSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerInputSystem.java
@@ -1,15 +1,15 @@
-package xyz.samiker.theendlessweave.server.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
-import xyz.samiker.theendlessweave.core.entities.components.WeaponComponent;
-import xyz.samiker.theendlessweave.core.logic.Game;
-import xyz.samiker.theendlessweave.core.network.packets.PacketInput;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
-import xyz.samiker.theendlessweave.server.network.GameServer;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.entities.components.WeaponComponent;
+import xyz.samiker.theendlessweave.logic.Game;
+import xyz.samiker.theendlessweave.network.packets.PacketInput;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
+import xyz.samiker.theendlessweave.network.GameServer;
import java.util.HashMap;
import java.util.Map;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerSnapshotSenderSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerSnapshotSenderSystem.java
similarity index 77%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/ServerSnapshotSenderSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/ServerSnapshotSenderSystem.java
index 34b9137..a6d3684 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/ServerSnapshotSenderSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/ServerSnapshotSenderSystem.java
@@ -1,15 +1,15 @@
-package xyz.samiker.theendlessweave.server.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.*;
-import xyz.samiker.theendlessweave.core.network.packets.Packet;
-import xyz.samiker.theendlessweave.core.network.packets.PacketDestroyEntity;
-import xyz.samiker.theendlessweave.core.network.packets.PacketEntityUpdate;
-import xyz.samiker.theendlessweave.core.network.packets.PacketSnapshot;
-import xyz.samiker.theendlessweave.core.network.utils.PacketPool;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
-import xyz.samiker.theendlessweave.server.network.GameServer;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.*;
+import xyz.samiker.theendlessweave.network.packets.Packet;
+import xyz.samiker.theendlessweave.network.packets.PacketDestroyEntity;
+import xyz.samiker.theendlessweave.network.packets.PacketEntityUpdate;
+import xyz.samiker.theendlessweave.network.packets.PacketSnapshot;
+import xyz.samiker.theendlessweave.network.utils.PacketPool;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
+import xyz.samiker.theendlessweave.network.GameServer;
import java.util.Arrays;
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/systems/WeaponSystem.java b/server/src/main/java/xyz/samiker/theendlessweave/systems/WeaponSystem.java
similarity index 58%
rename from src/main/java/xyz/samiker/theendlessweave/server/systems/WeaponSystem.java
rename to server/src/main/java/xyz/samiker/theendlessweave/systems/WeaponSystem.java
index 089616f..4f7f701 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/systems/WeaponSystem.java
+++ b/server/src/main/java/xyz/samiker/theendlessweave/systems/WeaponSystem.java
@@ -1,9 +1,9 @@
-package xyz.samiker.theendlessweave.server.systems;
+package xyz.samiker.theendlessweave.systems;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.WeaponComponent;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.WeaponComponent;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
public class WeaponSystem implements ISystem {
@Override
diff --git a/settings.gradle.kts b/settings.gradle.kts
index df13ec7..ded765a 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1 +1,2 @@
rootProject.name = "TheEndlessWeave"
+include("shared", "core", "lwjgl3", "server", "android")
\ No newline at end of file
diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts
new file mode 100644
index 0000000..10a1890
--- /dev/null
+++ b/shared/build.gradle.kts
@@ -0,0 +1,13 @@
+plugins {
+ java
+ id("java-library")
+}
+
+val gdxVersion: String by project
+
+dependencies {
+ //api("com.badlogicgames.gdx:gdx:$gdxVersion")
+ api("com.esotericsoftware:kryonet:${project.extra["kryoVersion"]}")
+}
+
+java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
\ No newline at end of file
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/GameData.java b/shared/src/main/java/xyz/samiker/theendlessweave/GameData.java
similarity index 93%
rename from src/main/java/xyz/samiker/theendlessweave/core/GameData.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/GameData.java
index b2af1cf..dbb3cff 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/GameData.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/GameData.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core;
+package xyz.samiker.theendlessweave;
-import xyz.samiker.theendlessweave.core.gamemap.MapGeneratorSettings;
+import xyz.samiker.theendlessweave.gamemap.MapGeneratorSettings;
/**
* Данные для запуска игры.
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/EntitiesFabric.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/EntitiesFabric.java
similarity index 95%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/EntitiesFabric.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/EntitiesFabric.java
index 0b585e8..8e9bb15 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/EntitiesFabric.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/EntitiesFabric.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core.entities;
+package xyz.samiker.theendlessweave.entities;
-import xyz.samiker.theendlessweave.core.entities.components.*;
+import xyz.samiker.theendlessweave.entities.components.*;
public class EntitiesFabric {
public static Entity createPlayer(int entityId, double x, double y, double speed) {
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/Entity.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/Entity.java
similarity index 93%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/Entity.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/Entity.java
index 91f6339..d573c42 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/Entity.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/Entity.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core.entities;
+package xyz.samiker.theendlessweave.entities;
-import xyz.samiker.theendlessweave.core.entities.components.ComponentType;
+import xyz.samiker.theendlessweave.entities.components.ComponentType;
import java.util.Arrays;
import java.util.BitSet;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/ProjectilePool.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/ProjectilePool.java
similarity index 68%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/ProjectilePool.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/ProjectilePool.java
index abaa7bf..0c6850c 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/ProjectilePool.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/ProjectilePool.java
@@ -1,9 +1,9 @@
-package xyz.samiker.theendlessweave.core.entities;
+package xyz.samiker.theendlessweave.entities;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.RenderComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.RenderComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
import java.util.ArrayDeque;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/AIComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/AIComponent.java
similarity index 94%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/AIComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/AIComponent.java
index b7639be..d0849f1 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/AIComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/AIComponent.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
-import xyz.samiker.theendlessweave.core.logic.ai.EntityAIState;
+import xyz.samiker.theendlessweave.logic.ai.EntityAIState;
public class AIComponent implements Component {
private EntityAIState state;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/AttackComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/AttackComponent.java
similarity index 96%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/AttackComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/AttackComponent.java
index 364d9f5..6d76454 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/AttackComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/AttackComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
/**
* Компонент атаки с поддержкой паттернов.
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/CameraTargetComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/CameraTargetComponent.java
similarity index 50%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/CameraTargetComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/CameraTargetComponent.java
index 94d79af..f84bd72 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/CameraTargetComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/CameraTargetComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class CameraTargetComponent implements Component {
}
diff --git a/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/Component.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/Component.java
new file mode 100644
index 0000000..78ba520
--- /dev/null
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/Component.java
@@ -0,0 +1,4 @@
+package xyz.samiker.theendlessweave.entities.components;
+
+public interface Component {
+}
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ComponentType.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ComponentType.java
similarity index 84%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/ComponentType.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ComponentType.java
index 5bdd3eb..fccc95a 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ComponentType.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ComponentType.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
import java.util.HashMap;
import java.util.Map;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/HealthComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/HealthComponent.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/HealthComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/HealthComponent.java
index 43bbebf..49a19f1 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/HealthComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/HealthComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class HealthComponent implements Component {
public volatile double health;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/LevelComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/LevelComponent.java
similarity index 95%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/LevelComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/LevelComponent.java
index 940e5a9..7b671c1 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/LevelComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/LevelComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
/**
* Компонент уровня игрока.
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/NameComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/NameComponent.java
similarity index 71%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/NameComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/NameComponent.java
index 813a93d..ead7b00 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/NameComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/NameComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class NameComponent implements Component {
public String name = "";
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PathfindingComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PathfindingComponent.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/PathfindingComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PathfindingComponent.java
index 97dabf1..8a3e219 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PathfindingComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PathfindingComponent.java
@@ -1,7 +1,7 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.utils.Array;
public class PathfindingComponent implements Component {
private Array path;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PatternConfig.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PatternConfig.java
similarity index 98%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/PatternConfig.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PatternConfig.java
index 13f25f4..f339edb 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PatternConfig.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PatternConfig.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class PatternConfig {
private final PatternType patternType;
diff --git a/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PlayerTagComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PlayerTagComponent.java
new file mode 100644
index 0000000..779d553
--- /dev/null
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PlayerTagComponent.java
@@ -0,0 +1,4 @@
+package xyz.samiker.theendlessweave.entities.components;
+
+public class PlayerTagComponent implements Component {
+}
\ No newline at end of file
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PositionComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PositionComponent.java
similarity index 81%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/PositionComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PositionComponent.java
index a273f94..48fdeb3 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PositionComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/PositionComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class PositionComponent implements Component {
public double x, y;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ProjectileComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ProjectileComponent.java
similarity index 95%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/ProjectileComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ProjectileComponent.java
index 7f25d37..c782566 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ProjectileComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ProjectileComponent.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
-import xyz.samiker.theendlessweave.core.entities.Entity;
+import xyz.samiker.theendlessweave.entities.Entity;
public class ProjectileComponent implements Component {
public double angle;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/RenderComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/RenderComponent.java
similarity index 86%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/RenderComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/RenderComponent.java
index 8852749..b59ffbf 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/RenderComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/RenderComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class RenderComponent implements Component {
public final RenderType type;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/RotationComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/RotationComponent.java
similarity index 72%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/RotationComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/RotationComponent.java
index 4fb8c13..00d5f48 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/RotationComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/RotationComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class RotationComponent implements Component {
public double angle;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ScaleComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ScaleComponent.java
similarity index 79%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/ScaleComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ScaleComponent.java
index 9345b70..82f643e 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ScaleComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ScaleComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class ScaleComponent implements Component {
public double scaleX = 1;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ScoreComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ScoreComponent.java
similarity index 81%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/ScoreComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ScoreComponent.java
index dbfb165..d769e7b 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ScoreComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ScoreComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class ScoreComponent implements Component {
private int score = 0;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ShowNameTagComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ShowNameTagComponent.java
similarity index 72%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/ShowNameTagComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ShowNameTagComponent.java
index cbe9f4a..cc52526 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/ShowNameTagComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/ShowNameTagComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
/**
* Маркер для отображения метки имени над сущностью.
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/VelocityComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/VelocityComponent.java
similarity index 88%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/VelocityComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/VelocityComponent.java
index 32dd47c..237623a 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/VelocityComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/VelocityComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class VelocityComponent implements Component {
public double speed;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/WeaponComponent.java b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/WeaponComponent.java
similarity index 85%
rename from src/main/java/xyz/samiker/theendlessweave/core/entities/components/WeaponComponent.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/entities/components/WeaponComponent.java
index f86a160..675be68 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/WeaponComponent.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/entities/components/WeaponComponent.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.entities.components;
+package xyz.samiker.theendlessweave.entities.components;
public class WeaponComponent implements Component {
public final double cooldownTime;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/EnemyFactory.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/EnemyFactory.java
similarity index 83%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/EnemyFactory.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/EnemyFactory.java
index 0f5abb6..e58071b 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/EnemyFactory.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/EnemyFactory.java
@@ -1,13 +1,13 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
-import xyz.samiker.theendlessweave.core.entities.EntitiesFabric;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.AIComponent;
-import xyz.samiker.theendlessweave.core.entities.components.AttackComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PatternConfig;
-import xyz.samiker.theendlessweave.core.logic.ai.EntityAIState;
+import xyz.samiker.theendlessweave.entities.EntitiesFabric;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.AIComponent;
+import xyz.samiker.theendlessweave.entities.components.AttackComponent;
+import xyz.samiker.theendlessweave.entities.components.PatternConfig;
+import xyz.samiker.theendlessweave.logic.ai.EntityAIState;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class EnemyFactory {
public static Entity createEnemy(int entityId, EnemySpawnData spawnData) {
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/EnemySpawnData.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/EnemySpawnData.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/EnemySpawnData.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/EnemySpawnData.java
index b012aa6..3a70357 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/EnemySpawnData.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/EnemySpawnData.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
public class EnemySpawnData {
private final int gridX;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/GameMap.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/GameMap.java
similarity index 90%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/GameMap.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/GameMap.java
index 5ffa4bb..8854693 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/GameMap.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/GameMap.java
@@ -1,9 +1,9 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
-import xyz.samiker.theendlessweave.core.tile.TileUtils;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
+import xyz.samiker.theendlessweave.tile.TileUtils;
+import xyz.samiker.theendlessweave.utils.Array;
public class GameMap {
private final int WIDTH;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/MapGenerator.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/MapGenerator.java
similarity index 98%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/MapGenerator.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/MapGenerator.java
index 12a639b..732ce64 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/MapGenerator.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/MapGenerator.java
@@ -1,10 +1,10 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
-import xyz.samiker.theendlessweave.core.gamemap.EnemySpawnData.EnemyType;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
-import xyz.samiker.theendlessweave.core.tile.TileUtils;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.gamemap.EnemySpawnData.EnemyType;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
+import xyz.samiker.theendlessweave.tile.TileUtils;
+import xyz.samiker.theendlessweave.utils.Array;
import java.util.*;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/MapGeneratorSettings.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/MapGeneratorSettings.java
similarity index 99%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/MapGeneratorSettings.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/MapGeneratorSettings.java
index 82670f3..e8a2d5c 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/MapGeneratorSettings.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/MapGeneratorSettings.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
public class MapGeneratorSettings {
private boolean inverseGeneration;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/Room.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/Room.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/Room.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/Room.java
index bf9be02..f55f877 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/Room.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/Room.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.utils.Array;
import java.util.Random;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomObjectPlacer.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomObjectPlacer.java
similarity index 95%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomObjectPlacer.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomObjectPlacer.java
index cefce3d..854d857 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomObjectPlacer.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomObjectPlacer.java
@@ -1,8 +1,8 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileObject;
-import xyz.samiker.theendlessweave.core.tile.TileObject.TileObjectType;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileObject;
+import xyz.samiker.theendlessweave.tile.TileObject.TileObjectType;
import java.util.Random;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomShapeGenerator.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomShapeGenerator.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomShapeGenerator.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomShapeGenerator.java
index 2835c14..d97e937 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomShapeGenerator.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomShapeGenerator.java
@@ -1,8 +1,8 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
-import xyz.samiker.theendlessweave.core.tile.TileUtils;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
+import xyz.samiker.theendlessweave.tile.TileUtils;
import java.util.Random;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomType.java b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomType.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomType.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomType.java
index 4d8c57c..b8f8d20 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/gamemap/RoomType.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/gamemap/RoomType.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.gamemap;
+package xyz.samiker.theendlessweave.gamemap;
/**
* Типы комнат на карте.
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/Game.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/Game.java
similarity index 87%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/Game.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/Game.java
index 3d29f9c..a64afee 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/Game.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/Game.java
@@ -1,19 +1,19 @@
-package xyz.samiker.theendlessweave.core.logic;
-
-import xyz.samiker.theendlessweave.core.GameData;
-import xyz.samiker.theendlessweave.core.entities.EntitiesFabric;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.ProjectilePool;
-import xyz.samiker.theendlessweave.core.entities.components.AIComponent;
-import xyz.samiker.theendlessweave.core.entities.components.AttackComponent;
-import xyz.samiker.theendlessweave.core.entities.components.PatternConfig;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.gamemap.*;
-import xyz.samiker.theendlessweave.core.logic.ai.EntityAIState;
-import xyz.samiker.theendlessweave.core.systems.ISystem;
-import xyz.samiker.theendlessweave.core.utils.Array;
-
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+package xyz.samiker.theendlessweave.logic;
+
+import xyz.samiker.theendlessweave.GameData;
+import xyz.samiker.theendlessweave.entities.EntitiesFabric;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.ProjectilePool;
+import xyz.samiker.theendlessweave.entities.components.AIComponent;
+import xyz.samiker.theendlessweave.entities.components.AttackComponent;
+import xyz.samiker.theendlessweave.entities.components.PatternConfig;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.gamemap.*;
+import xyz.samiker.theendlessweave.logic.ai.EntityAIState;
+import xyz.samiker.theendlessweave.systems.ISystem;
+import xyz.samiker.theendlessweave.utils.Array;
+
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class Game {
private final GameMap gameMap;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/GameState.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/GameState.java
similarity index 57%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/GameState.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/GameState.java
index 4b0096d..6228409 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/GameState.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/GameState.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.logic;
+package xyz.samiker.theendlessweave.logic;
public enum GameState {
PLAYING,
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/Loop.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/Loop.java
similarity index 91%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/Loop.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/Loop.java
index 382fe7f..8507a0d 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/Loop.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/Loop.java
@@ -1,7 +1,7 @@
-package xyz.samiker.theendlessweave.core.logic;
+package xyz.samiker.theendlessweave.logic;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TARGET_TPS;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TIME_PER_TICK;
+import static xyz.samiker.theendlessweave.utils.Constants.TARGET_TPS;
+import static xyz.samiker.theendlessweave.utils.Constants.TIME_PER_TICK;
public class Loop {
private final Game game;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/PerformanceMonitor.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/PerformanceMonitor.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/PerformanceMonitor.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/PerformanceMonitor.java
index b717057..77314d2 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/PerformanceMonitor.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/PerformanceMonitor.java
@@ -1,7 +1,7 @@
-package xyz.samiker.theendlessweave.core.logic;
+package xyz.samiker.theendlessweave.logic;
-import xyz.samiker.theendlessweave.core.utils.Array;
-import xyz.samiker.theendlessweave.core.utils.Constants;
+import xyz.samiker.theendlessweave.utils.Array;
+import xyz.samiker.theendlessweave.utils.Constants;
import java.util.Arrays;
import java.util.Comparator;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/EntityAIState.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/EntityAIState.java
similarity index 62%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/ai/EntityAIState.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/EntityAIState.java
index ebaccf9..24170e7 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/EntityAIState.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/EntityAIState.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.logic.ai;
+package xyz.samiker.theendlessweave.logic.ai;
public enum EntityAIState {
IDLE,
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/LineOfSightUtil.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/LineOfSightUtil.java
similarity index 91%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/ai/LineOfSightUtil.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/LineOfSightUtil.java
index cd4e6f3..a56a9c6 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/LineOfSightUtil.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/LineOfSightUtil.java
@@ -1,10 +1,10 @@
-package xyz.samiker.theendlessweave.core.logic.ai;
+package xyz.samiker.theendlessweave.logic.ai;
-import xyz.samiker.theendlessweave.core.gamemap.GameMap;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
+import xyz.samiker.theendlessweave.gamemap.GameMap;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
/**
* Утилита для проверки прямой видимости между двумя точками.
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/astar/AStarPathfinder.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/astar/AStarPathfinder.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/ai/astar/AStarPathfinder.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/astar/AStarPathfinder.java
index 0ccc996..0332643 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/astar/AStarPathfinder.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/astar/AStarPathfinder.java
@@ -1,8 +1,8 @@
-package xyz.samiker.theendlessweave.core.logic.ai.astar;
+package xyz.samiker.theendlessweave.logic.ai.astar;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
+import xyz.samiker.theendlessweave.utils.Array;
public class AStarPathfinder {
private static class GraphNode {
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/astar/PathNode.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/astar/PathNode.java
similarity index 88%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/ai/astar/PathNode.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/astar/PathNode.java
index 5f5ff1a..044e890 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/ai/astar/PathNode.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/ai/astar/PathNode.java
@@ -1,7 +1,7 @@
-package xyz.samiker.theendlessweave.core.logic.ai.astar;
+package xyz.samiker.theendlessweave.logic.ai.astar;
-import xyz.samiker.theendlessweave.core.tile.Tile;
-import xyz.samiker.theendlessweave.core.tile.TileType;
+import xyz.samiker.theendlessweave.tile.Tile;
+import xyz.samiker.theendlessweave.tile.TileType;
import java.util.Objects;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/logic/utils/SpatialGrid.java b/shared/src/main/java/xyz/samiker/theendlessweave/logic/utils/SpatialGrid.java
similarity index 88%
rename from src/main/java/xyz/samiker/theendlessweave/core/logic/utils/SpatialGrid.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/logic/utils/SpatialGrid.java
index d0bba2e..e800578 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/logic/utils/SpatialGrid.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/logic/utils/SpatialGrid.java
@@ -1,10 +1,10 @@
-package xyz.samiker.theendlessweave.core.logic.utils;
+package xyz.samiker.theendlessweave.logic.utils;
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.utils.Array;
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.utils.Array;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class SpatialGrid {
private final int cellSize;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/NetworkRegister.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/NetworkRegister.java
similarity index 67%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/NetworkRegister.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/NetworkRegister.java
index f72abb4..339859d 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/NetworkRegister.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/NetworkRegister.java
@@ -1,14 +1,14 @@
-package xyz.samiker.theendlessweave.core.network;
+package xyz.samiker.theendlessweave.network;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryonet.EndPoint;
-import xyz.samiker.theendlessweave.core.GameData;
-import xyz.samiker.theendlessweave.core.entities.components.PositionComponent;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.RenderComponent;
-import xyz.samiker.theendlessweave.core.entities.components.VelocityComponent;
-import xyz.samiker.theendlessweave.core.gamemap.MapGeneratorSettings;
-import xyz.samiker.theendlessweave.core.network.packets.*;
+import xyz.samiker.theendlessweave.GameData;
+import xyz.samiker.theendlessweave.entities.components.PositionComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.RenderComponent;
+import xyz.samiker.theendlessweave.entities.components.VelocityComponent;
+import xyz.samiker.theendlessweave.gamemap.MapGeneratorSettings;
+import xyz.samiker.theendlessweave.network.packets.*;
public class NetworkRegister {
public static void register(EndPoint endPoint) {
diff --git a/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/Packet.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/Packet.java
new file mode 100644
index 0000000..ab100f3
--- /dev/null
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/Packet.java
@@ -0,0 +1,4 @@
+package xyz.samiker.theendlessweave.network.packets;
+
+public abstract class Packet {
+}
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketDestroyEntity.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketDestroyEntity.java
similarity index 55%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketDestroyEntity.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketDestroyEntity.java
index b69b5c4..e0fdb59 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketDestroyEntity.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketDestroyEntity.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.network.packets;
+package xyz.samiker.theendlessweave.network.packets;
public class PacketDestroyEntity extends Packet {
public int id;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketEntityUpdate.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketEntityUpdate.java
similarity index 96%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketEntityUpdate.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketEntityUpdate.java
index 9796ed1..b277cd4 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketEntityUpdate.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketEntityUpdate.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.network.packets;
+package xyz.samiker.theendlessweave.network.packets;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoSerializable;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketInput.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketInput.java
similarity index 71%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketInput.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketInput.java
index 022c609..370cca1 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketInput.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketInput.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.network.packets;
+package xyz.samiker.theendlessweave.network.packets;
public class PacketInput extends Packet {
public boolean up, down, left, right;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketLoginRequest.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketLoginRequest.java
similarity index 89%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketLoginRequest.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketLoginRequest.java
index b3cf5c3..20292a6 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketLoginRequest.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketLoginRequest.java
@@ -1,10 +1,10 @@
-package xyz.samiker.theendlessweave.core.network.packets;
+package xyz.samiker.theendlessweave.network.packets;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoSerializable;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
-import xyz.samiker.theendlessweave.core.GameData;
+import xyz.samiker.theendlessweave.GameData;
public class PacketLoginRequest extends Packet implements KryoSerializable {
public String username;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketLoginResponse.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketLoginResponse.java
similarity index 62%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketLoginResponse.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketLoginResponse.java
index c4e231a..3ca97f1 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketLoginResponse.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketLoginResponse.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core.network.packets;
+package xyz.samiker.theendlessweave.network.packets;
-import xyz.samiker.theendlessweave.core.GameData;
+import xyz.samiker.theendlessweave.GameData;
public class PacketLoginResponse extends Packet {
public boolean accepted;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketSnapshot.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketSnapshot.java
similarity index 57%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketSnapshot.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketSnapshot.java
index 978032c..0d95f64 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketSnapshot.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketSnapshot.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.network.packets;
+package xyz.samiker.theendlessweave.network.packets;
public class PacketSnapshot extends Packet {
public Packet[] entities;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketSpawnEntity.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketSpawnEntity.java
similarity index 92%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketSpawnEntity.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketSpawnEntity.java
index 35e827e..e7805ef 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/PacketSpawnEntity.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/packets/PacketSpawnEntity.java
@@ -1,11 +1,11 @@
-package xyz.samiker.theendlessweave.core.network.packets;
+package xyz.samiker.theendlessweave.network.packets;
import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.KryoSerializable;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
-import xyz.samiker.theendlessweave.core.entities.components.ProjectileComponent;
-import xyz.samiker.theendlessweave.core.entities.components.RenderComponent;
+import xyz.samiker.theendlessweave.entities.components.ProjectileComponent;
+import xyz.samiker.theendlessweave.entities.components.RenderComponent;
public class PacketSpawnEntity extends Packet implements KryoSerializable {
public int id;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/utils/BitFlags.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/utils/BitFlags.java
similarity index 81%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/utils/BitFlags.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/utils/BitFlags.java
index 2605d41..66afe60 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/utils/BitFlags.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/utils/BitFlags.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.network.utils;
+package xyz.samiker.theendlessweave.network.utils;
public class BitFlags {
public static final int HAS_POSITION = 1; // 1
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/utils/PacketPool.java b/shared/src/main/java/xyz/samiker/theendlessweave/network/utils/PacketPool.java
similarity index 84%
rename from src/main/java/xyz/samiker/theendlessweave/core/network/utils/PacketPool.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/network/utils/PacketPool.java
index 0eb9bb1..cfeaaea 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/utils/PacketPool.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/network/utils/PacketPool.java
@@ -1,7 +1,7 @@
-package xyz.samiker.theendlessweave.core.network.utils;
+package xyz.samiker.theendlessweave.network.utils;
-import xyz.samiker.theendlessweave.core.network.packets.Packet;
-import xyz.samiker.theendlessweave.core.network.packets.PacketEntityUpdate;
+import xyz.samiker.theendlessweave.network.packets.Packet;
+import xyz.samiker.theendlessweave.network.packets.PacketEntityUpdate;
import java.util.ArrayDeque;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/settings/ClientSettings.java b/shared/src/main/java/xyz/samiker/theendlessweave/settings/ClientSettings.java
similarity index 94%
rename from src/main/java/xyz/samiker/theendlessweave/client/settings/ClientSettings.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/settings/ClientSettings.java
index d07f77d..14002f7 100644
--- a/src/main/java/xyz/samiker/theendlessweave/client/settings/ClientSettings.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/settings/ClientSettings.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.client.settings;
+package xyz.samiker.theendlessweave.settings;
public enum ClientSettings {
RESOLUTION("video.resolution", "1280x720"),
diff --git a/src/main/java/xyz/samiker/theendlessweave/server/settings/ServerSettings.java b/shared/src/main/java/xyz/samiker/theendlessweave/settings/ServerSettings.java
similarity index 87%
rename from src/main/java/xyz/samiker/theendlessweave/server/settings/ServerSettings.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/settings/ServerSettings.java
index 7caa44c..8e71d3d 100644
--- a/src/main/java/xyz/samiker/theendlessweave/server/settings/ServerSettings.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/settings/ServerSettings.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.server.settings;
+package xyz.samiker.theendlessweave.settings;
public enum ServerSettings {
MODS_DIR("general.mods_dir", "");
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/settings/SettingsManager.java b/shared/src/main/java/xyz/samiker/theendlessweave/settings/SettingsManager.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/settings/SettingsManager.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/settings/SettingsManager.java
index 9df19ff..5f69176 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/settings/SettingsManager.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/settings/SettingsManager.java
@@ -1,6 +1,4 @@
-package xyz.samiker.theendlessweave.core.settings;
-
-import xyz.samiker.theendlessweave.client.settings.ClientSettings;
+package xyz.samiker.theendlessweave.settings;
import java.io.File;
import java.io.FileInputStream;
diff --git a/shared/src/main/java/xyz/samiker/theendlessweave/systems/ISystem.java b/shared/src/main/java/xyz/samiker/theendlessweave/systems/ISystem.java
new file mode 100644
index 0000000..ddb8b25
--- /dev/null
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/systems/ISystem.java
@@ -0,0 +1,8 @@
+package xyz.samiker.theendlessweave.systems;
+
+import xyz.samiker.theendlessweave.entities.Entity;
+import xyz.samiker.theendlessweave.utils.Array;
+
+public interface ISystem {
+ void update(Array entities, double deltaTime);
+}
\ No newline at end of file
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/tile/Tile.java b/shared/src/main/java/xyz/samiker/theendlessweave/tile/Tile.java
similarity index 96%
rename from src/main/java/xyz/samiker/theendlessweave/core/tile/Tile.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/tile/Tile.java
index 98e06d8..dae6cd4 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/tile/Tile.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/tile/Tile.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.tile;
+package xyz.samiker.theendlessweave.tile;
/**
* Тайл карты с поддержкой объектов.
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/tile/TileObject.java b/shared/src/main/java/xyz/samiker/theendlessweave/tile/TileObject.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/tile/TileObject.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/tile/TileObject.java
index 0d46d4c..233669f 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/tile/TileObject.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/tile/TileObject.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.tile;
+package xyz.samiker.theendlessweave.tile;
/**
* Объект на тайле (сундук, ловушка, декорация и т.д.).
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/tile/TileType.java b/shared/src/main/java/xyz/samiker/theendlessweave/tile/TileType.java
similarity index 58%
rename from src/main/java/xyz/samiker/theendlessweave/core/tile/TileType.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/tile/TileType.java
index 7a28d45..474b2e8 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/tile/TileType.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/tile/TileType.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.tile;
+package xyz.samiker.theendlessweave.tile;
public enum TileType {
WALL,
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/tile/TileUtils.java b/shared/src/main/java/xyz/samiker/theendlessweave/tile/TileUtils.java
similarity index 70%
rename from src/main/java/xyz/samiker/theendlessweave/core/tile/TileUtils.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/tile/TileUtils.java
index 108ac13..4ff63ac 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/tile/TileUtils.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/tile/TileUtils.java
@@ -1,6 +1,6 @@
-package xyz.samiker.theendlessweave.core.tile;
+package xyz.samiker.theendlessweave.tile;
-import static xyz.samiker.theendlessweave.core.utils.Constants.TILE_SIZE;
+import static xyz.samiker.theendlessweave.utils.Constants.TILE_SIZE;
public class TileUtils {
public static Tile createTile(TileType type, int x, int y) {
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/utils/Array.java b/shared/src/main/java/xyz/samiker/theendlessweave/utils/Array.java
similarity index 98%
rename from src/main/java/xyz/samiker/theendlessweave/core/utils/Array.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/utils/Array.java
index 1f4db64..5e23185 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/utils/Array.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/utils/Array.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.utils;
+package xyz.samiker.theendlessweave.utils;
import java.util.Arrays;
import java.util.function.Predicate;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/utils/Constants.java b/shared/src/main/java/xyz/samiker/theendlessweave/utils/Constants.java
similarity index 92%
rename from src/main/java/xyz/samiker/theendlessweave/core/utils/Constants.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/utils/Constants.java
index 40794ac..68ea203 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/utils/Constants.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/utils/Constants.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.utils;
+package xyz.samiker.theendlessweave.utils;
public class Constants {
public static final int TILE_SIZE = 60;
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/utils/IntObjectMap.java b/shared/src/main/java/xyz/samiker/theendlessweave/utils/IntObjectMap.java
similarity index 97%
rename from src/main/java/xyz/samiker/theendlessweave/core/utils/IntObjectMap.java
rename to shared/src/main/java/xyz/samiker/theendlessweave/utils/IntObjectMap.java
index 253ed52..87909b4 100644
--- a/src/main/java/xyz/samiker/theendlessweave/core/utils/IntObjectMap.java
+++ b/shared/src/main/java/xyz/samiker/theendlessweave/utils/IntObjectMap.java
@@ -1,4 +1,4 @@
-package xyz.samiker.theendlessweave.core.utils;
+package xyz.samiker.theendlessweave.utils;
import java.util.Arrays;
diff --git a/src/main/java/xyz/samiker/theendlessweave/client/screens/GameDataAware.java b/src/main/java/xyz/samiker/theendlessweave/client/screens/GameDataAware.java
deleted file mode 100644
index ff51991..0000000
--- a/src/main/java/xyz/samiker/theendlessweave/client/screens/GameDataAware.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package xyz.samiker.theendlessweave.client.screens;
-
-import xyz.samiker.theendlessweave.core.GameData;
-
-public interface GameDataAware {
- void setData(GameData data);
-}
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/Component.java b/src/main/java/xyz/samiker/theendlessweave/core/entities/components/Component.java
deleted file mode 100644
index 7ccdd7e..0000000
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/Component.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package xyz.samiker.theendlessweave.core.entities.components;
-
-public interface Component {
-}
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PlayerTagComponent.java b/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PlayerTagComponent.java
deleted file mode 100644
index 41f0318..0000000
--- a/src/main/java/xyz/samiker/theendlessweave/core/entities/components/PlayerTagComponent.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package xyz.samiker.theendlessweave.core.entities.components;
-
-public class PlayerTagComponent implements Component {
-}
\ No newline at end of file
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/Packet.java b/src/main/java/xyz/samiker/theendlessweave/core/network/packets/Packet.java
deleted file mode 100644
index 7c912c8..0000000
--- a/src/main/java/xyz/samiker/theendlessweave/core/network/packets/Packet.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package xyz.samiker.theendlessweave.core.network.packets;
-
-public abstract class Packet {
-}
diff --git a/src/main/java/xyz/samiker/theendlessweave/core/systems/ISystem.java b/src/main/java/xyz/samiker/theendlessweave/core/systems/ISystem.java
deleted file mode 100644
index 8f791e9..0000000
--- a/src/main/java/xyz/samiker/theendlessweave/core/systems/ISystem.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package xyz.samiker.theendlessweave.core.systems;
-
-import xyz.samiker.theendlessweave.core.entities.Entity;
-import xyz.samiker.theendlessweave.core.utils.Array;
-
-public interface ISystem {
- void update(Array entities, double deltaTime);
-}
\ No newline at end of file