mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-18 10:32:30 +00:00
Begin command rework
This commit is contained in:
parent
9a300c9cec
commit
215b30e611
@ -1,5 +1,6 @@
|
||||
package com.dfsek.terra;
|
||||
|
||||
import com.dfsek.terra.command.TerraCommand;
|
||||
import com.dfsek.terra.config.ConfigUtil;
|
||||
import com.dfsek.terra.generation.TerraChunkGenerator;
|
||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||
|
@ -1,206 +0,0 @@
|
||||
package com.dfsek.terra;
|
||||
|
||||
import com.dfsek.terra.biome.TerraBiomeGrid;
|
||||
import com.dfsek.terra.biome.UserDefinedBiome;
|
||||
import com.dfsek.terra.config.ConfigUtil;
|
||||
import com.dfsek.terra.config.WorldConfig;
|
||||
import com.dfsek.terra.config.genconfig.BiomeConfig;
|
||||
import com.dfsek.terra.config.genconfig.OreConfig;
|
||||
import com.dfsek.terra.generation.TerraChunkGenerator;
|
||||
import com.dfsek.terra.image.WorldImageGenerator;
|
||||
import com.dfsek.terra.structure.GaeaStructure;
|
||||
import com.dfsek.terra.structure.InitializationException;
|
||||
import com.dfsek.terra.procgen.GridSpawn;
|
||||
import com.sk89q.worldedit.IncompleteRegionException;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.polydev.gaea.generation.GenerationPhase;
|
||||
import org.polydev.gaea.profiler.WorldProfiler;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class TerraCommand implements CommandExecutor, TabExecutor {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
try {
|
||||
switch(args[0]) {
|
||||
case "reload":
|
||||
ConfigUtil.loadConfig(Terra.getInstance());
|
||||
sender.sendMessage("Reloaded Terra config.");
|
||||
return true;
|
||||
case "biome":
|
||||
if(! (sender instanceof Player)) return false;
|
||||
sender.sendMessage("You are in " + BiomeConfig.fromBiome((UserDefinedBiome) TerraBiomeGrid.fromWorld(((Player) sender).getWorld()).getBiome(((Player) sender).getLocation(), GenerationPhase.POPULATE)).getID());
|
||||
return true;
|
||||
case "profile":
|
||||
if(! (sender instanceof Player)) {
|
||||
sender.sendMessage("Command is for players only.");
|
||||
return true;
|
||||
}
|
||||
Player p = (Player) sender;
|
||||
if(p.getWorld().getGenerator() instanceof TerraChunkGenerator) {
|
||||
WorldProfiler profile = TerraProfiler.fromWorld(p.getWorld());
|
||||
if(args.length > 1 && "query".equals(args[1])) {
|
||||
sender.sendMessage(profile.getResultsFormatted());
|
||||
return true;
|
||||
} else if(args.length > 1 && "reset".equals(args[1])) {
|
||||
profile.reset();
|
||||
sender.sendMessage("Profiler has been reset.");
|
||||
return true;
|
||||
} else if(args.length > 1 && "start".equals(args[1])) {
|
||||
profile.setProfiling(true);
|
||||
sender.sendMessage("Profiler has started.");
|
||||
return true;
|
||||
} else if(args.length > 1 && "stop".equals(args[1])) {
|
||||
profile.setProfiling(false);
|
||||
sender.sendMessage("Profiler has stopped.");
|
||||
return true;
|
||||
}
|
||||
} else sender.sendMessage("World is not a Terra world!");
|
||||
break;
|
||||
case "ore":
|
||||
if(! (sender instanceof Player)) {
|
||||
sender.sendMessage("Command is for players only.");
|
||||
return true;
|
||||
}
|
||||
Block bl = ((Player) sender).getTargetBlockExact(25);
|
||||
OreConfig ore = OreConfig.fromID(args[1]);
|
||||
if(ore == null) {
|
||||
sender.sendMessage("Unable to find Ore");
|
||||
return true;
|
||||
}
|
||||
ore.doVein(bl.getLocation(), new Random());
|
||||
return true;
|
||||
case "image":
|
||||
if("render".equals(args[1])) {
|
||||
if(! (sender instanceof Player)) {
|
||||
sender.sendMessage("Command is for players only.");
|
||||
return true;
|
||||
}
|
||||
Player pl = (Player) sender;
|
||||
if(args.length != 4) return false;
|
||||
try {
|
||||
WorldImageGenerator g = new WorldImageGenerator(pl.getWorld(), Integer.parseInt(args[2]), Integer.parseInt(args[3]));
|
||||
g.drawWorld(pl.getLocation().getBlockX(), pl.getLocation().getBlockZ());
|
||||
File file = new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "map" + File.separator + "map_" + System.currentTimeMillis() + ".png");
|
||||
file.mkdirs();
|
||||
file.createNewFile();
|
||||
g.save(file);
|
||||
sender.sendMessage("Saved image to " + file.getPath());
|
||||
return true;
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
} else if("gui".equals(args[1])) {
|
||||
if(! (sender instanceof Player)) {
|
||||
sender.sendMessage("Command is for players only.");
|
||||
return true;
|
||||
}
|
||||
Player pl = (Player) sender;
|
||||
try {
|
||||
if("raw".equals(args[2]))
|
||||
WorldConfig.fromWorld(pl.getWorld()).imageLoader.debug(false, pl.getWorld());
|
||||
else if("step".equals(args[2]))
|
||||
WorldConfig.fromWorld(pl.getWorld()).imageLoader.debug(true, pl.getWorld());
|
||||
else return false;
|
||||
return true;
|
||||
} catch(NullPointerException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "save-data":
|
||||
TerraChunkGenerator.saveAll();
|
||||
sender.sendMessage("Saved population data.");
|
||||
return true;
|
||||
case "structure":
|
||||
if(! (sender instanceof Player)) {
|
||||
sender.sendMessage("Command is for players only.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player pl = (Player) sender;
|
||||
if("export".equals(args[1])) {
|
||||
WorldEditPlugin we = WorldEditUtil.getWorldEdit();
|
||||
if(we == null) {
|
||||
sender.sendMessage("WorldEdit is not installed! Please install WorldEdit before attempting to export structures.");
|
||||
return true;
|
||||
}
|
||||
Region selection;
|
||||
try {
|
||||
selection = we.getSession(pl).getSelection(BukkitAdapter.adapt(pl.getWorld()));
|
||||
} catch(IncompleteRegionException e) {
|
||||
sender.sendMessage("Invalid/incomplete selection!");
|
||||
return true;
|
||||
}
|
||||
BukkitAdapter.adapt(pl);
|
||||
if(selection == null) {
|
||||
sender.sendMessage("Please make a selection before attempting to export!");
|
||||
return true;
|
||||
}
|
||||
BlockVector3 min = selection.getMinimumPoint();
|
||||
BlockVector3 max = selection.getMaximumPoint();
|
||||
Location l1 = new Location(pl.getWorld(), min.getBlockX(), min.getBlockY(), min.getBlockZ());
|
||||
Location l2 = new Location(pl.getWorld(), max.getBlockX(), max.getBlockY(), max.getBlockZ());
|
||||
GaeaStructure structure = null;
|
||||
try {
|
||||
structure = new GaeaStructure(l1, l2, args[2]);
|
||||
} catch(InitializationException e) {
|
||||
sender.sendMessage(e.getMessage());
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
File file = new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[2] + ".tstructure");
|
||||
file.getParentFile().mkdirs();
|
||||
file.createNewFile();
|
||||
structure.save(file);
|
||||
sender.sendMessage("Saved structure with ID " + structure.getId() + ", UUID: " + structure.getUuid().toString() + " to " + file.getPath());
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
} else if("load".equals(args[1])) {
|
||||
try {
|
||||
GaeaStructure.Rotation r = GaeaStructure.Rotation.fromDegrees(Integer.parseInt(args[3]));
|
||||
GaeaStructure struc = GaeaStructure.load(new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[2] + ".tstructure"));
|
||||
if("true".equals(args[4])) struc.paste(pl.getLocation(), r, Collections.emptyList());
|
||||
else struc.paste(pl.getLocation(), pl.getLocation().getChunk(), r, Collections.emptyList());
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
sender.sendMessage("Structure not found.");
|
||||
}
|
||||
return true;
|
||||
} else if("getspawn".equals(args[1])) {
|
||||
Vector v = new GridSpawn(250, 250).getNearestSpawn(pl.getLocation().getBlockX(), pl.getLocation().getBlockZ(), pl.getWorld().getSeed());
|
||||
sender.sendMessage(v.getBlockX() + ":" + v.getBlockZ());
|
||||
}
|
||||
}
|
||||
} catch(ArrayIndexOutOfBoundsException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
//System.out.println("Label " + label + " args: " + Arrays.toString(args));
|
||||
if(args[0].equals("tpbiome")) return BiomeConfig.getBiomeIDs();
|
||||
else if(args[0].equals("ore")) return OreConfig.getOreIDs();
|
||||
else return Collections.emptyList();
|
||||
}
|
||||
}
|
36
src/main/java/com/dfsek/terra/command/BiomeCommand.java
Normal file
36
src/main/java/com/dfsek/terra/command/BiomeCommand.java
Normal file
@ -0,0 +1,36 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import com.dfsek.terra.biome.TerraBiomeGrid;
|
||||
import com.dfsek.terra.biome.UserDefinedBiome;
|
||||
import com.dfsek.terra.config.genconfig.BiomeConfig;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.polydev.gaea.generation.GenerationPhase;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class BiomeCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
TerraBiomeGrid grid = TerraBiomeGrid.fromWorld(sender.getWorld());
|
||||
if(grid == null) {
|
||||
sender.sendMessage("Not a Terra world!");
|
||||
return true;
|
||||
}
|
||||
UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(sender.getLocation(), GenerationPhase.POPULATE);
|
||||
sender.sendMessage("You are in " + BiomeConfig.fromBiome(biome).getID());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "biome";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
25
src/main/java/com/dfsek/terra/command/Command.java
Normal file
25
src/main/java/com/dfsek/terra/command/Command.java
Normal file
@ -0,0 +1,25 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Command {
|
||||
public abstract String getName();
|
||||
public abstract List<Command> getSubCommands();
|
||||
public abstract boolean onCommand(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args);
|
||||
public final boolean execute(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if(args.length > 0) {
|
||||
for(com.dfsek.terra.command.Command c : getSubCommands()) {
|
||||
if(c.getName().equals(args[0])) return c.execute(sender, command, label, Arrays.stream(args, 1, args.length).toArray(String[]::new));
|
||||
}
|
||||
sender.sendMessage("Invalid command.");
|
||||
return true;
|
||||
} else {
|
||||
onCommand(sender, command, label, args);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
39
src/main/java/com/dfsek/terra/command/OreCommand.java
Normal file
39
src/main/java/com/dfsek/terra/command/OreCommand.java
Normal file
@ -0,0 +1,39 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import com.dfsek.terra.config.genconfig.OreConfig;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class OreCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
Block bl = sender.getTargetBlockExact(25);
|
||||
OreConfig ore = OreConfig.fromID(args[0]);
|
||||
if(ore == null) {
|
||||
sender.sendMessage("Unable to find Ore");
|
||||
return true;
|
||||
}
|
||||
if(bl == null) {
|
||||
sender.sendMessage("Block out of range");
|
||||
return true;
|
||||
}
|
||||
ore.doVein(bl.getLocation(), new Random());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "ore";
|
||||
}
|
||||
}
|
18
src/main/java/com/dfsek/terra/command/PlayerCommand.java
Normal file
18
src/main/java/com/dfsek/terra/command/PlayerCommand.java
Normal file
@ -0,0 +1,18 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class PlayerCommand extends Command {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if(!(sender instanceof Player)) {
|
||||
sender.sendMessage("Command is for players only.");
|
||||
return true;
|
||||
}
|
||||
Player p = (Player) sender;
|
||||
return onCommand(p, command, label, args);
|
||||
}
|
||||
public abstract boolean onCommand(@NotNull Player sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args);
|
||||
}
|
28
src/main/java/com/dfsek/terra/command/ReloadCommand.java
Normal file
28
src/main/java/com/dfsek/terra/command/ReloadCommand.java
Normal file
@ -0,0 +1,28 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import com.dfsek.terra.Terra;
|
||||
import com.dfsek.terra.config.ConfigUtil;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ReloadCommand extends Command {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "reload";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
ConfigUtil.loadConfig(Terra.getInstance());
|
||||
sender.sendMessage("Reloaded Terra config.");
|
||||
return true;
|
||||
}
|
||||
}
|
27
src/main/java/com/dfsek/terra/command/SaveDataCommand.java
Normal file
27
src/main/java/com/dfsek/terra/command/SaveDataCommand.java
Normal file
@ -0,0 +1,27 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import com.dfsek.terra.generation.TerraChunkGenerator;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class SaveDataCommand extends Command {
|
||||
@Override
|
||||
public String getName() {
|
||||
return "save-data";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
TerraChunkGenerator.saveAll();
|
||||
sender.sendMessage("Saved population data.");
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
52
src/main/java/com/dfsek/terra/command/TerraCommand.java
Normal file
52
src/main/java/com/dfsek/terra/command/TerraCommand.java
Normal file
@ -0,0 +1,52 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import com.dfsek.terra.command.profile.ProfileCommand;
|
||||
import com.dfsek.terra.command.structure.StructureCommand;
|
||||
import com.dfsek.terra.config.genconfig.BiomeConfig;
|
||||
import com.dfsek.terra.config.genconfig.OreConfig;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabExecutor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class TerraCommand implements CommandExecutor, TabExecutor {
|
||||
private final List<com.dfsek.terra.command.Command> commands = Arrays.asList(new ReloadCommand(),
|
||||
new BiomeCommand(),
|
||||
new OreCommand(),
|
||||
new ProfileCommand(),
|
||||
new SaveDataCommand(),
|
||||
new StructureCommand());
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if(args.length > 0) {
|
||||
for(com.dfsek.terra.command.Command c : commands) {
|
||||
if(c.getName().equals(args[0])) return c.execute(sender, command, label, Arrays.stream(args, 1, args.length).toArray(String[]::new));
|
||||
}
|
||||
sender.sendMessage("Invalid command.");
|
||||
return true;
|
||||
} else {
|
||||
sender.sendMessage("--------------------Terra--------------------");
|
||||
sender.sendMessage("reload - Reload configuration data");
|
||||
sender.sendMessage("biome - Get current biome");
|
||||
sender.sendMessage("ore - Generate an ore vein at the location you are facing (For debugging)");
|
||||
sender.sendMessage("save-data - Save population data");
|
||||
sender.sendMessage("structure - Load and export structures");
|
||||
sender.sendMessage("profile - Profiler options");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@Override
|
||||
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if(args[0].equals("tpbiome")) return BiomeConfig.getBiomeIDs();
|
||||
else if(args[0].equals("ore")) return OreConfig.getOreIDs();
|
||||
else return Collections.emptyList();
|
||||
}
|
||||
}
|
31
src/main/java/com/dfsek/terra/command/WorldCommand.java
Normal file
31
src/main/java/com/dfsek/terra/command/WorldCommand.java
Normal file
@ -0,0 +1,31 @@
|
||||
package com.dfsek.terra.command;
|
||||
|
||||
import com.dfsek.terra.generation.TerraChunkGenerator;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class WorldCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if(sender.getWorld().getGenerator() instanceof TerraChunkGenerator) {
|
||||
return onCommand(sender, command, label, args, sender.getWorld());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public abstract boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world);
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package com.dfsek.terra.command.image;
|
||||
|
||||
import com.dfsek.terra.Terra;
|
||||
import com.dfsek.terra.command.PlayerCommand;
|
||||
import com.dfsek.terra.config.WorldConfig;
|
||||
import com.dfsek.terra.image.WorldImageGenerator;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ImageCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
if("render".equals(args[0])) {
|
||||
if(args.length != 4) return false;
|
||||
try {
|
||||
WorldImageGenerator g = new WorldImageGenerator(sender.getWorld(), Integer.parseInt(args[2]), Integer.parseInt(args[3]));
|
||||
g.drawWorld(sender.getLocation().getBlockX(), sender.getLocation().getBlockZ());
|
||||
File file = new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "map" + File.separator + "map_" + System.currentTimeMillis() + ".png");
|
||||
file.mkdirs();
|
||||
file.createNewFile();
|
||||
g.save(file);
|
||||
sender.sendMessage("Saved image to " + file.getPath());
|
||||
return true;
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
} else if("gui".equals(args[0])) {
|
||||
try {
|
||||
if("raw".equals(args[1]))
|
||||
WorldConfig.fromWorld(sender.getWorld()).imageLoader.debug(false, sender.getWorld());
|
||||
else if("step".equals(args[1]))
|
||||
WorldConfig.fromWorld(sender.getWorld()).imageLoader.debug(true, sender.getWorld());
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
} catch(NullPointerException e) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "image";
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.dfsek.terra.command.profile;
|
||||
|
||||
import com.dfsek.terra.TerraProfiler;
|
||||
import com.dfsek.terra.command.WorldCommand;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.polydev.gaea.profiler.WorldProfiler;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ProfileCommand extends WorldCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
|
||||
WorldProfiler profile = TerraProfiler.fromWorld(w);
|
||||
if(args.length > 1 && "query".equals(args[1])) {
|
||||
sender.sendMessage(profile.getResultsFormatted());
|
||||
return true;
|
||||
} else if(args.length > 1 && "reset".equals(args[1])) {
|
||||
profile.reset();
|
||||
sender.sendMessage("Profiler has been reset.");
|
||||
return true;
|
||||
} else if(args.length > 1 && "start".equals(args[1])) {
|
||||
profile.setProfiling(true);
|
||||
sender.sendMessage("Profiler has started.");
|
||||
return true;
|
||||
} else if(args.length > 1 && "stop".equals(args[1])) {
|
||||
profile.setProfiling(false);
|
||||
sender.sendMessage("Profiler has stopped.");
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.dfsek.terra.command.profile;
|
||||
|
||||
import com.dfsek.terra.TerraProfiler;
|
||||
import com.dfsek.terra.command.PlayerCommand;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.polydev.gaea.profiler.WorldProfiler;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class QueryCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
WorldProfiler profile = TerraProfiler.fromWorld(sender.getWorld());
|
||||
sender.sendMessage(profile.getResultsFormatted());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "query";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package com.dfsek.terra.command.structure;
|
||||
|
||||
import com.dfsek.terra.Terra;
|
||||
import com.dfsek.terra.WorldEditUtil;
|
||||
import com.dfsek.terra.command.PlayerCommand;
|
||||
import com.dfsek.terra.structure.GaeaStructure;
|
||||
import com.dfsek.terra.structure.InitializationException;
|
||||
import com.sk89q.worldedit.IncompleteRegionException;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ExportCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
WorldEditPlugin we = WorldEditUtil.getWorldEdit();
|
||||
if(we == null) {
|
||||
sender.sendMessage("WorldEdit is not installed! Please install WorldEdit before attempting to export structures.");
|
||||
return true;
|
||||
}
|
||||
Region selection;
|
||||
try {
|
||||
selection = we.getSession(sender).getSelection(BukkitAdapter.adapt(sender.getWorld()));
|
||||
} catch(IncompleteRegionException e) {
|
||||
sender.sendMessage("Invalid/incomplete selection!");
|
||||
return true;
|
||||
}
|
||||
BukkitAdapter.adapt(sender);
|
||||
if(selection == null) {
|
||||
sender.sendMessage("Please make a selection before attempting to export!");
|
||||
return true;
|
||||
}
|
||||
BlockVector3 min = selection.getMinimumPoint();
|
||||
BlockVector3 max = selection.getMaximumPoint();
|
||||
Location l1 = new Location(sender.getWorld(), min.getBlockX(), min.getBlockY(), min.getBlockZ());
|
||||
Location l2 = new Location(sender.getWorld(), max.getBlockX(), max.getBlockY(), max.getBlockZ());
|
||||
GaeaStructure structure = null;
|
||||
try {
|
||||
structure = new GaeaStructure(l1, l2, args[0]);
|
||||
} catch(InitializationException e) {
|
||||
sender.sendMessage(e.getMessage());
|
||||
return true;
|
||||
}
|
||||
try {
|
||||
File file = new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[0] + ".tstructure");
|
||||
file.getParentFile().mkdirs();
|
||||
file.createNewFile();
|
||||
structure.save(file);
|
||||
sender.sendMessage("Saved structure with ID " + structure.getId() + ", UUID: " + structure.getUuid().toString() + " to " + file.getPath());
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "export";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.dfsek.terra.command.structure;
|
||||
|
||||
import com.dfsek.terra.Terra;
|
||||
import com.dfsek.terra.command.PlayerCommand;
|
||||
import com.dfsek.terra.structure.GaeaStructure;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class LoadCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
try {
|
||||
GaeaStructure.Rotation r = GaeaStructure.Rotation.fromDegrees(Integer.parseInt(args[1]));
|
||||
GaeaStructure struc = GaeaStructure.load(new File(Terra.getInstance().getDataFolder() + File.separator + "export" + File.separator + "structures", args[0] + ".tstructure"));
|
||||
if("true".equals(args[2])) struc.paste(sender.getLocation(), r, Collections.emptyList());
|
||||
else struc.paste(sender.getLocation(), sender.getLocation().getChunk(), r, Collections.emptyList());
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
sender.sendMessage("Structure not found.");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "load";
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.dfsek.terra.command.structure;
|
||||
|
||||
import com.dfsek.terra.command.PlayerCommand;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class StructureCommand extends PlayerCommand {
|
||||
@Override
|
||||
public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
sender.sendMessage("---------------Terra/structure---------------");
|
||||
sender.sendMessage("export - Export your current WorldEdit selection as a Terra structure.");
|
||||
sender.sendMessage("load - Load a Terra structure");
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<com.dfsek.terra.command.Command> getSubCommands() {
|
||||
return Arrays.asList(new ExportCommand(), new LoadCommand());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "structure";
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user