diff --git a/SubServers.Bungee/common/pom.xml b/SubServers.Bungee/common/pom.xml
index 3e93a8a7..ee161309 100644
--- a/SubServers.Bungee/common/pom.xml
+++ b/SubServers.Bungee/common/pom.xml
@@ -28,7 +28,7 @@
net.ME1312.Galaxi
GalaxiUtil
- 21w26b
+ 21w27b
compile
diff --git a/SubServers.Bungee/pom.xml b/SubServers.Bungee/pom.xml
index 4f66459c..7ad737be 100644
--- a/SubServers.Bungee/pom.xml
+++ b/SubServers.Bungee/pom.xml
@@ -43,6 +43,18 @@
1.1
compile
+
+ org.kamranzafar
+ jtar
+ 2.3
+ compile
+
+
+ org.tukaani
+ xz
+ 1.9
+ compile
+
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java
index 6185814d..746aeab5 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubCreator.java
@@ -82,8 +82,9 @@ public class ExternalSubCreator extends SubCreator {
}
if (host.available && !Util.getDespiteException(() -> Util.reflect(SubProxy.class.getDeclaredField("reloading"), host.plugin), false)) {
- host.queue(new PacketExUploadTemplates(host.plugin));
- if (enableRT == null || enableRT) host.queue(new PacketExDownloadTemplates(host.plugin, host));
+ host.queue(new PacketExConfigureHost(host.plugin, host), new PacketExUploadTemplates(host.plugin, () -> {
+ if (enableRT == null || enableRT) host.queue(new PacketExDownloadTemplates(host.plugin, host));
+ }));
}
}
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/FileScanner.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/FileScanner.java
index ac3e8684..609e5802 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/FileScanner.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Library/FileScanner.java
@@ -19,12 +19,7 @@ public abstract class FileScanner {
* @param whitelist File Whitelist
*/
protected void scan(File dir, String... whitelist) throws IOException {
- List files;
- try {
- files = Util.reflect(Util.class.getDeclaredMethod("zipsearch", File.class, File.class), null, dir, dir);
- } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
- throw new IllegalStateException("Cannot access zipsearch()", e);
- }
+ List files = Util.searchDirectory(dir);
if (files.size() <= 0 || whitelist.length <= 0)
return;
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java
index 587283a0..d20c9bc1 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExDownloadTemplates.java
@@ -8,10 +8,22 @@ import net.ME1312.SubData.Server.Protocol.PacketStreamOut;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator;
+import net.ME1312.SubServers.Bungee.Host.SubCreator.ServerTemplate;
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
import net.ME1312.SubServers.Bungee.SubProxy;
+import org.kamranzafar.jtar.TarEntry;
+import org.kamranzafar.jtar.TarOutputStream;
+import org.tukaani.xz.LZMA2Options;
+import org.tukaani.xz.XZOutputStream;
+
+import java.io.File;
+import java.io.FileInputStream;
import java.io.OutputStream;
+import java.util.HashMap;
+
+import static org.tukaani.xz.LZMA2Options.MODE_FAST;
+import static org.tukaani.xz.XZ.CHECK_SHA256;
/**
* External Host Template Download Packet
@@ -39,8 +51,27 @@ public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut {
public void send(SubDataClient client, OutputStream stream) throws Throwable {
try {
if (client.getBlockSize() < DataSize.MBB) client.tempBlockSize(DataSize.MBB);
- Util.zip(new UniversalFile(plugin.dir, "SubServers:Templates"), stream);
- stream.close();
+ HashMap map = Util.getDespiteException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("templates"), ((ExternalHost) client.getHandler()).getCreator()), new HashMap<>());
+ TarOutputStream tar = new TarOutputStream(new XZOutputStream(stream, new LZMA2Options(MODE_FAST), CHECK_SHA256));
+ File dir = new UniversalFile(plugin.dir, "SubServers:Templates");
+
+ byte[] buffer = new byte[4096];
+ for (String file : Util.searchDirectory(dir)) {
+ int index = file.indexOf(File.separatorChar);
+ if (index != -1 && !map.containsKey(file.substring(0, index).toLowerCase())) {
+
+ tar.putNextEntry(new TarEntry(new File(dir, file), file.replace(File.separatorChar, '/')));
+ FileInputStream in = new FileInputStream(dir.getAbsolutePath() + File.separator + file);
+
+ int len;
+ while ((len = in.read(buffer)) != -1) {
+ tar.write(buffer, 0, len);
+ }
+
+ in.close();
+ }
+ }
+ tar.close();
Util.isException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("enableRT"), host.getCreator(), true));
} catch (Exception e) {
@@ -58,6 +89,6 @@ public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut {
@Override
public int version() {
- return 0x0001;
+ return 0x0002;
}
}
diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java
index b0bd3183..d0a6d798 100644
--- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java
+++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExUploadTemplates.java
@@ -12,7 +12,9 @@ import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.SubProxy;
import java.io.File;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.Map;
import java.util.logging.Logger;
@@ -20,13 +22,15 @@ import java.util.logging.Logger;
* External Host Template Upload Packet
*/
public class PacketExUploadTemplates implements PacketObjectIn, PacketOut {
+ private static LinkedList callbacks = new LinkedList();
private SubProxy plugin;
/**
* New PacketExUploadTemplates
*/
- public PacketExUploadTemplates(SubProxy plugin) {
+ public PacketExUploadTemplates(SubProxy plugin, Runnable... callbacks) {
this.plugin = plugin;
+ PacketExUploadTemplates.callbacks.addAll(Arrays.asList(callbacks));
}
@SuppressWarnings("unchecked")
@@ -50,6 +54,12 @@ public class PacketExUploadTemplates implements PacketObjectIn, PacketO
e.printStackTrace();
}
}
+
+ LinkedList callbacks = PacketExUploadTemplates.callbacks;
+ PacketExUploadTemplates.callbacks = new LinkedList();
+ for (Runnable r : callbacks) {
+ r.run();
+ }
}
}
diff --git a/SubServers.Client/Common/pom.xml b/SubServers.Client/Common/pom.xml
index 8530c4e3..43ed0a57 100644
--- a/SubServers.Client/Common/pom.xml
+++ b/SubServers.Client/Common/pom.xml
@@ -18,7 +18,7 @@
net.ME1312.Galaxi
GalaxiUtil
- 21w26b
+ 21w27b
compile
diff --git a/SubServers.Host/pom.xml b/SubServers.Host/pom.xml
index 3ff25540..d41139ab 100644
--- a/SubServers.Host/pom.xml
+++ b/SubServers.Host/pom.xml
@@ -30,13 +30,13 @@
net.ME1312.Galaxi
GalaxiEngine
- 21w26b
+ 21w27b
compile
net.ME1312.Galaxi
GalaxiUI
- 21w26b
+ 21w27b
runtime
@@ -51,6 +51,18 @@
1.1
compile
+
+ org.kamranzafar
+ jtar
+ 2.3
+ compile
+
+
+ org.tukaani
+ xz
+ 1.9
+ compile
+
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Library/FileScanner.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Library/FileScanner.java
index 370917c2..babf08ba 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/Library/FileScanner.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Library/FileScanner.java
@@ -23,12 +23,7 @@ public abstract class FileScanner {
* @param whitelist File Whitelist
*/
protected void scan(File dir, String... whitelist) throws IOException {
- List files;
- try {
- files = Util.reflect(Util.class.getDeclaredMethod("zipsearch", File.class, File.class), null, dir, dir);
- } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
- throw new IllegalStateException("Cannot access zipsearch()", e);
- }
+ List files = Util.searchDirectory(dir);
if (files.size() <= 0 || whitelist.length <= 0)
return;
diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDownloadTemplates.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDownloadTemplates.java
index 3e9ad98d..c977bccb 100644
--- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDownloadTemplates.java
+++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/Packet/PacketExDownloadTemplates.java
@@ -9,6 +9,12 @@ import net.ME1312.SubData.Client.SubDataSender;
import net.ME1312.SubServers.Host.ExHost;
import net.ME1312.SubServers.Host.SubAPI;
+import org.kamranzafar.jtar.TarEntry;
+import org.kamranzafar.jtar.TarInputStream;
+import org.tukaani.xz.XZInputStream;
+
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.InputStream;
/**
@@ -42,7 +48,36 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
try {
dir.mkdirs();
- Util.unzip(stream, dir);
+ TarInputStream tar = new TarInputStream(new XZInputStream(stream));
+
+ byte[] buffer = new byte[4096];
+ TarEntry entry;
+ while ((entry = tar.getNextEntry()) != null) {
+ File newFile = new File(dir + File.separator + entry.getName().replace('/', File.separatorChar));
+ if (newFile.exists()) {
+ if (newFile.isDirectory()) {
+ Util.deleteDirectory(newFile);
+ } else {
+ newFile.delete();
+ }
+ }
+
+ if (entry.isDirectory()) {
+ newFile.mkdirs();
+ continue;
+ } else if (!newFile.getParentFile().exists()) {
+ newFile.getParentFile().mkdirs();
+ }
+
+ FileOutputStream fos = new FileOutputStream(newFile);
+ int len;
+ while ((len = tar.read(buffer)) != -1) {
+ fos.write(buffer, 0, len);
+ }
+ fos.close();
+ }
+ tar.close();
+
host.creator.load(true);
host.log.info.println(((first)?"":"New ") + "Remote Template Files Downloaded");
} catch (Exception e) {
@@ -54,6 +89,6 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
@Override
public int version() {
- return 0x0001;
+ return 0x0002;
}
}