mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-23 21:14:26 +00:00
Made requested changes
This commit is contained in:
@@ -6,21 +6,13 @@ import java.io.File;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
public class JarUtil {
|
public class JarUtil {
|
||||||
|
|
||||||
private static final AtomicReference<File> terraModJar = new AtomicReference<>(null);
|
|
||||||
|
|
||||||
public static void copyResourcesToDirectory(JarFile fromJar, String sourceDir, String destDir) throws IOException {
|
public static void copyResourcesToDirectory(JarFile fromJar, String sourceDir, String destDir) throws IOException {
|
||||||
for(Enumeration<JarEntry> entries = fromJar.entries(); entries.hasMoreElements(); ) {
|
for(Enumeration<JarEntry> entries = fromJar.entries(); entries.hasMoreElements(); ) {
|
||||||
JarEntry entry = entries.nextElement();
|
JarEntry entry = entries.nextElement();
|
||||||
@@ -46,28 +38,7 @@ public class JarUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static JarFile getJarFile() throws URISyntaxException, IOException {
|
public static JarFile getJarFile() throws URISyntaxException, IOException {
|
||||||
final File _jarFile1 = terraModJar.get();
|
return new JarFile(new File(getJarURL().toURI()));
|
||||||
if(_jarFile1 != null) return new JarFile(_jarFile1);
|
|
||||||
synchronized(terraModJar) {
|
|
||||||
final File _jarFile2 = terraModJar.get();
|
|
||||||
if(_jarFile2 != null) return new JarFile(_jarFile2);
|
|
||||||
|
|
||||||
// uncached here
|
|
||||||
final URI jarURI = getJarURL().toURI();
|
|
||||||
if(jarURI.getScheme() == null || !jarURI.getScheme().equalsIgnoreCase("file")) {
|
|
||||||
final File tempFile = File.createTempFile("terra-jar-" + UUID.randomUUID(), ".jar");
|
|
||||||
try(final FileOutputStream out = new FileOutputStream(tempFile)) {
|
|
||||||
Files.copy(Paths.get(jarURI), out);
|
|
||||||
}
|
|
||||||
tempFile.deleteOnExit();
|
|
||||||
terraModJar.set(tempFile);
|
|
||||||
return new JarFile(tempFile);
|
|
||||||
} else {
|
|
||||||
final File jarFile = new File(jarURI);
|
|
||||||
terraModJar.set(jarFile);
|
|
||||||
return new JarFile(jarFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static URL getJarURL() {
|
public static URL getJarURL() {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import com.dfsek.terra.api.registry.CheckedRegistry;
|
|||||||
import com.dfsek.terra.api.registry.LockedRegistry;
|
import com.dfsek.terra.api.registry.LockedRegistry;
|
||||||
import com.dfsek.terra.api.transform.Transformer;
|
import com.dfsek.terra.api.transform.Transformer;
|
||||||
import com.dfsek.terra.api.transform.Validator;
|
import com.dfsek.terra.api.transform.Validator;
|
||||||
|
import com.dfsek.terra.api.util.JarUtil;
|
||||||
import com.dfsek.terra.api.util.generic.pair.Pair;
|
import com.dfsek.terra.api.util.generic.pair.Pair;
|
||||||
import com.dfsek.terra.api.util.logging.DebugLogger;
|
import com.dfsek.terra.api.util.logging.DebugLogger;
|
||||||
import com.dfsek.terra.api.util.logging.Logger;
|
import com.dfsek.terra.api.util.logging.Logger;
|
||||||
@@ -73,10 +74,18 @@ import org.apache.commons.io.FileUtils;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
|
|
||||||
public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
||||||
@@ -137,6 +146,35 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
|
|||||||
private File dataFolder;
|
private File dataFolder;
|
||||||
private final CommandManager manager = new TerraCommandManager(this);
|
private final CommandManager manager = new TerraCommandManager(this);
|
||||||
|
|
||||||
|
private final AtomicReference<File> terraModJar = new AtomicReference<>(null);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JarFile getModJar() throws URISyntaxException, IOException {
|
||||||
|
if(!FabricLoader.getInstance().isDevelopmentEnvironment()) return TerraPlugin.super.getModJar();
|
||||||
|
final File _jarFile1 = terraModJar.get();
|
||||||
|
if(_jarFile1 != null) return new JarFile(_jarFile1);
|
||||||
|
synchronized(terraModJar) {
|
||||||
|
final File _jarFile2 = terraModJar.get();
|
||||||
|
if(_jarFile2 != null) return new JarFile(_jarFile2);
|
||||||
|
|
||||||
|
// uncached here
|
||||||
|
final URI jarURI = JarUtil.getJarURL().toURI();
|
||||||
|
if(jarURI.getScheme() == null || !jarURI.getScheme().equalsIgnoreCase("file")) {
|
||||||
|
final File tempFile = File.createTempFile("terra-jar-" + UUID.randomUUID(), ".jar");
|
||||||
|
try(final FileOutputStream out = new FileOutputStream(tempFile)) {
|
||||||
|
Files.copy(Paths.get(jarURI), out);
|
||||||
|
}
|
||||||
|
tempFile.deleteOnExit();
|
||||||
|
terraModJar.set(tempFile);
|
||||||
|
return new JarFile(tempFile);
|
||||||
|
} else {
|
||||||
|
final File jarFile = new File(jarURI);
|
||||||
|
terraModJar.set(jarFile);
|
||||||
|
return new JarFile(jarFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public CommandManager getManager() {
|
public CommandManager getManager() {
|
||||||
return manager;
|
return manager;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user