Finalize regen command

This commit is contained in:
Daniel Mills 2020-12-06 06:10:06 -05:00
parent 4a82def974
commit 9bc65601c0
2 changed files with 36 additions and 92 deletions

View File

@ -20,6 +20,9 @@ public class CommandIris extends MortarCommand
@Command
private CommandIrisObject object;
@Command
private CommandIrisRegen regen;
@Command
private CommandIrisDownload download;

View File

@ -1,134 +1,75 @@
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.KList;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
import com.volmit.iris.util.PregenJob;
import com.volmit.iris.util.Spiraler;
public class CommandIrisPregen extends MortarCommand
public class CommandIrisRegen extends MortarCommand
{
public CommandIrisPregen()
public CommandIrisRegen()
{
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");
super("regen");
setDescription("Regenerate chunks around you (iris worlds only)");
requiresPermission(Iris.perm.studio);
setCategory("Pregen");
setCategory("Regen");
}
@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)
try
{
sender.sendMessage("/iris pregen <blocks-wide|stop>");
return true;
}
if(args[0].equalsIgnoreCase("stop") || args[0].equalsIgnoreCase("x"))
{
if(PregenJob.task == -1)
if(args.length == 0)
{
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");
IrisWorlds.access(sender.player().getWorld()).regenerate(
sender.player().getLocation().getChunk().getX(),
sender.player().getLocation().getChunk().getZ());
sender.sendMessage("Regenerated your current chunk");
}
else
{
PregenJob.pauseResume();
if(PregenJob.isPaused())
try
{
sender.sendMessage("Pregen Paused");
int vx = sender.player().getLocation().getChunk().getX();
int vz = sender.player().getLocation().getChunk().getZ();
int rad = Integer.valueOf(args[0]);
int m = (int) Math.pow(rad, 2);
new Spiraler(rad, rad*2, (x,z) -> {
IrisWorlds.access(sender.player().getWorld()).regenerate(
vx + x,
vz + z);
}).drain();
sender.sendMessage("Regenerated " + m + " chunks");
}
else
catch(NumberFormatException e)
{
sender.sendMessage("Pregen Resumed");
sender.sendMessage(args[0] + " is not a number.");
}
}
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
catch(Throwable e1)
{
sender.sendMessage("Players only.");
sender.sendMessage("You must be in a regen-capable iris world!");
}
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]";
return "[size]";
}
}