feat: support running the game from jar file
This commit is contained in:
@@ -14,6 +14,11 @@ dependencies {
|
|||||||
testImplementation("org.junit.jupiter:junit-jupiter")
|
testImplementation("org.junit.jupiter:junit-jupiter")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.jar {
|
||||||
|
manifest.attributes["Main-Class"] = "eu.midnightdust.yaytris.Tetris"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
tasks.test {
|
tasks.test {
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,8 @@ package eu.midnightdust.yaytris;
|
|||||||
|
|
||||||
import eu.midnightdust.yaytris.util.NightJson;
|
import eu.midnightdust.yaytris.util.NightJson;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -15,8 +17,14 @@ public class Translation {
|
|||||||
* @see NightJson
|
* @see NightJson
|
||||||
*/
|
*/
|
||||||
public static void load(String locale) {
|
public static void load(String locale) {
|
||||||
NightJson json = new NightJson(Translation.class, String.format("translation/%s.json5", locale));
|
String jsonString; // This workaround is needed to support reading translations from json files embedded in the .jar file
|
||||||
json.readJson();
|
try (InputStream stream = Translation.class.getResourceAsStream(String.format("/translation/%s.json5", locale))) {
|
||||||
|
jsonString = stream != null ? new String(stream.readAllBytes()) : "";
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
NightJson json = new NightJson(Translation.class, "translation");
|
||||||
|
json.readJsonFromString(jsonString);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -103,10 +103,6 @@ public class NightJson {
|
|||||||
return String.format(type == String.class || type.isEnum() ? "\"%s\"" : "%s", value);
|
return String.format(type == String.class || type.isEnum() ? "\"%s\"" : "%s", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Read the json file from disk and overwrite the json class's field values.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void readJson() {
|
public void readJson() {
|
||||||
if (fileLocation == null) return;
|
if (fileLocation == null) return;
|
||||||
try {
|
try {
|
||||||
@@ -115,9 +111,20 @@ public class NightJson {
|
|||||||
writeJson();
|
writeJson();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
readJsonFromString(Files.readString(file.toPath()));
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the json file from disk and overwrite the json class's field values.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void readJsonFromString(String jsonString) {
|
||||||
|
try {
|
||||||
Map<String, Object> asMap = jsonToMap(
|
Map<String, Object> asMap = jsonToMap(
|
||||||
Files.readString(file.toPath()).replaceAll("(//)+.*\n", ""), // Replace comment lines (Json5)
|
jsonString.replaceAll("(//)+.*\n", ""), // Replace comment lines (Json5)
|
||||||
(key) -> getField(key).isPresent() ? getField(key).get().getType() : String.class); // Determine data type
|
(key) -> getField(key).isPresent() ? getField(key).get().getType() : String.class); // Determine data type
|
||||||
|
|
||||||
for (String key : asMap.keySet()) {
|
for (String key : asMap.keySet()) {
|
||||||
@@ -130,7 +137,7 @@ public class NightJson {
|
|||||||
((Map<String, Object>)jsonMap.get(null)).put(key, value);
|
((Map<String, Object>)jsonMap.get(null)).put(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException | IllegalAccessException | NoSuchElementException | ClassCastException e) {
|
} catch (IllegalAccessException | NoSuchElementException | ClassCastException e) {
|
||||||
System.out.println("Oh no! An Error occurred whilst reading the JSON file :(");
|
System.out.println("Oh no! An Error occurred whilst reading the JSON file :(");
|
||||||
//noinspection CallToPrintStackTrace
|
//noinspection CallToPrintStackTrace
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class SoundUtil {
|
|||||||
* @param fileLocation the URI of the desired audio file (should be a .wav file)
|
* @param fileLocation the URI of the desired audio file (should be a .wav file)
|
||||||
*/
|
*/
|
||||||
public static void playSoundClip(String fileLocation) {
|
public static void playSoundClip(String fileLocation) {
|
||||||
try (AudioInputStream stream = AudioSystem.getAudioInputStream(getResource(fileLocation))) { // FIXME: Support audio files from JAR. File streams won't work here for some reason.
|
try (AudioInputStream stream = AudioSystem.getAudioInputStream(getResource(fileLocation))) {
|
||||||
AudioFormat format = stream.getFormat();
|
AudioFormat format = stream.getFormat();
|
||||||
DataLine.Info info = new DataLine.Info(Clip.class, format);
|
DataLine.Info info = new DataLine.Info(Clip.class, format);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user