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 0000000..3c75ef0
Binary files /dev/null and b/android/src/main/res/mipmap-mdpi/ic_launcher.png differ
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