diff --git a/pom.xml b/pom.xml
index 47e1e2952..88bc663f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,10 +33,6 @@
org.apache.commons
com.dfsek.terra.lib.commons
-
- me.lucko.commodore
- com.dfsek.terra.lib
-
@@ -59,10 +55,6 @@
spigotmc-repo
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
-
- minecraft-repo
- https://libraries.minecraft.net/
-
gaea.local
gaea-local
@@ -97,12 +89,6 @@
gaea
1.10.82
-
- me.lucko
- commodore
- 1.9
- compile
-
org.apache.commons
commons-imaging
diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java
index d55cf20b8..13a16eec7 100644
--- a/src/main/java/com/dfsek/terra/Terra.java
+++ b/src/main/java/com/dfsek/terra/Terra.java
@@ -3,12 +3,7 @@ package com.dfsek.terra;
import com.dfsek.terra.command.TerraCommand;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.generation.TerraChunkGenerator;
-import com.mojang.brigadier.tree.LiteralCommandNode;
-import me.lucko.commodore.Commodore;
-import me.lucko.commodore.CommodoreProvider;
-import me.lucko.commodore.file.CommodoreFileFormat;
import org.bukkit.Bukkit;
-import org.bukkit.command.Command;
import org.bukkit.command.PluginCommand;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.generator.ChunkGenerator;
@@ -16,7 +11,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.io.InputStream;
+import java.util.Objects;
public class Terra extends JavaPlugin {
private static FileConfiguration config;
@@ -37,33 +32,17 @@ public class Terra extends JavaPlugin {
Debug.setMain(this);
ConfigUtil.loadConfig(this);
- PluginCommand command = getCommand("terra");
- command.setExecutor(new TerraCommand());
- if (CommodoreProvider.isSupported()) {
- Commodore commodore = CommodoreProvider.getCommodore(this);
- try {
- register(this, command, commodore);
- } catch(Exception e) {
- e.printStackTrace();
- }
- } else getLogger().severe("Brigadier is not properly supported! Commands will NOT work properly!");
+ PluginCommand c = Objects.requireNonNull(getCommand("terra"));
+ TerraCommand command = new TerraCommand();
+ c.setExecutor(command);
+ c.setTabCompleter(command);
+
saveDefaultConfig();
config = getConfig();
Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, TerraChunkGenerator::saveAll, ConfigUtil.dataSave, ConfigUtil.dataSave);
}
- public static void register(JavaPlugin plugin, Command pluginCommand, Commodore commodore) throws Exception {
- try (InputStream is = Terra.class.getResourceAsStream("/terra.commodore")) {
- if (is == null) {
- throw new Exception("Brigadier command data missing from jar");
- }
-
- LiteralCommandNode> commandNode = CommodoreFileFormat.parse(is);
- commodore.register(pluginCommand, commandNode, player -> player.hasPermission("terra.command"));
- }
- }
-
@Override
public @Nullable ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, @Nullable String id) {
return new TerraChunkGenerator();
diff --git a/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java
new file mode 100644
index 000000000..6eea13583
--- /dev/null
+++ b/src/main/java/com/dfsek/terra/async/AsyncBiomeFinder.java
@@ -0,0 +1,4 @@
+package com.dfsek.terra.async;
+
+public class AsyncBiomeFinder {
+}
diff --git a/src/main/java/com/dfsek/terra/command/BiomeCommand.java b/src/main/java/com/dfsek/terra/command/BiomeCommand.java
index 9b1708cdc..6f4ab8c3c 100644
--- a/src/main/java/com/dfsek/terra/command/BiomeCommand.java
+++ b/src/main/java/com/dfsek/terra/command/BiomeCommand.java
@@ -4,9 +4,9 @@ import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.command.type.WorldCommand;
-import com.dfsek.terra.config.base.WorldConfig;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.generation.GenerationPhase;
@@ -16,7 +16,7 @@ import java.util.List;
public class BiomeCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
TerraBiomeGrid grid = TerraWorld.getWorld(sender.getWorld()).getGrid();
UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome(sender.getLocation(), GenerationPhase.POPULATE);
sender.sendMessage("You are in " + TerraWorld.getWorld(w).getConfig().getBiome(biome).getID());
@@ -37,4 +37,9 @@ public class BiomeCommand extends WorldCommand {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/BiomeTeleportCommand.java b/src/main/java/com/dfsek/terra/command/BiomeTeleportCommand.java
new file mode 100644
index 000000000..541ba76f3
--- /dev/null
+++ b/src/main/java/com/dfsek/terra/command/BiomeTeleportCommand.java
@@ -0,0 +1,41 @@
+package com.dfsek.terra.command;
+
+import com.dfsek.terra.TerraWorld;
+import com.dfsek.terra.command.type.WorldCommand;
+import com.dfsek.terra.generation.TerraChunkGenerator;
+import org.bukkit.World;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collections;
+import java.util.List;
+
+public class BiomeTeleportCommand extends WorldCommand {
+ @Override
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ return false;
+ }
+
+ @Override
+ public String getName() {
+ return "tpbiome";
+ }
+
+ @Override
+ public List getSubCommands() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public int arguments() {
+ return 1;
+ }
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ if(!(sender instanceof Player) || !(((Player) sender).getWorld().getGenerator() instanceof TerraChunkGenerator)) return Collections.emptyList();
+ return TerraWorld.getWorld(((Player) sender).getWorld()).getConfig().getBiomeIDs();
+ }
+}
diff --git a/src/main/java/com/dfsek/terra/command/OreCommand.java b/src/main/java/com/dfsek/terra/command/OreCommand.java
index 765969d19..292eba85b 100644
--- a/src/main/java/com/dfsek/terra/command/OreCommand.java
+++ b/src/main/java/com/dfsek/terra/command/OreCommand.java
@@ -8,6 +8,7 @@ import com.dfsek.terra.config.genconfig.OreConfig;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -17,7 +18,7 @@ import java.util.Random;
public class OreCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
Block bl = sender.getTargetBlockExact(25);
if(args.length > 0) {
OreConfig ore = TerraWorld.getWorld(w).getConfig().getOre(args[0]);
@@ -51,4 +52,9 @@ public class OreCommand extends WorldCommand {
public String getName() {
return "ore";
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/ReloadCommand.java b/src/main/java/com/dfsek/terra/command/ReloadCommand.java
index e71e556c7..f879648ea 100644
--- a/src/main/java/com/dfsek/terra/command/ReloadCommand.java
+++ b/src/main/java/com/dfsek/terra/command/ReloadCommand.java
@@ -21,7 +21,7 @@ public class ReloadCommand extends Command {
}
@Override
- public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ public boolean execute(@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;
@@ -31,4 +31,9 @@ public class ReloadCommand extends Command {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/SaveDataCommand.java b/src/main/java/com/dfsek/terra/command/SaveDataCommand.java
index 1f9f756fb..ea45d0077 100644
--- a/src/main/java/com/dfsek/terra/command/SaveDataCommand.java
+++ b/src/main/java/com/dfsek/terra/command/SaveDataCommand.java
@@ -2,7 +2,9 @@ package com.dfsek.terra.command;
import com.dfsek.terra.command.type.Command;
import com.dfsek.terra.generation.TerraChunkGenerator;
+import org.bukkit.World;
import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
@@ -15,7 +17,7 @@ public class SaveDataCommand extends Command {
}
@Override
- public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ public boolean execute(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
TerraChunkGenerator.saveAll();
sender.sendMessage("Saved population data.");
return true;
@@ -30,4 +32,9 @@ public class SaveDataCommand extends Command {
public List getSubCommands() {
return Collections.emptyList();
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/TerraCommand.java b/src/main/java/com/dfsek/terra/command/TerraCommand.java
index 28f5f4e8e..3b494f2c1 100644
--- a/src/main/java/com/dfsek/terra/command/TerraCommand.java
+++ b/src/main/java/com/dfsek/terra/command/TerraCommand.java
@@ -3,19 +3,15 @@ package com.dfsek.terra.command;
import com.dfsek.terra.command.image.ImageCommand;
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.command.Command;
-import org.bukkit.command.CommandExecutor;
+import com.dfsek.terra.command.type.Command;
import org.bukkit.command.CommandSender;
-import org.bukkit.command.TabExecutor;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-public class TerraCommand implements CommandExecutor, TabExecutor {
+public class TerraCommand extends Command {
private final List commands = Arrays.asList(new ReloadCommand(),
new BiomeCommand(),
new OreCommand(),
@@ -25,7 +21,17 @@ public class TerraCommand implements CommandExecutor, TabExecutor {
new ImageCommand());
@Override
- public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ public String getName() {
+ return "terra";
+ }
+
+ @Override
+ public List getSubCommands() {
+ return commands;
+ }
+
+ @Override
+ public boolean execute(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
if(args.length > 0) {
for(com.dfsek.terra.command.type.Command c : commands) {
if(c.getName().equals(args[0])) return c.execute(sender, command, label, Arrays.stream(args, 1, args.length).toArray(String[]::new));
@@ -41,12 +47,16 @@ public class TerraCommand implements CommandExecutor, TabExecutor {
sender.sendMessage("structure - Load and export structures");
sender.sendMessage("profile - Profiler options");
}
- return false;
+ return true;
}
+
@Override
- public List 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();
+ public int arguments() {
+ return 0;
+ }
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
}
}
diff --git a/src/main/java/com/dfsek/terra/command/image/ImageCommand.java b/src/main/java/com/dfsek/terra/command/image/ImageCommand.java
index 2078da80b..04513ca4f 100644
--- a/src/main/java/com/dfsek/terra/command/image/ImageCommand.java
+++ b/src/main/java/com/dfsek/terra/command/image/ImageCommand.java
@@ -4,15 +4,17 @@ import com.dfsek.terra.command.type.WorldCommand;
import com.dfsek.terra.command.image.gui.GUICommand;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
public class ImageCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
sender.sendMessage("---------------Terra/image---------------");
sender.sendMessage("render - Render an image with a given width and height, that can later be imported as a world.");
sender.sendMessage("gui - Open debug GUI (Must be enabled in config)");
@@ -33,4 +35,9 @@ public class ImageCommand extends WorldCommand {
public String getName() {
return "image";
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/image/RenderCommand.java b/src/main/java/com/dfsek/terra/command/image/RenderCommand.java
index 87b981b96..fddbddb23 100644
--- a/src/main/java/com/dfsek/terra/command/image/RenderCommand.java
+++ b/src/main/java/com/dfsek/terra/command/image/RenderCommand.java
@@ -5,6 +5,7 @@ import com.dfsek.terra.command.type.WorldCommand;
import com.dfsek.terra.image.WorldImageGenerator;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -14,7 +15,7 @@ import java.util.List;
public class RenderCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
try {
WorldImageGenerator g = new WorldImageGenerator(world, Integer.parseInt(args[0]), Integer.parseInt(args[1]));
g.drawWorld(sender.getLocation().getBlockX(), sender.getLocation().getBlockZ());
@@ -45,4 +46,9 @@ public class RenderCommand extends WorldCommand {
public int arguments() {
return 2;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/image/gui/GUICommand.java b/src/main/java/com/dfsek/terra/command/image/gui/GUICommand.java
index e544dccad..299afe050 100644
--- a/src/main/java/com/dfsek/terra/command/image/gui/GUICommand.java
+++ b/src/main/java/com/dfsek/terra/command/image/gui/GUICommand.java
@@ -3,15 +3,17 @@ package com.dfsek.terra.command.image.gui;
import com.dfsek.terra.command.type.WorldCommand;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
public class GUICommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
sender.sendMessage("-------------Terra/image/gui-------------");
sender.sendMessage("raw - Open GUI with raw Biome data");
sender.sendMessage("step - Re-render data to show borders more clearly");
@@ -32,4 +34,9 @@ public class GUICommand extends WorldCommand {
public int arguments() {
return 1;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java b/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java
index ad6e0e992..b42cbc051 100644
--- a/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java
+++ b/src/main/java/com/dfsek/terra/command/image/gui/RawGUICommand.java
@@ -7,6 +7,7 @@ import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.image.ImageLoader;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -15,7 +16,7 @@ import java.util.List;
public class RawGUICommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
if(! ConfigUtil.debug) {
sender.sendMessage("Debug mode must be enabled to use the debug GUI! The debug GUI is NOT PRODUCTION SAFE!");
return true;
@@ -40,4 +41,9 @@ public class RawGUICommand extends WorldCommand {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java b/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java
index a3dbb29b9..094a1e915 100644
--- a/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java
+++ b/src/main/java/com/dfsek/terra/command/image/gui/StepGUICommand.java
@@ -7,6 +7,7 @@ import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.image.ImageLoader;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -15,7 +16,7 @@ import java.util.List;
public class StepGUICommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
if(! ConfigUtil.debug) {
sender.sendMessage("Debug mode must be enabled to use the debug GUI! The debug GUI is NOT PRODUCTION SAFE!");
return true;
@@ -40,4 +41,9 @@ public class StepGUICommand extends WorldCommand {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/profile/ProfileCommand.java b/src/main/java/com/dfsek/terra/command/profile/ProfileCommand.java
index 6bf4c0563..d1716cb28 100644
--- a/src/main/java/com/dfsek/terra/command/profile/ProfileCommand.java
+++ b/src/main/java/com/dfsek/terra/command/profile/ProfileCommand.java
@@ -3,15 +3,17 @@ package com.dfsek.terra.command.profile;
import com.dfsek.terra.command.type.WorldCommand;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
+import java.util.Collections;
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) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
sender.sendMessage("---------------Terra/profile---------------");
sender.sendMessage("start - Starts the profiler");
sender.sendMessage("stop - Stops the profiler");
@@ -34,4 +36,9 @@ public class ProfileCommand extends WorldCommand {
public int arguments() {
return 1;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/profile/QueryCommand.java b/src/main/java/com/dfsek/terra/command/profile/QueryCommand.java
index 8ba0e5216..d8d42cf2b 100644
--- a/src/main/java/com/dfsek/terra/command/profile/QueryCommand.java
+++ b/src/main/java/com/dfsek/terra/command/profile/QueryCommand.java
@@ -4,6 +4,7 @@ import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.command.type.WorldCommand;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.profiler.WorldProfiler;
@@ -13,7 +14,7 @@ import java.util.List;
public class QueryCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World w) {
WorldProfiler profile = TerraProfiler.fromWorld(w);
sender.sendMessage(profile.getResultsFormatted());
return true;
@@ -33,4 +34,9 @@ public class QueryCommand extends WorldCommand {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/profile/ResetCommand.java b/src/main/java/com/dfsek/terra/command/profile/ResetCommand.java
index 741955863..440e0cbd6 100644
--- a/src/main/java/com/dfsek/terra/command/profile/ResetCommand.java
+++ b/src/main/java/com/dfsek/terra/command/profile/ResetCommand.java
@@ -4,6 +4,7 @@ import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.command.type.WorldCommand;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.profiler.WorldProfiler;
@@ -13,7 +14,7 @@ import java.util.List;
public class ResetCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
WorldProfiler profile = TerraProfiler.fromWorld(world);
profile.reset();
sender.sendMessage("Profiler has been reset.");
@@ -34,4 +35,9 @@ public class ResetCommand extends WorldCommand {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/profile/StartCommand.java b/src/main/java/com/dfsek/terra/command/profile/StartCommand.java
index 1491d5fd6..1c2e7de0f 100644
--- a/src/main/java/com/dfsek/terra/command/profile/StartCommand.java
+++ b/src/main/java/com/dfsek/terra/command/profile/StartCommand.java
@@ -4,6 +4,7 @@ import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.command.type.WorldCommand;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.profiler.WorldProfiler;
@@ -13,7 +14,7 @@ import java.util.List;
public class StartCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
WorldProfiler profile = TerraProfiler.fromWorld(world);
profile.setProfiling(true);
sender.sendMessage("Profiler has started.");
@@ -34,4 +35,9 @@ public class StartCommand extends WorldCommand {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/profile/StopCommand.java b/src/main/java/com/dfsek/terra/command/profile/StopCommand.java
index e54191305..d81a5ec43 100644
--- a/src/main/java/com/dfsek/terra/command/profile/StopCommand.java
+++ b/src/main/java/com/dfsek/terra/command/profile/StopCommand.java
@@ -4,6 +4,7 @@ import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.command.type.WorldCommand;
import org.bukkit.World;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.profiler.WorldProfiler;
@@ -13,7 +14,7 @@ import java.util.List;
public class StopCommand extends WorldCommand {
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
+ public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) {
WorldProfiler profile = TerraProfiler.fromWorld(world);
profile.setProfiling(false);
sender.sendMessage("Profiler has stopped.");
@@ -34,4 +35,9 @@ public class StopCommand extends WorldCommand {
public int arguments() {
return 0;
}
+
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java b/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java
index 2abd31a05..a0392c923 100644
--- a/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java
+++ b/src/main/java/com/dfsek/terra/command/structure/ExportCommand.java
@@ -12,6 +12,7 @@ import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.Region;
import org.bukkit.Location;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -22,7 +23,7 @@ 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) {
+ public boolean execute(@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.");
@@ -63,6 +64,11 @@ public class ExportCommand extends PlayerCommand {
return true;
}
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
+
@Override
public String getName() {
return "export";
diff --git a/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java b/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java
index 1fdc9dcac..bc1e7ed65 100644
--- a/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java
+++ b/src/main/java/com/dfsek/terra/command/structure/LoadCommand.java
@@ -4,6 +4,7 @@ import com.dfsek.terra.Terra;
import com.dfsek.terra.command.type.PlayerCommand;
import com.dfsek.terra.structure.GaeaStructure;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
@@ -14,7 +15,7 @@ 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) {
+ public boolean execute(@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"));
@@ -32,6 +33,11 @@ public class LoadCommand extends PlayerCommand {
return "load";
}
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
+
@Override
public List getSubCommands() {
return Collections.emptyList();
diff --git a/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java b/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java
index ec3140e04..9e8af8806 100644
--- a/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java
+++ b/src/main/java/com/dfsek/terra/command/structure/StructureCommand.java
@@ -2,15 +2,17 @@ package com.dfsek.terra.command.structure;
import com.dfsek.terra.command.type.PlayerCommand;
import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
+import java.util.Collections;
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) {
+ public boolean execute(@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");
@@ -22,6 +24,11 @@ public class StructureCommand extends PlayerCommand {
return Arrays.asList(new ExportCommand(), new LoadCommand());
}
+ @Override
+ public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
+ return Collections.emptyList();
+ }
+
@Override
public int arguments() {
return 1;
diff --git a/src/main/java/com/dfsek/terra/command/type/Command.java b/src/main/java/com/dfsek/terra/command/type/Command.java
index 5c36a598f..0d52d39cd 100644
--- a/src/main/java/com/dfsek/terra/command/type/Command.java
+++ b/src/main/java/com/dfsek/terra/command/type/Command.java
@@ -1,15 +1,21 @@
package com.dfsek.terra.command.type;
+import com.dfsek.terra.Debug;
+import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
+import org.bukkit.command.TabCompleter;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
/**
* Represents a command or subcommand, can be nested via getSubCommands.
*/
-public abstract class Command {
+public abstract class Command implements CommandExecutor, TabCompleter {
/**
* Gets the name of the command/subcommand
* @return Name of command
@@ -34,8 +40,8 @@ public abstract class Command {
* @param args Passed command arguments
* @return true if a valid command, otherwise false
*/
- public abstract boolean onCommand(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args);
+ public abstract boolean execute(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args);
/**
* Gets the number of arguments
* @return Number of arguments
@@ -54,18 +60,31 @@ public abstract class Command {
* @param args Passed command arguments
* @return true if a valid command, otherwise false
*/
- public final boolean execute(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args) {
+ @Override
+ public final boolean onCommand(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args) {
if(args.length > 0) {
for(Command c : getSubCommands()) {
- if(c.getName().equals(args[0])) return c.execute(sender, command, label, Arrays.stream(args, 1, args.length).toArray(String[]::new));
+ if(c.getName().equals(args[0])) return c.onCommand(sender, command, label, Arrays.stream(args, 1, args.length).toArray(String[]::new));
}
if(args.length != arguments()) {
sender.sendMessage("Invalid command.");
return true;
}
- return onCommand(sender, command, label, args);
+ return execute(sender, command, label, args);
}
- return onCommand(sender, command, label, new String[] {});
+ return execute(sender, command, label, new String[] {});
}
+ public abstract List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args);
+
+ @Override
+ public final @Nullable List onTabComplete(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String alias, @NotNull String[] args) {
+ List complete = new ArrayList<>();
+ if(args.length > 0) for(Command c : getSubCommands()) {
+ if(c.getName().startsWith(args[0])) complete.add(c.getName());
+ if(c.getName().equals(args[0])) return c.onTabComplete(sender, command, alias, Arrays.stream(args, 1, args.length).toArray(String[]::new));
+ }
+ complete.addAll(getTabCompletions(sender, alias, args));
+ return complete;
+ }
}
diff --git a/src/main/java/com/dfsek/terra/command/type/PlayerCommand.java b/src/main/java/com/dfsek/terra/command/type/PlayerCommand.java
index a6d741a7c..76a277767 100644
--- a/src/main/java/com/dfsek/terra/command/type/PlayerCommand.java
+++ b/src/main/java/com/dfsek/terra/command/type/PlayerCommand.java
@@ -21,13 +21,13 @@ public abstract class PlayerCommand extends Command {
* @return true if a valid command, otherwise false
*/
@Override
- public boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ public final boolean execute(@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);
+ return execute(p, command, label, args);
}
/**
* Executes the given command, returning its success.
@@ -41,5 +41,5 @@ public abstract class PlayerCommand extends Command {
* @param args Passed command arguments
* @return true if a valid command, otherwise false
*/
- public abstract boolean onCommand(@NotNull Player sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args);
+ public abstract boolean execute(@NotNull Player sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args);
}
diff --git a/src/main/java/com/dfsek/terra/command/type/WorldCommand.java b/src/main/java/com/dfsek/terra/command/type/WorldCommand.java
index 3275640da..816c42d24 100644
--- a/src/main/java/com/dfsek/terra/command/type/WorldCommand.java
+++ b/src/main/java/com/dfsek/terra/command/type/WorldCommand.java
@@ -23,9 +23,9 @@ public abstract class WorldCommand extends PlayerCommand {
* @return true if a valid command, otherwise false
*/
@Override
- public boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+ public final boolean execute(@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 execute(sender, command, label, args, sender.getWorld());
} else {
sender.sendMessage("World is not a Terra world!");
}
@@ -45,5 +45,5 @@ public abstract class WorldCommand extends PlayerCommand {
* @param world World in which command was executed
* @return true if a valid command, otherwise false
*/
- public abstract boolean onCommand(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world);
+ public abstract boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world);
}
diff --git a/src/main/java/com/dfsek/terra/config/ConfigLoader.java b/src/main/java/com/dfsek/terra/config/ConfigLoader.java
index 702980957..e2a1f3d09 100644
--- a/src/main/java/com/dfsek/terra/config/ConfigLoader.java
+++ b/src/main/java/com/dfsek/terra/config/ConfigLoader.java
@@ -34,7 +34,9 @@ public class ConfigLoader {
configs.put(o.getID(), o);
main.getLogger().info("Loaded " + o.toString() + " from file " + path.toString());
} catch(IllegalAccessException | InstantiationException | NoSuchMethodException e) {
+ main.getLogger().severe("An error occurred while loading configurations.");
e.printStackTrace();
+ main.getLogger().severe("Please report this to Terra.");
} catch(IllegalArgumentException | InvocationTargetException e) {
if(ConfigUtil.debug) e.printStackTrace();
main.getLogger().severe("Configuration error for Terra object. File: " + path.toString());
diff --git a/src/main/resources/terra.commodore b/src/main/resources/terra.commodore
deleted file mode 100644
index 6482f7d60..000000000
--- a/src/main/resources/terra.commodore
+++ /dev/null
@@ -1,41 +0,0 @@
-terra {
- biome;
- reload;
- profile {
- start;
- stop;
- reset;
- query;
- }
- tpbiome {
- biome brigadier:string single_word;
- }
- ore {
- ore brigadier:string single_word;
- }
- image {
- render {
- size_x brigadier:integer {
- size_z brigadier:integer;
- }
- }
- gui {
- raw;
- step;
- }
- }
- structure {
- export {
- structure brigadier:string single_word;
- }
- load {
- structure brigadier:string single_word {
- rotation brigadier:integer {
- respect_chunk brigadier:bool;
- }
- }
- }
- getspawn;
- }
- save-data;
-}
\ No newline at end of file