commit
d35850ac73
27 changed files with 374 additions and 343 deletions
29
pom.xml
29
pom.xml
|
@ -33,6 +33,13 @@
|
||||||
<version>3.10.1</version>
|
<version>3.10.1</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<release>17</release>
|
<release>17</release>
|
||||||
|
<annotationProcessorPaths>
|
||||||
|
<path>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.24</version>
|
||||||
|
</path>
|
||||||
|
</annotationProcessorPaths>
|
||||||
<compilerArgs>
|
<compilerArgs>
|
||||||
<arg>-parameters</arg>
|
<arg>-parameters</arg>
|
||||||
</compilerArgs>
|
</compilerArgs>
|
||||||
|
@ -69,6 +76,10 @@
|
||||||
<pattern>co.aikar.locales</pattern>
|
<pattern>co.aikar.locales</pattern>
|
||||||
<shadedPattern>nl.sbdeveloper.showcontrol.libs.locales</shadedPattern>
|
<shadedPattern>nl.sbdeveloper.showcontrol.libs.locales</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.reflections</pattern>
|
||||||
|
<shadedPattern>nl.sbdeveloper.showcontrol.libs.reflections</shadedPattern>
|
||||||
|
</relocation>
|
||||||
</relocations>
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -106,7 +117,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.19.2-R0.1-SNAPSHOT</version>
|
<version>1.19.4-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -118,7 +129,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.cryptomorin</groupId>
|
<groupId>com.github.cryptomorin</groupId>
|
||||||
<artifactId>XSeries</artifactId>
|
<artifactId>XSeries</artifactId>
|
||||||
<version>9.2.0</version>
|
<version>9.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>co.aikar</groupId>
|
<groupId>co.aikar</groupId>
|
||||||
|
@ -129,7 +140,19 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.github.skytasul</groupId>
|
<groupId>io.github.skytasul</groupId>
|
||||||
<artifactId>guardianbeam</artifactId>
|
<artifactId>guardianbeam</artifactId>
|
||||||
<version>2.3.1</version>
|
<version>2.3.2</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>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
|
@ -1,18 +1,14 @@
|
||||||
package nl.sbdeveloper.showcontrol;
|
package nl.sbdeveloper.showcontrol;
|
||||||
|
|
||||||
import co.aikar.commands.PaperCommandManager;
|
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.commands.ShowCMD;
|
||||||
import nl.sbdeveloper.showcontrol.data.DataConversion;
|
import nl.sbdeveloper.showcontrol.data.DataStorage;
|
||||||
import nl.sbdeveloper.showcontrol.data.DataSaving;
|
|
||||||
import nl.sbdeveloper.showcontrol.data.Shows;
|
import nl.sbdeveloper.showcontrol.data.Shows;
|
||||||
import nl.sbdeveloper.showcontrol.utils.Inventory;
|
import nl.sbdeveloper.showcontrol.utils.Inventory;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public final class ShowControlPlugin extends JavaPlugin {
|
public final class ShowControlPlugin extends JavaPlugin {
|
||||||
private static ShowControlPlugin instance;
|
private static ShowControlPlugin instance;
|
||||||
|
|
||||||
|
@ -20,28 +16,41 @@ public final class ShowControlPlugin extends JavaPlugin {
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
DataConversion.handle();
|
getLogger().info("-------------------------------");
|
||||||
|
getLogger().info("ShowControl v" + getDescription().getVersion());
|
||||||
|
getLogger().info("Made by SBDeveloper");
|
||||||
|
getLogger().info(" ");
|
||||||
|
|
||||||
|
getLogger().info("Loading commands...");
|
||||||
final PaperCommandManager commandManager = new PaperCommandManager(this);
|
final PaperCommandManager commandManager = new PaperCommandManager(this);
|
||||||
commandManager.enableUnstableAPI("help");
|
commandManager.enableUnstableAPI("help");
|
||||||
|
|
||||||
commandManager.registerCommand(new ShowCMD());
|
commandManager.registerCommand(new ShowCMD());
|
||||||
|
|
||||||
commandManager.getCommandCompletions().registerCompletion("showname", c -> Shows.getShowsMap().keySet());
|
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());
|
||||||
|
|
||||||
|
getLogger().info("Loading GUI manageer...");
|
||||||
Inventory.init();
|
Inventory.init();
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskLater(this, DataSaving::load, 1L); //Load 1 tick later, because of multi world
|
getLogger().info("Loading default triggers...");
|
||||||
|
ShowAPI.index(ShowControlPlugin.class, "nl.sbdeveloper.showcontrol.api.triggers.impl");
|
||||||
|
|
||||||
|
Bukkit.getScheduler().runTaskLater(this, () -> {
|
||||||
|
getLogger().info("Loading data...");
|
||||||
|
DataStorage.load();
|
||||||
|
}, 1L); //Load 1 tick later, because of multi world
|
||||||
|
|
||||||
|
getLogger().info("Plugin enabled!");
|
||||||
|
getLogger().info("-------------------------------");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
instance = null;
|
getLogger().info("Saving data...");
|
||||||
|
DataStorage.save();
|
||||||
DataSaving.save();
|
|
||||||
|
|
||||||
Shows.getShowsMap().values().forEach(show -> show.forEach(showCue -> showCue.getTask().remove()));
|
Shows.getShowsMap().values().forEach(show -> show.forEach(showCue -> showCue.getTask().remove()));
|
||||||
|
|
||||||
|
getLogger().info("Plugin disabled!");
|
||||||
|
instance = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ShowControlPlugin getInstance() {
|
public static ShowControlPlugin getInstance() {
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package nl.sbdeveloper.showcontrol.api;
|
||||||
|
|
||||||
|
import lombok.experimental.StandardException;
|
||||||
|
|
||||||
|
@StandardException
|
||||||
|
public class InvalidArgumentException extends Exception {
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package nl.sbdeveloper.showcontrol.api;
|
||||||
|
|
||||||
|
import lombok.experimental.StandardException;
|
||||||
|
|
||||||
|
@StandardException
|
||||||
|
public class InvalidTriggerException extends Exception {
|
||||||
|
}
|
57
src/main/java/nl/sbdeveloper/showcontrol/api/ShowAPI.java
Normal file
57
src/main/java/nl/sbdeveloper/showcontrol/api/ShowAPI.java
Normal 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.Scanners;
|
||||||
|
import org.reflections.util.ClasspathHelper;
|
||||||
|
import org.reflections.util.ConfigurationBuilder;
|
||||||
|
import org.reflections.util.FilterBuilder;
|
||||||
|
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,14 +1,16 @@
|
||||||
package nl.sbdeveloper.showcontrol.api;
|
package nl.sbdeveloper.showcontrol.api;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A cue point of a show
|
* A cue point of a show
|
||||||
*/
|
*/
|
||||||
public class ShowCue {
|
public class ShowCuePoint {
|
||||||
private final UUID cueID;
|
private final UUID cueID;
|
||||||
private final Long time;
|
private final Long time;
|
||||||
private final TriggerTask data;
|
private final Trigger data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new cue point
|
* Create a new cue point
|
||||||
|
@ -16,7 +18,7 @@ public class ShowCue {
|
||||||
* @param time The starttime (milli)
|
* @param time The starttime (milli)
|
||||||
* @param data The data
|
* @param data The data
|
||||||
*/
|
*/
|
||||||
public ShowCue(Long time, TriggerTask data) {
|
public ShowCuePoint(Long time, Trigger data) {
|
||||||
this(UUID.randomUUID(), time, data);
|
this(UUID.randomUUID(), time, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +29,7 @@ public class ShowCue {
|
||||||
* @param time The starttime (milli)
|
* @param time The starttime (milli)
|
||||||
* @param data The data
|
* @param data The data
|
||||||
*/
|
*/
|
||||||
public ShowCue(UUID uuid, Long time, TriggerTask data) {
|
public ShowCuePoint(UUID uuid, Long time, Trigger data) {
|
||||||
this.cueID = uuid;
|
this.cueID = uuid;
|
||||||
this.time = time;
|
this.time = time;
|
||||||
this.data = data;
|
this.data = data;
|
||||||
|
@ -56,7 +58,7 @@ public class ShowCue {
|
||||||
*
|
*
|
||||||
* @return The data
|
* @return The data
|
||||||
*/
|
*/
|
||||||
public TriggerTask getTask() {
|
public Trigger getTask() {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package nl.sbdeveloper.showcontrol.api;
|
||||||
|
|
||||||
|
import lombok.experimental.StandardException;
|
||||||
|
|
||||||
|
@StandardException
|
||||||
|
public class TooFewArgumentsException extends Exception {
|
||||||
|
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,56 +0,0 @@
|
||||||
package nl.sbdeveloper.showcontrol.api.triggers;
|
|
||||||
|
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerTask;
|
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerType;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Particle;
|
|
||||||
import org.bukkit.World;
|
|
||||||
|
|
||||||
public class ParticleTrigger extends TriggerTask {
|
|
||||||
private Particle type;
|
|
||||||
private Location spawnLoc;
|
|
||||||
private int count;
|
|
||||||
|
|
||||||
public ParticleTrigger(String[] data) {
|
|
||||||
super(TriggerType.PARTICLE, data);
|
|
||||||
|
|
||||||
World w = Bukkit.getWorld(data[0]);
|
|
||||||
if (w == null) {
|
|
||||||
Bukkit.getLogger().info("De wereld is null!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int x;
|
|
||||||
int y;
|
|
||||||
int z;
|
|
||||||
try {
|
|
||||||
x = Integer.parseInt(data[1]);
|
|
||||||
y = Integer.parseInt(data[2]);
|
|
||||||
z = Integer.parseInt(data[3]);
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
Bukkit.getLogger().info("De positie is incorrect!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.spawnLoc = new Location(w, x, y, z);
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.type = Particle.valueOf(data[4]);
|
|
||||||
} catch (IllegalArgumentException ex) {
|
|
||||||
Bukkit.getLogger().info("De particle " + data[4] + " bestaat niet!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
this.count = Integer.parseInt(data[5]);
|
|
||||||
} catch (NumberFormatException ex) {
|
|
||||||
Bukkit.getLogger().info("Het aantal " + data[4] + " is incorrect!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void trigger() {
|
|
||||||
spawnLoc.getWorld().spawnParticle(type, spawnLoc, count);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +1,13 @@
|
||||||
package nl.sbdeveloper.showcontrol.api;
|
package nl.sbdeveloper.showcontrol.api.triggers;
|
||||||
|
|
||||||
public abstract class TriggerTask {
|
import lombok.AllArgsConstructor;
|
||||||
private final TriggerType type;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public abstract class Trigger {
|
||||||
private final String[] dataString;
|
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
|
* This method gets fired when the cue gets triggered
|
||||||
*/
|
*/
|
||||||
|
@ -23,15 +19,6 @@ public abstract class TriggerTask {
|
||||||
*/
|
*/
|
||||||
public void remove() {}
|
public void remove() {}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the trigger type
|
|
||||||
*
|
|
||||||
* @return The trigger type
|
|
||||||
*/
|
|
||||||
public TriggerType getType() {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the datastring from this cue
|
* Get the datastring from this cue
|
||||||
*
|
*
|
||||||
|
@ -44,4 +31,8 @@ public abstract class TriggerTask {
|
||||||
}
|
}
|
||||||
return builder.toString().trim();
|
return builder.toString().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTriggerId() {
|
||||||
|
return getClass().getAnnotation(TriggerIdentifier.class).value();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package nl.sbdeveloper.showcontrol.api.triggers;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
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 "";
|
||||||
|
Material item() default Material.NOTE_BLOCK;
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
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;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
@TriggerIdentifier(value = "animatronic", minArgs = 1, argDesc = "<name>", item = Material.ARMOR_STAND)
|
||||||
|
public class AnimaTrigger extends Trigger {
|
||||||
|
public AnimaTrigger(String[] data) {
|
||||||
|
super(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "anima play " + getDataString());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
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;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
|
||||||
|
@TriggerIdentifier(value = "command", minArgs = 1, argDesc = "<command ...>", item = Material.COMMAND_BLOCK)
|
||||||
|
public class CommandTrigger extends Trigger {
|
||||||
|
public CommandTrigger(String[] data) {
|
||||||
|
super(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), getDataString());
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +1,23 @@
|
||||||
package nl.sbdeveloper.showcontrol.api.triggers;
|
package nl.sbdeveloper.showcontrol.api.triggers.impl;
|
||||||
|
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerTask;
|
import nl.sbdeveloper.showcontrol.api.InvalidArgumentException;
|
||||||
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.elements.Fireworks;
|
||||||
import nl.sbdeveloper.showcontrol.utils.Color;
|
import nl.sbdeveloper.showcontrol.utils.Color;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.*;
|
||||||
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 ...>", item = Material.FIREWORK_ROCKET)
|
||||||
private Fireworks.Firework fw;
|
public class FireworkTrigger extends Trigger {
|
||||||
private Location spawnLoc;
|
private final Fireworks.Firework fw;
|
||||||
|
private final Location spawnLoc;
|
||||||
|
|
||||||
public FireworkTrigger(String[] data) {
|
public FireworkTrigger(String[] data) throws InvalidArgumentException {
|
||||||
super(TriggerType.FIREWORK, data);
|
super(data);
|
||||||
|
|
||||||
World w = Bukkit.getWorld(data[0]);
|
World w = Bukkit.getWorld(data[0]);
|
||||||
if (w == null) {
|
if (w == null) {
|
||||||
Bukkit.getLogger().info("De wereld is null!");
|
throw new InvalidArgumentException("Provided World in FireworkTrigger is null!");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
|
@ -30,8 +28,7 @@ public class FireworkTrigger extends TriggerTask {
|
||||||
y = Integer.parseInt(data[2]);
|
y = Integer.parseInt(data[2]);
|
||||||
z = Integer.parseInt(data[3]);
|
z = Integer.parseInt(data[3]);
|
||||||
} catch (NumberFormatException ex) {
|
} catch (NumberFormatException ex) {
|
||||||
Bukkit.getLogger().info("De positie is incorrect!");
|
throw new InvalidArgumentException("Provided position in FireworkTrigger is invalid!");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.spawnLoc = new Location(w, x, y, z);
|
this.spawnLoc = new Location(w, x, y, z);
|
|
@ -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.Material;
|
||||||
|
|
||||||
|
@TriggerIdentifier(value = "flamethrower", minArgs = 5, argDesc = "<world> <x> <y> <z> <delay>", item = Material.FIRE)
|
||||||
|
public class FlameThrowerTrigger extends Trigger {
|
||||||
|
public FlameThrowerTrigger(String[] dataString) {
|
||||||
|
super(dataString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
//TODO Implement
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,26 +1,26 @@
|
||||||
package nl.sbdeveloper.showcontrol.api.triggers;
|
package nl.sbdeveloper.showcontrol.api.triggers.impl;
|
||||||
|
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerTask;
|
import nl.sbdeveloper.showcontrol.api.InvalidArgumentException;
|
||||||
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 nl.sbdeveloper.showcontrol.elements.Lasers;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
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 final String name;
|
||||||
private Location newLocation;
|
private final Location newLocation;
|
||||||
|
|
||||||
//TODO Fix laser for 1.17
|
public LaserTrigger(String[] data) throws InvalidArgumentException {
|
||||||
public LaserTrigger(String[] data) {
|
super(data);
|
||||||
super(TriggerType.LASER, data);
|
|
||||||
|
|
||||||
this.name = data[0];
|
this.name = data[0];
|
||||||
|
|
||||||
World w = Bukkit.getWorld(data[1]);
|
World w = Bukkit.getWorld(data[1]);
|
||||||
if (w == null) {
|
if (w == null) {
|
||||||
Bukkit.getLogger().info("De wereld is null!");
|
throw new InvalidArgumentException("Provided World in LaserTrigger is null!");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
|
@ -31,8 +31,7 @@ public class LaserTrigger extends TriggerTask {
|
||||||
y = Integer.parseInt(data[3]);
|
y = Integer.parseInt(data[3]);
|
||||||
z = Integer.parseInt(data[4]);
|
z = Integer.parseInt(data[4]);
|
||||||
} catch (NumberFormatException ex) {
|
} catch (NumberFormatException ex) {
|
||||||
Bukkit.getLogger().info("De positie is null!");
|
throw new InvalidArgumentException("Provided position in LaserTrigger is invalid!");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.newLocation = new Location(w, x, y, z);
|
this.newLocation = new Location(w, x, y, z);
|
||||||
|
@ -44,8 +43,7 @@ public class LaserTrigger extends TriggerTask {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void trigger() {
|
public void trigger() {
|
||||||
Bukkit.broadcastMessage("[ShowAPI] De trigger " + name + " is genegeerd, omdat de LASER is disabled.");
|
Lasers.move(name, newLocation);
|
||||||
// ShowAPI.Lasers.move(name, newLocation);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -0,0 +1,55 @@
|
||||||
|
package nl.sbdeveloper.showcontrol.api.triggers.impl;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showcontrol.api.InvalidArgumentException;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@TriggerIdentifier(value = "particle", minArgs = 6, argDesc = "<world> <x> <y> <z> <type> <count>")
|
||||||
|
public class ParticleTrigger extends Trigger {
|
||||||
|
private final Particle type;
|
||||||
|
private final Location spawnLoc;
|
||||||
|
private final int count;
|
||||||
|
|
||||||
|
public ParticleTrigger(String[] data) throws InvalidArgumentException {
|
||||||
|
super(data);
|
||||||
|
|
||||||
|
World w = Bukkit.getWorld(data[0]);
|
||||||
|
if (w == null) {
|
||||||
|
throw new InvalidArgumentException("Provided World in ParticleTrigger is null!");
|
||||||
|
}
|
||||||
|
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int z;
|
||||||
|
try {
|
||||||
|
x = Integer.parseInt(data[1]);
|
||||||
|
y = Integer.parseInt(data[2]);
|
||||||
|
z = Integer.parseInt(data[3]);
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
throw new InvalidArgumentException("Provided position in ParticleTrigger is invalid!");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.spawnLoc = new Location(w, x, y, z);
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.type = Particle.valueOf(data[4]);
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
throw new InvalidArgumentException("Provided particle " + data[4] + " in ParticleTrigger does not exists!");
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.count = Integer.parseInt(data[5]);
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
throw new InvalidArgumentException("Provided count " + data[5] + " in ParticleTrigger is invalid!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
spawnLoc.getWorld().spawnParticle(type, spawnLoc, count);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +1,26 @@
|
||||||
package nl.sbdeveloper.showcontrol.api.triggers;
|
package nl.sbdeveloper.showcontrol.api.triggers.impl;
|
||||||
|
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerTask;
|
import nl.sbdeveloper.showcontrol.api.InvalidArgumentException;
|
||||||
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 nl.sbdeveloper.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;
|
||||||
|
|
||||||
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 final String name;
|
||||||
private Location newLocation;
|
private final Location newLocation;
|
||||||
|
|
||||||
public SpotTrigger(String[] data) {
|
public SpotTrigger(String[] data) throws InvalidArgumentException {
|
||||||
super(TriggerType.SPOT, data);
|
super(data);
|
||||||
|
|
||||||
this.name = data[0];
|
this.name = data[0];
|
||||||
|
|
||||||
World w = Bukkit.getWorld(data[1]);
|
World w = Bukkit.getWorld(data[1]);
|
||||||
if (w == null) {
|
if (w == null) {
|
||||||
Bukkit.getLogger().info("De wereld is null!");
|
throw new InvalidArgumentException("Provided World in SpotTrigger is null!");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
|
@ -30,8 +31,7 @@ public class SpotTrigger extends TriggerTask {
|
||||||
y = Integer.parseInt(data[3]);
|
y = Integer.parseInt(data[3]);
|
||||||
z = Integer.parseInt(data[4]);
|
z = Integer.parseInt(data[4]);
|
||||||
} catch (NumberFormatException ex) {
|
} catch (NumberFormatException ex) {
|
||||||
Bukkit.getLogger().info("De positie is null!");
|
throw new InvalidArgumentException("Provided position in SpotTrigger is invalid!");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.newLocation = new Location(w, x, y, z);
|
this.newLocation = new Location(w, x, y, z);
|
||||||
|
@ -43,7 +43,7 @@ public class SpotTrigger extends TriggerTask {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void trigger() {
|
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.");
|
Bukkit.broadcastMessage("[ShowAPI] De trigger " + name + " is genegeerd, omdat de SPOT is disabled.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,38 +2,31 @@ package nl.sbdeveloper.showcontrol.commands;
|
||||||
|
|
||||||
import co.aikar.commands.BaseCommand;
|
import co.aikar.commands.BaseCommand;
|
||||||
import co.aikar.commands.annotation.*;
|
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.data.Shows;
|
||||||
import nl.sbdeveloper.showcontrol.gui.ShowCueGUI;
|
import nl.sbdeveloper.showcontrol.gui.ShowCueGUI;
|
||||||
import nl.sbdeveloper.showcontrol.utils.MainUtil;
|
|
||||||
import nl.sbdeveloper.showcontrol.utils.TimeUtil;
|
import nl.sbdeveloper.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;
|
||||||
|
|
||||||
@CommandAlias("mctpshow|show")
|
@CommandAlias("showcontrol|sc")
|
||||||
@CommandPermission("mctp.show")
|
@CommandPermission("mctp.show")
|
||||||
public class ShowCMD extends BaseCommand {
|
public class ShowCMD extends BaseCommand {
|
||||||
/*
|
|
||||||
/mctpshow create <Naam>
|
|
||||||
/mctpshow delete <Naam>
|
|
||||||
/mctpshow add <Naam> <Tijd> <Type> <Data ...>
|
|
||||||
/mctpshow start <Naam>
|
|
||||||
/mctpshow cancel <Naam>
|
|
||||||
/mctpshow gui <Naam>
|
|
||||||
*/
|
|
||||||
|
|
||||||
@Subcommand("create")
|
@Subcommand("create")
|
||||||
@Description("")
|
@Description("")
|
||||||
public void onCreate(CommandSender sender, @Single String name) {
|
public void onCreate(CommandSender sender, @Single String name) {
|
||||||
if (Shows.exists(name)) {
|
if (Shows.exists(name)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Die show bestaat al.");
|
sender.sendMessage(ChatColor.RED + "That show already exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Shows.create(name);
|
Shows.create(name);
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is aangemaakt!");
|
sender.sendMessage(ChatColor.GREEN + "The show " + ChatColor.WHITE + name + ChatColor.GREEN + " has been created!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subcommand("delete")
|
@Subcommand("delete")
|
||||||
|
@ -41,13 +34,13 @@ public class ShowCMD extends BaseCommand {
|
||||||
@CommandCompletion("@showname")
|
@CommandCompletion("@showname")
|
||||||
public void onDelete(CommandSender sender, @Single String name) {
|
public void onDelete(CommandSender sender, @Single String name) {
|
||||||
if (!Shows.exists(name)) {
|
if (!Shows.exists(name)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
sender.sendMessage(ChatColor.RED + "That show doesn't exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Shows.delete(name);
|
Shows.delete(name);
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is verwijderd!");
|
sender.sendMessage(ChatColor.GREEN + "The show " + ChatColor.WHITE + name + ChatColor.GREEN + " has been removed!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subcommand("add")
|
@Subcommand("add")
|
||||||
|
@ -55,7 +48,7 @@ public class ShowCMD extends BaseCommand {
|
||||||
@CommandCompletion("@showname @empty @showtype")
|
@CommandCompletion("@showname @empty @showtype")
|
||||||
public void onAdd(CommandSender sender, String name, String time, String args) {
|
public void onAdd(CommandSender sender, String name, String time, String args) {
|
||||||
if (!Shows.exists(name)) {
|
if (!Shows.exists(name)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
sender.sendMessage(ChatColor.RED + "That show doesn't exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,18 +56,27 @@ public class ShowCMD extends BaseCommand {
|
||||||
try {
|
try {
|
||||||
timeMilli = TimeUtil.toMilis(time);
|
timeMilli = TimeUtil.toMilis(time);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sender.sendMessage(ChatColor.RED + "Geef een correcte tijd mee.");
|
sender.sendMessage(ChatColor.RED + "Provide a valid time, for example 5s (5 seconds) or 10m (10 minutes).");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TriggerTask data = MainUtil.parseData(args);
|
Trigger data;
|
||||||
if (data == null) {
|
try {
|
||||||
sender.sendMessage(ChatColor.RED + "Je hebt niet genoeg informatie meegeven voor de trigger.");
|
data = ShowAPI.getTrigger(args);
|
||||||
|
} catch (ReflectiveOperationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
sender.sendMessage(ChatColor.RED + "Something went wrong! Please ask a server admin.");
|
||||||
|
return;
|
||||||
|
} catch (InvalidTriggerException e) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "The provided trigger does not exists.");
|
||||||
|
return;
|
||||||
|
} catch (TooFewArgumentsException e) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "You did not provide enough information for the chosen trigger.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Shows.addPoint(name, timeMilli, data);
|
Shows.addPoint(name, timeMilli, data);
|
||||||
sender.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " bevat nu een extra punt!");
|
sender.sendMessage(ChatColor.GREEN + "The show " + ChatColor.WHITE + name + ChatColor.GREEN + " now contains an extra point!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subcommand("start")
|
@Subcommand("start")
|
||||||
|
@ -82,13 +84,13 @@ public class ShowCMD extends BaseCommand {
|
||||||
@CommandCompletion("@showname")
|
@CommandCompletion("@showname")
|
||||||
public void onStart(CommandSender sender, @Single String name) {
|
public void onStart(CommandSender sender, @Single String name) {
|
||||||
if (!Shows.exists(name)) {
|
if (!Shows.exists(name)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
sender.sendMessage(ChatColor.RED + "That show doesn't exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Shows.startShow(name);
|
Shows.startShow(name);
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is gestart!");
|
sender.sendMessage(ChatColor.GREEN + "The show " + ChatColor.WHITE + name + ChatColor.GREEN + " has been started!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subcommand("cancel")
|
@Subcommand("cancel")
|
||||||
|
@ -96,13 +98,13 @@ public class ShowCMD extends BaseCommand {
|
||||||
@CommandCompletion("@showname")
|
@CommandCompletion("@showname")
|
||||||
public void onCancel(CommandSender sender, @Single String name) {
|
public void onCancel(CommandSender sender, @Single String name) {
|
||||||
if (!Shows.exists(name)) {
|
if (!Shows.exists(name)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
sender.sendMessage(ChatColor.RED + "That show doesn't exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Shows.cancelShow(name);
|
Shows.cancelShow(name);
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is gestopt!");
|
sender.sendMessage(ChatColor.GREEN + "The show " + ChatColor.WHITE + name + ChatColor.GREEN + " has been stopped!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subcommand("gui")
|
@Subcommand("gui")
|
||||||
|
@ -110,7 +112,7 @@ public class ShowCMD extends BaseCommand {
|
||||||
@CommandCompletion("@showname")
|
@CommandCompletion("@showname")
|
||||||
public void onGUI(Player sender, @Single String name) {
|
public void onGUI(Player sender, @Single String name) {
|
||||||
if (!Shows.exists(name)) {
|
if (!Shows.exists(name)) {
|
||||||
sender.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
sender.sendMessage(ChatColor.RED + "That show doesn't exists.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +1,17 @@
|
||||||
package nl.sbdeveloper.showcontrol.data;
|
package nl.sbdeveloper.showcontrol.data;
|
||||||
|
|
||||||
import nl.sbdeveloper.showcontrol.ShowControlPlugin;
|
import nl.sbdeveloper.showcontrol.ShowControlPlugin;
|
||||||
import nl.sbdeveloper.showcontrol.api.ShowCue;
|
import nl.sbdeveloper.showcontrol.api.InvalidTriggerException;
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerTask;
|
import nl.sbdeveloper.showcontrol.api.ShowAPI;
|
||||||
import nl.sbdeveloper.showcontrol.utils.MainUtil;
|
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 nl.sbdeveloper.showcontrol.utils.YamlFile;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class DataSaving {
|
public class DataStorage {
|
||||||
private static final Map<String, YamlFile> files = new HashMap<>();
|
private static final Map<String, YamlFile> files = new HashMap<>();
|
||||||
|
|
||||||
public static Map<String, YamlFile> getFiles() {
|
public static Map<String, YamlFile> getFiles() {
|
||||||
|
@ -23,24 +25,30 @@ public class DataSaving {
|
||||||
YamlFile showConfig = new YamlFile("data/" + showID);
|
YamlFile showConfig = new YamlFile("data/" + showID);
|
||||||
files.put(showID, showConfig);
|
files.put(showID, showConfig);
|
||||||
|
|
||||||
List<ShowCue> cues = new ArrayList<>();
|
List<ShowCuePoint> cues = new ArrayList<>();
|
||||||
for (String id : showConfig.getFile().getKeys(false)) {
|
for (String id : showConfig.getFile().getKeys(false)) {
|
||||||
UUID cueID = UUID.fromString(id);
|
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");
|
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);
|
Shows.getShowsMap().put(showID, cues);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void save() {
|
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());
|
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() + ".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.getFile().set(cue.getCueID().toString() + ".Data", cue.getTask().getDataString());
|
||||||
}
|
}
|
||||||
file.saveFile();
|
file.saveFile();
|
|
@ -1,8 +1,9 @@
|
||||||
package nl.sbdeveloper.showcontrol.data;
|
package nl.sbdeveloper.showcontrol.data;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
import nl.sbdeveloper.showcontrol.ShowControlPlugin;
|
import nl.sbdeveloper.showcontrol.ShowControlPlugin;
|
||||||
import nl.sbdeveloper.showcontrol.api.ShowCue;
|
import nl.sbdeveloper.showcontrol.api.ShowCuePoint;
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerTask;
|
import nl.sbdeveloper.showcontrol.api.triggers.Trigger;
|
||||||
import nl.sbdeveloper.showcontrol.utils.YamlFile;
|
import nl.sbdeveloper.showcontrol.utils.YamlFile;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
@ -15,13 +16,13 @@ import java.util.concurrent.ScheduledExecutorService;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class Shows {
|
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<>();
|
private static final HashMap<String, ScheduledExecutorService> showTimers = new HashMap<>();
|
||||||
|
|
||||||
public static void create(String name) {
|
public static void create(String name) {
|
||||||
showsMap.put(name, new ArrayList<>());
|
showsMap.put(name, new ArrayList<>());
|
||||||
DataSaving.save();
|
DataStorage.save();
|
||||||
// Bukkit.getScheduler().runTaskAsynchronously(ShowAPIPlugin.getInstance(), DataSaving::save);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void delete(String name) {
|
public static void delete(String name) {
|
||||||
|
@ -35,25 +36,24 @@ public class Shows {
|
||||||
return showsMap.containsKey(name);
|
return showsMap.containsKey(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<ShowCue> getPoints(String name) {
|
public static List<ShowCuePoint> getPoints(String name) {
|
||||||
if (!exists(name)) return new ArrayList<>();
|
if (!exists(name)) return new ArrayList<>();
|
||||||
return showsMap.get(name);
|
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;
|
if (!exists(name)) return;
|
||||||
getPoints(name).add(new ShowCue(time, data));
|
getPoints(name).add(new ShowCuePoint(time, data));
|
||||||
DataSaving.save();
|
DataStorage.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;
|
if (!exists(name)) return;
|
||||||
|
|
||||||
point.getTask().remove();
|
point.getTask().remove();
|
||||||
showsMap.get(name).remove(point);
|
showsMap.get(name).remove(point);
|
||||||
|
|
||||||
YamlFile data = DataSaving.getFiles().get(name);
|
YamlFile data = DataStorage.getFiles().get(name);
|
||||||
|
|
||||||
data.getFile().set(point.getCueID().toString(), null);
|
data.getFile().set(point.getCueID().toString(), null);
|
||||||
data.saveFile();
|
data.saveFile();
|
||||||
|
@ -62,9 +62,7 @@ public class Shows {
|
||||||
public static void startShow(String name) {
|
public static void startShow(String name) {
|
||||||
if (!exists(name)) return;
|
if (!exists(name)) return;
|
||||||
ScheduledExecutorService showTimer = Executors.newSingleThreadScheduledExecutor();
|
ScheduledExecutorService showTimer = Executors.newSingleThreadScheduledExecutor();
|
||||||
Bukkit.getLogger().info("Scheduled show " + name);
|
for (ShowCuePoint point : getPoints(name)) {
|
||||||
for (ShowCue point : getPoints(name)) {
|
|
||||||
Bukkit.getLogger().info("Point " + point.getTask().getDataString() + " on " + point.getTime());
|
|
||||||
showTimer.schedule(() -> Bukkit.getScheduler().runTask(ShowControlPlugin.getInstance(), () -> point.getTask().trigger()), point.getTime(), TimeUnit.MILLISECONDS);
|
showTimer.schedule(() -> Bukkit.getScheduler().runTask(ShowControlPlugin.getInstance(), () -> point.getTask().trigger()), point.getTime(), TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
showTimers.put(name, showTimer);
|
showTimers.put(name, showTimer);
|
||||||
|
@ -76,8 +74,4 @@ public class Shows {
|
||||||
ScheduledExecutorService showTimer = showTimers.get(name);
|
ScheduledExecutorService showTimer = showTimers.get(name);
|
||||||
showTimer.shutdownNow();
|
showTimer.shutdownNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HashMap<String, List<ShowCue>> getShowsMap() {
|
|
||||||
return showsMap;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import fr.minuskube.inv.ClickableItem;
|
||||||
import fr.minuskube.inv.content.InventoryContents;
|
import fr.minuskube.inv.content.InventoryContents;
|
||||||
import fr.minuskube.inv.content.Pagination;
|
import fr.minuskube.inv.content.Pagination;
|
||||||
import fr.minuskube.inv.content.SlotIterator;
|
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.data.Shows;
|
||||||
import nl.sbdeveloper.showcontrol.utils.Inventory;
|
import nl.sbdeveloper.showcontrol.utils.Inventory;
|
||||||
import nl.sbdeveloper.showcontrol.utils.ItemBuilder;
|
import nl.sbdeveloper.showcontrol.utils.ItemBuilder;
|
||||||
|
@ -33,7 +33,7 @@ public class ShowCueGUI extends Inventory {
|
||||||
Pagination pagination = contents.pagination();
|
Pagination pagination = contents.pagination();
|
||||||
|
|
||||||
List<ClickableItem> items = new ArrayList<>();
|
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 -> {
|
.forEach(cue -> items.add(ClickableItem.of(MainUtil.pointToItem(cue), e -> {
|
||||||
Shows.removePoint(showName, cue);
|
Shows.removePoint(showName, cue);
|
||||||
open(player, pagination.getPage());
|
open(player, pagination.getPage());
|
||||||
|
|
|
@ -1,17 +1,12 @@
|
||||||
package nl.sbdeveloper.showcontrol.utils;
|
package nl.sbdeveloper.showcontrol.utils;
|
||||||
|
|
||||||
import nl.sbdeveloper.showcontrol.api.ShowCue;
|
import nl.sbdeveloper.showcontrol.api.ShowCuePoint;
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerTask;
|
|
||||||
import nl.sbdeveloper.showcontrol.api.TriggerType;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.util.ChatPaginator;
|
import org.bukkit.util.ChatPaginator;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MainUtil {
|
public class MainUtil {
|
||||||
|
@ -19,12 +14,12 @@ public class MainUtil {
|
||||||
return ChatColor.translateAlternateColorCodes('&', in);
|
return ChatColor.translateAlternateColorCodes('&', in);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ItemStack pointToItem(ShowCue point) {
|
public static ItemStack pointToItem(ShowCuePoint point) {
|
||||||
ItemBuilder builder = new ItemBuilder(Material.NOTE_BLOCK);
|
ItemBuilder builder = new ItemBuilder(Material.NOTE_BLOCK);
|
||||||
builder.setName(ChatColor.ITALIC + "TimeCode: " + TimeUtil.makeReadable(point.getTime()));
|
builder.setName(ChatColor.ITALIC + "TimeCode: " + TimeUtil.makeReadable(point.getTime()));
|
||||||
|
|
||||||
List<String> lores = new ArrayList<>();
|
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:");
|
lores.add(ChatColor.GREEN + "Data:");
|
||||||
for (String str : ChatPaginator.paginate(point.getTask().getDataString(), 20).getLines()) {
|
for (String str : ChatPaginator.paginate(point.getTask().getDataString(), 20).getLines()) {
|
||||||
lores.add(ChatColor.AQUA + ChatColor.stripColor(str));
|
lores.add(ChatColor.AQUA + ChatColor.stripColor(str));
|
||||||
|
@ -36,26 +31,6 @@ public class MainUtil {
|
||||||
return builder.toItemStack();
|
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) {
|
public static String capitalize(String str) {
|
||||||
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,5 +3,5 @@ version: ${project.version}
|
||||||
main: nl.sbdeveloper.showcontrol.ShowControlPlugin
|
main: nl.sbdeveloper.showcontrol.ShowControlPlugin
|
||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
authors: [SBDeveloper]
|
authors: [SBDeveloper]
|
||||||
description: Make perfect shows with this API!
|
description: Create shows easily using this plugin!
|
||||||
website: https://sbdevelopment.tech
|
website: https://sbdevelopment.tech
|
Loading…
Add table
Reference in a new issue