From 95d61bf1d6c9a10e512e0389e528e527e85c90ed Mon Sep 17 00:00:00 2001 From: Max Wittig <max.wittig95@gmail.com> Date: Thu, 27 Oct 2016 18:51:37 +0200 Subject: [PATCH] levelpacks are now read from jar and from user dir --- .../bricked/game/levels/LevelPackHandler.java | 64 ++++++++++++++++--- ...elPackReader.java => LevelPackParser.java} | 18 ++---- src/de/bricked/resources/levelpacks/files.txt | 1 + src/de/bricked/utils/FileUtils.java | 39 +++++++++++ 4 files changed, 101 insertions(+), 21 deletions(-) rename src/de/bricked/game/levels/{LevelPackReader.java => LevelPackParser.java} (81%) create mode 100644 src/de/bricked/resources/levelpacks/files.txt create mode 100644 src/de/bricked/utils/FileUtils.java diff --git a/src/de/bricked/game/levels/LevelPackHandler.java b/src/de/bricked/game/levels/LevelPackHandler.java index dd39ae3..6e2be4b 100644 --- a/src/de/bricked/game/levels/LevelPackHandler.java +++ b/src/de/bricked/game/levels/LevelPackHandler.java @@ -1,12 +1,18 @@ package de.bricked.game.levels; -import java.io.File; +import de.bricked.utils.FileUtils; +import tools.PathUtils; + +import java.io.*; +import java.nio.file.FileSystems; +import java.nio.file.Files; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; public class LevelPackHandler { - private static String directory = "src/de/bricked/resources/levelpacks/"; + private static final String directory = "/de/bricked/resources/levelpacks/"; private static final String DEFAULT_PACKAGE_NAME = "default"; private static ArrayList<LevelPack> sort(ArrayList<LevelPack> levelPackArrayList) @@ -40,18 +46,60 @@ public class LevelPackHandler public static ArrayList<LevelPack> getAllLevelPacks() { ArrayList<LevelPack> levelPacks = new ArrayList<>(); - for(File currentFile : getListOfFiles()) + for(String currentFileContent : getFileContent()) { - LevelPackReader levelPackReader = new LevelPackReader(currentFile.getName()); - levelPacks.add(levelPackReader.read()); + LevelPackParser levelPackParser = new LevelPackParser(currentFileContent); + levelPacks.add(levelPackParser.read()); } return sort(levelPacks); } - private static File[] getListOfFiles() + private static ArrayList<String> getFilesFromJar() + { + ArrayList<String> stringArrayList = new ArrayList<>(); + try + { + String text = FileUtils.getFileContentFromJar(directory+"files.txt"); + String[] filenamesArray = text.split(" "); + for(String filename : filenamesArray) + { + stringArrayList.add(FileUtils.getFileContentFromJar(directory + filename)); + } + + } + catch (Exception e) + { + System.out.println(e); + } + return stringArrayList; + } + + private static ArrayList<String> getFileContentFromUserDir() + { + ArrayList<String> stringContent = new ArrayList<>(); + File folder = new File(PathUtils.getOSindependentPath().toFile(), "deadspaghetti/bricked/levelpacks/"); + ArrayList<File> fileArrayList = new ArrayList<>(Arrays.asList(folder.listFiles())); + for(File file : fileArrayList) + { + try + { + stringContent.add(new String(Files.readAllBytes(FileSystems.getDefault().getPath(file.getPath())))); + + } + catch (IOException e) + { + e.printStackTrace(); + } + } + return stringContent; + } + + private static ArrayList<String> getFileContent() { - File folder = new File(directory); - return folder.listFiles(); + ArrayList<String> fileArrayList = new ArrayList<>(); + fileArrayList.addAll(getFileContentFromUserDir()); + fileArrayList.addAll(getFilesFromJar()); + return fileArrayList; } } diff --git a/src/de/bricked/game/levels/LevelPackReader.java b/src/de/bricked/game/levels/LevelPackParser.java similarity index 81% rename from src/de/bricked/game/levels/LevelPackReader.java rename to src/de/bricked/game/levels/LevelPackParser.java index 92399a9..3245087 100644 --- a/src/de/bricked/game/levels/LevelPackReader.java +++ b/src/de/bricked/game/levels/LevelPackParser.java @@ -4,27 +4,20 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; - import de.bricked.game.paddle.PaddleSize; import logger.LogLevel; import logger.Logger; - -import java.io.File; -import java.nio.file.FileSystems; -import java.nio.file.Files; import java.util.ArrayList; import java.util.Comparator; -public class LevelPackReader +public class LevelPackParser { - private String filename; - private String directory; + private String fileContents; - public LevelPackReader(String filename) + public LevelPackParser(String fileContents) { - this.directory = "src/de/bricked/resources/levelpacks/"; - this.filename = filename; + this.fileContents = fileContents; } private ArrayList<Level> parseLevels(JsonArray levelPackArray) @@ -82,8 +75,7 @@ public class LevelPackReader { try { - String jsonContent = new String(Files.readAllBytes(FileSystems.getDefault().getPath(directory + filename))); - JsonObject root = new JsonParser().parse(jsonContent).getAsJsonObject(); + JsonObject root = new JsonParser().parse(fileContents).getAsJsonObject(); String packageName = root.get("name").getAsString(); String packageAuthor = root.get("author").getAsString(); String packageVersion = root.get("version").getAsString(); diff --git a/src/de/bricked/resources/levelpacks/files.txt b/src/de/bricked/resources/levelpacks/files.txt new file mode 100644 index 0000000..a3d1c01 --- /dev/null +++ b/src/de/bricked/resources/levelpacks/files.txt @@ -0,0 +1 @@ +default.json Eimer.json \ No newline at end of file diff --git a/src/de/bricked/utils/FileUtils.java b/src/de/bricked/utils/FileUtils.java new file mode 100644 index 0000000..24e14d3 --- /dev/null +++ b/src/de/bricked/utils/FileUtils.java @@ -0,0 +1,39 @@ +package de.bricked.utils; + + +import de.bricked.game.levels.LevelPackHandler; +import logger.LogLevel; +import logger.Logger; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class FileUtils +{ + public static String getFileContentFromJar(String path) + { + try + { + InputStream inputStream = FileUtils.class.getResourceAsStream(path); + BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream)); + String line = ""; + StringBuilder text = new StringBuilder(); + + while (line != null) + { + line = bufferedReader.readLine(); + if (line != null) + text.append(line); + } + return text.toString(); + } + catch (Exception e) + { + Logger.log(LogLevel.ERROR, Logger.exceptionToString(e)); + } + return null; + } +} -- GitLab