package com.volmit.iris; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.event.HandlerList; import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.Plugin; import com.volmit.iris.activation.IrisActivation1; import com.volmit.iris.command.CommandIris; import com.volmit.iris.command.PermissionIris; import com.volmit.iris.gen.IrisChunkGenerator; import com.volmit.iris.gen.post.PostFloatingNibDeleter; import com.volmit.iris.gen.post.PostNibSmoother; import com.volmit.iris.gen.post.PostPotholeFiller; import com.volmit.iris.gen.post.PostSlabber; import com.volmit.iris.gen.post.PostWallPatcher; import com.volmit.iris.gen.post.PostWaterlogger; import com.volmit.iris.util.C; import com.volmit.iris.util.Form; import com.volmit.iris.util.GroupedExecutor; import com.volmit.iris.util.IO; import com.volmit.iris.util.IrisLock; import com.volmit.iris.util.IrisPostBlockFilter; import com.volmit.iris.util.J; import com.volmit.iris.util.KList; import com.volmit.iris.util.MortarPlugin; import com.volmit.iris.util.Permission; public class Iris extends MortarPlugin { public static KList executors = new KList<>(); public static Iris instance; public static IrisDataManager globaldata; public static ProjectManager proj; public static IrisHotloadManager hotloader; public static WandManager wand; public static StructureManager struct; public static IrisBoardManager board; private static IrisLock lock = new IrisLock("Iris"); @Permission public static PermissionIris perm; @com.volmit.iris.util.Command public CommandIris commandIris; public Iris() { IO.delete(new File("iris")); } @Override public void start() { } @Override public void stop() { } @Override public String getTag(String subTag) { return C.BOLD + "" + C.DARK_GRAY + "[" + C.BOLD + "" + C.GREEN + "Iris" + C.BOLD + C.DARK_GRAY + "]" + C.RESET + "" + C.GRAY + ": "; } public void onEnable() { lock = new IrisLock("Iris"); instance = this; hotloader = new IrisHotloadManager(); globaldata = new IrisDataManager(getDataFolder()); wand = new WandManager(); struct = new StructureManager(); proj = new ProjectManager(); board = new IrisBoardManager(); new IrisActivation1(); super.onEnable(); J.s(() -> Iris.warn("\n\n" + " " + Form.repeat(C.YELLOW + "" + " " + C.RESET + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET, 53) + "\n" + " " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + C.YELLOW + "" + C.UNDERLINE + " " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + "\n" + " " + C.YELLOW + "" + " " + C.RESET + C.YELLOW + "" + C.UNDERLINE + " " + C.YELLOW + " " + C.RESET + "\n" + " " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + C.GREEN + "" + C.UNDERLINE + " Iris was developed by VolmitSoftware " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + "\n" + " " + C.YELLOW + "" + " " + C.RESET + C.YELLOW + "" + C.UNDERLINE + " This version of Iris is for testing & evaluation purposes only! DO NOT REDISTRIBUTE THIS PLUGIN. " + C.YELLOW + " " + C.RESET + "\n" + " " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + C.DARK_RED + "" + C.UNDERLINE + " If you are a spigot staff member reviewing this plugin, PLEASE REJECT THIS PLUGIN " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + "\n" + " " + C.WHITE + "" + " " + C.RESET + C.DARK_GRAY + "" + C.UNDERLINE + " " + C.BLACK + "" + C.UNDERLINE + IrisActivation1.computeSecurityHash() + " " + C.YELLOW + " " + C.RESET + "\n" + " " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + C.YELLOW + "" + C.UNDERLINE + " " + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET + "\n" + " " + Form.repeat(C.YELLOW + "" + " " + C.RESET + C.YELLOW + "" + C.UNDERLINE + " " + C.RESET, 53) + "\n")); IrisActivation1.validate(); } public void onDisable() { proj.close(); for(World i : Bukkit.getWorlds()) { if(i.getGenerator() instanceof IrisChunkGenerator) { ((IrisChunkGenerator) i).close(); } } for(GroupedExecutor i : executors) { i.close(); } executors.clear(); board.disable(); Bukkit.getScheduler().cancelTasks(this); HandlerList.unregisterAll((Plugin) this); super.onDisable(); } public static KList> loadPostProcessors() { KList> g = new KList>(); g.add(PostFloatingNibDeleter.class); g.add(PostNibSmoother.class); g.add(PostPotholeFiller.class); g.add(PostSlabber.class); g.add(PostWallPatcher.class); g.add(PostWaterlogger.class); return g; } @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { return super.onCommand(sender, command, label, args); } public void imsg(CommandSender s, String msg) { s.sendMessage(C.GREEN + "[" + C.DARK_GRAY + "Iris" + C.GREEN + "]" + C.GRAY + ": " + msg); } @Override public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) { return new IrisChunkGenerator(IrisSettings.get().threads); } public static void msg(String string) { lock.lock(); String msg = C.GREEN + "[Iris]: " + C.GRAY + string; Bukkit.getConsoleSender().sendMessage(msg); lock.unlock(); } public static File getCached(String name, String url) { String h = IO.hash(name + "@" + url); File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h); if(!f.exists()) { try(BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f)) { byte dataBuffer[] = new byte[1024]; int bytesRead; while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) { fileOutputStream.write(dataBuffer, 0, bytesRead); Iris.verbose("Aquiring " + name); } } catch(IOException e) { } } return f.exists() ? f : null; } public static String getNonCached(String name, String url) { String h = IO.hash(name + "*" + url); File f = Iris.instance.getDataFile("cache", h.substring(0, 2), h.substring(3, 5), h); try(BufferedInputStream in = new BufferedInputStream(new URL(url).openStream()); FileOutputStream fileOutputStream = new FileOutputStream(f)) { byte dataBuffer[] = new byte[1024]; int bytesRead; while((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) { fileOutputStream.write(dataBuffer, 0, bytesRead); } } catch(IOException e) { } try { return IO.readAll(f); } catch(IOException e) { } return ""; } public static void warn(String string) { msg(C.YELLOW + string); } public static void error(String string) { msg(C.RED + string); } public static void verbose(String string) { msg(C.GRAY + string); } public static void success(String string) { msg(C.GREEN + string); } public static void info(String string) { msg(C.WHITE + string); } public void hit(long hits2) { board.hits.put(hits2); } }