Fully implemented tab complete

This commit is contained in:
Stijn Bannink 2023-09-21 17:34:48 +02:00
parent 5f318fb4e7
commit 9da384693e
16 changed files with 166 additions and 78 deletions

View file

@ -1,12 +1,13 @@
package tech.sbdevelopment.showcontrol; package tech.sbdevelopment.showcontrol;
import co.aikar.commands.PaperCommandManager; import co.aikar.commands.PaperCommandManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import tech.sbdevelopment.showcontrol.api.SCAPI;
import tech.sbdevelopment.showcontrol.commands.ShowCMD; import tech.sbdevelopment.showcontrol.commands.ShowCMD;
import tech.sbdevelopment.showcontrol.data.DataStorage; import tech.sbdevelopment.showcontrol.data.DataStorage;
import tech.sbdevelopment.showcontrol.api.SCAPI;
import tech.sbdevelopment.showcontrol.utils.inventories.Inventory; import tech.sbdevelopment.showcontrol.utils.inventories.Inventory;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
public final class ShowControlPlugin extends JavaPlugin { public final class ShowControlPlugin extends JavaPlugin {
private static ShowControlPlugin instance; private static ShowControlPlugin instance;
@ -27,12 +28,13 @@ public final class ShowControlPlugin extends JavaPlugin {
commandManager.getCommandCompletions().registerCompletion("showname", c -> SCAPI.getShowsMap().keySet()); commandManager.getCommandCompletions().registerCompletion("showname", c -> SCAPI.getShowsMap().keySet());
commandManager.getCommandCompletions().registerCompletion("showtype", c -> SCAPI.getTriggers().keySet()); commandManager.getCommandCompletions().registerCompletion("showtype", c -> SCAPI.getTriggers().keySet());
commandManager.getCommandCompletions().registerCompletion("cuearg", c -> { commandManager.getCommandCompletions().registerCompletion("cuearg", c -> {
//Get the show type argument value, and return the tab complete for that argument String arguments = c.getContextValue(String.class, 3);
String showType = c.getContextValue(String.class, 2); String[] args = arguments.split(" ", -1);
if (showType == null) { if (args.length < 1) {
return null; return null;
} }
return SCAPI.getTrigger().getArgumentTabComplete(c.getContextValue(Integer.class, 3), c.getContextValue(String.class, 4)); int lastArgIndex = args.length - 2;
return SCAPI.getTabComplete(args[0], c.getSender() instanceof Player ? c.getPlayer() : null, lastArgIndex, args[lastArgIndex + 1]);
}); });
getLogger().info("Loading GUI manageer..."); getLogger().info("Loading GUI manageer...");

View file

@ -1,6 +1,8 @@
package tech.sbdevelopment.showcontrol.api; package tech.sbdevelopment.showcontrol.api;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.reflections.Reflections; import org.reflections.Reflections;
import org.reflections.scanners.Scanners; import org.reflections.scanners.Scanners;
import org.reflections.util.ClasspathHelper; import org.reflections.util.ClasspathHelper;
@ -14,16 +16,18 @@ import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier; import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import tech.sbdevelopment.showcontrol.data.DataStorage; import tech.sbdevelopment.showcontrol.data.DataStorage;
import tech.sbdevelopment.showcontrol.utils.YamlFile; import tech.sbdevelopment.showcontrol.utils.YamlFile;
import org.bukkit.Bukkit;
import java.io.File; import java.io.File;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.*; import java.util.*;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class SCAPI { public class SCAPI {
@Getter
private static final Map<String, Trigger> defaultTriggers = new HashMap<>(); //DO NOT USE, just for tab complete!
@Getter @Getter
private static final Map<String, Class<? extends Trigger>> triggers = new HashMap<>(); private static final Map<String, Class<? extends Trigger>> triggers = new HashMap<>();
@Getter @Getter
@ -49,9 +53,20 @@ public class SCAPI {
TriggerIdentifier identifier = trigger.getAnnotation(TriggerIdentifier.class); TriggerIdentifier identifier = trigger.getAnnotation(TriggerIdentifier.class);
triggers.put(identifier.value(), (Class<? extends Trigger>) trigger); triggers.put(identifier.value(), (Class<? extends Trigger>) trigger);
try {
defaultTriggers.put(identifier.value(), (Trigger) trigger.getDeclaredConstructor().newInstance());
} catch (NoSuchMethodException | InvocationTargetException | InstantiationException |
IllegalAccessException ex) {
throw new RuntimeException("Could not find default constructor for trigger " + trigger.getSimpleName() + "! Tab complete will not work for this trigger.", ex);
}
} }
} }
public static List<String> getTabComplete(String triggerType, Player player, int index, String arg) {
if (!defaultTriggers.containsKey(triggerType)) return new ArrayList<>();
return defaultTriggers.get(triggerType).getArgumentTabComplete(player, index, arg);
}
public static <T extends Trigger> T getTrigger(String data) throws ReflectiveOperationException, InvalidTriggerException, TooFewArgumentsException, IllegalArgumentException { public static <T extends Trigger> T getTrigger(String data) throws ReflectiveOperationException, InvalidTriggerException, TooFewArgumentsException, IllegalArgumentException {
String[] dataSplitter = data.split(" "); String[] dataSplitter = data.split(" ");
String[] dataSplitterNew = Arrays.copyOfRange(dataSplitter, 1, dataSplitter.length); String[] dataSplitterNew = Arrays.copyOfRange(dataSplitter, 1, dataSplitter.length);

View file

@ -2,9 +2,13 @@ package tech.sbdevelopment.showcontrol.api.triggers;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor;
import org.bukkit.entity.Player;
import javax.annotation.Nullable;
import java.util.List; import java.util.List;
@NoArgsConstructor(force = true)
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public abstract class Trigger { public abstract class Trigger {
@ -18,11 +22,12 @@ public abstract class Trigger {
/** /**
* This method gets fired when a player wants to add a cue * This method gets fired when a player wants to add a cue
* *
* @param index The current argument index * @param player The player that wants to add the cue, will be null if it's not a player
* @param arg The current argument * @param index The current argument index
* @param arg The current argument
* @return The tab complete value based on the index and argument * @return The tab complete value based on the index and argument
*/ */
public abstract List<String> getArgumentTabComplete(int index, String arg); public abstract List<String> getArgumentTabComplete(@Nullable Player player, int index, String arg);
/** /**
* This method gets fired when the cue gets removed * This method gets fired when the cue gets removed

View file

@ -1,16 +1,26 @@
package tech.sbdevelopment.showcontrol.api.triggers.impl; package tech.sbdevelopment.showcontrol.api.triggers.impl;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger; import lombok.NoArgsConstructor;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@NoArgsConstructor(force = true)
@TriggerIdentifier(value = "animatronic", minArgs = 1, argDesc = "<name>", item = Material.ARMOR_STAND) @TriggerIdentifier(value = "animatronic", minArgs = 1, argDesc = "<name>", item = Material.ARMOR_STAND)
public class AnimaTrigger extends Trigger { public class AnimaTrigger extends Trigger {
public AnimaTrigger(String[] data) { public AnimaTrigger(String[] data) {
super(data); super(data);
if (Bukkit.getPluginManager().getPlugin("Animatronics") == null) {
throw new RuntimeException("Animatronics is not installed, can't run an animatronic trigger!");
}
} }
@Override @Override
@ -19,7 +29,24 @@ public class AnimaTrigger extends Trigger {
} }
@Override @Override
public List<String> getArgumentTabComplete(int index, String arg) { public List<String> getArgumentTabComplete(Player player, int index, String arg) {
return List.of(); //TODO Return list of animatronics if possible //This trigger supports one argument!
if (index > 0) {
return List.of();
}
List<String> animaFiles = new ArrayList<>();
File directory = new File(Bukkit.getPluginManager().getPlugin("Animatronics").getDataFolder(), "animatronics");
if (directory.isDirectory()) {
File[] files = directory.listFiles((dir, name) -> name.endsWith(".anima"));
if (files != null) {
animaFiles.addAll(
Arrays.stream(files)
.map(file -> file.getName().replaceFirst("[.][^.]+$", ""))
.collect(Collectors.toList())
);
}
}
return animaFiles;
} }
} }

View file

@ -1,12 +1,15 @@
package tech.sbdevelopment.showcontrol.api.triggers.impl; package tech.sbdevelopment.showcontrol.api.triggers.impl;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger; import lombok.NoArgsConstructor;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import java.util.List; import java.util.List;
@NoArgsConstructor(force = true)
@TriggerIdentifier(value = "command", minArgs = 1, argDesc = "<command ...>", item = Material.COMMAND_BLOCK) @TriggerIdentifier(value = "command", minArgs = 1, argDesc = "<command ...>", item = Material.COMMAND_BLOCK)
public class CommandTrigger extends Trigger { public class CommandTrigger extends Trigger {
public CommandTrigger(String[] data) { public CommandTrigger(String[] data) {
@ -19,7 +22,7 @@ public class CommandTrigger extends Trigger {
} }
@Override @Override
public List<String> getArgumentTabComplete(int index, String arg) { public List<String> getArgumentTabComplete(Player player, int index, String arg) {
return List.of(); return List.of();
} }
} }

View file

@ -1,6 +1,8 @@
package tech.sbdevelopment.showcontrol.api.triggers.impl; package tech.sbdevelopment.showcontrol.api.triggers.impl;
import lombok.NoArgsConstructor;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException; import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger; import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier; import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
@ -12,6 +14,7 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@NoArgsConstructor(force = true)
@TriggerIdentifier(value = "firework", minArgs = 5, argDesc = "<world> <x> <y> <z> <configuration ...>", item = Material.FIREWORK_ROCKET) @TriggerIdentifier(value = "firework", minArgs = 5, argDesc = "<world> <x> <y> <z> <configuration ...>", item = Material.FIREWORK_ROCKET)
public class FireworkTrigger extends Trigger { public class FireworkTrigger extends Trigger {
private final Fireworks.Firework fw; private final Fireworks.Firework fw;
@ -81,31 +84,32 @@ public class FireworkTrigger extends Trigger {
} }
@Override @Override
public List<String> getArgumentTabComplete(int index, String arg) { public List<String> getArgumentTabComplete(Player player, int index, String arg) {
if (index == 0) { if (index == 0) {
return Bukkit.getWorlds().stream().map(World::getName).toList(); return player != null ? List.of(player.getWorld().getName()) : Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList());
} else if (index == 4) { } else if (index == 1) {
if (arg.contains(":")) { return player != null ? List.of(String.valueOf(player.getLocation().getBlockX())) : List.of();
String[] split = arg.split(":"); } else if (index == 2) {
if (split.length != 2) return List.of(); return player != null ? List.of(String.valueOf(player.getLocation().getBlockY())) : List.of();
} else if (index == 3) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockZ())) : List.of();
} else if (index >= 4) {
String key = arg.contains(":") ? arg.split(":", -1)[0] : arg;
String key = split[0]; if (key.isBlank()) {
if (key.equalsIgnoreCase("color")) {
return Arrays.stream(Color.values()).map(c -> "color:" + c.name()).toList();
} else if (key.equalsIgnoreCase("shape")) {
return Arrays.stream(FireworkEffect.Type.values()).map(t -> "shape:" + t.name()).toList();
} else if (key.equalsIgnoreCase("fade")) {
return Arrays.stream(Color.values()).map(c -> "fade:" + c.name()).toList();
} else if (key.equalsIgnoreCase("effect")) {
return List.of("effect:trail", "effect:twinkle");
} else if (key.equalsIgnoreCase("power")) {
return IntStream.rangeClosed(0, 127)
.mapToObj(i -> "power:" + i)
.collect(Collectors.toList());
}
} else {
return List.of("color:", "shape:", "fade:", "effect:", "power:"); return List.of("color:", "shape:", "fade:", "effect:", "power:");
} else if ("color".startsWith(key)) {
return Arrays.stream(Color.values()).map(c -> "color:" + c.name()).collect(Collectors.toList());
} else if ("shape".startsWith(key)) {
return Arrays.stream(FireworkEffect.Type.values()).map(t -> "shape:" + t.name()).collect(Collectors.toList());
} else if ("fade".startsWith(key)) {
return Arrays.stream(Color.values()).map(c -> "fade:" + c.name()).collect(Collectors.toList());
} else if ("effect".startsWith(key)) {
return List.of("effect:trail", "effect:twinkle");
} else if ("power".startsWith(key)) {
return IntStream.rangeClosed(0, 127)
.mapToObj(i -> "power:" + i)
.collect(Collectors.toList());
} }
} }
return List.of(); return List.of();

View file

@ -1,15 +1,20 @@
package tech.sbdevelopment.showcontrol.api.triggers.impl; package tech.sbdevelopment.showcontrol.api.triggers.impl;
import lombok.NoArgsConstructor;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException; import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger; import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier; import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import tech.sbdevelopment.showcontrol.elements.Lasers; import tech.sbdevelopment.showcontrol.elements.Lasers;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@NoArgsConstructor(force = true)
@TriggerIdentifier(value = "laser", minArgs = 5, argDesc = "<name> <world> <x> <y> <z>") @TriggerIdentifier(value = "laser", minArgs = 5, argDesc = "<name> <world> <x> <y> <z>")
public class LaserTrigger extends Trigger { public class LaserTrigger extends Trigger {
private final String name; private final String name;
@ -49,11 +54,17 @@ public class LaserTrigger extends Trigger {
} }
@Override @Override
public List<String> getArgumentTabComplete(int index, String arg) { public List<String> getArgumentTabComplete(Player player, int index, String arg) {
if (index == 0) { if (index == 0) {
return Lasers.getLasers().keySet().stream().toList(); return new ArrayList<>(Lasers.getLasers().keySet());
} else if (index == 1) { } else if (index == 1) {
return Bukkit.getWorlds().stream().map(World::getName).toList(); return player != null ? List.of(player.getWorld().getName()) : Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList());
} else if (index == 2) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockX())) : List.of();
} else if (index == 3) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockY())) : List.of();
} else if (index == 4) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockZ())) : List.of();
} }
return List.of(); return List.of();
} }

View file

@ -1,16 +1,20 @@
package tech.sbdevelopment.showcontrol.api.triggers.impl; package tech.sbdevelopment.showcontrol.api.triggers.impl;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException; import lombok.NoArgsConstructor;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Particle; import org.bukkit.Particle;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@NoArgsConstructor(force = true)
@TriggerIdentifier(value = "particle", minArgs = 6, argDesc = "<world> <x> <y> <z> <type> <count>") @TriggerIdentifier(value = "particle", minArgs = 6, argDesc = "<world> <x> <y> <z> <type> <count>")
public class ParticleTrigger extends Trigger { public class ParticleTrigger extends Trigger {
private final Particle type; private final Particle type;
@ -57,11 +61,17 @@ public class ParticleTrigger extends Trigger {
} }
@Override @Override
public List<String> getArgumentTabComplete(int index, String arg) { public List<String> getArgumentTabComplete(Player player, int index, String arg) {
if (index == 0) { if (index == 0) {
return Bukkit.getWorlds().stream().map(World::getName).toList(); return player != null ? List.of(player.getWorld().getName()) : Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList());
} else if (index == 1) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockX())) : List.of();
} else if (index == 2) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockY())) : List.of();
} else if (index == 3) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockZ())) : List.of();
} else if (index == 4) { } else if (index == 4) {
return Arrays.stream(Particle.values()).map(Enum::name).toList(); return Arrays.stream(Particle.values()).map(Enum::name).collect(Collectors.toList());
} }
return List.of(); return List.of();
} }

View file

@ -1,16 +1,20 @@
package tech.sbdevelopment.showcontrol.api.triggers.impl; package tech.sbdevelopment.showcontrol.api.triggers.impl;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException; import lombok.NoArgsConstructor;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import tech.sbdevelopment.showcontrol.elements.Lasers;
import tech.sbdevelopment.showcontrol.elements.Spots;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidArgumentException;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import tech.sbdevelopment.showcontrol.elements.Spots;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@NoArgsConstructor(force = true)
@TriggerIdentifier(value = "spot", minArgs = 5, argDesc = "<name> <world> <x> <y> <z>") @TriggerIdentifier(value = "spot", minArgs = 5, argDesc = "<name> <world> <x> <y> <z>")
public class SpotTrigger extends Trigger { public class SpotTrigger extends Trigger {
private final String name; private final String name;
@ -50,11 +54,17 @@ public class SpotTrigger extends Trigger {
} }
@Override @Override
public List<String> getArgumentTabComplete(int index, String arg) { public List<String> getArgumentTabComplete(Player player, int index, String arg) {
if (index == 0) { if (index == 0) {
return Spots.getSpots().keySet().stream().toList(); return new ArrayList<>(Spots.getSpots().keySet());
} else if (index == 1) { } else if (index == 1) {
return Bukkit.getWorlds().stream().map(World::getName).toList(); return player != null ? List.of(player.getWorld().getName()) : Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList());
} else if (index == 2) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockX())) : List.of();
} else if (index == 3) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockY())) : List.of();
} else if (index == 4) {
return player != null ? List.of(String.valueOf(player.getLocation().getBlockZ())) : List.of();
} }
return List.of(); return List.of();
} }

View file

@ -3,15 +3,15 @@ package tech.sbdevelopment.showcontrol.commands;
import co.aikar.commands.BaseCommand; import co.aikar.commands.BaseCommand;
import co.aikar.commands.CommandHelp; import co.aikar.commands.CommandHelp;
import co.aikar.commands.annotation.*; import co.aikar.commands.annotation.*;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidTriggerException;
import tech.sbdevelopment.showcontrol.api.exceptions.TooFewArgumentsException;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.api.SCAPI;
import tech.sbdevelopment.showcontrol.gui.ShowCueGUI;
import tech.sbdevelopment.showcontrol.utils.TimeUtil;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.SCAPI;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidTriggerException;
import tech.sbdevelopment.showcontrol.api.exceptions.TooFewArgumentsException;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.gui.ShowCueGUI;
import tech.sbdevelopment.showcontrol.utils.TimeUtil;
@CommandAlias("showcontrol|sc") @CommandAlias("showcontrol|sc")
@CommandPermission("sc.admin") @CommandPermission("sc.admin")
@ -52,7 +52,7 @@ public class ShowCMD extends BaseCommand {
@Subcommand("add") @Subcommand("add")
@Description("") @Description("")
@CommandCompletion("@showname @empty @showtype @empty") @CommandCompletion("@showname @empty @showtype @cuearg")
public void onAdd(CommandSender sender, String name, String time, String args) { public void onAdd(CommandSender sender, String name, String time, String args) {
if (!SCAPI.exists(name)) { if (!SCAPI.exists(name)) {
sender.sendMessage(ChatColor.RED + "That show doesn't exists."); sender.sendMessage(ChatColor.RED + "That show doesn't exists.");

View file

@ -3,8 +3,8 @@ package tech.sbdevelopment.showcontrol.data;
import tech.sbdevelopment.showcontrol.ShowControlPlugin; import tech.sbdevelopment.showcontrol.ShowControlPlugin;
import tech.sbdevelopment.showcontrol.api.SCAPI; import tech.sbdevelopment.showcontrol.api.SCAPI;
import tech.sbdevelopment.showcontrol.api.exceptions.InvalidTriggerException; import tech.sbdevelopment.showcontrol.api.exceptions.InvalidTriggerException;
import tech.sbdevelopment.showcontrol.api.points.ShowCuePoint;
import tech.sbdevelopment.showcontrol.api.exceptions.TooFewArgumentsException; import tech.sbdevelopment.showcontrol.api.exceptions.TooFewArgumentsException;
import tech.sbdevelopment.showcontrol.api.points.ShowCuePoint;
import tech.sbdevelopment.showcontrol.api.triggers.Trigger; import tech.sbdevelopment.showcontrol.api.triggers.Trigger;
import tech.sbdevelopment.showcontrol.utils.YamlFile; import tech.sbdevelopment.showcontrol.utils.YamlFile;

View file

@ -2,9 +2,9 @@ package tech.sbdevelopment.showcontrol.elements;
import fr.skytasul.guardianbeam.Laser; import fr.skytasul.guardianbeam.Laser;
import lombok.Getter; import lombok.Getter;
import tech.sbdevelopment.showcontrol.ShowControlPlugin;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import tech.sbdevelopment.showcontrol.ShowControlPlugin;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;

View file

@ -2,9 +2,9 @@ package tech.sbdevelopment.showcontrol.elements;
import fr.skytasul.guardianbeam.Laser; import fr.skytasul.guardianbeam.Laser;
import lombok.Getter; import lombok.Getter;
import tech.sbdevelopment.showcontrol.ShowControlPlugin;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import tech.sbdevelopment.showcontrol.ShowControlPlugin;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;

View file

@ -1,12 +1,12 @@
package tech.sbdevelopment.showcontrol.gui; package tech.sbdevelopment.showcontrol.gui;
import fr.minuskube.inv.ClickableItem; import fr.minuskube.inv.ClickableItem;
import tech.sbdevelopment.showcontrol.api.points.ShowCuePoint;
import tech.sbdevelopment.showcontrol.api.SCAPI;
import tech.sbdevelopment.showcontrol.utils.MainUtil;
import tech.sbdevelopment.showcontrol.utils.inventories.PaginationInventory;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import tech.sbdevelopment.showcontrol.api.SCAPI;
import tech.sbdevelopment.showcontrol.api.points.ShowCuePoint;
import tech.sbdevelopment.showcontrol.utils.MainUtil;
import tech.sbdevelopment.showcontrol.utils.inventories.PaginationInventory;
import java.util.Comparator; import java.util.Comparator;

View file

@ -1,10 +1,10 @@
package tech.sbdevelopment.showcontrol.utils; package tech.sbdevelopment.showcontrol.utils;
import tech.sbdevelopment.showcontrol.api.points.ShowCuePoint;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.ChatPaginator; import org.bukkit.util.ChatPaginator;
import tech.sbdevelopment.showcontrol.api.points.ShowCuePoint;
import tech.sbdevelopment.showcontrol.api.triggers.TriggerIdentifier;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View file

@ -3,5 +3,6 @@ version: ${project.version}
main: tech.sbdevelopment.showcontrol.ShowControlPlugin main: tech.sbdevelopment.showcontrol.ShowControlPlugin
api-version: 1.13 api-version: 1.13
authors: [SBDeveloper] authors: [SBDeveloper]
softdepend: [Animatronics]
description: Create shows easily using this plugin! description: Create shows easily using this plugin!
website: https://sbdevelopment.tech website: https://sbdevelopment.tech