Feature/1.19.4 #11

Merged
stijnb1234 merged 3 commits from feature/1.19.4 into master 2023-04-09 11:22:58 +00:00
25 changed files with 253 additions and 232 deletions
Showing only changes of commit 673f03a689 - Show all commits

23
pom.xml
View file

@ -33,6 +33,13 @@
<version>3.10.1</version>
<configuration>
<release>17</release>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
@ -69,6 +76,10 @@
<pattern>co.aikar.locales</pattern>
<shadedPattern>nl.sbdeveloper.showcontrol.libs.locales</shadedPattern>
</relocation>
<relocation>
<pattern>org.reflections</pattern>
<shadedPattern>nl.sbdeveloper.showcontrol.libs.reflections</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
@ -132,5 +143,17 @@
<version>2.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View file

@ -1,18 +1,14 @@
package nl.sbdeveloper.showcontrol;
import co.aikar.commands.PaperCommandManager;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import nl.sbdeveloper.showcontrol.api.ShowAPI;
import nl.sbdeveloper.showcontrol.commands.ShowCMD;
import nl.sbdeveloper.showcontrol.data.DataConversion;
import nl.sbdeveloper.showcontrol.data.DataSaving;
import nl.sbdeveloper.showcontrol.data.Shows;
import nl.sbdeveloper.showcontrol.utils.Inventory;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.Arrays;
import java.util.stream.Collectors;
public final class ShowControlPlugin extends JavaPlugin {
private static ShowControlPlugin instance;
@ -20,15 +16,13 @@ public final class ShowControlPlugin extends JavaPlugin {
public void onEnable() {
instance = this;
DataConversion.handle();
final PaperCommandManager commandManager = new PaperCommandManager(this);
commandManager.enableUnstableAPI("help");
commandManager.registerCommand(new ShowCMD());
commandManager.getCommandCompletions().registerCompletion("showname", c -> Shows.getShowsMap().keySet());
commandManager.getCommandCompletions().registerStaticCompletion("showtype", Arrays.stream(TriggerType.values()).map(Enum::name).collect(Collectors.toList()));
commandManager.getCommandCompletions().registerCompletion("showtype", c -> ShowAPI.getTriggers().keySet());
Inventory.init();

View file

@ -0,0 +1,7 @@
package nl.sbdeveloper.showcontrol.api;
import lombok.experimental.StandardException;
@StandardException
public class InvalidTriggerException extends Exception {
}

View file

@ -0,0 +1,57 @@
package nl.sbdeveloper.showcontrol.api;
import lombok.Getter;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.Bukkit;
import org.reflections.Reflections;
import org.reflections.scanners.MethodAnnotationsScanner;
import org.reflections.scanners.Scanners;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.util.ClasspathHelper;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.FilterBuilder;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
public class ShowAPI {
@Getter
private static final Map<String, Class<? extends Trigger>> triggers = new HashMap<>();
public static void index(Class<?> clazz, String... packages) {
Bukkit.getLogger().info("Indexing triggers for starting point " + clazz.getSimpleName() + "...");
FilterBuilder filterBuilder = new FilterBuilder();
for (String p : packages) filterBuilder.includePackage(p);
ConfigurationBuilder config = new ConfigurationBuilder()
.setScanners(Scanners.SubTypes.filterResultsBy(new FilterBuilder().includePattern(Trigger.class.getName())), Scanners.TypesAnnotated)
.setUrls(ClasspathHelper.forClass(clazz))
.filterInputsBy(filterBuilder);
Reflections reflections = new Reflections(config);
Set<Class<?>> trig = reflections.getTypesAnnotatedWith(TriggerIdentifier.class);
for (Class<?> trigger : trig) {
Bukkit.getLogger().info("Found trigger " + trigger.getSimpleName() + ".");
TriggerIdentifier identifier = trigger.getAnnotation(TriggerIdentifier.class);
triggers.put(identifier.value(), (Class<? extends Trigger>) trigger);
}
}
public static <T extends Trigger> T getTrigger(String data) throws ReflectiveOperationException, InvalidTriggerException, TooFewArgumentsException {
String[] dataSplitter = data.split(" ");
String[] dataSplitterNew = Arrays.copyOfRange(dataSplitter, 1, dataSplitter.length);
String triggerType = dataSplitter[0];
if (!triggers.containsKey(triggerType)) throw new InvalidTriggerException("Provided trigger " + triggerType + " does not exists!");
Constructor<T> ctor = (Constructor<T>) triggers.get(triggerType).getConstructor(String[].class);
if (dataSplitter.length < triggers.get(triggerType).getAnnotation(TriggerIdentifier.class).minArgs() + 1) throw new TooFewArgumentsException("Provided triggerdata " + data + " has too few arguments!");
return ctor.newInstance(dataSplitterNew);
}
}

View file

@ -1,14 +1,16 @@
package nl.sbdeveloper.showcontrol.api;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import java.util.UUID;
/**
* A cue point of a show
*/
public class ShowCue {
public class ShowCuePoint {
private final UUID cueID;
private final Long time;
private final TriggerTask data;
private final Trigger data;
/**
* Create a new cue point
@ -16,7 +18,7 @@ public class ShowCue {
* @param time The starttime (milli)
* @param data The data
*/
public ShowCue(Long time, TriggerTask data) {
public ShowCuePoint(Long time, Trigger data) {
this(UUID.randomUUID(), time, data);
}
@ -27,7 +29,7 @@ public class ShowCue {
* @param time The starttime (milli)
* @param data The data
*/
public ShowCue(UUID uuid, Long time, TriggerTask data) {
public ShowCuePoint(UUID uuid, Long time, Trigger data) {
this.cueID = uuid;
this.time = time;
this.data = data;
@ -56,7 +58,7 @@ public class ShowCue {
*
* @return The data
*/
public TriggerTask getTask() {
public Trigger getTask() {
return data;
}
}

View file

@ -0,0 +1,7 @@
package nl.sbdeveloper.showcontrol.api;
import lombok.experimental.StandardException;
@StandardException
public class TooFewArgumentsException extends Exception {
}

View file

@ -1,29 +0,0 @@
package nl.sbdeveloper.showcontrol.api;
import nl.sbdeveloper.showcontrol.api.triggers.*;
public enum TriggerType {
COMMAND(CommandTrigger.class, 2),
FIREWORK(FireworkTrigger.class, 6),
FAKE_FIREWORK(FakeFireworkTrigger.class, 7),
SPOT(SpotTrigger.class, 6),
LASER(LaserTrigger.class, 6),
ANIMA(AnimaTrigger.class, 2),
PARTICLE(ParticleTrigger.class, 7);
private final Class<? extends TriggerTask> trigger;
private final int minArgs;
TriggerType(Class<? extends TriggerTask> trigger, int minArgs) {
this.trigger = trigger;
this.minArgs = minArgs;
}
public Class<? extends TriggerTask> getTrigger() {
return trigger;
}
public int getMinArgs() {
return minArgs;
}
}

View file

@ -1,20 +0,0 @@
package nl.sbdeveloper.showcontrol.api.triggers;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import org.bukkit.Bukkit;
public class AnimaTrigger extends TriggerTask {
private final String name;
public AnimaTrigger(String[] data) {
super(TriggerType.ANIMA, data);
this.name = getDataString();
}
@Override
public void trigger() {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "anima play " + name);
}
}

View file

@ -1,20 +0,0 @@
package nl.sbdeveloper.showcontrol.api.triggers;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import org.bukkit.Bukkit;
public class CommandTrigger extends TriggerTask {
private final String command;
public CommandTrigger(String[] data) {
super(TriggerType.COMMAND, data);
this.command = getDataString();
}
@Override
public void trigger() {
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), command);
}
}

View file

@ -1,17 +1,13 @@
package nl.sbdeveloper.showcontrol.api;
package nl.sbdeveloper.showcontrol.api.triggers;
public abstract class TriggerTask {
private final TriggerType type;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public abstract class Trigger {
private final String[] dataString;
/**
* Create a new trigger
*/
public TriggerTask(TriggerType type, String[] dataString) {
this.type = type;
this.dataString = dataString;
}
/**
* This method gets fired when the cue gets triggered
*/
@ -23,15 +19,6 @@ public abstract class TriggerTask {
*/
public void remove() {}
/**
* Get the trigger type
*
* @return The trigger type
*/
public TriggerType getType() {
return type;
}
/**
* Get the datastring from this cue
*
@ -44,4 +31,8 @@ public abstract class TriggerTask {
}
return builder.toString().trim();
}
public String getTriggerId() {
return getClass().getAnnotation(TriggerIdentifier.class).value();
}
}

View file

@ -0,0 +1,14 @@
package nl.sbdeveloper.showcontrol.api.triggers;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TriggerIdentifier {
String value();
int minArgs() default 0;
String argDesc() default "";
}

View file

@ -0,0 +1,17 @@
package nl.sbdeveloper.showcontrol.api.triggers.impl;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.Bukkit;
@TriggerIdentifier(value = "animatronic", minArgs = 1, argDesc = "<name>")
public class AnimaTrigger extends Trigger {
public AnimaTrigger(String[] data) {
super(data);
}
@Override
public void trigger() {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "anima play " + getDataString());
}
}

View file

@ -0,0 +1,17 @@
package nl.sbdeveloper.showcontrol.api.triggers.impl;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.Bukkit;
@TriggerIdentifier(value = "command", minArgs = 1, argDesc = "<command ...>")
public class CommandTrigger extends Trigger {
public CommandTrigger(String[] data) {
super(data);
}
@Override
public void trigger() {
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getDataString());
}
}

View file

@ -1,7 +1,7 @@
package nl.sbdeveloper.showcontrol.api.triggers;
package nl.sbdeveloper.showcontrol.api.triggers.impl;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
import nl.sbdeveloper.showcontrol.elements.Fireworks;
import nl.sbdeveloper.showcontrol.utils.Color;
import org.bukkit.Bukkit;
@ -9,12 +9,13 @@ import org.bukkit.FireworkEffect;
import org.bukkit.Location;
import org.bukkit.World;
public class FireworkTrigger extends TriggerTask {
@TriggerIdentifier(value = "firework", minArgs = 5, argDesc = "<world> <x> <y> <z> <configuration ...>")
public class FireworkTrigger extends Trigger {
private Fireworks.Firework fw;
private Location spawnLoc;
public FireworkTrigger(String[] data) {
super(TriggerType.FIREWORK, data);
super(data);
World w = Bukkit.getWorld(data[0]);
if (w == null) {

View file

@ -0,0 +1,16 @@
package nl.sbdeveloper.showcontrol.api.triggers.impl;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
@TriggerIdentifier(value = "flamethrower", minArgs = 5, argDesc = "<world> <x> <y> <z> <delay>")
public class FlameThrowerTrigger extends Trigger {
public FlameThrowerTrigger(String[] dataString) {
super(dataString);
}
@Override
public void trigger() {
}
}

View file

@ -1,19 +1,19 @@
package nl.sbdeveloper.showcontrol.api.triggers;
package nl.sbdeveloper.showcontrol.api.triggers.impl;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
import nl.sbdeveloper.showcontrol.elements.Lasers;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
public class LaserTrigger extends TriggerTask {
@TriggerIdentifier(value = "laser", minArgs = 5, argDesc = "<name> <world> <x> <y> <z>")
public class LaserTrigger extends Trigger {
private final String name;
private Location newLocation;
//TODO Fix laser for 1.17
public LaserTrigger(String[] data) {
super(TriggerType.LASER, data);
super(data);
this.name = data[0];
@ -44,8 +44,7 @@ public class LaserTrigger extends TriggerTask {
@Override
public void trigger() {
Bukkit.broadcastMessage("[ShowAPI] De trigger " + name + " is genegeerd, omdat de LASER is disabled.");
// ShowAPI.Lasers.move(name, newLocation);
Lasers.move(name, newLocation);
}
@Override

View file

@ -1,19 +1,20 @@
package nl.sbdeveloper.showcontrol.api.triggers;
package nl.sbdeveloper.showcontrol.api.triggers.impl;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Particle;
import org.bukkit.World;
public class ParticleTrigger extends TriggerTask {
@TriggerIdentifier(value = "particle", minArgs = 6, argDesc = "<world> <x> <y> <z> <type> <count>")
public class ParticleTrigger extends Trigger {
private Particle type;
private Location spawnLoc;
private int count;
public ParticleTrigger(String[] data) {
super(TriggerType.PARTICLE, data);
super(data);
World w = Bukkit.getWorld(data[0]);
if (w == null) {

View file

@ -1,18 +1,19 @@
package nl.sbdeveloper.showcontrol.api.triggers;
package nl.sbdeveloper.showcontrol.api.triggers.impl;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.api.triggers.TriggerIdentifier;
import nl.sbdeveloper.showcontrol.elements.Spots;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
public class SpotTrigger extends TriggerTask {
@TriggerIdentifier(value = "spot", minArgs = 5, argDesc = "<name> <world> <x> <y> <z>")
public class SpotTrigger extends Trigger {
private final String name;
private Location newLocation;
public SpotTrigger(String[] data) {
super(TriggerType.SPOT, data);
super(data);
this.name = data[0];
@ -43,7 +44,7 @@ public class SpotTrigger extends TriggerTask {
@Override
public void trigger() {
// ShowAPI.Spots.move(name, newLocation);
Spots.move(name, newLocation);
Bukkit.broadcastMessage("[ShowAPI] De trigger " + name + " is genegeerd, omdat de SPOT is disabled.");
}

View file

@ -2,10 +2,12 @@ package nl.sbdeveloper.showcontrol.commands;
import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.*;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.InvalidTriggerException;
import nl.sbdeveloper.showcontrol.api.ShowAPI;
import nl.sbdeveloper.showcontrol.api.TooFewArgumentsException;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.data.Shows;
import nl.sbdeveloper.showcontrol.gui.ShowCueGUI;
import nl.sbdeveloper.showcontrol.utils.MainUtil;
import nl.sbdeveloper.showcontrol.utils.TimeUtil;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
@ -67,8 +69,17 @@ public class ShowCMD extends BaseCommand {
return;
}
TriggerTask data = MainUtil.parseData(args);
if (data == null) {
Trigger data;
try {
data = ShowAPI.getTrigger(args);
} catch (ReflectiveOperationException e) {
e.printStackTrace();
sender.sendMessage(ChatColor.RED + "Er is iets fout gegaan! Vraag de server eigenaar voor meer informatie.");
return;
} catch (InvalidTriggerException e) {
sender.sendMessage(ChatColor.RED + "De meegegeven trigger bestaat niet.");
return;
} catch (TooFewArgumentsException e) {
sender.sendMessage(ChatColor.RED + "Je hebt niet genoeg informatie meegeven voor de trigger.");
return;
}

View file

@ -1,46 +0,0 @@
package nl.sbdeveloper.showcontrol.data;
import nl.sbdeveloper.showcontrol.ShowControlPlugin;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.utils.MainUtil;
import nl.sbdeveloper.showcontrol.utils.YamlFile;
import java.io.File;
public class DataConversion {
public static void handle() {
if (isOldSystem()) convert();
}
private static boolean isOldSystem() {
File dataFolder = ShowControlPlugin.getInstance().getDataFolder();
File dataFile = new File(dataFolder, "data.yml");
return dataFile.exists();
}
private static void convert() {
File dataFolder = new File(ShowControlPlugin.getInstance().getDataFolder(), "data");
if(!dataFolder.exists()) {
dataFolder.mkdirs();
}
YamlFile dataFile = new YamlFile("data");
for (String name : dataFile.getFile().getConfigurationSection("Shows").getKeys(false)) {
//STEP 1: Convert to new system.
YamlFile showFile = new YamlFile("data/" + name);
for (String id : dataFile.getFile().getConfigurationSection("Shows." + name).getKeys(false)) {
TriggerTask data = MainUtil.parseData(dataFile.getFile().getString("Shows." + name + "." + id + ".Type") + " " + dataFile.getFile().getString("Shows." + name + "." + id + ".Data"));
long time = dataFile.getFile().getLong("Shows." + name + "." + id + ".Time");
showFile.getFile().set(id + ".Time", time);
showFile.getFile().set(id + ".Type", data.getType().name());
showFile.getFile().set(id + ".Data", data.getDataString());
}
showFile.saveFile();
}
//STEP 2: Remove old storage.
File data = new File(ShowControlPlugin.getInstance().getDataFolder(), "data.yml");
data.delete();
}
}

View file

@ -1,9 +1,11 @@
package nl.sbdeveloper.showcontrol.data;
import nl.sbdeveloper.showcontrol.ShowControlPlugin;
import nl.sbdeveloper.showcontrol.api.ShowCue;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.utils.MainUtil;
import nl.sbdeveloper.showcontrol.api.InvalidTriggerException;
import nl.sbdeveloper.showcontrol.api.ShowAPI;
import nl.sbdeveloper.showcontrol.api.ShowCuePoint;
import nl.sbdeveloper.showcontrol.api.TooFewArgumentsException;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.utils.YamlFile;
import java.io.File;
@ -23,24 +25,30 @@ public class DataSaving {
YamlFile showConfig = new YamlFile("data/" + showID);
files.put(showID, showConfig);
List<ShowCue> cues = new ArrayList<>();
List<ShowCuePoint> cues = new ArrayList<>();
for (String id : showConfig.getFile().getKeys(false)) {
UUID cueID = UUID.fromString(id);
TriggerTask data = MainUtil.parseData(showConfig.getFile().getString(id + ".Type") + " " + showConfig.getFile().getString(id + ".Data"));
Trigger data;
try {
data = ShowAPI.getTrigger(showConfig.getFile().getString(id + ".Type") + " " + showConfig.getFile().getString(id + ".Data"));
} catch (ReflectiveOperationException | InvalidTriggerException | TooFewArgumentsException e) {
e.printStackTrace();
return;
}
long time = showConfig.getFile().getLong(id + ".Time");
cues.add(new ShowCue(cueID, time, data));
cues.add(new ShowCuePoint(cueID, time, data));
}
Shows.getShowsMap().put(showID, cues);
}
}
public static void save() {
for (Map.Entry<String, List<ShowCue>> entry : Shows.getShowsMap().entrySet()) {
for (Map.Entry<String, List<ShowCuePoint>> entry : Shows.getShowsMap().entrySet()) {
YamlFile file = files.containsKey(entry.getKey()) ? files.get(entry.getKey()) : new YamlFile("data/" + entry.getKey());
for (ShowCue cue : entry.getValue()) {
for (ShowCuePoint cue : entry.getValue()) {
file.getFile().set(cue.getCueID().toString() + ".Time", cue.getTime());
file.getFile().set(cue.getCueID().toString() + ".Type", cue.getTask().getType().name());
file.getFile().set(cue.getCueID().toString() + ".Type", cue.getTask().getTriggerId());
file.getFile().set(cue.getCueID().toString() + ".Data", cue.getTask().getDataString());
}
file.saveFile();

View file

@ -1,8 +1,9 @@
package nl.sbdeveloper.showcontrol.data;
import lombok.Getter;
import nl.sbdeveloper.showcontrol.ShowControlPlugin;
import nl.sbdeveloper.showcontrol.api.ShowCue;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.ShowCuePoint;
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
import nl.sbdeveloper.showcontrol.utils.YamlFile;
import org.bukkit.Bukkit;
@ -10,18 +11,19 @@ import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Shows {
private static final HashMap<String, List<ShowCue>> showsMap = new HashMap<>();
@Getter
private static final HashMap<String, List<ShowCuePoint>> showsMap = new HashMap<>();
private static final HashMap<String, ScheduledExecutorService> showTimers = new HashMap<>();
public static void create(String name) {
showsMap.put(name, new ArrayList<>());
DataSaving.save();
// Bukkit.getScheduler().runTaskAsynchronously(ShowAPIPlugin.getInstance(), DataSaving::save);
}
public static void delete(String name) {
@ -35,19 +37,18 @@ public class Shows {
return showsMap.containsKey(name);
}
public static List<ShowCue> getPoints(String name) {
public static List<ShowCuePoint> getPoints(String name) {
if (!exists(name)) return new ArrayList<>();
return showsMap.get(name);
}
public static void addPoint(String name, Long time, TriggerTask data) {
public static void addPoint(String name, Long time, Trigger data) {
if (!exists(name)) return;
getPoints(name).add(new ShowCue(time, data));
getPoints(name).add(new ShowCuePoint(time, data));
DataSaving.save();
// Bukkit.getScheduler().runTaskAsynchronously(ShowAPIPlugin.getInstance(), DataSaving::save);
}
public static void removePoint(String name, ShowCue point) {
public static void removePoint(String name, ShowCuePoint point) {
if (!exists(name)) return;
point.getTask().remove();
@ -62,9 +63,7 @@ public class Shows {
public static void startShow(String name) {
if (!exists(name)) return;
ScheduledExecutorService showTimer = Executors.newSingleThreadScheduledExecutor();
Bukkit.getLogger().info("Scheduled show " + name);
for (ShowCue point : getPoints(name)) {
Bukkit.getLogger().info("Point " + point.getTask().getDataString() + " on " + point.getTime());
for (ShowCuePoint point : getPoints(name)) {
showTimer.schedule(() -> Bukkit.getScheduler().runTask(ShowControlPlugin.getInstance(), () -> point.getTask().trigger()), point.getTime(), TimeUnit.MILLISECONDS);
}
showTimers.put(name, showTimer);
@ -76,8 +75,4 @@ public class Shows {
ScheduledExecutorService showTimer = showTimers.get(name);
showTimer.shutdownNow();
}
public static HashMap<String, List<ShowCue>> getShowsMap() {
return showsMap;
}
}

View file

@ -4,7 +4,7 @@ import fr.minuskube.inv.ClickableItem;
import fr.minuskube.inv.content.InventoryContents;
import fr.minuskube.inv.content.Pagination;
import fr.minuskube.inv.content.SlotIterator;
import nl.sbdeveloper.showcontrol.api.ShowCue;
import nl.sbdeveloper.showcontrol.api.ShowCuePoint;
import nl.sbdeveloper.showcontrol.data.Shows;
import nl.sbdeveloper.showcontrol.utils.Inventory;
import nl.sbdeveloper.showcontrol.utils.ItemBuilder;
@ -33,7 +33,7 @@ public class ShowCueGUI extends Inventory {
Pagination pagination = contents.pagination();
List<ClickableItem> items = new ArrayList<>();
Shows.getPoints(showName).stream().sorted(Comparator.comparing(ShowCue::getTime))
Shows.getPoints(showName).stream().sorted(Comparator.comparing(ShowCuePoint::getTime))
.forEach(cue -> items.add(ClickableItem.of(MainUtil.pointToItem(cue), e -> {
Shows.removePoint(showName, cue);
open(player, pagination.getPage());

View file

@ -1,17 +1,12 @@
package nl.sbdeveloper.showcontrol.utils;
import nl.sbdeveloper.showcontrol.api.ShowCue;
import nl.sbdeveloper.showcontrol.api.TriggerTask;
import nl.sbdeveloper.showcontrol.api.TriggerType;
import nl.sbdeveloper.showcontrol.api.ShowCuePoint;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.ChatPaginator;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainUtil {
@ -19,12 +14,12 @@ public class MainUtil {
return ChatColor.translateAlternateColorCodes('&', in);
}
public static ItemStack pointToItem(ShowCue point) {
public static ItemStack pointToItem(ShowCuePoint point) {
ItemBuilder builder = new ItemBuilder(Material.NOTE_BLOCK);
builder.setName(ChatColor.ITALIC + "TimeCode: " + TimeUtil.makeReadable(point.getTime()));
List<String> lores = new ArrayList<>();
lores.add(ChatColor.GREEN + "Type: " + ChatColor.AQUA + capitalize(point.getTask().getType().name()));
lores.add(ChatColor.GREEN + "Type: " + ChatColor.AQUA + capitalize(point.getTask().getTriggerId()));
lores.add(ChatColor.GREEN + "Data:");
for (String str : ChatPaginator.paginate(point.getTask().getDataString(), 20).getLines()) {
lores.add(ChatColor.AQUA + ChatColor.stripColor(str));
@ -36,26 +31,6 @@ public class MainUtil {
return builder.toItemStack();
}
public static TriggerTask parseData(String data) {
String[] dataSplitter = data.split(" ");
String[] dataSplitterNew = Arrays.copyOfRange(dataSplitter, 1, dataSplitter.length);
TriggerType type;
try {
type = TriggerType.valueOf(dataSplitter[0].toUpperCase());
} catch (IllegalArgumentException ex) {
return null;
}
try {
Constructor<? extends TriggerTask> ctor = type.getTrigger().getConstructor(String[].class);
if (dataSplitter.length < type.getMinArgs()) return null;
return ctor.newInstance(dataSplitterNew);
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
return null;
}
}
public static String capitalize(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}

View file

@ -3,5 +3,5 @@ version: ${project.version}
main: nl.sbdeveloper.showcontrol.ShowControlPlugin
api-version: 1.13
authors: [SBDeveloper]
description: Make perfect shows with this API!
description: Create shows easily using this plugin!
website: https://sbdevelopment.tech