diff --git a/common/src/main/java/com/dfsek/terra/commands/AddonsCommand.java b/common/src/main/java/com/dfsek/terra/commands/AddonsCommand.java index 26a69caf6..d775de66b 100644 --- a/common/src/main/java/com/dfsek/terra/commands/AddonsCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/AddonsCommand.java @@ -2,9 +2,13 @@ package com.dfsek.terra.commands; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.command.CommandTemplate; +import com.dfsek.terra.api.command.annotation.Command; import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.platform.CommandSender; +@Command( + usage = "/terra addons" +) public class AddonsCommand implements CommandTemplate { @Inject private TerraPlugin main; diff --git a/common/src/main/java/com/dfsek/terra/commands/BiomeCommand.java b/common/src/main/java/com/dfsek/terra/commands/BiomeCommand.java index 91c97f2d5..1c813f3ab 100644 --- a/common/src/main/java/com/dfsek/terra/commands/BiomeCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/BiomeCommand.java @@ -27,7 +27,8 @@ import com.dfsek.terra.config.lang.LangUtil; aliases = {"l"}, clazz = BiomeLocateCommand.class ) - } + }, + usage = "/terra biome" ) @WorldCommand @PlayerCommand diff --git a/common/src/main/java/com/dfsek/terra/commands/GetBlockCommand.java b/common/src/main/java/com/dfsek/terra/commands/GetBlockCommand.java index 982ba3262..a57dd75f2 100644 --- a/common/src/main/java/com/dfsek/terra/commands/GetBlockCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/GetBlockCommand.java @@ -13,7 +13,9 @@ import com.dfsek.terra.api.platform.entity.Player; @WorldCommand @DebugCommand @PlayerCommand -@Command +@Command( + usage = "/terra getblock" +) public class GetBlockCommand implements CommandTemplate { @Inject private TerraPlugin main; diff --git a/common/src/main/java/com/dfsek/terra/commands/PacksCommand.java b/common/src/main/java/com/dfsek/terra/commands/PacksCommand.java index 4a92fa8fa..875ca8ea1 100644 --- a/common/src/main/java/com/dfsek/terra/commands/PacksCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/PacksCommand.java @@ -10,7 +10,9 @@ import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.config.pack.ConfigPack; import com.dfsek.terra.config.pack.ConfigPackTemplate; -@Command +@Command( + usage = "/terra packs" +) public class PacksCommand implements CommandTemplate { @Inject private TerraPlugin main; diff --git a/common/src/main/java/com/dfsek/terra/commands/ReloadCommand.java b/common/src/main/java/com/dfsek/terra/commands/ReloadCommand.java index af95197da..e78909c04 100644 --- a/common/src/main/java/com/dfsek/terra/commands/ReloadCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/ReloadCommand.java @@ -7,7 +7,9 @@ import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.config.lang.LangUtil; -@Command() +@Command( + usage = "/terra reload" +) public class ReloadCommand implements CommandTemplate { @Inject private TerraPlugin main; diff --git a/common/src/main/java/com/dfsek/terra/commands/StructureCommand.java b/common/src/main/java/com/dfsek/terra/commands/StructureCommand.java index 1d5ca4044..63c191ea5 100644 --- a/common/src/main/java/com/dfsek/terra/commands/StructureCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/StructureCommand.java @@ -25,7 +25,8 @@ import com.dfsek.terra.commands.structure.StructureLoadCommand; value = "spawn", aliases = "s" ) - } + }, + usage = "/te structure" ) public class StructureCommand implements CommandTemplate { @Override diff --git a/common/src/main/java/com/dfsek/terra/commands/VersionCommand.java b/common/src/main/java/com/dfsek/terra/commands/VersionCommand.java index b03a3a9ba..7e8521b1c 100644 --- a/common/src/main/java/com/dfsek/terra/commands/VersionCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/VersionCommand.java @@ -7,7 +7,9 @@ import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.platform.CommandSender; import com.dfsek.terra.config.lang.LangUtil; -@Command +@Command( + usage = "/terra version" +) public class VersionCommand implements CommandTemplate { @Inject private TerraPlugin main; diff --git a/common/src/main/java/com/dfsek/terra/commands/structure/SpawnCommand.java b/common/src/main/java/com/dfsek/terra/commands/structure/SpawnCommand.java index 629261288..490de66b4 100644 --- a/common/src/main/java/com/dfsek/terra/commands/structure/SpawnCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/structure/SpawnCommand.java @@ -23,7 +23,9 @@ import java.util.HashMap; @DebugCommand @PlayerCommand @WorldCommand -@Command +@Command( + usage = "/terra spawn" +) public class SpawnCommand implements CommandTemplate { @Inject private TerraPlugin main; diff --git a/common/src/main/java/com/dfsek/terra/commands/structure/StructureExportCommand.java b/common/src/main/java/com/dfsek/terra/commands/structure/StructureExportCommand.java index d596ff3dc..47dd42a25 100644 --- a/common/src/main/java/com/dfsek/terra/commands/structure/StructureExportCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/structure/StructureExportCommand.java @@ -5,6 +5,9 @@ import com.dfsek.terra.api.command.CommandTemplate; import com.dfsek.terra.api.command.annotation.Argument; import com.dfsek.terra.api.command.annotation.Command; import com.dfsek.terra.api.command.annotation.inject.ArgumentTarget; +import com.dfsek.terra.api.command.annotation.type.DebugCommand; +import com.dfsek.terra.api.command.annotation.type.PlayerCommand; +import com.dfsek.terra.api.command.annotation.type.WorldCommand; import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.math.vector.Location; import com.dfsek.terra.api.platform.CommandSender; @@ -20,12 +23,16 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +@PlayerCommand +@WorldCommand +@DebugCommand @Command( arguments = { @Argument( value = "id" ) - } + }, + usage = "/terra structure export " ) public class StructureExportCommand implements CommandTemplate { @Inject diff --git a/common/src/main/java/com/dfsek/terra/commands/structure/StructureLoadCommand.java b/common/src/main/java/com/dfsek/terra/commands/structure/StructureLoadCommand.java index 62b172373..ae1327b11 100644 --- a/common/src/main/java/com/dfsek/terra/commands/structure/StructureLoadCommand.java +++ b/common/src/main/java/com/dfsek/terra/commands/structure/StructureLoadCommand.java @@ -45,7 +45,8 @@ import java.util.concurrent.ThreadLocalRandom; @Switch(value = "chunk", aliases = "c" ) - } + }, + usage = "/terra structure load [ROTATION] [-c]" ) public class StructureLoadCommand implements CommandTemplate { @ArgumentTarget("rotation") diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/ExportCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/ExportCommand.java deleted file mode 100644 index 77ec5abef..000000000 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/ExportCommand.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.dfsek.terra.bukkit.command.command.structure; - -import com.dfsek.terra.bukkit.command.PlayerCommand; -import com.dfsek.terra.bukkit.structure.WorldEditUtil; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockState; -import org.bukkit.block.Sign; -import org.bukkit.block.data.BlockData; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.Collections; -import java.util.List; - -public class ExportCommand extends PlayerCommand { - public ExportCommand(com.dfsek.terra.bukkit.command.Command parent) { - super(parent); - } - - @Override - public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - Location[] l = WorldEditUtil.getSelectionLocations(sender); - if(l == null) return true; - - Location l1 = l[0]; - Location l2 = l[1]; - - StringBuilder scriptBuilder = new StringBuilder("id \"" + args[0] + "\";\nnum y = 0;\n"); - - int centerX = 0; - int centerY = 0; - int centerZ = 0; - - for(int x = l1.getBlockX(); x <= l2.getBlockX(); x++) { - for(int y = l1.getBlockY(); y <= l2.getBlockY(); y++) { - for(int z = l1.getBlockZ(); z <= l2.getBlockZ(); z++) { - Block block = new Location(l1.getWorld(), x, y, z).getBlock(); - BlockState state = block.getState(); - if(state instanceof Sign) { - Sign sign = (Sign) state; - if(sign.getLine(0).equals("[TERRA]") && sign.getLine(1).equals("[CENTER]")) { - centerX = x - l1.getBlockX(); - centerY = y - l1.getBlockY(); - centerZ = z - l1.getBlockZ(); - } - } - } - } - } - - for(int x = l1.getBlockX(); x <= l2.getBlockX(); x++) { - for(int y = l1.getBlockY(); y <= l2.getBlockY(); y++) { - for(int z = l1.getBlockZ(); z <= l2.getBlockZ(); z++) { - - Block block = new Location(l1.getWorld(), x, y, z).getBlock(); - BlockData data = block.getBlockData(); - if(block.getType().equals(Material.STRUCTURE_VOID)) continue; - BlockState state = block.getState(); - if(state instanceof Sign) { - Sign sign = (Sign) state; - if(sign.getLine(0).equals("[TERRA]")) { - data = Bukkit.createBlockData(sign.getLine(2) + sign.getLine(3)); - } - } - if(!data.getMaterial().equals(Material.STRUCTURE_VOID)) { - scriptBuilder.append("block(").append(x - l1.getBlockX() - centerX).append(", y + ").append(y - l1.getBlockY() - centerY).append(", ").append(z - l1.getBlockZ() - centerZ).append(", ") - .append("\""); - scriptBuilder.append(data.getAsString(false)).append("\");\n"); - } - } - } - } - - File file = new File(getMain().getDataFolder() + File.separator + "export" + File.separator + "structures", args[0] + ".tesf"); - try { - file.getParentFile().mkdirs(); - file.createNewFile(); - } catch(IOException e) { - e.printStackTrace(); - } - try(BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { - writer.write(scriptBuilder.toString()); - } catch(IOException e) { - e.printStackTrace(); - } - - - - sender.sendMessage("Exported structure to " + file.getAbsolutePath()); - return true; - } - - @Override - public String getName() { - return "export"; - } - - @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) { - return Collections.emptyList(); - } -} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/LocateCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/LocateCommand.java deleted file mode 100644 index df8f86e83..000000000 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/LocateCommand.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.dfsek.terra.bukkit.command.command.structure; - -import com.dfsek.terra.api.math.vector.Vector3; -import com.dfsek.terra.api.world.locate.AsyncStructureFinder; -import com.dfsek.terra.bukkit.TerraBukkitPlugin; -import com.dfsek.terra.bukkit.command.WorldCommand; -import com.dfsek.terra.bukkit.world.BukkitAdapter; -import com.dfsek.terra.config.lang.LangUtil; -import com.dfsek.terra.world.TerraWorld; -import com.dfsek.terra.world.population.items.TerraStructure; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.chat.BaseComponent; -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.Bukkit; -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.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -public class LocateCommand extends WorldCommand { - - public LocateCommand(com.dfsek.terra.bukkit.command.Command parent) { - super(parent); - } - - @SuppressWarnings({"DuplicatedCode", "deprecation"}) - @Override - public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args, World world) { - String id = args[0]; - int maxRadius; - - try { - maxRadius = Integer.parseInt(args[1]); - } catch(NumberFormatException e) { - LangUtil.send("command.structure.invalid-radius", BukkitAdapter.adapt(sender), args[1]); - return true; - } - TerraStructure s; - try { - s = Objects.requireNonNull(getMain().getWorld(BukkitAdapter.adapt(world)).getConfig().getStructureRegistry().get(id)); - } catch(IllegalArgumentException | NullPointerException e) { - LangUtil.send("command.structure.invalid", BukkitAdapter.adapt(sender), id); - return true; - } - Bukkit.getScheduler().runTaskAsynchronously((TerraBukkitPlugin) getMain(), new AsyncStructureFinder(getMain().getWorld(BukkitAdapter.adapt(world)).getBiomeProvider(), s, BukkitAdapter.adapt(sender.getLocation()), 0, maxRadius, (location) -> { - if(sender.isOnline()) { - if(location != null) { - ComponentBuilder cm = new ComponentBuilder(String.format("The nearest %s is at ", id.toLowerCase())) - .append(String.format("[%d, ~, %d]", location.getBlockX(), location.getBlockZ()), ComponentBuilder.FormatRetention.NONE) - .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/minecraft:tp %s %d.0 %.2f %d.0", sender.getName(), location.getBlockX(), sender.getLocation().getY(), location.getBlockZ()))) - .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[] {new TextComponent("Click to teleport")})) - .color(ChatColor.GREEN) - .append(String.format(" (%.1f blocks away)", location.add(new Vector3(0, sender.getLocation().getY(), 0)).distance( - BukkitAdapter.adapt(sender.getLocation().toVector()))), ComponentBuilder.FormatRetention.NONE); - sender.spigot().sendMessage(cm.create()); - } else - sender.sendMessage("Unable to locate structure. "); - } - }, getMain())); - - return true; - } - - @Override - public String getName() { - return "locate"; - } - - @Override - public List getSubCommands() { - return Collections.emptyList(); - } - - @Override - public int arguments() { - return 2; - } - - @Override - public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { - if(!(sender instanceof Player) || !(TerraWorld.isTerraWorld(BukkitAdapter.adapt(((Player) sender).getWorld())))) - return Collections.emptyList(); - - List ids = new ArrayList<>(); - - getMain().getWorld(BukkitAdapter.adapt(((Player) sender).getWorld())).getConfig().getStructureRegistry().forEach((id, struct) -> ids.add(id)); - if(args.length == 1) - return ids.stream().filter(string -> string.toUpperCase().startsWith(args[0].toUpperCase())).collect(Collectors.toList()); - - return Collections.emptyList(); - } -} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/StructureCommand.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/StructureCommand.java deleted file mode 100644 index e722a6cc7..000000000 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/command/command/structure/StructureCommand.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.dfsek.terra.bukkit.command.command.structure; - -import com.dfsek.terra.bukkit.BukkitCommandSender; -import com.dfsek.terra.bukkit.command.PlayerCommand; -import com.dfsek.terra.config.lang.LangUtil; -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 { - public StructureCommand(com.dfsek.terra.bukkit.command.Command parent) { - super(parent); - } - - @Override - public boolean execute(@NotNull Player sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - LangUtil.send("command.structure.main-menu", new BukkitCommandSender(sender)); - return true; - } - - @Override - public String getName() { - return "structure"; - } - - @Override - public List getSubCommands() { - return Arrays.asList(new ExportCommand(this), new LocateCommand(this)); - } - - @Override - public int arguments() { - return 0; - } - - @Override - public List getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) { - return Collections.emptyList(); - } -}