package com.volmit.iris; import java.io.File; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.Plugin; 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.noise.CNG; import com.volmit.iris.object.IrisBiome; import com.volmit.iris.util.BiomeResult; import com.volmit.iris.util.BoardManager; import com.volmit.iris.util.BoardProvider; import com.volmit.iris.util.BoardSettings; import com.volmit.iris.util.ChronoLatch; 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.IrisStructureResult; import com.volmit.iris.util.KList; import com.volmit.iris.util.MortarPlugin; import com.volmit.iris.util.Permission; import com.volmit.iris.util.RollingSequence; import com.volmit.iris.util.ScoreDirection; public class Iris extends MortarPlugin implements BoardProvider { public static KList executors = new KList<>(); public static Iris instance; public static IrisDataManager globaldata; public static ProjectManager proj; public static IrisHotloadManager hotloader; public static WandController wand; private static String last = ""; private BoardManager manager; private String mem = "..."; private ChronoLatch cl = new ChronoLatch(1000); private ChronoLatch clf = new ChronoLatch(1000); private KList lines = new KList<>(); public RollingSequence hits = new RollingSequence(20); public RollingSequence tp = new RollingSequence(100); private static IrisLock lock = new IrisLock("Iris"); public static KList> postProcessors; @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 ChatColor.BOLD + "" + ChatColor.DARK_GRAY + "[" + ChatColor.BOLD + "" + ChatColor.GREEN + "Iris" + ChatColor.BOLD + ChatColor.DARK_GRAY + "]" + ChatColor.RESET + "" + ChatColor.GRAY + ": "; } public void onEnable() { lock = new IrisLock("Iris"); instance = this; hotloader = new IrisHotloadManager(); globaldata = new IrisDataManager(getDataFolder()); wand = new WandController(); postProcessors = loadPostProcessors(); proj = new ProjectManager(); manager = new BoardManager(this, BoardSettings.builder().boardProvider(this).scoreDirection(ScoreDirection.UP).build()); super.onEnable(); } public void onDisable() { lock.unlock(); proj.close(); for (GroupedExecutor i : executors) { i.close(); } for (World i : Bukkit.getWorlds()) { if (i.getGenerator() instanceof IrisChunkGenerator) { ((IrisChunkGenerator) i).close(); } } executors.clear(); manager.onDisable(); Bukkit.getScheduler().cancelTasks(this); HandlerList.unregisterAll((Plugin) this); super.onDisable(); } @Override public String getTitle(Player player) { return ChatColor.GREEN + "Iris"; } @Override public List getLines(Player player) { if (!clf.flip()) { return lines; } World world = player.getWorld(); lines.clear(); if (world.getGenerator() instanceof IrisChunkGenerator) { IrisChunkGenerator g = (IrisChunkGenerator) world.getGenerator(); if (cl.flip()) { mem = Form.memSize(g.guessMemoryUsage(), 2); } int x = player.getLocation().getBlockX(); int y = player.getLocation().getBlockY(); int z = player.getLocation().getBlockZ(); BiomeResult er = g.sampleTrueBiome(x, y, z); IrisBiome b = er != null ? er.getBiome() : null; IrisStructureResult st = g.getStructure(x, y, z); tp.put(g.getMetrics().getSpeed()); lines.add("&7&m-----------------"); lines.add(ChatColor.GREEN + "Speed" + ChatColor.GRAY + ": " + ChatColor.BOLD + "" + ChatColor.GRAY + Form.f(g.getMetrics().getPerSecond().getAverage(), 0) + "/s " + Form.duration(g.getMetrics().getTotal().getAverage(), 1) + ""); lines.add(ChatColor.GREEN + "Generators" + ChatColor.GRAY + ": " + Form.f(CNG.creates)); lines.add(ChatColor.GREEN + "Noise" + ChatColor.GRAY + ": " + Form.f((int) hits.getAverage())); lines.add(ChatColor.GREEN + "Parallax Chunks" + ChatColor.GRAY + ": " + Form.f((int) g.getParallaxMap().getLoadedChunks().size())); lines.add(ChatColor.GREEN + "Objects" + ChatColor.GRAY + ": " + Form.f(g.getData().getObjectLoader().count())); lines.add(ChatColor.GREEN + "Memory" + ChatColor.GRAY + ": " + mem); if (er != null && b != null) { lines.add(ChatColor.GREEN + "Biome" + ChatColor.GRAY + ": " + b.getName()); lines.add(ChatColor.GREEN + "File" + ChatColor.GRAY + ": " + b.getLoadKey()); } if (st != null) { lines.add(ChatColor.GREEN + "Structure" + ChatColor.GRAY + ": " + st.getStructure().getName()); lines.add(ChatColor.GREEN + "Tile" + ChatColor.GRAY + ": " + st.getTile().toString()); } lines.add("&7&m-----------------"); } else { lines.add(ChatColor.GREEN + "Join an Iris World!"); } return lines; } private 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(ChatColor.GREEN + "[" + ChatColor.DARK_GRAY + "Iris" + ChatColor.GREEN + "]" + ChatColor.GRAY + ": " + msg); } @Override public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) { return new IrisChunkGenerator(16); } public static void msg(String string) { lock.lock(); String msg = ChatColor.GREEN + "[Iris]: " + ChatColor.GRAY + string; if (last.equals(msg)) { lock.unlock(); return; } last = msg; Bukkit.getConsoleSender().sendMessage(msg); lock.unlock(); } public static void warn(String string) { msg(ChatColor.YELLOW + string); } public static void error(String string) { msg(ChatColor.RED + string); } public static void verbose(String string) { msg(ChatColor.GRAY + string); } public static void success(String string) { msg(ChatColor.GREEN + string); } public static void info(String string) { msg(ChatColor.WHITE + string); } public void hit(long hits2) { hits.put(hits2); } }