From 32f34f144483ca44800a962436dd8f4f0b5e2f6f Mon Sep 17 00:00:00 2001 From: cyberpwn Date: Mon, 16 Aug 2021 19:35:03 -0400 Subject: [PATCH] Dim installing --- .../volmit/iris/core/project/IrisPack.java | 57 +++++++++++++++++++ .../volmit/iris/core/tools/IrisToolbelt.java | 12 ---- ...ojectRepo.java => IrisPackRepository.java} | 48 ++++++++++++++-- 3 files changed, 99 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/volmit/iris/core/project/IrisPack.java rename src/main/java/com/volmit/iris/util/data/{IrisProjectRepo.java => IrisPackRepository.java} (59%) diff --git a/src/main/java/com/volmit/iris/core/project/IrisPack.java b/src/main/java/com/volmit/iris/core/project/IrisPack.java new file mode 100644 index 000000000..98822810d --- /dev/null +++ b/src/main/java/com/volmit/iris/core/project/IrisPack.java @@ -0,0 +1,57 @@ +/* + * Iris is a World Generator for Minecraft Bukkit Servers + * Copyright (c) 2021 Arcane Arts (Volmit Software) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.volmit.iris.core.project; + +import com.volmit.iris.Iris; +import com.volmit.iris.core.service.StudioSVC; +import com.volmit.iris.util.data.IrisPackRepository; +import com.volmit.iris.util.io.IO; +import com.volmit.iris.util.plugin.VolmitSender; +import lombok.Data; + +import java.io.File; +import java.net.MalformedURLException; + +@Data +public class IrisPack { + private final File folder; + + public IrisPack(File folder) + { + this.folder = folder; + } + + public void delete() + { + IO.delete(folder); + folder.delete(); + } + + public static IrisPack from(VolmitSender sender, String url) throws MalformedURLException { + return from(sender, IrisPackRepository.from(url)); + } + + public static IrisPack from(VolmitSender sender, IrisPackRepository repo) throws MalformedURLException { + String name = repo.getRepo(); + String url = repo.toURL(); + repo.install(sender); + + return new IrisPack(Iris.instance.getDataFolder(StudioSVC.WORKSPACE_NAME, repo.getRepo())); + } +} diff --git a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java index 4b0541080..39ff711b5 100644 --- a/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java +++ b/src/main/java/com/volmit/iris/core/tools/IrisToolbelt.java @@ -30,24 +30,12 @@ import com.volmit.iris.core.service.StudioSVC; import com.volmit.iris.engine.object.dimensional.IrisDimension; import com.volmit.iris.engine.platform.HeadlessGenerator; import com.volmit.iris.engine.platform.PlatformChunkGenerator; -import com.volmit.iris.util.collection.KList; -import com.volmit.iris.util.data.IrisProjectRepo; -import com.volmit.iris.util.io.IO; import com.volmit.iris.util.plugin.VolmitSender; -import com.volmit.iris.util.scheduling.jobs.DownloadJob; -import com.volmit.iris.util.scheduling.jobs.Job; -import com.volmit.iris.util.scheduling.jobs.JobCollection; -import com.volmit.iris.util.scheduling.jobs.SingleJob; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; -import org.zeroturnaround.zip.ZipUtil; -import org.zeroturnaround.zip.commons.FileUtils; import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.util.UUID; /** * Something you really want to wear if working on Iris. Shit gets pretty hectic down there. diff --git a/src/main/java/com/volmit/iris/util/data/IrisProjectRepo.java b/src/main/java/com/volmit/iris/util/data/IrisPackRepository.java similarity index 59% rename from src/main/java/com/volmit/iris/util/data/IrisProjectRepo.java rename to src/main/java/com/volmit/iris/util/data/IrisPackRepository.java index b3fa89818..3b4620955 100644 --- a/src/main/java/com/volmit/iris/util/data/IrisProjectRepo.java +++ b/src/main/java/com/volmit/iris/util/data/IrisPackRepository.java @@ -18,12 +18,28 @@ package com.volmit.iris.util.data; +import com.volmit.iris.Iris; +import com.volmit.iris.core.service.StudioSVC; +import com.volmit.iris.util.collection.KList; +import com.volmit.iris.util.format.Form; +import com.volmit.iris.util.plugin.VolmitSender; +import com.volmit.iris.util.scheduling.jobs.DownloadJob; +import com.volmit.iris.util.scheduling.jobs.Job; +import com.volmit.iris.util.scheduling.jobs.JobCollection; +import com.volmit.iris.util.scheduling.jobs.SingleJob; import lombok.Builder; import lombok.Data; +import org.zeroturnaround.zip.ZipUtil; +import org.zeroturnaround.zip.commons.FileUtils; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.UUID; @Data @Builder -public class IrisProjectRepo { +public class IrisPackRepository { @Builder.Default private String user = "IrisDimensions"; @@ -36,11 +52,11 @@ public class IrisProjectRepo { @Builder.Default private String tag = ""; - public static IrisProjectRepo from(String g) { + public static IrisPackRepository from(String g) { // https://github.com/IrisDimensions/overworld if (g.startsWith("https://github.com/")) { String sub = g.split("\\Qgithub.com/\\E")[1]; - IrisProjectRepo r = IrisProjectRepo.builder() + IrisPackRepository r = IrisPackRepository.builder() .user(sub.split("\\Q/\\E")[0]) .repo(sub.split("\\Q/\\E")[1]).build(); @@ -55,12 +71,12 @@ public class IrisProjectRepo { if (f.length == 1) { return from(g); } else if (f.length == 2) { - return IrisProjectRepo.builder() + return IrisPackRepository.builder() .user(f[0]) .repo(f[1]) .build(); } else if (f.length >= 3) { - IrisProjectRepo r = IrisProjectRepo.builder() + IrisPackRepository r = IrisPackRepository.builder() .user(f[0]) .repo(f[1]) .build(); @@ -74,7 +90,7 @@ public class IrisProjectRepo { return r; } } else { - return IrisProjectRepo.builder() + return IrisPackRepository.builder() .user("IrisDimensions") .repo(g) .branch(g.equals("overworld") ? "stable" : "master") @@ -91,4 +107,24 @@ public class IrisProjectRepo { return "https://codeload.github.com/" + user + "/" + repo + "/zip/refs/heads/" + branch; } + + public void install(VolmitSender sender) throws MalformedURLException { + File pack = Iris.instance.getDataFolder(StudioSVC.WORKSPACE_NAME, getRepo()); + + if(!pack.exists()) + { + File dl = new File(Iris.getTemp(), "dltk-" + UUID.randomUUID() + ".zip"); + File work = new File(Iris.getTemp(), "extk-" + UUID.randomUUID()); + new JobCollection(Form.capitalize(getRepo()), + new DownloadJob(toURL(), pack), + new SingleJob("Extracting", () -> ZipUtil.unpack(dl, work)), + new SingleJob("Installing", () -> { + try { + FileUtils.copyDirectory(work.listFiles()[0], pack); + } catch (IOException e) { + e.printStackTrace(); + } + })).execute(sender); + } + } }