Explorar o código

I think imma kms

tbvns hai 6 meses
pai
achega
3a441773f7

+ 1 - 1
GD4J/src/main/java/xyz/tbvns/FilesLocations.java

@@ -13,8 +13,8 @@ public class FilesLocations {
     public static final String linuxGeometryDashFolder = System.getProperty("user.home") + "/.local/share/Steam/steamapps/compatdata/322170/pfx/drive_c/users/steamuser/AppData/Local/GeometryDash/";
     public static final String macGeometryDashFolder = System.getProperty("user.home") + "/Library/Application Support/GeometryDash";
 
+    //TODO: Fix that
     public static final String windowGeometryDashResourceFolder = "D:/SteamLibrary/steamapps/common/Geometry Dash/Resources";
-    //TODO: add that
     public static final String linuxGeometryDashResourceFolder = System.getProperty("user.home") + "/.local/share/Steam/steamapps/common/Geometry Dash/Resources";
     //TODO: add that
     public static final String macGeometryDashResourceFolder = System.getProperty("user.home") + "/Library/Application Support/GeometryDash";

+ 44 - 0
GD4J/src/main/java/xyz/tbvns/XmlUtils.java

@@ -1,5 +1,8 @@
 package xyz.tbvns;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class XmlUtils {
     public static String beautify(String xml) {
         StringBuilder result = new StringBuilder();
@@ -25,4 +28,45 @@ public class XmlUtils {
 
         return finalResult.toString();
     }
+
+    public static String gamesheetToXML(String data) {
+        //TODO: Replace that with custom reader
+        String[] lines = data
+                .replace(" ", "")
+                .split("\n");
+        StringBuilder newData = new StringBuilder();
+        for (int i = 0; i < lines.length; i++) {
+            String line = lines[i];
+            if (line.contains("<key>")) {
+                line = line.replace("<key>", "").replace("</key>", "");
+                lines[i] = "";
+                String modify = lines[i + 1];
+                List<String> usableData = new ArrayList<>();
+                for (String s : modify.split("<")) {
+                    for (String s1 : s.split(">")) {
+                        usableData.add(s1);
+                    }
+                }
+                usableData.remove(0);
+                if (usableData.size() == 3) {
+                    usableData.set(0, line);
+                    usableData.set(2, line);
+                    newData.append("<" + usableData.get(0) + ">")
+                           .append(usableData.get(1))
+                           .append("</" + usableData.get(2) + ">")
+                           .append("\n");
+                } else if (lines[i+1].equals("<dict>")) {
+                    newData.append("<dict>\n")
+                           .append("<name>" + line + "</name>\n");
+                }
+                i++;
+            } else {
+                if (line.equals("<plistversion=\"1.0\">")) {
+                    line = "<plist version=\"1.0\">";
+                }
+                newData.append(line + "\n");
+            }
+        }
+        return newData.toString();
+    }
 }

+ 10 - 17
PowerGDEditor/src/main/java/xyz/tbvns/GeometryDash/LevelUtils.java

@@ -1,15 +1,9 @@
 package xyz.tbvns.GeometryDash;
 
-import com.badlogic.gdx.files.FileHandle;
-import com.badlogic.gdx.graphics.Color;
-import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.VertexAttributes;
-import com.badlogic.gdx.graphics.g3d.Material;
 import com.badlogic.gdx.graphics.g3d.Model;
 import com.badlogic.gdx.graphics.g3d.ModelCache;
 import com.badlogic.gdx.graphics.g3d.ModelInstance;
-import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
-import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute;
 import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
 import xyz.tbvns.Managers.TexturesManager;
 import xyz.tbvns.Objects.Level;
@@ -18,7 +12,6 @@ import xyz.tbvns.Objects.Object;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Random;
 
 public class LevelUtils {
     private static List<Model> models = new ArrayList<>();
@@ -35,19 +28,19 @@ public class LevelUtils {
         for (Object object : Object.fromLevel(level)) {
             try {
                 System.out.println(object.getProperties());
-                Model model = new ModelBuilder().createRect(
-                        0f, 0f, 0f,
-                        1f, 0f, 0f,
-                        1f, 1f, 0f,
-                        0, 1, 0f,
-                        0, 0, 0,
-                        TexturesManager.idMaterialMap.get(Integer.parseInt(object.getProperties().get("1"))),
-                        VertexAttributes.Usage.Position | VertexAttributes.Usage.TextureCoordinates
-                );
-//                Model model = new ModelBuilder().createBox(1f, 1f, 0,
+//                Model model = new ModelBuilder().createRect(
+//                        0f, 0f, 0f,
+//                        1f, 0f, 0f,
+//                        1f, 1f, 0f,
+//                        0, 1, 0f,
+//                        0, 0, 0,
 //                        TexturesManager.idMaterialMap.get(Integer.parseInt(object.getProperties().get("1"))),
 //                        VertexAttributes.Usage.Position | VertexAttributes.Usage.TextureCoordinates
 //                );
+                Model model = new ModelBuilder().createBox(1f, 1f, 0,
+                        TexturesManager.idMaterialMap.get(Integer.parseInt(object.getProperties().get("1"))),
+                        VertexAttributes.Usage.Position | VertexAttributes.Usage.TextureCoordinates
+                );
                 models.add(model);
                 modelCache.add(new ModelInstance(model, Float.parseFloat(object.getProperties().get("2")) / 30, Float.parseFloat(object.getProperties().get("3")) / 30, 0));
             } catch (Exception e){};

+ 35 - 9
PowerGDEditor/src/main/java/xyz/tbvns/GeometryDash/TextureExtractor.java

@@ -1,8 +1,15 @@
 package xyz.tbvns.GeometryDash;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlFactory;
+import com.stanfy.gsonxml.GsonXml;
+import com.stanfy.gsonxml.GsonXmlBuilder;
 import org.apache.commons.io.FileUtils;
+import org.xml.sax.SAXException;
+import xyz.tbvns.XmlUtils;
 
 import javax.imageio.ImageIO;
+import javax.xml.parsers.ParserConfigurationException;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.File;
@@ -11,22 +18,28 @@ import java.io.IOException;
 import static java.lang.Math.round;
 
 public class TextureExtractor {
-    public static void extract(File plist, File textures, File output) throws IOException {
-        String config = FileUtils.readFileToString(plist);
+    public static void extract(File plist, File textures, File output) throws IOException, ParserConfigurationException, SAXException {
+        String config = removeLines(FileUtils.readFileToString(plist), 2);
+        config = XmlUtils.gamesheetToXML(config);
+
         BufferedImage image = ImageIO.read(textures);
         String[] readableConfig = config
                 .replace(" ", "")
                 .split("\n");
 
+        if (true) {
+            return;
+        }
+
         String name = "";
         float x = 0, y = 0, w = 0, h = 0;
         boolean rotated = false, ready = false;
         for (int i = 0; i < readableConfig.length; i++) {
             String line = readableConfig[i];
-            if (line.startsWith("<key>") && line.endsWith(".png</key>")) {
+            if (line.contains("<key>") && line.contains(".png</key>")) {
                 name = line.replace("<key>", "").replace("</key>", "");
             }
-            else if (line.equals("<key>textureRect</key>")) {
+            else if (line.contains("<key>textureRect</key>")) {
                 String data = readableConfig[i+1];
                 String[] readableData = data
                         .replace("<string>", "")
@@ -38,17 +51,17 @@ public class TextureExtractor {
                 y = Float.parseFloat(readableData[1]);
                 w = Float.parseFloat(readableData[2]);
                 h = Float.parseFloat(readableData[3]);
-            } else if (line.equals("<key>textureRotated</key>")) {
-                if (readableConfig[i+1].equals("<true/>")) {
+            } else if (line.contains("<key>textureRotated</key>")) {
+                if (readableConfig[i+1].contains("<true/>")) {
                     rotated = true;
                 } else {
                     rotated = false;
                 }
             }
-            else if (line.equals("</dict>")) {
+            else if (line.contains("</dict>")) {
                 ready = true;
             }
-            if (ready && !name.isBlank() && !new File(output.getPath() + "/" + name).exists()) {
+            if (ready && !name.isBlank()) {
                 BufferedImage crop;
                 try {
                     if (!rotated) {
@@ -56,7 +69,8 @@ public class TextureExtractor {
                     } else {
                         crop = rotate(image.getSubimage(round(x), round(y), round(h), round(w)));
                     }
-                    ImageIO.write(crop, "png", new File(output.getPath() + "/" + name));
+                    File file = new File(output.getPath() + "/" + name);
+                    ImageIO.write(crop, "png", file);
                 } catch (Exception e) {}
                 x=0; y=0; w=0; h=0; name = "";
             }
@@ -76,4 +90,16 @@ public class TextureExtractor {
 
         return output;
     }
+
+    public static String removeLines(String s, int nb) {
+        String[] data = s.split("\n");
+        String newData = "";
+        for (int i = 0; i < data.length; i++) {
+            String st = data[i];
+            if (i >= nb) {
+                newData += st + "\n";
+            }
+        }
+        return newData;
+    }
 }

+ 38 - 0
PowerGDEditor/src/main/java/xyz/tbvns/GeometryDash/TexturePojo.java

@@ -0,0 +1,38 @@
+package xyz.tbvns.GeometryDash;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreType;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import javax.annotation.Nullable;
+import java.util.List;
+
+public class TexturePojo {
+    public static class dict {
+        public String name;
+        public String spriteOffset;
+        public String spriteSize;
+        public String spriteSourceSize;
+        public String textureRect;
+        public List<dict> dict;
+        public int format;
+        public String pixelFormat;
+        public String realTextureFileName;
+        public String size;
+        public String smartupdate;
+        public String textureFileName;
+    }
+
+    public static class plist {
+        public dict dict;
+        public double version;
+        public String text;
+    }
+
+    public static class Root {
+
+        public List<plist> plist;
+    }
+
+
+}

+ 0 - 2
PowerGDEditor/src/main/java/xyz/tbvns/Inputs/inputManager.java

@@ -2,10 +2,8 @@ package xyz.tbvns.Inputs;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
-import com.badlogic.gdx.InputProcessor;
 import com.badlogic.gdx.graphics.Camera;
 import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
-import com.badlogic.gdx.input.GestureDetector;
 import com.badlogic.gdx.math.Vector3;
 
 public class inputManager extends CameraInputController {

+ 0 - 8
PowerGDEditor/src/main/java/xyz/tbvns/Main.java

@@ -2,19 +2,15 @@ package xyz.tbvns;
 
 import com.badlogic.gdx.ApplicationAdapter;
 import com.badlogic.gdx.Gdx;
-import com.badlogic.gdx.Input;
 import com.badlogic.gdx.InputProcessor;
 import com.badlogic.gdx.graphics.Camera;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.graphics.PerspectiveCamera;
-import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g3d.*;
 import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
-import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
 import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
 import com.badlogic.gdx.math.Vector3;
 import com.badlogic.gdx.utils.viewport.Viewport;
-import org.lwjgl.opengl.GL;
 import org.lwjgl.opengl.GL11;
 import xyz.tbvns.Inputs.Shortcut;
 import xyz.tbvns.Inputs.inputManager;
@@ -28,7 +24,6 @@ import static org.lwjgl.opengl.GL11.GL_CULL_FACE;
 public class Main extends ApplicationAdapter {
     private ModelBatch batch;
     private Camera camera;
-    private Texture image;
     private Model worldGrid;
     private Model levelGrid;
     private ModelInstance worldGridInstance;
@@ -51,8 +46,6 @@ public class Main extends ApplicationAdapter {
         Gdx.gl.glEnable(GL11.GL_BLEND);
         Gdx.gl.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
 
-        image = new Texture("libgdx.png");
-
         ModelBuilder builder = new ModelBuilder();
 
         //TODO: Make the grids configurable
@@ -110,7 +103,6 @@ public class Main extends ApplicationAdapter {
     @Override
     public void dispose() {
         batch.dispose();
-        image.dispose();
         worldGrid.dispose();
         levelGrid.dispose();
         Ui.dispose();

+ 2 - 3
PowerGDEditor/src/main/java/xyz/tbvns/ConfigManager.java → PowerGDEditor/src/main/java/xyz/tbvns/Managers/ConfigManager.java

@@ -1,7 +1,6 @@
-package xyz.tbvns;
+package xyz.tbvns.Managers;
 
 import org.apache.commons.io.FileUtils;
-import xyz.tbvns.Managers.FilesManager;
 
 import java.io.File;
 import java.io.IOException;
@@ -13,7 +12,7 @@ public class ConfigManager {
         HashMap<String, String> hashMap = new HashMap<>();
         String[] data = config.split("\n");
         for (String s : data) {
-            String[] st = s.replace(" ", "").split(":");
+            String[] st = s.replace(" ", "").replace(String.valueOf((char) 13), "").split(":");
             if (st.length == 2) {
                 hashMap.put(st[0], st[1]);
             } else {

+ 25 - 3
PowerGDEditor/src/main/java/xyz/tbvns/Managers/FilesManager.java

@@ -1,13 +1,35 @@
 package xyz.tbvns.Managers;
 
+import oshi.SystemInfo;
+import oshi.software.os.OperatingSystem;
+import oshi.software.os.linux.LinuxOperatingSystem;
+import oshi.software.os.mac.MacOperatingSystem;
+import oshi.software.os.windows.WindowsOperatingSystem;
+
 import java.io.File;
 
 public class FilesManager {
-    public static File getSaveFolder() {
-        return new File(System.getProperty("user.home") + "/.PowerGD");
+
+    public static final String windowSaveFolder = System.getenv("LOCALAPPDATA") + "/PowerGD";
+    public static final String linuxSaveFolder = System.getProperty("user.home") + "/PowerGD";
+    public static final String macSaveFolder = System.getProperty("user.home") + "/PowerGD";
+
+
+
+    public static String getSaveFolder() {
+        SystemInfo si = new SystemInfo();
+        OperatingSystem os = si.getOperatingSystem();
+        if (os instanceof WindowsOperatingSystem) {
+            return windowSaveFolder;
+        } else if (os instanceof LinuxOperatingSystem) {
+            return linuxSaveFolder;
+        } else if (os instanceof MacOperatingSystem) {
+            return macSaveFolder;
+        }
+        throw new RuntimeException("Unsupported operating system !");
     }
 
     public static File getTextureFolder() {
-        return new File(System.getProperty("user.home") + "/.PowerGD/res");
+        return new File(getSaveFolder() + "/textures");
     }
 }

+ 5 - 6
PowerGDEditor/src/main/java/xyz/tbvns/Managers/TexturesManager.java

@@ -1,17 +1,18 @@
 package xyz.tbvns.Managers;
 
-import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g3d.Material;
 import com.badlogic.gdx.graphics.g3d.attributes.BlendingAttribute;
 import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.Resources;
-import xyz.tbvns.ConfigManager;
 
 import java.io.File;
 import java.util.HashMap;
 
+@Slf4j
 public class TexturesManager {
     public static HashMap<Integer, File> idFileMap;
     public static HashMap<Integer, Material> idMaterialMap;
@@ -21,7 +22,7 @@ public class TexturesManager {
             idFileMap = ConfigManager.parsedTextureMap(ConfigManager.read(new String(Resources.getInputStream("IDList.yml").readAllBytes())));
             idFileMap.forEach((k, v) -> {
                 if (!v.exists()) {
-                    System.out.println(v.getPath());
+//                    System.err.println("Not found: " + v.getPath());
                 }
             });
 
@@ -30,9 +31,7 @@ public class TexturesManager {
             idFileMap.forEach((k, v) -> {
                 if (v.exists()) {
                     Texture texture = new Texture(
-                            new FileHandle(
-                                    TexturesManager.idFileMap.get(k)
-                            )
+                            Gdx.files.absolute(TexturesManager.idFileMap.get(k).getPath().replace("/", "\\"))
                     );
                     Material material = new Material(TextureAttribute.createDiffuse(texture), new BlendingAttribute(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA));
                     idMaterialMap.put(k, material);

+ 2 - 2
PowerGDEditor/src/main/java/xyz/tbvns/Setup.java

@@ -9,9 +9,9 @@ import java.io.File;
 @Slf4j
 public class Setup {
     public static void run() {
-        if (!FilesManager.getSaveFolder().exists()) {
+        if (!new File(FilesManager.getSaveFolder()).exists()) {
             try {
-                FilesManager.getSaveFolder().mkdir();
+                new File(FilesManager.getSaveFolder()).mkdir();
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }

+ 22 - 22
PowerGDEditor/src/main/resources/IDList.yml

@@ -3107,28 +3107,28 @@
 4138: pixelart_1338_001.png
 4139: pixelart_1339_001.png
 4140: pixelart_1340_001.png
-4141: pixelart_1341_001.png
-4142: pixelart_1342_001.png
-4143: pixelart_1343_001.png
-4144: pixelart_1344_001.png
-4145: pixelart_1345_001.png
-4146: pixelart_1346_001.png
-4147: pixelart_1347_001.png
-4148: pixelart_1348_001.png
-4149: pixelart_1349_001.png
-4150: pixelart_1350_001.png
-4151: pixelart_1351_001.png
-4152: pixelart_1352_001.png
-4153: pixelart_1353_001.png
-4154: pixelart_1354_001.png
-4155: pixelart_1355_001.png
-4156: pixelart_1356_001.png
-4157: pixelart_1357_001.png
-4158: pixelart_1358_001.png
-4159: pixelart_1359_001.png
-4160: pixelart_1360_001.png
-4161: pixelart_1361_001.png
-4162: pixelart_1362_001.png
+4141: pixelart_1341_001.pnge
+4142: pixelart_1342_001.pnge
+4143: pixelart_1343_001.pnge
+4144: pixelart_1344_001.pnge
+4145: pixelart_1345_001.pnge
+4146: pixelart_1346_001.pnge
+4147: pixelart_1347_001.pnge
+4148: pixelart_1348_001.pnge
+4149: pixelart_1349_001.pnge
+4150: pixelart_1350_001.pnge
+4151: pixelart_1351_001.pnge
+4152: pixelart_1352_001.pnge
+4153: pixelart_1353_001.pnge
+4154: pixelart_1354_001.pnge
+4155: pixelart_1355_001.pnge
+4156: pixelart_1356_001.pnge
+4157: pixelart_1357_001.pnge
+4158: pixelart_1358_001.pnge
+4159: pixelart_1359_001.pnge
+4160: pixelart_1360_001.pnge
+4161: pixelart_1361_001.pnge
+4162: pixelart_1362_001.pnge
 4163: pixelart_1363_001.png
 4164: pixelart_1364_001.png
 4165: pixelart_1365_001.png

BIN=BIN
PowerGDEditor/src/main/resources/libgdx.png


+ 16 - 0
PowerGDEditor/src/main/resources/logback.xml

@@ -0,0 +1,16 @@
+<configuration debug="false" scan="true">
+
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- encoders are  by default assigned the type
+             ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+        <encoder>
+            <pattern>%d{HH:mm:ss} [%thread] %-5level[%class] L%L - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <root level="INFO">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+    <logger name="ch.qos.logback" level="OFF" additivity="false" />
+</configuration>

+ 27 - 3
pom.xml

@@ -130,10 +130,34 @@
             <artifactId>javafx-controls</artifactId>
             <version>21</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
         <dependency>
-            <groupId>com.googlecode.plist</groupId>
-            <artifactId>dd-plist</artifactId>
-            <version>1.28</version>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.5.11</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>2.1.0-alpha1</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.18.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-xml</artifactId>
+            <version>2.18.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.stanfy</groupId>
+            <artifactId>gson-xml-java</artifactId>
+            <version>0.1.7</version>
         </dependency>
     </dependencies>