diff --git a/doc/MinecraftVersions.md b/doc/MinecraftVersions.md
index 8632432bc..c3e6bde45 100644
--- a/doc/MinecraftVersions.md
+++ b/doc/MinecraftVersions.md
@@ -1,6 +1,6 @@
# Minecraft Versions
-Once mojang releases a new minecraft version, you need to add the version to the [versions.json](/src/main/resources/assets/mapping/versions.json).
+Once mojang releases a new minecraft version, you need to add the version to the [versions.json](/src/main/resources/assets/minosoft/mapping/versions.json).
The file is a huge json object, see below:
diff --git a/pom.xml b/pom.xml
index b4094d83a..d9db197d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,7 +118,7 @@
git
false
true
- ${project.build.outputDirectory}/assets/git.json
+ ${project.build.outputDirectory}/assets/minosoft/git.json
json
false
diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.java b/src/main/java/de/bixilon/minosoft/Minosoft.java
index c000bcec7..973da26f8 100644
--- a/src/main/java/de/bixilon/minosoft/Minosoft.java
+++ b/src/main/java/de/bixilon/minosoft/Minosoft.java
@@ -19,8 +19,10 @@ import com.jfoenix.controls.JFXDialogLayout;
import de.bixilon.minosoft.config.Configuration;
import de.bixilon.minosoft.config.StaticConfiguration;
import de.bixilon.minosoft.data.accounts.Account;
+import de.bixilon.minosoft.data.assets.JarAssetsManager;
import de.bixilon.minosoft.data.assets.Resources;
import de.bixilon.minosoft.data.locale.LocaleManager;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.versions.Versions;
import de.bixilon.minosoft.gui.main.GUITools;
import de.bixilon.minosoft.gui.main.Launcher;
@@ -32,6 +34,7 @@ import de.bixilon.minosoft.modding.loading.ModLoader;
import de.bixilon.minosoft.modding.loading.Priorities;
import de.bixilon.minosoft.protocol.network.Connection;
import de.bixilon.minosoft.protocol.protocol.LANServerListener;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import de.bixilon.minosoft.terminal.CLI;
import de.bixilon.minosoft.util.CountUpAndDownLatch;
import de.bixilon.minosoft.util.GitInfo;
@@ -49,6 +52,7 @@ import javafx.stage.Stage;
import java.util.HashSet;
public final class Minosoft {
+ public static final JarAssetsManager MINOSOFT_ASSETS_MANAGER = new JarAssetsManager(Minosoft.class);
public static final HashSet EVENT_MANAGERS = new HashSet<>();
public static final HashBiMap CONNECTIONS = HashBiMap.create();
private static final CountUpAndDownLatch START_STATUS_LATCH = new CountUpAndDownLatch(1);
@@ -125,7 +129,7 @@ public final class Minosoft {
taskWorker.addTask(new Task(progress -> {
Log.info("Loading versions.json...");
long mappingStartLoadingTime = System.currentTimeMillis();
- Versions.loadAvailableVersions(Util.readJsonAssetResource("mapping/versions.json"));
+ Versions.loadAvailableVersions(MINOSOFT_ASSETS_MANAGER.readJsonAsset(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "mapping/versions.json")));
Log.info(String.format("Loaded %d versions in %dms", Versions.getVersionIdMap().size(), (System.currentTimeMillis() - mappingStartLoadingTime)));
Resources.load();
Log.info("Loaded all resources!");
diff --git a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt
index a93d31f9f..362c9de0f 100644
--- a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt
+++ b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.kt
@@ -23,9 +23,12 @@ import org.lwjgl.BufferUtils
import java.io.BufferedReader
import java.io.InputStream
import java.io.InputStreamReader
+import java.net.URL
interface AssetsManager {
+ fun getAssetURL(resourceLocation: ResourceLocation): URL
+
fun getAssetSize(resourceLocation: ResourceLocation): Long
fun readAssetAsStream(resourceLocation: ResourceLocation): InputStream
diff --git a/src/main/java/de/bixilon/minosoft/data/assets/JarAssetsManager.kt b/src/main/java/de/bixilon/minosoft/data/assets/JarAssetsManager.kt
new file mode 100644
index 000000000..b33cc20a1
--- /dev/null
+++ b/src/main/java/de/bixilon/minosoft/data/assets/JarAssetsManager.kt
@@ -0,0 +1,38 @@
+/*
+ * Minosoft
+ * Copyright (C) 2021 Moritz Zwerger
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program.If not, see .
+ *
+ * This software is not affiliated with Mojang AB, the original developer of Minecraft.
+ */
+
+package de.bixilon.minosoft.data.assets
+
+import de.bixilon.minosoft.data.mappings.ResourceLocation
+import java.io.FileNotFoundException
+import java.io.InputStream
+import java.net.URL
+
+class JarAssetsManager(
+ private val clazz: Class<*>,
+) : AssetsManager {
+ override fun getAssetURL(resourceLocation: ResourceLocation): URL {
+ return clazz.getResource("/assets/${resourceLocation.namespace}/${resourceLocation.path}")
+ }
+
+ override fun getAssetSize(resourceLocation: ResourceLocation): Long {
+ val inputStream = readAssetAsStream(resourceLocation)
+ val size = inputStream.available()
+ inputStream.close()
+ return size.toLong()
+ }
+
+ override fun readAssetAsStream(resourceLocation: ResourceLocation): InputStream {
+ return clazz.getResourceAsStream("/assets/${resourceLocation.namespace}/${resourceLocation.path}") ?: throw FileNotFoundException("Can not find jar asset $resourceLocation in ${clazz.simpleName}")
+ }
+}
diff --git a/src/main/java/de/bixilon/minosoft/data/assets/MinecraftAssetsManager.kt b/src/main/java/de/bixilon/minosoft/data/assets/MinecraftAssetsManager.kt
index 1b5b6d664..5ca65a1bc 100644
--- a/src/main/java/de/bixilon/minosoft/data/assets/MinecraftAssetsManager.kt
+++ b/src/main/java/de/bixilon/minosoft/data/assets/MinecraftAssetsManager.kt
@@ -26,6 +26,7 @@ import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.InputStream
+import java.net.URL
import java.util.*
import java.util.zip.GZIPInputStream
import java.util.zip.ZipEntry
@@ -183,6 +184,10 @@ class MinecraftAssetsManager(
return getAssetSize(getAssetHash(resourceLocation))
}
+ override fun getAssetURL(resourceLocation: ResourceLocation): URL {
+ TODO()
+ }
+
override fun readAssetAsStream(resourceLocation: ResourceLocation): InputStream {
return readAssetAsStream(getAssetHash(resourceLocation))
}
diff --git a/src/main/java/de/bixilon/minosoft/data/assets/Resources.java b/src/main/java/de/bixilon/minosoft/data/assets/Resources.java
index 0b3df41c7..8ce2a5509 100644
--- a/src/main/java/de/bixilon/minosoft/data/assets/Resources.java
+++ b/src/main/java/de/bixilon/minosoft/data/assets/Resources.java
@@ -16,9 +16,11 @@ package de.bixilon.minosoft.data.assets;
import com.google.common.collect.HashBiMap;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
+import de.bixilon.minosoft.Minosoft;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.versions.Version;
import de.bixilon.minosoft.data.mappings.versions.Versions;
-import de.bixilon.minosoft.util.Util;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import java.io.IOException;
import java.util.HashMap;
@@ -29,7 +31,7 @@ public class Resources {
private static final HashMap PIXLYZER_VERSIONS = new HashMap<>();
public static void load() throws IOException {
- JsonObject json = Util.readJsonAssetResource("mapping/resources.json");
+ JsonObject json = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "mapping/resources.json"));
JsonObject versions = json.getAsJsonObject("versions");
for (Map.Entry versionEntry : versions.entrySet()) {
@@ -42,7 +44,7 @@ public class Resources {
}
// PixLyzer
- JsonObject pixlyzerIndex = Util.readJsonAssetResource("mapping/pixlyzer_index.json");
+ JsonObject pixlyzerIndex = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "mapping/pixlyzer_index.json"));
for (Map.Entry versionEntry : pixlyzerIndex.entrySet()) {
diff --git a/src/main/java/de/bixilon/minosoft/data/locale/LocaleManager.java b/src/main/java/de/bixilon/minosoft/data/locale/LocaleManager.java
index e041560ea..b441be414 100644
--- a/src/main/java/de/bixilon/minosoft/data/locale/LocaleManager.java
+++ b/src/main/java/de/bixilon/minosoft/data/locale/LocaleManager.java
@@ -15,12 +15,11 @@ package de.bixilon.minosoft.data.locale;
import de.bixilon.minosoft.Minosoft;
import de.bixilon.minosoft.ShutdownReasons;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.versions.Versions;
-import de.bixilon.minosoft.util.Util;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import de.bixilon.minosoft.util.logging.Log;
-import java.io.IOException;
-
public class LocaleManager {
private static Language fallbackLanguage; // en_US
private static Language language;
@@ -47,8 +46,8 @@ public class LocaleManager {
return fallbackLanguage.translate(key, data);
}
- private static Language loadLanguage(String language) throws IOException {
- return new Language(language, Util.readJsonAssetResource(String.format("locale/%s.json", language)));
+ private static Language loadLanguage(String language) {
+ return new Language(language, Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, String.format("locale/%s.json", language))));
}
public static void load(String language) {
diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/ResourceLocation.java b/src/main/java/de/bixilon/minosoft/data/mappings/ResourceLocation.java
index b80b02bca..f9d606526 100644
--- a/src/main/java/de/bixilon/minosoft/data/mappings/ResourceLocation.java
+++ b/src/main/java/de/bixilon/minosoft/data/mappings/ResourceLocation.java
@@ -32,7 +32,7 @@ public class ResourceLocation implements Comparable {
public ResourceLocation(String full) {
String[] split = full.split(":");
if (split.length == 1) {
- this.namespace = ProtocolDefinition.DEFAULT_MOD;
+ this.namespace = ProtocolDefinition.DEFAULT_NAMESPACE;
this.path = full;
} else {
this.namespace = split[0];
diff --git a/src/main/java/de/bixilon/minosoft/gui/main/AccountWindow.java b/src/main/java/de/bixilon/minosoft/gui/main/AccountWindow.java
index 3e5090538..17caf839b 100644
--- a/src/main/java/de/bixilon/minosoft/gui/main/AccountWindow.java
+++ b/src/main/java/de/bixilon/minosoft/gui/main/AccountWindow.java
@@ -18,7 +18,9 @@ import de.bixilon.minosoft.ShutdownReasons;
import de.bixilon.minosoft.data.accounts.Account;
import de.bixilon.minosoft.data.locale.LocaleManager;
import de.bixilon.minosoft.data.locale.Strings;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.gui.main.cells.AccountListCell;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.Initializable;
@@ -51,7 +53,7 @@ public class AccountWindow implements Initializable {
public void addMicrosoftAccount() {
try {
- GUITools.showPane("/layout/dialogs/login/microsoft.fxml", Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.LOGIN_MICROSOFT_DIALOG_TITLE));
+ GUITools.showPane(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/dialogs/login/microsoft.fxml"), Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.LOGIN_MICROSOFT_DIALOG_TITLE));
} catch (IOException e) {
e.printStackTrace();
Minosoft.shutdown(e.getMessage(), ShutdownReasons.LAUNCHER_FXML_LOAD_ERROR);
@@ -60,7 +62,7 @@ public class AccountWindow implements Initializable {
public void addMojangAccount() {
try {
- GUITools.showPane("/layout/dialogs/login/mojang.fxml", Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.LOGIN_MOJANG_DIALOG_TITLE));
+ GUITools.showPane(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/dialogs/login/mojang.fxml"), Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.LOGIN_MOJANG_DIALOG_TITLE));
} catch (IOException e) {
e.printStackTrace();
Minosoft.shutdown(e.getMessage(), ShutdownReasons.LAUNCHER_FXML_LOAD_ERROR);
@@ -69,7 +71,7 @@ public class AccountWindow implements Initializable {
public void addOfflineAccount() {
try {
- GUITools.showPane("/layout/dialogs/login/offline.fxml", Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.LOGIN_OFFLINE_DIALOG_TITLE));
+ GUITools.showPane(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/dialogs/login/offline.fxml"), Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.LOGIN_OFFLINE_DIALOG_TITLE));
} catch (IOException e) {
e.printStackTrace();
Minosoft.shutdown(e.getMessage(), ShutdownReasons.LAUNCHER_FXML_LOAD_ERROR);
diff --git a/src/main/java/de/bixilon/minosoft/gui/main/GUITools.java b/src/main/java/de/bixilon/minosoft/gui/main/GUITools.java
index 69d837bba..4f53f6aff 100644
--- a/src/main/java/de/bixilon/minosoft/gui/main/GUITools.java
+++ b/src/main/java/de/bixilon/minosoft/gui/main/GUITools.java
@@ -14,6 +14,8 @@
package de.bixilon.minosoft.gui.main;
import com.jfoenix.controls.JFXComboBox;
+import de.bixilon.minosoft.Minosoft;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.versions.Version;
import de.bixilon.minosoft.data.mappings.versions.Versions;
import de.bixilon.minosoft.util.logging.LogLevels;
@@ -33,7 +35,7 @@ import java.util.Arrays;
import java.util.Base64;
public class GUITools {
- public static final Image MINOSOFT_LOGO = new Image(GUITools.class.getResourceAsStream("/icons/windowIcon.png"));
+ public static final Image MINOSOFT_LOGO = new Image(GUITools.class.getResourceAsStream("/assets/minosoft/textures/icons/windowIcon.png"));
public static final ObservableList VERSIONS = FXCollections.observableArrayList();
public static final JFXComboBox VERSION_COMBO_BOX = new JFXComboBox<>(VERSIONS);
public static final ObservableList LOG_LEVELS = FXCollections.observableList(Arrays.asList(LogLevels.values().clone()));
@@ -75,7 +77,7 @@ public class GUITools {
}
public static Scene initializeScene(Scene scene) {
- scene.getStylesheets().add("/layout/style.css");
+ scene.getStylesheets().add("/assets/minosoft/layout/style.css"); // ToDo: Migrate to minosoft assets manager
if (scene.getWindow() instanceof Stage stage) {
stage.getIcons().add(MINOSOFT_LOGO);
}
@@ -87,8 +89,8 @@ public class GUITools {
return pane;
}
- public static T showPane(String fxmlPath, Modality modality, String title) throws IOException {
- FXMLLoader loader = new FXMLLoader(GUITools.class.getResource(fxmlPath));
+ public static T showPane(ResourceLocation fxmlResourceLocation, Modality modality, String title) throws IOException {
+ FXMLLoader loader = new FXMLLoader(Minosoft.MINOSOFT_ASSETS_MANAGER.getAssetURL(fxmlResourceLocation));
Parent root = loader.load();
Stage stage = new Stage();
stage.initModality(modality);
diff --git a/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java b/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java
index bb66c5f1e..250b28e66 100644
--- a/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java
+++ b/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java
@@ -17,8 +17,10 @@ import de.bixilon.minosoft.Minosoft;
import de.bixilon.minosoft.ShutdownReasons;
import de.bixilon.minosoft.data.locale.LocaleManager;
import de.bixilon.minosoft.data.locale.Strings;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.versions.Version;
import de.bixilon.minosoft.protocol.protocol.LANServerListener;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import de.bixilon.minosoft.util.logging.Log;
import javafx.application.Platform;
import javafx.collections.FXCollections;
@@ -68,7 +70,7 @@ public class Launcher {
ServerListCell.SERVER_LIST_VIEW.setItems(servers);
LANServerListener.removeAll(); // remove all LAN Servers
- FXMLLoader loader = new FXMLLoader(Launcher.class.getResource("/layout/main.fxml"));
+ FXMLLoader loader = new FXMLLoader(Minosoft.MINOSOFT_ASSETS_MANAGER.getAssetURL(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/main.fxml")));
VBox root;
try {
root = loader.load();
diff --git a/src/main/java/de/bixilon/minosoft/gui/main/MainWindow.java b/src/main/java/de/bixilon/minosoft/gui/main/MainWindow.java
index 4a6a8830e..8c5931f43 100644
--- a/src/main/java/de/bixilon/minosoft/gui/main/MainWindow.java
+++ b/src/main/java/de/bixilon/minosoft/gui/main/MainWindow.java
@@ -23,9 +23,11 @@ import de.bixilon.minosoft.ShutdownReasons;
import de.bixilon.minosoft.data.accounts.Account;
import de.bixilon.minosoft.data.locale.LocaleManager;
import de.bixilon.minosoft.data.locale.Strings;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.versions.Versions;
import de.bixilon.minosoft.data.text.ChatComponent;
import de.bixilon.minosoft.protocol.protocol.LANServerListener;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import de.bixilon.minosoft.util.DNSUtil;
import de.bixilon.minosoft.util.logging.Log;
import javafx.application.Platform;
@@ -63,7 +65,7 @@ public class MainWindow implements Initializable {
public static void manageAccounts() {
try {
- Parent parent = new FXMLLoader(MainWindow.class.getResource("/layout/accounts.fxml")).load();
+ Parent parent = new FXMLLoader(Minosoft.MINOSOFT_ASSETS_MANAGER.getAssetURL(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/accounts.fxml"))).load();
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
stage.setTitle(LocaleManager.translate(Strings.MANAGE_ACCOUNTS_NO_ACCOUNT_ERROR_TITLE));
@@ -284,7 +286,7 @@ public class MainWindow implements Initializable {
public void openSettings() {
try {
- Parent parent = new FXMLLoader(MainWindow.class.getResource("/layout/settings.fxml")).load();
+ Parent parent = new FXMLLoader(Minosoft.MINOSOFT_ASSETS_MANAGER.getAssetURL(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/settings.fxml"))).load();
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
stage.setTitle(LocaleManager.translate(Strings.SETTINGS_TITLE));
diff --git a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java
index 1d781e8d9..96969411d 100644
--- a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java
+++ b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java
@@ -20,6 +20,7 @@ import de.bixilon.minosoft.Minosoft;
import de.bixilon.minosoft.data.Player;
import de.bixilon.minosoft.data.locale.LocaleManager;
import de.bixilon.minosoft.data.locale.Strings;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.data.mappings.versions.Version;
import de.bixilon.minosoft.data.mappings.versions.Versions;
import de.bixilon.minosoft.data.player.PingBars;
@@ -80,7 +81,7 @@ public class ServerListCell extends ListCell implements Initializable {
private Server server;
public static ServerListCell newInstance() {
- FXMLLoader loader = new FXMLLoader(ServerListCell.class.getResource("/layout/cells/server.fxml"));
+ FXMLLoader loader = new FXMLLoader(Minosoft.MINOSOFT_ASSETS_MANAGER.getAssetURL(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/cells/server.fxml")));
try {
loader.load();
return loader.getController();
@@ -442,7 +443,7 @@ public class ServerListCell extends ListCell implements Initializable {
public void manageSessions() {
try {
- SessionsWindow sessionsWindow = GUITools.showPane("/layout/sessions.fxml", Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.SESSIONS_DIALOG_TITLE, this.server.getName().getMessage()));
+ SessionsWindow sessionsWindow = GUITools.showPane(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/sessions.fxml"), Modality.APPLICATION_MODAL, LocaleManager.translate(Strings.SESSIONS_DIALOG_TITLE, this.server.getName().getMessage()));
sessionsWindow.setServer(this.server);
} catch (IOException e) {
e.printStackTrace();
diff --git a/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java
index ffd3b6797..371cf823e 100644
--- a/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java
+++ b/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java
@@ -13,11 +13,14 @@
package de.bixilon.minosoft.gui.main;
+import de.bixilon.minosoft.Minosoft;
import de.bixilon.minosoft.data.locale.LocaleManager;
import de.bixilon.minosoft.data.locale.Strings;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.modding.event.EventInvokerCallback;
import de.bixilon.minosoft.modding.event.events.ConnectionStateChangeEvent;
import de.bixilon.minosoft.protocol.network.Connection;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
@@ -43,7 +46,7 @@ public class SessionListCell extends ListCell implements Initializab
private Connection connection;
public static SessionListCell newInstance() {
- FXMLLoader loader = new FXMLLoader(SessionListCell.class.getResource("/layout/cells/session.fxml"));
+ FXMLLoader loader = new FXMLLoader(Minosoft.MINOSOFT_ASSETS_MANAGER.getAssetURL(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/cells/session.fxml")));
try {
loader.load();
return loader.getController();
diff --git a/src/main/java/de/bixilon/minosoft/gui/main/cells/AccountListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/cells/AccountListCell.java
index 19ce540d6..202cbde2a 100644
--- a/src/main/java/de/bixilon/minosoft/gui/main/cells/AccountListCell.java
+++ b/src/main/java/de/bixilon/minosoft/gui/main/cells/AccountListCell.java
@@ -18,7 +18,9 @@ import de.bixilon.minosoft.Minosoft;
import de.bixilon.minosoft.data.accounts.Account;
import de.bixilon.minosoft.data.locale.LocaleManager;
import de.bixilon.minosoft.data.locale.Strings;
+import de.bixilon.minosoft.data.mappings.ResourceLocation;
import de.bixilon.minosoft.gui.main.GUITools;
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import de.bixilon.minosoft.util.logging.Log;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
@@ -49,7 +51,7 @@ public class AccountListCell extends ListCell implements Initializable
private Account account;
public static AccountListCell newInstance() {
- FXMLLoader loader = new FXMLLoader(AccountListCell.class.getResource("/layout/cells/account.fxml"));
+ FXMLLoader loader = new FXMLLoader(Minosoft.MINOSOFT_ASSETS_MANAGER.getAssetURL(new ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "layout/cells/account.fxml")));
try {
loader.load();
return loader.getController();
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt
index 5445d1e37..0209c6987 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/WorldRenderer.kt
@@ -17,6 +17,7 @@ import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.config.StaticConfiguration
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
import de.bixilon.minosoft.data.Directions
+import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.data.mappings.blocks.BlockState
import de.bixilon.minosoft.data.text.RGBColor
import de.bixilon.minosoft.data.world.*
@@ -92,7 +93,7 @@ class WorldRenderer(
blockTextureArray.load()
- chunkShader = Shader("chunk_vertex.glsl", "chunk_fragment.glsl")
+ chunkShader = Shader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "rendering/shader/chunk_vertex.glsl"), ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "rendering/shader/chunk_fragment.glsl"))
chunkShader.load()
// register keybindings
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/elements/text/HUDTextElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/elements/text/HUDTextElement.kt
index dee32e297..c0da201a1 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/hud/elements/text/HUDTextElement.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/hud/elements/text/HUDTextElement.kt
@@ -24,6 +24,7 @@ import de.bixilon.minosoft.gui.rendering.hud.elements.HUDElement
import de.bixilon.minosoft.gui.rendering.shader.Shader
import de.bixilon.minosoft.gui.rendering.textures.TextureArray
import de.bixilon.minosoft.protocol.network.Connection
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import glm_.glm
import glm_.mat4x4.Mat4
import glm_.vec2.Vec2
@@ -133,7 +134,7 @@ class HUDTextElement(val connection: Connection, val hudRenderer: HUDRenderer, v
hudMeshHUD = HUDFontMesh()
hudMeshHUD.load()
- fontShader = Shader("font_vertex.glsl", "font_fragment.glsl")
+ fontShader = Shader(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "rendering/shader/font_vertex.glsl"), ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "rendering/shader/font_fragment.glsl"))
fontShader.load()
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt
index a1c8fa205..d17722ff3 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt
@@ -13,6 +13,9 @@
package de.bixilon.minosoft.gui.rendering.shader
+import de.bixilon.minosoft.Minosoft
+import de.bixilon.minosoft.data.assets.AssetsManager
+import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.gui.rendering.exceptions.ShaderLoadingException
import de.bixilon.minosoft.gui.rendering.textures.TextureArray
import de.bixilon.minosoft.gui.rendering.util.OpenGLUtil
@@ -28,12 +31,15 @@ import org.lwjgl.opengl.GL11.GL_FALSE
import org.lwjgl.opengl.GL20.*
import org.lwjgl.system.MemoryUtil
-class Shader(private val vertexPath: String, private val fragmentPath: String) {
+class Shader(
+ private val vertexPath: ResourceLocation,
+ private val fragmentPath: ResourceLocation,
+) {
private var programId = 0
- fun load(): Int {
- val vertexShader = ShaderUtil.createShader(vertexPath, GL_VERTEX_SHADER_ARB)
- val fragmentShader = ShaderUtil.createShader(fragmentPath, GL_FRAGMENT_SHADER_ARB)
+ fun load(assetsManager: AssetsManager = Minosoft.MINOSOFT_ASSETS_MANAGER): Int {
+ val vertexShader = ShaderUtil.createShader(assetsManager, vertexPath, GL_VERTEX_SHADER_ARB)
+ val fragmentShader = ShaderUtil.createShader(assetsManager, fragmentPath, GL_FRAGMENT_SHADER_ARB)
programId = glCreateProgramObjectARB()
if (programId.toLong() == MemoryUtil.NULL) {
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/ShaderUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/ShaderUtil.kt
index c2eb4c884..d226090c1 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/ShaderUtil.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/ShaderUtil.kt
@@ -13,21 +13,23 @@
package de.bixilon.minosoft.gui.rendering.shader
+import de.bixilon.minosoft.Minosoft
+import de.bixilon.minosoft.data.assets.AssetsManager
+import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.gui.rendering.exceptions.ShaderLoadingException
import de.bixilon.minosoft.gui.rendering.util.OpenGLUtil
-import de.bixilon.minosoft.util.Util
import org.lwjgl.opengl.ARBShaderObjects.*
import org.lwjgl.opengl.GL11.GL_FALSE
import org.lwjgl.system.MemoryUtil
object ShaderUtil {
- fun createShader(shaderPath: String, shaderType: Int): Int {
+ fun createShader(assetsManager: AssetsManager = Minosoft.MINOSOFT_ASSETS_MANAGER, resourceLocation: ResourceLocation, shaderType: Int): Int {
val shaderId = glCreateShaderObjectARB(shaderType)
if (shaderId.toLong() == MemoryUtil.NULL) {
throw ShaderLoadingException()
}
- glShaderSourceARB(shaderId, Util.readAssetResource("rendering/shader/$shaderPath"))
+ glShaderSourceARB(shaderId, assetsManager.readStringAsset(resourceLocation))
glCompileShaderARB(shaderId)
if (glGetObjectParameteriARB(shaderId, GL_OBJECT_COMPILE_STATUS_ARB) == GL_FALSE) {
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt
index 0e239b97e..955a02fb3 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt
@@ -68,7 +68,7 @@ class Texture(
}
companion object {
- fun getResourceTextureIdentifier(namespace: String = ProtocolDefinition.DEFAULT_MOD, textureName: String): ResourceLocation {
+ fun getResourceTextureIdentifier(namespace: String = ProtocolDefinition.DEFAULT_NAMESPACE, textureName: String): ResourceLocation {
var texturePath = textureName
texturePath = texturePath.removePrefix("/")
diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java
index 6bde2438e..c3de6a551 100644
--- a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java
+++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java
@@ -42,7 +42,8 @@ public final class ProtocolDefinition {
public static final InetAddress LAN_SERVER_BROADCAST_INET_ADDRESS;
public static final int LAN_SERVER_MAXIMUM_SERVERS = 100; // maximum number of lan servers, set because otherwise dos attacks would be easy
- public static final String DEFAULT_MOD = "minecraft";
+ public static final String DEFAULT_NAMESPACE = "minecraft";
+ public static final String MINOSOFT_NAMESPACE = "minosoft";
public static final char TEXT_COMPONENT_SPECIAL_PREFIX_CHAR = 'ยง';
public static final int DEFAULT_BUFFER_SIZE = 4096;
diff --git a/src/main/java/de/bixilon/minosoft/util/GitInfo.kt b/src/main/java/de/bixilon/minosoft/util/GitInfo.kt
index 40f974a0f..cf1d6458f 100644
--- a/src/main/java/de/bixilon/minosoft/util/GitInfo.kt
+++ b/src/main/java/de/bixilon/minosoft/util/GitInfo.kt
@@ -13,6 +13,9 @@
package de.bixilon.minosoft.util
+import de.bixilon.minosoft.Minosoft
+import de.bixilon.minosoft.data.mappings.ResourceLocation
+import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.logging.Log
import de.bixilon.minosoft.util.logging.LogLevels
import java.text.DateFormat
@@ -68,7 +71,7 @@ object GitInfo {
fun load() {
try {
val dateFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
- val json = Util.readJsonAssetResource("git.json")
+ val json = Minosoft.MINOSOFT_ASSETS_MANAGER.readJsonAsset(ResourceLocation(ProtocolDefinition.MINOSOFT_NAMESPACE, "git.json"))
GIT_BRANCH = json["git.branch"].asString
GIT_BUILD_HOST_BRANCH = json["git.build.host"].asString
GIT_BUILD_TIME = dateFormat.parse(json["git.build.time"].asString).time
diff --git a/src/main/java/de/bixilon/minosoft/util/Util.java b/src/main/java/de/bixilon/minosoft/util/Util.java
index af7aaf75f..07acb6b05 100644
--- a/src/main/java/de/bixilon/minosoft/util/Util.java
+++ b/src/main/java/de/bixilon/minosoft/util/Util.java
@@ -23,8 +23,6 @@ import de.bixilon.minosoft.protocol.protocol.InByteBuffer;
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition;
import de.bixilon.minosoft.util.logging.Log;
import de.bixilon.minosoft.util.microsoft.MicrosoftOAuthUtils;
-import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
-import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.jetbrains.annotations.NotNull;
import java.io.*;
@@ -172,23 +170,6 @@ public final class Util {
return result.toString();
}
- public static String sha1(String string) {
- return sha1(string.getBytes(StandardCharsets.UTF_8));
- }
-
- public static HashMap readTarGzFile(String fileName) throws IOException {
- File inputFile = new File(fileName);
- TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(new GZIPInputStream(new FileInputStream(inputFile)));
- HashMap ret = new HashMap<>();
- TarArchiveEntry entry;
- while ((entry = tarArchiveInputStream.getNextTarEntry()) != null) {
- ret.put(entry.getName(), readReader(new BufferedReader(new InputStreamReader(tarArchiveInputStream)), false));
- }
- tarArchiveInputStream.close();
-
- return ret;
- }
-
public static String readReader(BufferedReader reader, boolean closeStream) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
String line;
@@ -203,33 +184,6 @@ public final class Util {
return stringBuilder.toString();
}
- public static HashMap readJsonTarStream(InputStream inputStream) throws IOException {
- TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(inputStream);
- HashMap ret = new HashMap<>();
- TarArchiveEntry entry;
- while ((entry = tarArchiveInputStream.getNextTarEntry()) != null) {
- ret.put(entry.getName(), JsonParser.parseReader(new InputStreamReader(tarArchiveInputStream)).getAsJsonObject());
- }
- tarArchiveInputStream.close();
-
- return ret;
- }
-
- public static JsonObject readJsonAssetResource(String path) throws IOException {
- return readJsonAssetResource(path, Util.class);
- }
-
- public static JsonObject readJsonAssetResource(String path, Class> clazz) throws IOException {
- InputStreamReader reader = readAssetResource(path, clazz);
- JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
- reader.close();
- return json;
- }
-
- public static InputStreamReader readAssetResource(String path, Class> clazz) {
- return new InputStreamReader(clazz.getResourceAsStream("/assets/" + path));
- }
-
public static JsonObject readJsonFromZip(String fileName, ZipFile zipFile) throws IOException {
InputStreamReader reader = getInputSteamFromZip(fileName, zipFile);
JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
@@ -241,13 +195,6 @@ public final class Util {
return new InputStreamReader(zipFile.getInputStream(zipFile.getEntry(fileName)));
}
- public static JsonObject readJsonFromFile(String fileName) throws IOException {
- FileReader reader = new FileReader(fileName);
- JsonObject json = JsonParser.parseReader(reader).getAsJsonObject();
- reader.close();
- return json;
- }
-
public static String readFile(String fileName) throws IOException {
FileReader reader = new FileReader(fileName);
return readReader(new BufferedReader(reader), true);
@@ -275,7 +222,6 @@ public final class Util {
public static InputStream getInputStreamByURL(String url) throws IOException {
return new URL(url).openConnection().getInputStream();
- // return new BufferedInputStream(new URL(url).openStream());
}
public static ThreadFactory getThreadFactory(String threadName) {
@@ -311,10 +257,6 @@ public final class Util {
return result.substring(0, result.indexOf(second));
}
- public static String readAssetResource(String path) throws IOException {
- return readReader(new BufferedReader(readAssetResource(path, Util.class)), true);
- }
-
public static boolean doesStringContainsUppercaseLetters(String string) {
return !string.toLowerCase().equals(string);
}
diff --git a/src/main/resources/layout/accounts.fxml b/src/main/resources/assets/minosoft/layout/accounts.fxml
similarity index 100%
rename from src/main/resources/layout/accounts.fxml
rename to src/main/resources/assets/minosoft/layout/accounts.fxml
diff --git a/src/main/resources/layout/cells/account.fxml b/src/main/resources/assets/minosoft/layout/cells/account.fxml
similarity index 100%
rename from src/main/resources/layout/cells/account.fxml
rename to src/main/resources/assets/minosoft/layout/cells/account.fxml
diff --git a/src/main/resources/layout/cells/server.fxml b/src/main/resources/assets/minosoft/layout/cells/server.fxml
similarity index 100%
rename from src/main/resources/layout/cells/server.fxml
rename to src/main/resources/assets/minosoft/layout/cells/server.fxml
diff --git a/src/main/resources/layout/cells/session.fxml b/src/main/resources/assets/minosoft/layout/cells/session.fxml
similarity index 100%
rename from src/main/resources/layout/cells/session.fxml
rename to src/main/resources/assets/minosoft/layout/cells/session.fxml
index 522bf0dcd..bfe89fa31 100644
--- a/src/main/resources/layout/cells/session.fxml
+++ b/src/main/resources/assets/minosoft/layout/cells/session.fxml
@@ -1,9 +1,4 @@
-
-
-
-
-
+
+
+
+
+