9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-29 12:09:07 +00:00

Forcefully shove stuff into other stuff

This commit is contained in:
Daniel Mills
2020-11-10 00:49:28 -05:00
parent 50ffcceaf4
commit 4fc8a5ad0c
364 changed files with 2975 additions and 5303 deletions

View File

@@ -10,9 +10,9 @@ import org.bukkit.event.world.WorldUnloadEvent;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.edit.BlockEditor;
import com.volmit.iris.edit.BukkitBlockEditor;
import com.volmit.iris.edit.WEBlockEditor;
import com.volmit.iris.manager.edit.BlockEditor;
import com.volmit.iris.manager.edit.BukkitBlockEditor;
import com.volmit.iris.manager.edit.WEBlockEditor;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.M;

View File

@@ -1,30 +1,17 @@
package com.volmit.iris.manager;
import java.util.List;
import com.volmit.iris.Iris;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.Engine;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.*;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import com.volmit.iris.Iris;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.scaffold.IrisWorlds;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.util.BoardManager;
import com.volmit.iris.util.BoardProvider;
import com.volmit.iris.util.BoardSettings;
import com.volmit.iris.util.C;
import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.DontObfuscate;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.IrisStructureResult;
import com.volmit.iris.util.J;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RollingSequence;
import com.volmit.iris.util.ScoreDirection;
import java.util.List;
public class IrisBoardManager implements BoardProvider, Listener
{
@@ -56,7 +43,7 @@ public class IrisBoardManager implements BoardProvider, Listener
@DontObfuscate
private boolean isIrisWorld(World w)
{
return IrisWorlds.isIrisWorld(w) && IrisWorlds.getProvider(w).isDev();
return IrisWorlds.isIrisWorld(w) && IrisWorlds.access(w).isStudio();
}
public void updatePlayer(Player p)
@@ -90,45 +77,58 @@ public class IrisBoardManager implements BoardProvider, Listener
return v;
}
IrisTerrainProvider g = IrisWorlds.getProvider(player.getWorld());
IrisAccess g = IrisWorlds.access(player.getWorld());
if(cl.flip())
{
mem = Form.memSize(g.guessMemoryUsage(), 2);
// TODO MEMORY
mem = Form.memSize(0, 2);
}
int x = player.getLocation().getBlockX();
int y = player.getLocation().getBlockY();
int z = player.getLocation().getBlockZ();
IrisBiome b = g.sampleTrueBiome(x, y, z);
IrisStructureResult st = g.getStructure(x, y, z);
tp.put(g.getMetrics().getSpeed());
Engine engine = g.getCompound().getEngine(y);
int parallaxChunks=0;
int parallaxRegions=0;
long memoryGuess=0;
int loadedObjects=0;
for(int i = 0; i < g.getCompound().getSize(); i++)
{
parallaxRegions += g.getCompound().getEngine(i).getParallax().getRegionCount();
parallaxChunks += g.getCompound().getEngine(i).getParallax().getChunkCount();
loadedObjects+= g.getCompound().getData().getObjectLoader().getSize();
memoryGuess += g.getCompound().getData().getObjectLoader().getTotalStorage() * 225;
memoryGuess+= parallaxChunks += 3500;
memoryGuess += parallaxRegions += 1700000;
}
tp.put(0); // TODO: CHUNK SPEED
v.add("&7&m------------------");
v.add(C.GREEN + "Speed" + C.GRAY + ": " + C.BOLD + "" + C.GRAY + Form.f(g.getMetrics().getPerSecond().getAverage(), 0) + "/s " + Form.duration(g.getMetrics().getTotal().getAverage(), 1) + "");
v.add(C.GREEN + "Generators" + C.GRAY + ": " + Form.f(CNG.creates));
v.add(C.GREEN + "Noise" + C.GRAY + ": " + Form.f((int) hits.getAverage()));
v.add(C.GREEN + "Parallax" + C.GRAY + ": " + Form.f((int) g.getParallaxMap().getLoadedChunks().size()));
v.add(C.GREEN + "Objects" + C.GRAY + ": " + Form.f(g.getData().getObjectLoader().count()));
v.add(C.GREEN + "Memory" + C.GRAY + ": " + mem);
v.add(C.GREEN + "PLX Regions" + C.GRAY + ": " + Form.f(parallaxRegions));
v.add(C.GREEN + "PLX Chunks" + C.GRAY + ": " + Form.f(parallaxChunks));
v.add(C.GREEN + "CHE Objects" + C.GRAY + ": " + Form.f(loadedObjects));
v.add(C.GREEN + "Memory Use" + C.GRAY + ": " + Form.memSize(memoryGuess, 0));
if(engine != null)
{
v.add("&7&m------------------");
v.add(C.AQUA + "Engine" + C.GRAY + ": " + engine.getName() + " (" + engine.getMinHeight() + " - " + engine.getMaxHeight() + ")");
v.add(C.AQUA + "Region" + C.GRAY + ": " + engine.getRegion(x, z).getName());
v.add(C.AQUA + "Biome" + C.GRAY + ": " + engine.getBiome(x, y, z).getName());
v.add(C.AQUA + "Height" + C.GRAY + ": " + Math.round(engine.getHeight(x, z)));
}
if(Iris.jobCount() > 0)
{
v.add(C.GREEN + "Tasks" + C.GRAY + ": " + Iris.jobCount());
v.add("&7&m------------------");
v.add(C.LIGHT_PURPLE + "Tasks" + C.GRAY + ": " + Iris.jobCount());
}
v.add("&7&m------------------");
v.add(C.GREEN + "Heightmap" + C.GRAY + ": " + (int) g.getTerrainHeight(x, z));
if(b != null)
{
v.add(C.GREEN + "Biome" + C.GRAY + ": " + b.getName());
}
if(st != null)
{
v.add(C.GREEN + "Structure" + C.GRAY + ": " + st.getStructure().getName());
v.add(C.GREEN + "Tile" + C.GRAY + ": " + st.getTile().toString());
}
v.add("&7&m------------------");

View File

@@ -7,7 +7,7 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.scaffold.IrisContext;
import com.volmit.iris.generator.legacy.scaffold.IrisContext;
import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.FolderWatcher;
import com.volmit.iris.util.J;

View File

@@ -1,59 +1,31 @@
package com.volmit.iris.manager;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
import org.zeroturnaround.zip.ZipUtil;
import com.google.gson.Gson;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.nms.INMS;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.gen.scaffold.IrisGenConfiguration;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisBiomeMutation;
import com.volmit.iris.object.IrisBlockData;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisEntity;
import com.volmit.iris.object.IrisGenerator;
import com.volmit.iris.object.IrisLootTable;
import com.volmit.iris.object.IrisObjectPlacement;
import com.volmit.iris.object.IrisRegion;
import com.volmit.iris.object.IrisStructure;
import com.volmit.iris.object.IrisStructureTile;
import com.volmit.iris.util.C;
import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.IO;
import com.volmit.iris.util.J;
import com.volmit.iris.util.JSONArray;
import com.volmit.iris.util.JSONObject;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.KMap;
import com.volmit.iris.util.KSet;
import com.volmit.iris.util.M;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.O;
import com.volmit.iris.util.PrecisionStopwatch;
import com.volmit.iris.generator.legacy.nms.INMS;
import com.volmit.iris.object.*;
import com.volmit.iris.scaffold.IrisWorldCreator;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.*;
import lombok.Data;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.zeroturnaround.zip.ZipUtil;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@Data
public class IrisProject
{
private File path;
private String name;
private IrisTerrainProvider activeProvider;
private IrisAccess activeProvider;
public IrisProject(File path)
{
@@ -128,22 +100,13 @@ public class IrisProject
Iris.globaldata.dump();
String wfp = "iris/" + UUID.randomUUID();
//@builder
ProvisionBukkit gen = Iris.instance
.createProvisionBukkit(IrisGenConfiguration.builder()
.threads(Iris.getThreadCount())
.dimension(getName())
.target(TerrainTarget.builder()
.environment(d.getEnvironment())
.folder(new File(wfp))
.name(wfp)
.seed(1337)
.build())
.build());
//@done
IrisTerrainProvider gx = (IrisTerrainProvider) gen.getProvider();
gx.setDev(true);
WorldCreator c = new IrisWorldCreator().dimension(getName())
.seed(1337)
.name(wfp)
.studioMode()
.create();
IrisAccess gx = ((IrisAccess)c.generator());
sender.sendMessage("Generating with " + Iris.getThreadCount() + " threads per chunk");
O<Boolean> done = new O<Boolean>();
done.set(false);
@@ -154,14 +117,14 @@ public class IrisProject
double last = 0;
int req = 740;
double lpc = 0;
boolean c = false;
boolean fc = false;
while(!done.get())
{
boolean derp = false;
double v = (double) gx.getGenerated() / (double) req;
c = lpc != v;
fc = lpc != v;
lpc = v;
if(last > v || v > 1)
@@ -175,7 +138,7 @@ public class IrisProject
last = v;
}
if(c)
if(fc)
{
sender.sendMessage(C.WHITE + "Generating " + Form.pc(v) + (derp ? (C.GRAY + " (Waiting on Server...)") : (C.GRAY + " (" + (req - gx.getGenerated()) + " Left)")));
}
@@ -191,14 +154,7 @@ public class IrisProject
});
//@builder
World world = INMS.get().createWorld(new WorldCreator(wfp)
.seed(1337)
.generator(gen)
.generateStructures(d.isVanillaStructures())
.type(WorldType.NORMAL)
.environment(d.getEnvironment()), false);
//@done
gx.getTarget().setRealWorld(world);
World world = INMS.get().createWorld(c, false);
Iris.linkMultiverseCore.removeFromConfig(world);
done.set(true);
@@ -225,9 +181,9 @@ public class IrisProject
public void close()
{
activeProvider.close();
File folder = activeProvider.getTarget().getFolder();
Iris.linkMultiverseCore.removeFromConfig(activeProvider.getTarget().getName());
Bukkit.unloadWorld(activeProvider.getTarget().getName(), false);
File folder = activeProvider.getTarget().getWorld().getWorldFolder();
Iris.linkMultiverseCore.removeFromConfig(activeProvider.getTarget().getWorld().getName());
Bukkit.unloadWorld(activeProvider.getTarget().getWorld().getName(), false);
flush();
J.attemptAsync(() -> IO.delete(folder));
activeProvider = null;

View File

@@ -2,7 +2,7 @@ package com.volmit.iris.manager;
import org.bukkit.entity.Player;
import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.manager.structure.StructureTemplate;
import com.volmit.iris.util.KList;
public class StructureManager

View File

@@ -3,6 +3,7 @@ package com.volmit.iris.manager;
import java.awt.Color;
import java.util.Iterator;
import com.volmit.iris.manager.edit.DustRevealer;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;

View File

@@ -0,0 +1,80 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.util.Command;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIris extends MortarCommand
{
@Command
private CommandIrisCreate create;
@Command
private CommandIrisStudio studio;
@Command
private CommandIrisStructure structure;
@Command
private CommandIrisObject object;
@Command
private CommandIrisDownload download;
@Command
private CommandIrisUpdateProject updateProject;
@Command
private CommandIrisUpdateWorld updateWorld;
@Command
private CommandIrisWhat what;
@Command
private CommandIrisMetrics metrics;
@Command
private CommandIrisCTC ctc;
@Command
private CommandIrisLMM lmm;
@Command
private CommandIrisRegen regen;
@Command
private CommandIrisPregen pregen;
@Command
private CommandIrisReload reload;
@Command
private CommandIrisCapture capture;
public CommandIris()
{
super("iris", "ir", "irs");
requiresPermission(Iris.perm);
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
sender.sendMessage("Iris v" + Iris.instance.getDescription().getVersion() + " by Volmit Software");
printHelp(sender);
return true;
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,71 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class CommandIrisCTC extends MortarCommand
{
public CommandIrisCTC()
{
super("ctc", "threads", "thread");
setDescription("Change generator thread count");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
if(args.length == 0)
{
list.qadd("4").qadd("8").qadd("12").qadd("16").qadd("18").qadd("24").qadd("32");
}
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
IrisAccess g = IrisWorlds.access(world);
if(args.length == 0){
sender.sendMessage("Current threads: " + g.getThreadCount());
sender.sendMessage("You can change the treadcount with /iris ctc <number>");
return true;
}
int m = Math.min(Math.max(Integer.valueOf(args[0]), 2), 256);
g.changeThreadCount(m);
sender.sendMessage("Thread count changed to " + m);
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[thread-count]";
}
}

View File

@@ -0,0 +1,287 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.object.IrisObjectPlacement;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.*;
import io.papermc.lib.PaperLib;
import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.util.BlockVector;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.attribute.FileTime;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.Date;
public class CommandIrisCapture extends MortarCommand
{
public CommandIrisCapture()
{
super("capture", "report", "capt");
setDescription("Capture nearby information to help with reporting problems");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
IrisAccess g = IrisWorlds.access(world);
KList<Chunk> chunks = new KList<>();
int bx = p.getLocation().getChunk().getX();
int bz = p.getLocation().getChunk().getZ();
try
{
Location l = p.getTargetBlockExact(48, FluidCollisionMode.NEVER).getLocation();
if(l != null)
{
int cx = l.getChunk().getX();
int cz = l.getChunk().getZ();
new Spiraler(3, 3, (x, z) -> chunks.addIfMissing(world.getChunkAt(x + cx, z + cz))).drain();
}
}
catch(Throwable e)
{
}
new Spiraler(3, 3, (x, z) -> chunks.addIfMissing(world.getChunkAt(x + bx, z + bz))).drain();
sender.sendMessage("Capturing IGenData from " + chunks.size() + " nearby chunks.");
try
{
File ff = Iris.instance.getDataFile("reports/" + M.ms() + ".txt");
PrintWriter pw = new PrintWriter(ff);
pw.println("=== Iris Chunk Report ===");
pw.println("Iris Version: " + Iris.instance.getDescription().getVersion());
pw.println("Bukkit Version: " + Bukkit.getBukkitVersion());
pw.println("MC Version: " + Bukkit.getVersion());
pw.println("PaperSpigot: " + (PaperLib.isPaper() ? "Yup!" : "Not Paper"));
pw.println("Report Captured At: " + new Date().toString());
pw.println("Chunks: (" + chunks.size() + "): ");
for(Chunk i : chunks)
{
pw.println("- [" + i.getX() + ", " + i.getZ() + "]");
}
int regions = 0;
long size = 0;
String age = "No idea...";
try
{
for(File i : new File(world.getWorldFolder(), "region").listFiles())
{
if(i.isFile())
{
size += i.length();
}
}
}
catch(Throwable e)
{
}
try
{
FileTime creationTime = (FileTime) Files.getAttribute(world.getWorldFolder().toPath(), "creationTime");
age = hrf(Duration.of(M.ms() - creationTime.toMillis(), ChronoUnit.MILLIS));
}
catch(IOException ex)
{
}
KList<String> biomes = new KList<>();
KList<String> caveBiomes = new KList<>();
KMap<String, KMap<String, KList<String>>> objects = new KMap<>();
for(Chunk i : chunks)
{
for(int j = 0; j < 16; j += 3)
{
if(j >= 16)
{
continue;
}
for(int k = 0; k < 16; k += 3)
{
if(k >= 16)
{
continue;
}
IrisBiome bb = g.getBiome((i.getX() * 16) + j, (i.getZ() * 16) + k);
IrisBiome bxf = g.getCaveBiome((i.getX() * 16) + j, (i.getZ() * 16) + k);
biomes.addIfMissing(bb.getName() + " [" + Form.capitalize(bb.getInferredType().name().toLowerCase()) + "] " + " (" + bb.getLoadFile().getName() + ")");
caveBiomes.addIfMissing(bxf.getName() + " (" + bxf.getLoadFile().getName() + ")");
exportObjects(bb, pw, g, objects);
exportObjects(bxf, pw, g, objects);
}
}
}
pw.println();
pw.println("====== World Info =======");
pw.println("World Name: " + world.getName());
pw.println("Age: " + age);
pw.println("Folder: " + world.getWorldFolder().getPath());
pw.println("Regions: " + Form.f(regions));
pw.println("Chunks: <" + Form.f(regions * 32 * 32));
pw.println("World Size: >" + Form.fileSize(size));
pw.println();
pw.println("===== Nearby Biomes =====");
pw.println("Found " + biomes.size() + " Biome(s): ");
for(String i : biomes)
{
pw.println("- " + i);
}
pw.println();
pw.println("Found " + caveBiomes.size() + " Underground Biome(s): ");
for(String i : caveBiomes)
{
pw.println("- " + i);
}
pw.println();
pw.println("======== Objects ========");
for(String i : objects.k())
{
pw.println("- " + i);
for(String j : objects.get(i).k())
{
pw.println(" @ " + j);
for(String k : objects.get(i).get(j))
{
pw.println(" * " + k);
}
}
}
pw.println();
pw.close();
sender.sendMessage("Reported to: " + ff.getPath());
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
private void exportObjects(IrisBiome bb, PrintWriter pw, IrisAccess g, KMap<String, KMap<String, KList<String>>> objects)
{
String n1 = bb.getName() + " [" + Form.capitalize(bb.getInferredType().name().toLowerCase()) + "] " + " (" + bb.getLoadFile().getName() + ")";
int m = 0;
KSet<String> stop = new KSet<>();
for(IrisObjectPlacement f : bb.getObjects())
{
m++;
String n2 = "Placement #" + m + " (" + f.getPlace().size() + " possible objects)";
for(String i : f.getPlace())
{
String nn3 = i + ": [ERROR] Failed to find object!";
try
{
if(stop.contains(i))
{
continue;
}
File ff = g.getData().getObjectLoader().findFile(i);
BlockVector sz = IrisObject.sampleSize(ff);
nn3 = i + ": size=[" + sz.getBlockX() + "," + sz.getBlockY() + "," + sz.getBlockZ() + "] location=[" + ff.getPath() + "]";
stop.add(i);
}
catch(Throwable e)
{
}
String n3 = nn3;
objects.compute(n1, (k1, v1) ->
{
if(v1 == null)
{
return new KMap<>();
}
return v1;
}).compute(n2, (k, v) ->
{
if(v == null)
{
return new KList<String>().qaddIfMissing(n3);
}
v.addIfMissing(n3);
return v;
});
}
}
}
public static String hrf(Duration duration)
{
return duration.toString().substring(2).replaceAll("(\\d[HMS])(?!$)", "$1 ").toLowerCase();
}
@Override
protected String getArgsUsage()
{
return "[thread-count]";
}
}

View File

@@ -0,0 +1,146 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.nms.INMS;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.scaffold.IrisWorldCreator;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.*;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import java.io.File;
public class CommandIrisCreate extends MortarCommand
{
public CommandIrisCreate()
{
super("create", "new", "+");
requiresPermission(Iris.perm.studio);
setCategory("Create");
setDescription("Create a new Iris World!");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(args.length < 1)
{
sender.sendMessage("/iris create <NAME> [type=overworld] [seed=1337] [pregen=5000] [-zip]");
return true;
}
String worldName = args[0];
String type = "overworld";
long seed = 1337;
int pregen = 0;
File folder = new File(worldName);
if(folder.exists())
{
sender.sendMessage("That world folder already exists!");
return true;
}
File iris = new File(folder, "iris");
iris.mkdirs();
for(String i : args)
{
type = i.startsWith("type=") ? i.split("\\Q=\\E")[1] : type;
seed = i.startsWith("seed=") ? Long.valueOf(i.split("\\Q=\\E")[1]) : seed;
pregen = i.startsWith("pregen=") ? Integer.parseInt(i.split("\\Q=\\E")[1]) : pregen;
}
IrisDimension dim = Iris.proj.installIntoWorld(sender, type, folder);
WorldCreator wc = new IrisWorldCreator().dimension(dim).name(worldName)
.productionMode().seed(seed).create();
sender.sendMessage("Generating with " + Iris.getThreadCount() + " threads per chunk");
O<Boolean> done = new O<Boolean>();
done.set(false);
J.a(() ->
{
double last = 0;
int req = 800;
while(!done.get())
{
boolean derp = false;
double v = (double) ((IrisAccess) wc.generator()).getGenerated() / (double) req;
if(last > v || v > 1)
{
derp = true;
v = last;
}
else
{
last = v;
}
sender.sendMessage("Generating " + Form.pc(v) + (derp ? " (Waiting on Server...)" : ""));
J.sleep(3000);
}
});
World world = INMS.get().createWorld(wc, false);
done.set(true);
sender.sendMessage(worldName + " Spawn Area generated.");
O<Boolean> b = new O<Boolean>();
b.set(true);
if(pregen > 0)
{
b.set(false);
sender.sendMessage("Pregenerating " + worldName + " " + pregen + " x " + pregen);
sender.sendMessage("Expect Extreme server lag during this time. Use '/iris world pregen stop' to cancel");
new PregenJob(world, pregen, sender, () ->
{
b.set(true);
});
}
IrisDimension dimm = dim;
long seedd = seed;
if(Iris.linkMultiverseCore.supported())
{
Iris.linkMultiverseCore.addWorld(worldName, dimm, seedd + "");
sender.sendMessage("Added " + worldName + " to MultiverseCore.");
}
J.a(() ->
{
while(!b.get())
{
J.sleep(1000);
}
Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () ->
{
world.save();
sender.sendMessage("All Done!");
});
});
return true;
}
@Override
protected String getArgsUsage()
{
return "<name> [type=overworld] [seed=1337] [pregen=5000] [-zip]";
}
}

View File

@@ -0,0 +1,52 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.util.*;
public class CommandIrisDownload extends MortarCommand
{
public CommandIrisDownload()
{
super("download", "down", "dl");
requiresPermission(Iris.perm.studio);
setDescription("Download a project.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(args.length < 1)
{
sender.sendMessage("/iris dl " + C.BOLD + "<NAME>");
return true;
}
boolean trim = false;
for(String i : args)
{
if(i.equals("-t") || i.equals("--trim"))
{
trim = true;
}
}
boolean btrim = trim;
J.a(() -> Iris.proj.downloadSearch(sender, args[0], btrim));
return true;
}
@Override
protected String getArgsUsage()
{
return "<name> [-t/--trim]";
}
}

View File

@@ -0,0 +1,36 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisLMM extends MortarCommand
{
public CommandIrisLMM()
{
super("lmm");
setDescription("Toggle Low Memory Mode");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
Iris.lowMemoryMode = !Iris.lowMemoryMode;
sender.sendMessage("Low Memory Mode is " + (Iris.lowMemoryMode ? "On" : "Off"));
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,66 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.scaffold.IrisMetrics;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.*;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class CommandIrisMetrics extends MortarCommand
{
public CommandIrisMetrics()
{
super("metrics", "stats", "mt");
setDescription("Get timings for this world");
requiresPermission(Iris.perm.studio);
setCategory("Metrics");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
IrisAccess g = IrisWorlds.access(world);
IrisMetrics m = new IrisMetrics(20); // TODO: BROKEN
sender.sendMessage("Thread Count: " + C.BOLD + "" + C.WHITE + g.getThreadCount());
sender.sendMessage("Total : " + C.BOLD + "" + C.WHITE + Form.duration(m.getTotal().getAverage(), 2));
sender.sendMessage(" Terrain : " + C.BOLD + "" + C.WHITE + Form.duration(m.getTerrain().getAverage(), 2));
sender.sendMessage(" Deposits : " + C.BOLD + "" + C.WHITE + Form.duration(m.getDeposits().getAverage(), 2));
sender.sendMessage(" Parallax: " + C.BOLD + "" + C.WHITE + Form.duration(m.getParallax().getAverage(), 2));
sender.sendMessage(" Post : " + C.BOLD + "" + C.WHITE + Form.duration(m.getPost().getAverage(), 2));
sender.sendMessage("Lighting : " + C.BOLD + "" + C.WHITE + Form.duration(m.getUpdate().getAverage(), 2));
sender.sendMessage("Spawns : " + C.BOLD + "" + C.WHITE + Form.duration(m.getSpawns().getAverage(), 2));
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,77 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.Command;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObject extends MortarCommand
{
@Command
private CommandIrisObjectWand wand;
@Command
private CommandIrisObjectDust dust;
@Command
private CommandIrisObjectXPY xpy;
@Command
private CommandIrisObjectXAY xay;
@Command
private CommandIrisObjectShift shift;
@Command
private CommandIrisObjectExpand expand;
@Command
private CommandIrisObjectContract contract;
@Command
private CommandIrisObjectP1 p1;
@Command
private CommandIrisObjectP2 p2;
@Command
private CommandIrisObjectSave save;
@Command
private CommandIrisObjectPaste paste;
public CommandIrisObject()
{
super("object", "iob", "o", "obj");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Object Commands");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
sender.sendMessage("Iris Object Commands");
printHelp(sender);
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
}

View File

@@ -0,0 +1,71 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.*;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
public class CommandIrisObjectContract extends MortarCommand
{
public CommandIrisObjectContract()
{
super("-");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Contract a selection based on your lookign direction");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
cursor = cursor.expand(d, -amt);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
return true;
}
@Override
protected String getArgsUsage()
{
return "[amt]";
}
}

View File

@@ -0,0 +1,52 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.Sound;
public class CommandIrisObjectDust extends MortarCommand
{
public CommandIrisObjectDust()
{
super("dust", "dst");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Get a powder that reveals placed objects");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have an inventory");
return true;
}
sender.player().getInventory().addItem(WandManager.createDust());
sender.player().playSound(sender.player().getLocation(), Sound.AMBIENT_SOUL_SAND_VALLEY_ADDITIONS, 1f, 1.5f);
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
}

View File

@@ -0,0 +1,71 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.*;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
public class CommandIrisObjectExpand extends MortarCommand
{
public CommandIrisObjectExpand()
{
super("+");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Expand based on looking direction");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
cursor = cursor.expand(d, amt);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
return true;
}
@Override
protected String getArgsUsage()
{
return "[amt]";
}
}

View File

@@ -0,0 +1,79 @@
package com.volmit.iris.manager.command;
import java.util.Set;
import com.volmit.iris.util.KList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObjectP1 extends MortarCommand
{
public CommandIrisObjectP1()
{
super("p1");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Set point 1 to pos (or look)");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@SuppressWarnings("deprecation")
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
ItemStack wand = p.getInventory().getItemInMainHand();
if(WandManager.isWand(wand))
{
Location[] g = WandManager.getCuboid(wand);
g[0] = p.getLocation().getBlock().getLocation().clone().add(0, -1, 0);
if(args.length == 1 && args[0].equals("-l"))
{
g[0] = p.getTargetBlock((Set<Material>) null, 256).getLocation().clone();
}
p.setItemInHand(WandManager.createWand(g[0], g[1]));
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[-l]";
}
}

View File

@@ -0,0 +1,79 @@
package com.volmit.iris.manager.command;
import java.util.Set;
import com.volmit.iris.util.KList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObjectP2 extends MortarCommand
{
public CommandIrisObjectP2()
{
super("p2");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Set point 1 to pos (or look)");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@SuppressWarnings("deprecation")
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
ItemStack wand = p.getInventory().getItemInMainHand();
if(WandManager.isWand(wand))
{
Location[] g = WandManager.getCuboid(wand);
g[1] = p.getLocation().getBlock().getLocation().clone().add(0, -1, 0);
if(args.length == 1 && args[0].equals("-l"))
{
g[1] = p.getTargetBlock((Set<Material>) null, 256).getLocation().clone();
}
p.setItemInHand(WandManager.createWand(g[0], g[1]));
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[-l]";
}
}

View File

@@ -0,0 +1,104 @@
package com.volmit.iris.manager.command;
import java.io.File;
import java.util.Set;
import com.volmit.iris.util.KList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.ProjectManager;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObjectPaste extends MortarCommand
{
public CommandIrisObjectPaste()
{
super("paste", "pasta");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Paste an object");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
if(args.length == 0){
sender.sendMessage("Please specify the name of of the object want to paste");
return true;
}
Player p = sender.player();
File file = Iris.globaldata.getObjectLoader().findFile(args[0]);
boolean intoWand = false;
for(String i : args)
{
if(i.equalsIgnoreCase("-edit"))
{
intoWand = true;
}
}
if(file == null || !file.exists())
{
sender.sendMessage("Can't find " + args[0] + " in the " + ProjectManager.WORKSPACE_NAME + " folder");
}
ItemStack wand = sender.player().getInventory().getItemInMainHand();
IrisObject o = Iris.globaldata.getObjectLoader().load(args[0]);
if(o == null)
{
sender.sendMessage("Error, cant find");
return true;
}
sender.sendMessage("Loaded " + "objects/" + args[0] + ".iob");
sender.player().getWorld().playSound(sender.player().getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
Location block = sender.player().getTargetBlock((Set<Material>) null, 256).getLocation().clone().add(0, 1, 0);
if(intoWand && WandManager.isWand(wand))
{
wand = WandManager.createWand(block.clone().subtract(o.getCenter()).add(o.getW() - 1, o.getH(), o.getD() - 1), block.clone().subtract(o.getCenter()));
p.getInventory().setItemInMainHand(wand);
sender.sendMessage("Updated wand for " + "objects/" + args[0] + ".iob");
}
WandManager.pasteSchematic(o, block);
sender.sendMessage("Placed " + "objects/" + args[0] + ".iob");
return true;
}
@Override
protected String getArgsUsage()
{
return "[name] [-edit]";
}
}

View File

@@ -0,0 +1,100 @@
package com.volmit.iris.manager.command;
import java.io.File;
import com.volmit.iris.util.KList;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObjectSave extends MortarCommand
{
public CommandIrisObjectSave()
{
super("save");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Save an object");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
if(args.length < 2)
{
sender.sendMessage("/iris o save <PROJECT> <object>");
sender.sendMessage("I.e. /iris o save overworld some-tree/tree1");
return true;
}
try
{
boolean overwrite = false;
for(String i : args)
{
if(i.equals("-o"))
{
overwrite = true;
}
}
Player p = sender.player();
ItemStack wand = p.getInventory().getItemInMainHand();
IrisObject o = WandManager.createSchematic(wand);
File file = Iris.proj.getWorkspaceFile(args[0], "objects", args[1] + ".iob");
if(file.exists())
{
if(!overwrite)
{
sender.sendMessage("File Exists. Overwrite by adding -o");
return true;
}
}
o.write(file);
sender.sendMessage("Saved " + args[1]);
p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ENCHANTMENT_TABLE_USE, 1f, 1.5f);
}
catch(Throwable e)
{
sender.sendMessage("Failed to save " + args[1] + ". Are you holding your wand?");
e.printStackTrace();
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[project] [name]";
}
}

View File

@@ -0,0 +1,72 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.*;
import org.bukkit.Location;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
public class CommandIrisObjectShift extends MortarCommand
{
public CommandIrisObjectShift()
{
super(">");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Shift selection based on direction");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
int amt = args.length == 1 ? Integer.valueOf(args[0]) : 1;
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Direction d = Direction.closest(p.getLocation().getDirection()).reverse();
a1.add(d.toVector().multiply(amt));
a2.add(d.toVector().multiply(amt));
Cuboid cursor = new Cuboid(a1, a2);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
return true;
}
@Override
protected String getArgsUsage()
{
return "[amt]";
}
}

View File

@@ -0,0 +1,53 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.Sound;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisObjectWand extends MortarCommand
{
public CommandIrisObjectWand()
{
super("wand", "w");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Get an Iris Wand for selecting objects");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have an inventory");
return true;
}
sender.player().getInventory().addItem(WandManager.createWand());
sender.player().playSound(sender.player().getLocation(), Sound.ITEM_ARMOR_EQUIP_NETHERITE, 1f, 1.5f);
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
}

View File

@@ -0,0 +1,104 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.Cuboid.CuboidDirection;
public class CommandIrisObjectXAY extends MortarCommand
{
public CommandIrisObjectXAY()
{
super("x&y");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Auto select up, down and out");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Location a1x = b[0].clone();
Location a2x = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
Cuboid cursorx = new Cuboid(a1, a2);
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
while(!cursorx.containsOnly(Material.AIR))
{
a1x.add(new Vector(0, -1, 0));
a2x.add(new Vector(0, -1, 0));
cursorx = new Cuboid(a1x, a2x);
}
a1x.add(new Vector(0, 1, 0));
a2x.add(new Vector(0, 1, 0));
b[0] = a1;
b[1] = a2x;
cursor = new Cuboid(b[0], b[1]);
cursor = cursor.contract(CuboidDirection.North);
cursor = cursor.contract(CuboidDirection.South);
cursor = cursor.contract(CuboidDirection.East);
cursor = cursor.contract(CuboidDirection.West);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
}

View File

@@ -0,0 +1,92 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.Cuboid.CuboidDirection;
public class CommandIrisObjectXPY extends MortarCommand
{
public CommandIrisObjectXPY()
{
super("x+y");
requiresPermission(Iris.perm);
setCategory("Object");
setDescription("Auto select up and out");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Objects, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
if(!WandManager.isWand(p))
{
sender.sendMessage("Ready your Wand.");
return true;
}
Location[] b = WandManager.getCuboid(p.getInventory().getItemInMainHand());
b[0].add(new Vector(0, 1, 0));
b[1].add(new Vector(0, 1, 0));
Location a1 = b[0].clone();
Location a2 = b[1].clone();
Cuboid cursor = new Cuboid(a1, a2);
while(!cursor.containsOnly(Material.AIR))
{
a1.add(new Vector(0, 1, 0));
a2.add(new Vector(0, 1, 0));
cursor = new Cuboid(a1, a2);
}
a1.add(new Vector(0, -1, 0));
a2.add(new Vector(0, -1, 0));
b[0] = a1;
a2 = b[1];
cursor = new Cuboid(a1, a2);
cursor = cursor.contract(CuboidDirection.North);
cursor = cursor.contract(CuboidDirection.South);
cursor = cursor.contract(CuboidDirection.East);
cursor = cursor.contract(CuboidDirection.West);
b[0] = cursor.getLowerNE();
b[1] = cursor.getUpperSW();
p.getInventory().setItemInMainHand(WandManager.createWand(b[0], b[1]));
p.updateInventory();
p.playSound(p.getLocation(), Sound.ENTITY_ITEM_FRAME_ROTATE_ITEM, 1f, 0.55f);
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
}

View File

@@ -0,0 +1,134 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.PregenJob;
public class CommandIrisPregen extends MortarCommand
{
public CommandIrisPregen()
{
super("pregen");
setDescription("Pregen this world with optional parameters: '1k' = 1000 by 1000 blocks, '1c' = 1 by 1 chunks, and '1r' = 32 by 32 chunks");
requiresPermission(Iris.perm.studio);
setCategory("Pregen");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
list.add("stop");
list.add("pause");
list.add("resume");
list.add("500");
list.add("1000");
list.add("10k");
list.add("25k");
list.add("10c");
list.add("25c");
list.add("5r");
list.add("10r");
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(args.length == 0)
{
sender.sendMessage("/iris pregen <blocks-wide|stop>");
return true;
}
if(args[0].equalsIgnoreCase("stop") || args[0].equalsIgnoreCase("x"))
{
if(PregenJob.task == -1)
{
sender.sendMessage("No Active Pregens");
}
else
{
sender.sendMessage("Stopped All Pregens.");
PregenJob.stop();
}
return true;
}
else if(args[0].equalsIgnoreCase("pause"))
{
if(PregenJob.task == -1)
{
sender.sendMessage("No Active Pregens");
}
else
{
PregenJob.pauseResume();
if(PregenJob.isPaused())
{
sender.sendMessage("Pregen Paused");
}
else
{
sender.sendMessage("Pregen Resumed");
}
}
return true;
} else
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
try {
new PregenJob(world, getVal(args[0]), sender, () ->
{
});
} catch (NumberFormatException e){
sender.sendMessage("Invalid argument in command");
return true;
} catch (NullPointerException e){
sender.sendMessage("No radius specified");
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
private int getVal(String arg) {
if(arg.toLowerCase().endsWith("c") || arg.toLowerCase().endsWith("chunks"))
{
return Integer.valueOf(arg.toLowerCase().replaceAll("\\Qc\\E", "").replaceAll("\\Qchunks\\E", "")) * 16;
}
if(arg.toLowerCase().endsWith("r") || arg.toLowerCase().endsWith("regions"))
{
return Integer.valueOf(arg.toLowerCase().replaceAll("\\Qr\\E", "").replaceAll("\\Qregions\\E", "")) * 512;
}
if(arg.toLowerCase().endsWith("k"))
{
return Integer.valueOf(arg.toLowerCase().replaceAll("\\Qk\\E", "")) * 1000;
}
return Integer.valueOf(arg.toLowerCase());
}
@Override
protected String getArgsUsage()
{
return "[width]";
}
}

View File

@@ -0,0 +1,83 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.Spiraler;
public class CommandIrisRegen extends MortarCommand
{
public CommandIrisRegen()
{
super("regenerate", "regen", "rg");
setDescription("Regenerate chunks");
requiresPermission(Iris.perm.studio);
setCategory("Regen");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
list.add("3");
list.add("7");
list.add("9");
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
if(IrisWorlds.access(world).isFailing())
{
sender.sendMessage("This world is in a failed state! Cannot Regenerate!");
return true;
}
//TODO: IrisWorlds.access(world).clearRegeneratedLists();
if(args.length == 0)
{
sender.sendMessage("Regenerating your chunk");
IrisWorlds.access(world).regenerate(p.getLocation().getChunk().getX(), p.getLocation().getChunk().getZ());
return true;
}
try
{
int m = Integer.valueOf(args[0]);
sender.sendMessage("Regenerating " + (m * m) + " Chunks Surrounding you");
new Spiraler(m, m, (a, b) -> IrisWorlds.access(world).regenerate(a + p.getLocation().getChunk().getX(), b + p.getLocation().getChunk().getZ())).drain();
}
catch(Throwable e)
{
sender.sendMessage("/iris regen [SIZE]");
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "/iris regen [size]";
}
}

View File

@@ -0,0 +1,38 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisReload extends MortarCommand
{
public CommandIrisReload()
{
super("reload", "rld");
requiresPermission(Iris.perm.studio);
setDescription("Reload configs");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
IrisSettings.invalidate();
IrisSettings.get();
sender.sendMessage("settings.json Reloaded");
return true;
}
@Override
protected String getArgsUsage()
{
return "<name> [-t/--trim]";
}
}

View File

@@ -0,0 +1,67 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.Command;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructure extends MortarCommand
{
@Command
private CommandIrisStructureCreate create;
@Command
private CommandIrisStructureOpen open;
@Command
private CommandIrisStructureSave save;
@Command
private CommandIrisStructureMove more;
@Command
private CommandIrisStructureExpand expand;
@Command
private CommandIrisStructureVariants variants;
@Command
private CommandIrisStructureClose close;
public CommandIrisStructure()
{
super("structure", "struct", "str");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Structure Commands");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
sender.sendMessage("Iris Structure Commands");
printHelp(sender);
sender.sendMessage("Note: This is a Procedural Structure creator,");
sender.sendMessage("not an object creator, see '/iris object'.");
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
}

View File

@@ -0,0 +1,62 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructureClose extends MortarCommand
{
public CommandIrisStructureClose()
{
super("close", "x");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Close a structure");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
StructureTemplate m = Iris.struct.get(p);
if(m == null)
{
sender.sendMessage("You do not have an open structure");
return true;
}
m.close();
sender.sendMessage("Saved & Closed!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,104 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructureCreate extends MortarCommand
{
public CommandIrisStructureCreate()
{
super("new", "create", "+");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Create a structure");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args) {
if (!IrisSettings.get().isStudio()) {
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
if (!sender.isPlayer()) {
sender.sendMessage("You cannot run this from console");
return true;
}
Player p = sender.player();
boolean d3 = false;
int width;
int height;
if (args.length == 0){
sender.sendMessage("Please specify the name of the object you wish to create");
return true;
} else if (args.length == 1){
sender.sendMessage("Please specify the name of the dimension you are in");
return true;
} else if (args.length == 2){
sender.sendMessage("No width and height specified. Taking defaults (5 and 5)");
width = 5;
height = 5;
} else if (args.length == 3){
if (args[2].equalsIgnoreCase("-3d"))
{
sender.sendMessage("No width and height specified. Taking defaults (5 and 5)");
width = 5;
height = 5;
d3 = true;
} else {
sender.sendMessage("No height specified, taking width as height");
width = Integer.parseInt(args[2]);
height = Integer.parseInt(args[2]);
}
} else if (args.length == 4){
width = Integer.parseInt(args[2]);
if (args[3].equalsIgnoreCase("-3d"))
{
sender.sendMessage("No height specified, taking width as height");
height = Integer.parseInt(args[2]);
} else {
height = Integer.parseInt(args[3]);
}
} else {
for (String i : args){
if (i.equalsIgnoreCase("-3d")){
d3 = true;
}
}
width = Integer.parseInt(args[2]);
height = Integer.parseInt(args[3]);
}
if (width % 2 == 0){
sender.sendMessage("Width is an even number. Adding one");
width += width % 2 == 0 ? 1 : 0;
}
sender.sendMessage("Creating new Structure");
new StructureTemplate(args[0], args[1], p, p.getLocation(), 5, width, height, d3);
return true;
}
@Override
protected String getArgsUsage()
{
return "<name> <dimension> <tile-width> <tile-height> [-3d]";
}
}

View File

@@ -0,0 +1,62 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructureExpand extends MortarCommand
{
public CommandIrisStructureExpand()
{
super("expand", "+++");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Expand out more of the structure");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
StructureTemplate m = Iris.struct.get(p);
if(m == null)
{
sender.sendMessage("You do not have an open structure");
return true;
}
m.expand();
sender.sendMessage("Loading More!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,62 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructureMove extends MortarCommand
{
public CommandIrisStructureMove()
{
super("move", "++");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Load more of the structure");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
StructureTemplate m = Iris.struct.get(p);
if(m == null)
{
sender.sendMessage("You do not have an open structure");
return true;
}
m.more();
sender.sendMessage("Moving Structure Builder!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,69 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.object.IrisStructure;
import com.volmit.iris.manager.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructureOpen extends MortarCommand
{
public CommandIrisStructureOpen()
{
super("load", "open", "o");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Open an existing structure");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
if(args.length == 0){
sender.sendMessage("Please specify the structure you wish to load");
return true;
}
Player p = sender.player();
IrisStructure structure = Iris.globaldata.getStructureLoader().load(args[0]);
if(structure == null)
{
sender.sendMessage("Can't find " + args[0]);
return true;
}
String dimensionGuess = structure.getLoadFile().getParentFile().getParentFile().getName();
new StructureTemplate(structure.getName(), dimensionGuess, p, p.getLocation(), 9, structure.getGridSize(), structure.getGridHeight(), structure.getMaxLayers() > 1).loadStructures(structure);
return true;
}
@Override
protected String getArgsUsage()
{
return "<structure>";
}
}

View File

@@ -0,0 +1,62 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructureSave extends MortarCommand
{
public CommandIrisStructureSave()
{
super("save", "s");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Save a structure");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
StructureTemplate m = Iris.struct.get(p);
if(m == null)
{
sender.sendMessage("You do not have an open structure");
return true;
}
m.saveStructure();
sender.sendMessage("Saved!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,61 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStructureVariants extends MortarCommand
{
public CommandIrisStructureVariants()
{
super("variants", "var", "v");
requiresPermission(Iris.perm);
setCategory("Structure");
setDescription("Change or add variants in tile looking at");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio Structures, please enable studio in Iris/settings.json");
return true;
}
if(!sender.isPlayer())
{
sender.sendMessage("You don't have a wand");
return true;
}
Player p = sender.player();
try
{
Iris.struct.get(p).openVariants();
}
catch(Throwable e)
{
sender.sendMessage("You do not have an open structure");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,88 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.Command;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudio extends MortarCommand
{
@Command
private CommandIrisStudioCreate create;
@Command
private CommandIrisStudioOpen open;
@Command
private CommandIrisStudioSummon summon;
@Command
private CommandIrisStudioClose close;
@Command
private CommandIrisStudioPackage pkg;
@Command
private CommandIrisStudioUpdate update;
@Command
private CommandIrisStudioMap map;
@Command
private CommandIrisStudioList list;
@Command
private CommandIrisStudioGoto got0;
@Command
private CommandIrisStudioEditBiome ebiome;
@Command
private CommandIrisStudioHotload hotload;
@Command
private CommandIrisStudioExplorer exp;
@Command
private CommandIrisStudioLoot loot;
@Command
private CommandIrisStudioTP tp;
@Command
private CommandIrisStudioConvert convert;
public CommandIrisStudio()
{
super("studio", "std");
requiresPermission(Iris.perm.studio);
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
sender.sendMessage("Iris Studio Commands");
printHelp(sender);
return true;
}
@Override
protected String getArgsUsage()
{
return "[subcommand]";
}
}

View File

@@ -0,0 +1,85 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioClose extends MortarCommand
{
public CommandIrisStudioClose()
{
super("close", "x");
requiresPermission(Iris.perm.studio);
setDescription("Close the existing dimension");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(!Iris.proj.isProjectOpen())
{
sender.sendMessage("No open projects.");
return true;
}
if(sender.isPlayer())
{
World f = null;
for(World i : Bukkit.getWorlds())
{
if(i.getWorldFolder().getAbsolutePath().equals(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getWorldFolder().getAbsolutePath()))
{
continue;
}
f = i;
break;
}
if(f == null)
{
for(Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers())
{
i.kickPlayer("Project Closing, No other world to put you in. Rejoin Please!");
}
}
else
{
for(Player i : Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getPlayers())
{
i.teleport(f.getSpawnLocation());
}
}
}
Iris.proj.close();
sender.sendMessage("Projects Closed & Caches Cleared!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,42 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioConvert extends MortarCommand
{
public CommandIrisStudioConvert()
{
super("convert", "cvt");
requiresPermission(Iris.perm.studio);
setDescription("Convert .ewg schematics into Iris (.iob) files");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
Iris.convert.check(sender);
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,69 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.C;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioCreate extends MortarCommand
{
public CommandIrisStudioCreate()
{
super("create", "new");
requiresPermission(Iris.perm.studio);
setDescription("Create a new project & open it.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(args.length < 1)
{
sender.sendMessage("Please use a lowercase name with hyphens (-) for spaces.");
sender.sendMessage("I.e. /iris std new " + C.BOLD + "aether");
return true;
}
String template = null;
for(String i : args)
{
if(i.startsWith("template="))
{
template = i.split("\\Q=\\E")[1];
}
}
if(template != null)
{
Iris.proj.create(sender, args[0], template);
}
else
{
Iris.proj.create(sender, args[0]);
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[dimension] [template=<project>]";
}
}

View File

@@ -0,0 +1,68 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.entity.Player;
import java.awt.*;
import java.io.File;
public class CommandIrisStudioEditBiome extends MortarCommand
{
public CommandIrisStudioEditBiome()
{
super("editbiome", "ebiome", "eb");
setDescription("Open this biome file in vscode");
requiresPermission(Iris.perm.studio);
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(sender.isPlayer())
{
Player p = sender.player();
try
{
File f = Iris.proj.getActiveProject().getActiveProvider().getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ()).getLoadFile();
Desktop.getDesktop().open(f);
}
catch(Throwable e)
{
sender.sendMessage("Cant find the file. Are you in an Iris world?");
}
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[width]";
}
}

View File

@@ -0,0 +1,62 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.gui.NoiseExplorer;
import com.volmit.iris.util.Command;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioExplorer extends MortarCommand
{
@Command
private CommandIrisStudioExplorerGenerator generator;
public CommandIrisStudioExplorer()
{
super("noise", "nmap");
setDescription("Explore different noise generators visually");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(args.length != 0)
{
printHelp(sender);
}
else
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(!IrisSettings.get().isUseServerLaunchedGuis())
{
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
NoiseExplorer.launch();
sender.sendMessage("Opening Noise Explorer!");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,84 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.gui.NoiseExplorer;
import com.volmit.iris.object.IrisGenerator;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.RNG;
public class CommandIrisStudioExplorerGenerator extends MortarCommand
{
public CommandIrisStudioExplorerGenerator()
{
super("generator", "gen", "g");
setDescription("Explore different generators");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(!IrisSettings.get().isUseServerLaunchedGuis())
{
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
if(!Iris.proj.isProjectOpen())
{
sender.sendMessage("No project is open");
return true;
}
if(args.length == 0)
{
sender.sendMessage("Provide a generator name");
return true;
}
else
{
String g = args[0];
IrisGenerator b = Iris.proj.getActiveProject().getActiveProvider().getData().getGeneratorLoader().load(g);
if(b != null)
{
NoiseExplorer.launch((x, z) ->
{
return b.getHeight(x, z, new RNG(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSeed()).nextParallelRNG(3245).lmax());
}, "Gen: " + b.getLoadKey());
sender.sendMessage("Opening Noise Explorer for gen " + b.getLoadKey());
return true;
}
else
{
sender.sendMessage("Invalid Generator");
}
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,154 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.RNG;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class CommandIrisStudioGoto extends MortarCommand
{
public CommandIrisStudioGoto()
{
super("goto", "find", "g", "tp");
setDescription("Find any biome or a biome border");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
if(args.length == 0 && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld()))
{
list.add(IrisWorlds.access(sender.player().getWorld()).getData().getBiomeLoader().getPreferredKeys());
}
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
try
{
if(args.length < 1)
{
sender.sendMessage("/iris std goto " + getArgsUsage());
return true;
}
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
IrisAccess g = IrisWorlds.access(world);
int tries = 10000;
boolean cave = false;
IrisBiome biome2 = null;
if(args.length > 1)
{
if(args[1].equalsIgnoreCase("-cave"))
{
cave = true;
}
else
{
biome2 = g.getData().getBiomeLoader().load(args[1]);
if(biome2 == null)
{
sender.sendMessage(args[1] + " is not a biome. Use the file name (without extension)");
return true;
}
}
}
for(String i : args)
{
if(i.equalsIgnoreCase("-cave"))
{
cave = true;
}
}
IrisBiome biome = args[0].equals("this") ? g.getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockZ()) : g.getData().getBiomeLoader().load(args[0]);
if(biome == null)
{
sender.sendMessage(args[0] + " is not a biome. Use the file name (without extension)");
return true;
}
while(tries > 0)
{
tries--;
int xx = (int) (RNG.r.i(-29999970, 29999970));
int zz = (int) (RNG.r.i(-29999970, 29999970));
if((cave ? g.getCaveBiome(xx, zz) : g.getBiome(xx, zz)).getLoadKey().equals(biome.getLoadKey()))
{
if(biome2 != null)
{
for(int i = 0; i < 64; i++)
{
int ax = xx + RNG.r.i(-64, 32);
int az = zz + RNG.r.i(-64, 32);
if((cave ? g.getBiome(ax, az) : g.getBiome(ax, az)).getLoadKey().equals(biome2.getLoadKey()))
{
tries--;
p.teleport(new Location(world, xx, world.getHighestBlockYAt(xx, zz), zz));
sender.sendMessage("Found border in " + (10000 - tries) + " tries!");
return true;
}
}
}
else
{
p.teleport(new Location(world, xx, world.getHighestBlockYAt(xx, zz), zz));
sender.sendMessage("Found in " + (10000 - tries) + " tries!");
return true;
}
}
}
sender.sendMessage("Tried to find " + biome.getName() + " looked in 10,000 places no dice.");
return true;
}
else
{
sender.sendMessage("Players only.");
}
}
catch(Throwable e)
{
Iris.error("Failed goto!");
e.printStackTrace();
sender.sendMessage("We cant seem to aquire a lock on the biome cache. Please report the error in the console to our github. Thanks!");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[biome] [otherbiome] [-cave]";
}
}

View File

@@ -0,0 +1,64 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class CommandIrisStudioHotload extends MortarCommand
{
public CommandIrisStudioHotload()
{
super("hotload", "hot", "h", "reload");
setDescription("Force a hotload");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
IrisWorlds.access(world).hotload();
sender.sendMessage("Hotloaded!");
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,67 @@
package com.volmit.iris.manager.command;
import java.io.File;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioList extends MortarCommand
{
public CommandIrisStudioList()
{
super("list", "l");
requiresPermission(Iris.perm.studio);
setDescription("List projects that can be opened.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
int m = 0;
for(File i : Iris.globaldata.getDimensionLoader().getFolders())
{
for(File j : i.listFiles())
{
if(j.isFile() && j.getName().endsWith(".json"))
{
try
{
m++;
IrisDimension d = Iris.globaldata.getDimensionLoader().load(j.getName().replaceAll("\\Q.json\\E", ""));
sender.sendMessage("- " + d.getLoadKey() + " (" + d.getName() + ")");
}
catch(Throwable e)
{
}
}
}
}
sender.sendMessage("Found " + m + " project" + (m == 1 ? "" : "s"));
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,124 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.object.InventorySlotType;
import com.volmit.iris.object.IrisLootTable;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.*;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
public class CommandIrisStudioLoot extends MortarCommand
{
public CommandIrisStudioLoot()
{
super("loot");
setDescription("Show loot if a chest were right here");
requiresPermission(Iris.perm.studio);
setCategory("Loot");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(sender.isPlayer())
{
Player p = sender.player();
IrisAccess prov = IrisWorlds.access(sender.player().getWorld());
if(prov == null)
{
sender.sendMessage("You can only use /iris loot in a studio world of iris.");
return true;
}
KList<IrisLootTable> tables = prov.getCompound().getEngine(p.getLocation().getBlockY()).getLootTables(RNG.r, p.getLocation().getBlock());
Inventory inv = Bukkit.createInventory(null, 27 * 2);
try
{
Iris.proj.getActiveProject().getActiveProvider().getCompound().getEngine(p.getLocation().getBlockY()).addItems(true, inv, RNG.r, tables, InventorySlotType.STORAGE, p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ(), 1);
}
catch(Throwable e)
{
sender.sendMessage("You can only use /iris loot in a studio world of iris.");
return true;
}
p.openInventory(inv);
for(IrisLootTable i : tables)
{
sender.sendMessage("- " + i.getName());
}
boolean ffast = false;
boolean fadd = false;
for(String i : args)
{
if(i.equals("--fast"))
{
ffast = true;
}
if(i.equals("--add"))
{
fadd = true;
}
}
boolean fast = ffast;
boolean add = fadd;
O<Integer> ta = new O<Integer>();
ta.set(-1);
ta.set(Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, () ->
{
if(!p.getOpenInventory().getType().equals(InventoryType.CHEST))
{
Bukkit.getScheduler().cancelTask(ta.get());
return;
}
if(!add)
{
inv.clear();
}
Iris.proj.getActiveProject().getActiveProvider().getCompound().getEngine(p.getLocation().getBlockY()).addItems(true, inv, new RNG(RNG.r.imax()), tables, InventorySlotType.STORAGE, p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ(), 1);
}, 0, fast ? 5 : 35));
return true;
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[width]";
}
}

View File

@@ -0,0 +1,51 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioMap extends MortarCommand
{
public CommandIrisStudioMap()
{
super("map", "render");
setDescription("Render a map (gui outside of mc)");
requiresPermission(Iris.perm.studio);
setCategory("World");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(!IrisSettings.get().isUseServerLaunchedGuis())
{
sender.sendMessage("To use Iris Guis, please enable serverLaunchedGuis in Iris/settings.json");
return true;
}
IrisAccess g = Iris.proj.getActiveProject().getActiveProvider();
// IrisVision.launch(g);
sender.sendMessage("NYI: Opening Map!");
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,48 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioOpen extends MortarCommand
{
public CommandIrisStudioOpen()
{
super("open", "o");
requiresPermission(Iris.perm.studio);
setDescription("Create a new temporary world to design a dimension.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(args.length < 1)
{
sender.sendMessage("/iris std open <DIMENSION> (file name without .json)");
return true;
}
Iris.proj.open(sender, args[0]);
return true;
}
@Override
protected String getArgsUsage()
{
return "[dimension]";
}
}

View File

@@ -0,0 +1,65 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.J;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioPackage extends MortarCommand
{
public CommandIrisStudioPackage()
{
super("package", "pkg");
requiresPermission(Iris.perm.studio);
setDescription("Package your dimension into a compressed format.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(args.length == 0)
{
sender.sendMessage("/iris std package <DIMENSION> [-o] [-m]");
return true;
}
J.a(() ->
{
boolean o = false;
boolean m = true;
for(String i : args)
{
if(i.equalsIgnoreCase("-o"))
{
o = true;
}
}
String dim = args[0];
Iris.proj.compilePackage(sender, dim, o, m);
});
return true;
}
@Override
protected String getArgsUsage()
{
return "[dimension] [-o] [-m]";
}
}

View File

@@ -0,0 +1,86 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.KList;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.generator.legacy.IrisTerrainProvider;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.object.IrisEntity;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioSummon extends MortarCommand
{
public CommandIrisStudioSummon()
{
super("summon", "spawnmob");
setDescription("Spawn an Iris entity");
requiresPermission(Iris.perm.studio);
setCategory("Summon");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(sender.isPlayer())
{
Player p = sender.player();
World world = p.getWorld();
if(!IrisWorlds.isIrisWorld(world))
{
sender.sendMessage("You must be in an iris world.");
return true;
}
IrisAccess g = IrisWorlds.access(world);
if(args.length == 0)
{
for(String i : g.getData().getEntityLoader().getPossibleKeys())
{
sender.sendMessage("- " + i);
}
}
else
{
IrisEntity e = g.getData().getEntityLoader().load(args[0]);
if(e == null)
{
sender.sendMessage("Couldnt find entity " + args[0] + ". Use '/iris std summon' to see a list of iris entities.");
return true;
}
e.spawn(g, sender.player().getLocation().clone().add(0, 3, 0));
}
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,58 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioTP extends MortarCommand
{
public CommandIrisStudioTP()
{
super("tp");
requiresPermission(Iris.perm.studio);
setDescription("Go to the spawn of the currently open studio world.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(!Iris.proj.isProjectOpen())
{
sender.sendMessage("There is not a studio currently loaded.");
return true;
}
try
{
sender.sendMessage("Teleporting you to the active studio world.");
sender.player().teleport(Iris.proj.getActiveProject().getActiveProvider().getTarget().getWorld().getSpawnLocation());
}
catch(Throwable e)
{
sender.sendMessage("Failed to teleport to the studio world. Try re-opening the project.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,58 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.manager.IrisProject;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisStudioUpdate extends MortarCommand
{
public CommandIrisStudioUpdate()
{
super("update", "upd", "u");
requiresPermission(Iris.perm.studio);
setDescription("Update your dimension project.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(!IrisSettings.get().isStudio())
{
sender.sendMessage("To use Iris Studio, please enable studio in Iris/settings.json");
return true;
}
if(args.length == 0)
{
sender.sendMessage("/iris std package <DIMENSION>");
return true;
}
if(new IrisProject(Iris.proj.getWorkspaceFolder(args[0])).updateWorkspace())
{
sender.sendMessage("Updated Code Workspace for " + args[0]);
}
else
{
sender.sendMessage("Invalid project: " + args[0] + ". Try deleting the code-workspace file and try again.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "[dimension]";
}
}

View File

@@ -0,0 +1,40 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.util.*;
public class CommandIrisUpdateProject extends MortarCommand
{
public CommandIrisUpdateProject()
{
super("update-project", "^project");
requiresPermission(Iris.perm.studio);
setDescription("Update a project from git.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(args.length < 1)
{
sender.sendMessage("/iris update-project " + C.BOLD + "<PROJECT>");
return true;
}
J.a(() -> Iris.proj.downloadSearch(sender, args[0], false, true));
return true;
}
@Override
protected String getArgsUsage()
{
return "<project>";
}
}

View File

@@ -0,0 +1,65 @@
package com.volmit.iris.manager.command;
import java.io.File;
import com.volmit.iris.Iris;
import com.volmit.iris.util.*;
public class CommandIrisUpdateWorld extends MortarCommand
{
public CommandIrisUpdateWorld()
{
super("update-world", "^world");
requiresPermission(Iris.perm.studio);
setDescription("Update a world from a project.");
setCategory("Studio");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(args.length < 2)
{
sender.sendMessage("/iris update-world " + C.BOLD + "<WORLD> <PROJECT>");
return true;
}
boolean fresh = false;
for(String i : args)
{
if(i.equalsIgnoreCase("--fresh-download"))
{
fresh = true;
}
}
boolean bfre = fresh;
J.a(() ->
{
File folder = new File(args[0]);
folder.mkdirs();
if(bfre)
{
Iris.proj.downloadSearch(sender, args[1], false, true);
}
Iris.proj.installIntoWorld(sender, args[1], folder);
});
return true;
}
@Override
protected String getArgsUsage()
{
return "<world> <project>";
}
}

View File

@@ -0,0 +1,46 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.util.Command;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisWhat extends MortarCommand
{
@Command
private CommandIrisWhatBlock block;
@Command
private CommandIrisWhatHand hand;
@Command
private CommandIrisWhatBiome biome;
public CommandIrisWhat()
{
super("what", "w", "?");
setDescription("Get timings for this world");
requiresPermission(Iris.perm.studio);
setCategory("Wut");
setDescription("Figure out what stuff is");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
printHelp(sender);
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,64 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.scaffold.IrisWorlds;
import com.volmit.iris.scaffold.engine.IrisAccess;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import org.bukkit.World;
import org.bukkit.entity.Player;
public class CommandIrisWhatBiome extends MortarCommand
{
public CommandIrisWhatBiome()
{
super("biome", "bi", "b");
setDescription("Get the biome data you are in.");
requiresPermission(Iris.perm.studio);
setCategory("Wut");
setDescription("What biome am I in");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
Player p = sender.player();
World w = p.getWorld();
try
{
IrisAccess g = IrisWorlds.access(w);
IrisBiome b = g.getBiome(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ());
sender.sendMessage("IBiome: " + b.getLoadKey() + " (" + b.getDerivative().name() + ")");
}
catch(Throwable e)
{
sender.sendMessage("Non-Iris Biome: " + p.getLocation().getBlock().getBiome().name());
}
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,90 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.*;
import org.bukkit.FluidCollisionMode;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
public class CommandIrisWhatBlock extends MortarCommand
{
public CommandIrisWhatBlock()
{
super("block", "l", "bl");
setDescription("Get the block data for looking.");
requiresPermission(Iris.perm.studio);
setCategory("Wut");
setDescription("WAILA, WAWLA etc");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
BlockData bd;
Player p = sender.player();
try
{
bd = p.getTargetBlockExact(128, FluidCollisionMode.NEVER).getBlockData();
}
catch (NullPointerException e)
{
sender.sendMessage("Please look at any block, not at the sky");
bd = null;
}
if(bd != null) {
sender.sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
sender.sendMessage("Full: " + C.WHITE + bd.getAsString(true));
if (B.isStorage(bd)) {
sender.sendMessage(C.YELLOW + "* Storage Block (Loot Capable)");
}
if (B.isLit(bd)) {
sender.sendMessage(C.YELLOW + "* Lit Block (Light Capable)");
}
if (B.isFoliage(bd)) {
sender.sendMessage(C.YELLOW + "* Foliage Block");
}
if (B.isDecorant(bd)) {
sender.sendMessage(C.YELLOW + "* Decorant Block");
}
if (B.isFluid(bd)) {
sender.sendMessage(C.YELLOW + "* Fluid Block");
}
if (B.isFoliagePlantable(bd)) {
sender.sendMessage(C.YELLOW + "* Plantable Foliage Block");
}
if (B.isSolid(bd)) {
sender.sendMessage(C.YELLOW + "* Solid Block");
}
}
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,70 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.KList;
import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.util.C;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
public class CommandIrisWhatHand extends MortarCommand
{
public CommandIrisWhatHand()
{
super("hand", "h");
setDescription("Get the block data for holding.");
requiresPermission(Iris.perm.studio);
setCategory("Wut");
setDescription("What block am I holding");
}
@Override
public void addTabOptions(MortarSender sender, String[] args, KList<String> list) {
}
@Override
public boolean handle(MortarSender sender, String[] args)
{
if(sender.isPlayer())
{
Player p = sender.player();
try
{
BlockData bd = p.getInventory().getItemInMainHand().getType().createBlockData();
if(!bd.getMaterial().equals(Material.AIR)) {
sender.sendMessage("Material: " + C.GREEN + bd.getMaterial().name());
sender.sendMessage("Full: " + C.WHITE + bd.getAsString(true));
} else {
sender.sendMessage("Please hold a block/item");
}
}
catch(Throwable e)
{
Material bd = p.getInventory().getItemInMainHand().getType();
if(!bd.equals(Material.AIR)) {
sender.sendMessage("Material: " + C.GREEN + bd.name());
} else {
sender.sendMessage("Please hold a block/item");
}
}
}
else
{
sender.sendMessage("Players only.");
}
return true;
}
@Override
protected String getArgsUsage()
{
return "";
}
}

View File

@@ -0,0 +1,33 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.MortarPermission;
import com.volmit.iris.util.Permission;
public class PermissionIris extends MortarPermission
{
@Permission
public PermissionIrisStudio studio;
public PermissionIris()
{
super();
}
@Override
protected String getNode()
{
return "iris";
}
@Override
public String getDescription()
{
return "Iris Permissions";
}
@Override
public boolean isDefault()
{
return false;
}
}

View File

@@ -0,0 +1,29 @@
package com.volmit.iris.manager.command;
import com.volmit.iris.util.MortarPermission;
public class PermissionIrisStudio extends MortarPermission
{
public PermissionIrisStudio()
{
super();
}
@Override
protected String getNode()
{
return "studio";
}
@Override
public String getDescription()
{
return "Iris Studio Permissions";
}
@Override
public boolean isDefault()
{
return false;
}
}

View File

@@ -0,0 +1,26 @@
package com.volmit.iris.manager.edit;
import java.io.Closeable;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
public interface BlockEditor extends Closeable
{
public long last();
public void set(int x, int y, int z, BlockData d);
public BlockData get(int x, int y, int z);
public void setBiome(int x, int z, Biome b);
public void setBiome(int x, int y, int z, Biome b);
@Override
public void close();
public Biome getBiome(int x, int y, int z);
public Biome getBiome(int x, int z);
}

View File

@@ -1,7 +1,7 @@
package com.volmit.iris.manager;
package com.volmit.iris.manager.edit;
import com.volmit.iris.util.J;
import com.volmit.iris.v2.scaffold.parallel.MultiBurst;
import com.volmit.iris.scaffold.parallel.MultiBurst;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;

View File

@@ -0,0 +1,67 @@
package com.volmit.iris.manager.edit;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import com.volmit.iris.util.M;
public class BukkitBlockEditor implements BlockEditor
{
private final World world;
public BukkitBlockEditor(World world)
{
this.world = world;
}
@Override
public void set(int x, int y, int z, BlockData d)
{
world.getBlockAt(x, y, z).setBlockData(d, false);
}
@Override
public BlockData get(int x, int y, int z)
{
return world.getBlockAt(x, y, z).getBlockData();
}
@Override
public void close()
{
}
@Override
public long last()
{
return M.ms();
}
@SuppressWarnings("deprecation")
@Override
public void setBiome(int x, int z, Biome b)
{
world.setBiome(x, z, b);
}
@Override
public void setBiome(int x, int y, int z, Biome b)
{
world.setBiome(x, y, z, b);
}
@Override
public Biome getBiome(int x, int y, int z)
{
return world.getBiome(x, y, z);
}
@SuppressWarnings("deprecation")
@Override
public Biome getBiome(int x, int z)
{
return world.getBiome(x, z);
}
}

View File

@@ -1,11 +1,11 @@
package com.volmit.iris.manager;
package com.volmit.iris.manager.edit;
import com.volmit.iris.util.BlockPosition;
import com.volmit.iris.util.J;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.RNG;
import com.volmit.iris.v2.scaffold.engine.EngineCompositeGenerator;
import com.volmit.iris.v2.scaffold.parallax.ParallaxAccess;
import com.volmit.iris.scaffold.engine.EngineCompositeGenerator;
import com.volmit.iris.scaffold.parallax.ParallaxAccess;
import lombok.Data;
import org.bukkit.World;
import org.bukkit.block.Block;

View File

@@ -0,0 +1,76 @@
package com.volmit.iris.manager.edit;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.biome.BiomeTypes;
import com.volmit.iris.util.M;
public class WEBlockEditor implements BlockEditor
{
private final World world;
private final EditSession es;
private long last;
public WEBlockEditor(World world)
{
last = M.ms();
this.world = world;
es = WorldEdit.getInstance().newEditSessionBuilder().world(BukkitAdapter.adapt(world)).build();
}
@SuppressWarnings("deprecation")
public void setBiome(int x, int z, Biome b)
{
es.setBiome(BlockVector2.at(x, z), BiomeTypes.get("minecraft:" + b.name().toLowerCase()));
}
public void setBiome(int x, int y, int z, Biome b)
{
es.setBiome(BlockVector3.at(x, y, z), BiomeTypes.get("minecraft:" + b.name().toLowerCase()));
}
@Override
public void set(int x, int y, int z, BlockData d)
{
es.rawSetBlock(BlockVector3.at(x, y, z), BukkitAdapter.adapt(d));
}
@Override
public BlockData get(int x, int y, int z)
{
return world.getBlockAt(x, y, z).getBlockData();
}
@Override
public void close()
{
es.close();
return;
}
@Override
public long last()
{
return last;
}
@Override
public Biome getBiome(int x, int y, int z)
{
return world.getBiome(x, y, z);
}
@SuppressWarnings("deprecation")
@Override
public Biome getBiome(int x, int z)
{
return world.getBiome(x, z);
}
}

View File

@@ -0,0 +1,34 @@
package com.volmit.iris.manager.gui;
import java.awt.image.BufferedImage;
import com.volmit.iris.util.IrisInterpolation;
public class IrisRenderer
{
private Renderer renderer;
public IrisRenderer(Renderer renderer)
{
this.renderer = renderer;
}
public BufferedImage render(double sx, double sz, double size, int resolution)
{
BufferedImage image = new BufferedImage(resolution, resolution, BufferedImage.TYPE_INT_RGB);
double x, z;
int i, j;
for(i = 0; i < resolution; i++)
{
x = IrisInterpolation.lerp(sx, sx + size, (double) i / (double) (resolution));
for(j = 0; j < resolution; j++)
{
z = IrisInterpolation.lerp(sz, sz + size, (double) j / (double) (resolution));
image.setRGB(i, j, renderer.draw(x, z).getRGB());
}
}
return image;
}
}

View File

@@ -0,0 +1,343 @@
package com.volmit.iris.manager.gui;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.legacy.IrisTerrainProvider;
import com.volmit.iris.util.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class IrisVision extends JPanel implements MouseWheelListener
{
private static final long serialVersionUID = 2094606939770332040L;
private IrisRenderer renderer;
private int posX = 0;
private int posZ = 0;
private double scale = 128;
private double mscale = 1D;
private int w = 0;
private int h = 0;
private double lx = Double.MAX_VALUE;
private double lz = Double.MAX_VALUE;
private double ox = 0;
private double oz = 0;
private double oxp = 0;
private double ozp = 0;
private short lid = -1;
double tfps = 240D;
private RollingSequence rs = new RollingSequence(512);
private O<Integer> m = new O<>();
private int tid = 0;
private KMap<BlockPosition, BufferedImage> positions = new KMap<>();
private KMap<BlockPosition, BufferedImage> fastpositions = new KMap<>();
private KSet<BlockPosition> working = new KSet<>();
private KSet<BlockPosition> workingfast = new KSet<>();
private final ExecutorService e = Executors.newFixedThreadPool(8, new ThreadFactory()
{
@Override
public Thread newThread(Runnable r)
{
tid++;
Thread t = new Thread(r);
t.setName("Iris HD Renderer " + tid);
t.setPriority(Thread.MIN_PRIORITY);
t.setUncaughtExceptionHandler((et, e) ->
{
Iris.info("Exception encountered in " + et.getName());
e.printStackTrace();
});
return t;
}
});
private final ExecutorService eh = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(), new ThreadFactory()
{
@Override
public Thread newThread(Runnable r)
{
tid++;
Thread t = new Thread(r);
t.setName("Iris Renderer " + tid);
t.setPriority(Thread.NORM_PRIORITY);
t.setUncaughtExceptionHandler((et, e) ->
{
Iris.info("Exception encountered in " + et.getName());
e.printStackTrace();
});
return t;
}
});
public IrisVision()
{
m.set(8);
renderer = new IrisRenderer(null);
rs.put(1);
addMouseWheelListener((MouseWheelListener) this);
addMouseMotionListener(new MouseMotionListener()
{
@Override
public void mouseMoved(MouseEvent e)
{
Point cp = e.getPoint();
lx = (cp.getX());
lz = (cp.getY());
}
@Override
public void mouseDragged(MouseEvent e)
{
Point cp = e.getPoint();
ox += (lx - cp.getX()) * scale;
oz += (lz - cp.getY()) * scale;
lx = cp.getX();
lz = cp.getY();
}
});
}
public BufferedImage getTile(KSet<BlockPosition> fg, int div, int x, int z, O<Integer> m)
{
BlockPosition key = new BlockPosition((int) mscale, Math.floorDiv(x, div), Math.floorDiv(z, div));
fg.add(key);
if(positions.containsKey(key))
{
return positions.get(key);
}
if(fastpositions.containsKey(key))
{
if(!working.contains(key) && working.size() < 9)
{
m.set(m.get() - 1);
if(m.get() >= 0)
{
working.add(key);
double mk = mscale;
double mkd = scale;
short l = lid;
e.submit(() ->
{
PrecisionStopwatch ps = PrecisionStopwatch.start();
BufferedImage b = renderer.render(x * mscale, z * mscale, div * mscale, div);
rs.put(ps.getMilliseconds());
working.remove(key);
if(mk == mscale && mkd == scale && lid == l)
{
positions.put(key, b);
}
});
}
}
return fastpositions.get(key);
}
if(workingfast.contains(key))
{
return null;
}
m.set(m.get() - 1);
if(m.get() >= 0)
{
workingfast.add(key);
double mk = mscale;
double mkd = scale;
short l = lid;
eh.submit(() ->
{
PrecisionStopwatch ps = PrecisionStopwatch.start();
BufferedImage b = renderer.render(x * mscale, z * mscale, div * mscale, div / 12);
rs.put(ps.getMilliseconds());
workingfast.remove(key);
if(mk == mscale && mkd == scale && lid == l)
{
fastpositions.put(key, b);
}
});
}
return null;
}
@Override
public void paint(Graphics gx)
{
if(ox < oxp)
{
oxp -= Math.abs(ox - oxp) * 0.36;
}
if(ox > oxp)
{
oxp += Math.abs(oxp - ox) * 0.36;
}
if(oz < ozp)
{
ozp -= Math.abs(oz - ozp) * 0.36;
}
if(oz > ozp)
{
ozp += Math.abs(ozp - oz) * 0.36;
}
// TODO: DETECT HOTLOADS
if(false)
{
working.clear();
workingfast.clear();
positions.clear();
fastpositions.clear();
//TODO: lid = Iris.proj.getActiveProject().getActiveProvider().getCacheID();
Iris.info("Hotloading Vision");
}
PrecisionStopwatch p = PrecisionStopwatch.start();
Graphics2D g = (Graphics2D) gx;
w = getWidth();
h = getHeight();
double vscale = scale;
scale = w / 32D;
if(scale != vscale)
{
positions.clear();
}
KSet<BlockPosition> gg = new KSet<>();
int iscale = (int) scale;
g.setColor(Color.white);
g.clearRect(0, 0, w, h);
posX = (int) oxp;
posZ = (int) ozp;
m.set(3);
for(int r = 0; r < Math.max(w, h); r += iscale)
{
for(int i = -iscale; i < w + iscale; i += iscale)
{
for(int j = -iscale; j < h + iscale; j += iscale)
{
int a = i - (w / 2);
int b = j - (h / 2);
if(a * a + b * b <= r * r)
{
BufferedImage t = getTile(gg, iscale, Math.floorDiv((posX / iscale) + i, iscale) * iscale, Math.floorDiv((posZ / iscale) + j, iscale) * iscale, m);
if(t != null)
{
g.drawImage(t, i - ((posX / iscale) % (iscale)), j - ((posZ / iscale) % (iscale)), (int) (iscale), (int) (iscale), new ImageObserver()
{
@Override
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
{
return true;
}
});
}
}
}
}
}
p.end();
for(BlockPosition i : positions.k())
{
if(!gg.contains(i))
{
positions.remove(i);
}
}
if(!isVisible())
{
return;
}
if(!getParent().isVisible())
{
return;
}
if(!getParent().getParent().isVisible())
{
return;
}
J.a(() ->
{
J.sleep((long) 1);
repaint();
});
}
private static void createAndShowGUI(Renderer r, short s)
{
JFrame frame = new JFrame("Vision");
IrisVision nv = new IrisVision();
nv.renderer = new IrisRenderer(r);
frame.add(nv);
frame.setSize(1440, 820);
nv.lid = s;
frame.setVisible(true);
File file = Iris.getCached("Iris Icon", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/icon.png");
if(file != null)
{
try
{
frame.setIconImage(ImageIO.read(file));
}
catch(IOException e)
{
}
}
}
public static void launch(IrisTerrainProvider g)
{
J.a(() ->
{
createAndShowGUI(g.createRenderer(), g.getCacheID());
});
}
public void mouseWheelMoved(MouseWheelEvent e)
{
int notches = e.getWheelRotation();
if(e.isControlDown())
{
return;
}
Iris.info("BPP: " + (mscale) + " BW: " + (w * mscale));
positions.clear();
fastpositions.clear();
mscale = mscale + ((0.044 * mscale) * notches);
mscale = mscale < 0.00001 ? 0.00001 : mscale;
}
}

View File

@@ -0,0 +1,384 @@
package com.volmit.iris.manager.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.locks.ReentrantLock;
import javax.imageio.ImageIO;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.JViewport;
import com.volmit.iris.Iris;
import com.volmit.iris.generator.noise.CNG;
import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.util.Function2;
import com.volmit.iris.util.GroupedExecutor;
import com.volmit.iris.util.J;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.M;
import com.volmit.iris.util.PrecisionStopwatch;
import com.volmit.iris.util.RNG;
import com.volmit.iris.util.RollingSequence;
public class NoiseExplorer extends JPanel implements MouseWheelListener
{
private static final long serialVersionUID = 2094606939770332040L;
static JComboBox<String> combo;
RollingSequence r = new RollingSequence(90);
boolean colorMode = true;
double scale = 1;
static boolean hd = false;
static double ascale = 10;
CNG cng = NoiseStyle.STATIC.create(new RNG(RNG.r.nextLong()));
GroupedExecutor gx = new GroupedExecutor(Runtime.getRuntime().availableProcessors(), Thread.MAX_PRIORITY, "Iris Renderer");
ReentrantLock l = new ReentrantLock();
int[][] co;
int w = 0;
int h = 0;
static Function2<Double, Double, Double> generator;
static double oxp = 0;
static double ozp = 0;
double ox = 0;
double oz = 0;
double mx = 0;
double mz = 0;
static double mxx = 0;
static double mzz = 0;
static boolean down = false;
double lx = Double.MAX_VALUE;
double lz = Double.MAX_VALUE;
double tz = 1D;
double t = 1D;
public NoiseExplorer()
{
addMouseWheelListener((MouseWheelListener) this);
addMouseMotionListener(new MouseMotionListener()
{
@Override
public void mouseMoved(MouseEvent e)
{
Point cp = e.getPoint();
lx = (cp.getX());
lz = (cp.getY());
mx = lx;
mz = lz;
}
@Override
public void mouseDragged(MouseEvent e)
{
Point cp = e.getPoint();
ox += (lx - cp.getX()) * scale;
oz += (lz - cp.getY()) * scale;
lx = cp.getX();
lz = cp.getY();
}
});
}
public void mouseWheelMoved(MouseWheelEvent e)
{
int notches = e.getWheelRotation();
if(e.isControlDown())
{
t = t + ((0.0025 * t) * notches);
return;
}
scale = scale + ((0.044 * scale) * notches);
scale = scale < 0.00001 ? 0.00001 : scale;
}
@Override
public void paint(Graphics g)
{
if(scale < ascale)
{
ascale -= Math.abs(scale - ascale) * 0.16;
}
if(scale > ascale)
{
ascale += Math.abs(ascale - scale) * 0.16;
}
if(t < tz)
{
tz -= Math.abs(t - tz) * 0.29;
}
if(t > tz)
{
tz += Math.abs(tz - t) * 0.29;
}
if(ox < oxp)
{
oxp -= Math.abs(ox - oxp) * 0.16;
}
if(ox > oxp)
{
oxp += Math.abs(oxp - ox) * 0.16;
}
if(oz < ozp)
{
ozp -= Math.abs(oz - ozp) * 0.16;
}
if(oz > ozp)
{
ozp += Math.abs(ozp - oz) * 0.16;
}
if(mx < mxx)
{
mxx -= Math.abs(mx - mxx) * 0.16;
}
if(mx > mxx)
{
mxx += Math.abs(mxx - mx) * 0.16;
}
if(mz < mzz)
{
mzz -= Math.abs(mz - mzz) * 0.16;
}
if(mz > mzz)
{
mzz += Math.abs(mzz - mz) * 0.16;
}
PrecisionStopwatch p = PrecisionStopwatch.start();
int accuracy = hd ? 1 : M.clip((r.getAverage() / 6D), 1D, 128D).intValue();
accuracy = down ? accuracy * 4 : accuracy;
int v = 1000;
if(g instanceof Graphics2D)
{
Graphics2D gg = (Graphics2D) g;
if(getParent().getWidth() != w || getParent().getHeight() != h)
{
w = getParent().getWidth();
h = getParent().getHeight();
co = null;
}
if(co == null)
{
co = new int[w][h];
}
for(int x = 0; x < w; x += accuracy)
{
int xx = x;
for(int z = 0; z < h; z += accuracy)
{
int zz = z;
gx.queue("a", () ->
{
double n = generator != null ? generator.apply(Double.valueOf((xx * ascale) + oxp), Double.valueOf((zz * ascale) + ozp)) : cng.noise((xx * ascale) + oxp, tz, (zz * ascale) + ozp);
if(n > 1 || n < 0)
{
return;
}
Color color = colorMode ? Color.getHSBColor((float) (n), 1f - (float) (n * n * n * n * n * n), 1f - (float) n) : Color.getHSBColor(0f, 0f, (float) n);
int rgb = color.getRGB();
co[xx][zz] = rgb;
});
}
gx.waitFor("a");
if(hd && p.getMilliseconds() > v)
{
break;
}
}
for(int x = 0; x < getParent().getWidth(); x += accuracy)
{
for(int z = 0; z < getParent().getHeight(); z += accuracy)
{
gg.setColor(new Color(co[x][z]));
gg.fillRect(x, z, accuracy, accuracy);
}
}
}
p.end();
t += 1D;
r.put(p.getMilliseconds());
if(!isVisible())
{
return;
}
if(!getParent().isVisible())
{
return;
}
if(!getParent().getParent().isVisible())
{
return;
}
EventQueue.invokeLater(() ->
{
J.sleep((long) Math.max(0, 32 - r.getAverage()));
repaint();
});
}
private static void createAndShowGUI(Function2<Double, Double, Double> gen, String genName)
{
JFrame frame = new JFrame("Noise Explorer: " + genName);
NoiseExplorer nv = new NoiseExplorer();
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
JLayeredPane pane = new JLayeredPane();
nv.setSize(new Dimension(1440, 820));
pane.add(nv, 1, 0);
NoiseExplorer.generator = gen;
frame.add(pane);
File file = Iris.getCached("Iris Icon", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/icon.png");
if(file != null)
{
try
{
frame.setIconImage(ImageIO.read(file));
}
catch(IOException e)
{
}
}
frame.setSize(1440, 820);
frame.setVisible(true);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Noise Explorer");
NoiseExplorer nv = new NoiseExplorer();
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
KList<String> li = new KList<NoiseStyle>(NoiseStyle.values()).toStringList();
combo = new JComboBox<String>(li.toArray(new String[li.size()]));
combo.setSelectedItem("STATIC");
combo.setFocusable(false);
combo.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
@SuppressWarnings("unchecked")
String b = (String) (((JComboBox<String>) e.getSource()).getSelectedItem());
NoiseStyle s = NoiseStyle.valueOf(b);
nv.cng = s.create(RNG.r.nextParallelRNG(RNG.r.imax()));
}
});
combo.setSize(500, 30);
JLayeredPane pane = new JLayeredPane();
nv.setSize(new Dimension(1440, 820));
pane.add(nv, 1, 0);
pane.add(combo, 2, 0);
frame.add(pane);
File file = Iris.getCached("Iris Icon", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/icon.png");
if(file != null)
{
try
{
frame.setIconImage(ImageIO.read(file));
}
catch(IOException e)
{
}
}
frame.setSize(1440, 820);
frame.setVisible(true);
}
public static void launch(Function2<Double, Double, Double> gen, String genName)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI(gen, genName);
}
});
}
public static void launch()
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
static class HandScrollListener extends MouseAdapter
{
private static final Point pp = new Point();
@Override
public void mouseDragged(MouseEvent e)
{
JViewport vport = (JViewport) e.getSource();
JComponent label = (JComponent) vport.getView();
Point cp = e.getPoint();
Point vp = vport.getViewPosition();
vp.translate(pp.x - cp.x, pp.y - cp.y);
label.scrollRectToVisible(new Rectangle(vp, vport.getSize()));
pp.setLocation(cp);
}
@Override
public void mousePressed(MouseEvent e)
{
pp.setLocation(e.getPoint());
}
}
}

View File

@@ -0,0 +1,183 @@
package com.volmit.iris.manager.gui;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.locks.ReentrantLock;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.util.ChunkPosition;
import com.volmit.iris.util.J;
import com.volmit.iris.util.KList;
import com.volmit.iris.util.M;
import com.volmit.iris.util.PregenJob;
public class PregenGui extends JPanel implements KeyListener
{
private PregenJob job;
private static final long serialVersionUID = 2094606939770332040L;
private KList<Runnable> order = new KList<>();
private int res = 512;
Graphics2D bg;
double minC;
double maxC;
private ReentrantLock l;
private BufferedImage image = new BufferedImage(res, res, BufferedImage.TYPE_INT_RGB);
public PregenGui()
{
}
@Override
public void paint(Graphics gx)
{
minC = Math.floorDiv(job.min(), 16) - 4;
maxC = Math.floorDiv(job.max(), 16) + 4;
Graphics2D g = (Graphics2D) gx;
bg = (Graphics2D) image.getGraphics();
l.lock();
while(order.isNotEmpty())
{
try
{
order.pop().run();
}
catch(Throwable e)
{
}
}
l.unlock();
g.drawImage(image, 0, 0, getParent().getWidth(), getParent().getHeight(), new ImageObserver()
{
@Override
public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
{
return true;
}
});
g.setColor(Color.WHITE);
g.setFont(new Font("Hevetica", Font.BOLD, 28));
String[] prog = job.getProgress();
int h = g.getFontMetrics().getHeight() + 5;
int hh = 20;
if(job.paused())
{
g.drawString("PAUSED", 20, hh += h);
g.drawString("Press P to Resume", 20, hh += h);
}
else
{
for(String i : prog)
{
g.drawString(i, 20, hh += h);
}
g.drawString("Press P to Pause", 20, hh += h);
}
J.sleep((long) (IrisSettings.get().isMaxPregenGuiFPS() ? 4 : 250));
repaint();
}
private void draw(ChunkPosition p, Color c, double minC, double maxC, Graphics2D bg)
{
double pw = M.lerpInverse(minC, maxC, p.getX());
double ph = M.lerpInverse(minC, maxC, p.getZ());
double pwa = M.lerpInverse(minC, maxC, p.getX() + 1);
double pha = M.lerpInverse(minC, maxC, p.getZ() + 1);
int x = (int) M.lerp(0, res, pw);
int z = (int) M.lerp(0, res, ph);
int xa = (int) M.lerp(0, res, pwa);
int za = (int) M.lerp(0, res, pha);
bg.setColor(c);
bg.fillRect(x, z, xa - x, za - z);
}
@SuppressWarnings("deprecation")
private static void createAndShowGUI(PregenJob j)
{
JFrame frame = new JFrame("Pregen View");
PregenGui nv = new PregenGui();
frame.addKeyListener(nv);
nv.l = new ReentrantLock();
nv.job = j;
j.subscribe((c, b) ->
{
if(b.equals(Color.pink) && c.equals(new ChunkPosition(Integer.MAX_VALUE, Integer.MAX_VALUE)))
{
frame.hide();
}
nv.l.lock();
nv.order.add(() -> nv.draw(c, b, nv.minC, nv.maxC, nv.bg));
nv.l.unlock();
});
frame.add(nv);
frame.setSize(1000, 1000);
frame.setVisible(true);
File file = Iris.getCached("Iris Icon", "https://raw.githubusercontent.com/VolmitSoftware/Iris/master/icon.png");
if(file != null)
{
try
{
frame.setIconImage(ImageIO.read(file));
}
catch(IOException e)
{
}
}
}
public static void launch(PregenJob g)
{
J.a(() ->
{
createAndShowGUI(g);
});
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_P)
{
PregenJob.pauseResume();
}
}
}

View File

@@ -0,0 +1,9 @@
package com.volmit.iris.manager.gui;
import java.awt.Color;
@FunctionalInterface
public interface Renderer
{
public Color draw(double x, double z);
}

View File

@@ -0,0 +1,38 @@
package com.volmit.iris.manager.link;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.plugin.Plugin;
public class BKLink
{
public BKLink()
{
}
public void updateBlock(Block b) {
BlockData d = b.getBlockData();
b.setType(Material.AIR, false);
b.setBlockData(d, true);
}
public boolean supported()
{
return getBK() != null;
}
public Plugin getBK()
{
Plugin p = Bukkit.getPluginManager().getPlugin("BKCommonLib");
if(p == null)
{
return null;
}
return p;
}
}

View File

@@ -0,0 +1,41 @@
package com.volmit.iris.manager.link;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
public class CitizensLink
{
public CitizensLink()
{
}
public boolean supported()
{
return getCitizens() != null;
}
// public Entity spawn(EntityType type, String npcType, Location a)
// {
// if(!supported())
// {
// return null;
// }
//
// NPC npc = CitizensAPI.getNPCRegistry().createNPC(type, "");
// npc.spawn(a);
// return npc.getEntity();
// }
public Plugin getCitizens()
{
Plugin p = Bukkit.getPluginManager().getPlugin("Citizens");
if(p == null)
{
return null;
}
return p;
}
}

View File

@@ -0,0 +1,122 @@
package com.volmit.iris.manager.link;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldType;
import org.bukkit.plugin.Plugin;
import com.volmit.iris.object.IrisDimension;
public class MultiverseCoreLink
{
public MultiverseCoreLink()
{
}
public boolean supported()
{
return getMultiverse() != null;
}
public boolean addWorld(String worldName, IrisDimension dim, String seed)
{
if(!supported())
{
return false;
}
try
{
Plugin p = getMultiverse();
Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p);
Method m = mvWorldManager.getClass().getDeclaredMethod("addWorld",
String.class, Environment.class, String.class, WorldType.class, Boolean.class, String.class, boolean.class);
boolean b = (boolean) m.invoke(mvWorldManager, worldName, dim.getEnvironment(), seed, WorldType.NORMAL, dim.isVanillaStructures(), "Iris", false);
saveConfig();
return b;
}
catch(Throwable e)
{
e.printStackTrace();
}
return false;
}
@SuppressWarnings("unchecked")
public Map<String, ?> getList()
{
try
{
Plugin p = getMultiverse();
Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p);
Field f = mvWorldManager.getClass().getDeclaredField("worldsFromTheConfig");
f.setAccessible(true);
return (Map<String, ?>) f.get(mvWorldManager);
}
catch(Throwable e)
{
e.printStackTrace();
}
return null;
}
public void removeFromConfig(World world)
{
if(!supported())
{
return;
}
getList().remove(world.getName());
saveConfig();
}
public void removeFromConfig(String world)
{
if(!supported())
{
return;
}
getList().remove(world);
saveConfig();
}
public void saveConfig()
{
try
{
Plugin p = getMultiverse();
Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p);
mvWorldManager.getClass().getDeclaredMethod("saveWorldsConfig").invoke(mvWorldManager);
}
catch(Throwable e)
{
e.printStackTrace();
}
}
public Plugin getMultiverse()
{
Plugin p = Bukkit.getPluginManager().getPlugin("Multiverse-Core");
if(p == null)
{
return null;
}
return p;
}
}

View File

@@ -0,0 +1,64 @@
package com.volmit.iris.manager.link;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.plugin.Plugin;
import com.volmit.iris.util.KList;
import io.lumine.xikage.mythicmobs.MythicMobs;
import io.lumine.xikage.mythicmobs.mobs.MythicMob;
public class MythicMobsLink
{
public MythicMobsLink()
{
}
public boolean supported()
{
return getMythicMobs() != null;
}
public Entity spawn(String name, Location a)
{
if(!supported())
{
return null;
}
MythicMobs m = (MythicMobs) getMythicMobs();
return m.getMobManager().spawnMob(name, a).getEntity().getBukkitEntity();
}
public String[] getMythicMobTypes()
{
KList<String> v = new KList<>();
if(supported())
{
MythicMobs m = (MythicMobs) getMythicMobs();
for(MythicMob i : m.getMobManager().getMobTypes())
{
v.add(i.getInternalName());
}
}
return v.toArray(new String[v.size()]);
}
public Plugin getMythicMobs()
{
Plugin p = Bukkit.getPluginManager().getPlugin("MythicMobs");
if(p == null)
{
return null;
}
return p;
}
}

File diff suppressed because it is too large Load Diff