diff --git a/pom.xml b/pom.xml
index 4e59572..cc749a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
nl.SBDeveloper
ShowAPI
- 1.1
+ 1.2
jar
ShowAPI
https://sbdplugins.nl
diff --git a/src/main/java/nl/sbdeveloper/showapi/ShowAPI.java b/src/main/java/nl/sbdeveloper/showapi/ShowAPI.java
index 471dcdf..77a9d1f 100644
--- a/src/main/java/nl/sbdeveloper/showapi/ShowAPI.java
+++ b/src/main/java/nl/sbdeveloper/showapi/ShowAPI.java
@@ -139,6 +139,12 @@ public class ShowAPI implements API, Listener {
return true;
}
+ public static void remove(String name) {
+ if (!spots.containsKey(name)) return;
+
+ spots.get(name).cancel();
+ }
+
private static class SpotRunnable extends BukkitRunnable {
private final EnderCrystal crystal;
private final String name;
@@ -166,6 +172,7 @@ public class ShowAPI implements API, Listener {
}
public synchronized void cancel() throws IllegalStateException {
+ crystal.remove();
spots.remove(name);
super.cancel();
}
@@ -219,6 +226,13 @@ public class ShowAPI implements API, Listener {
return true;
}
+ public static void remove(String name) {
+ if (!lasers.containsKey(name)) return;
+
+ lasers.get(name).cancel();
+ lasers.remove(name);
+ }
+
private static class LaserRunnable extends BukkitRunnable {
private final Laser laser;
private final String name;
diff --git a/src/main/java/nl/sbdeveloper/showapi/ShowAPIPlugin.java b/src/main/java/nl/sbdeveloper/showapi/ShowAPIPlugin.java
index f33ddee..69fd929 100644
--- a/src/main/java/nl/sbdeveloper/showapi/ShowAPIPlugin.java
+++ b/src/main/java/nl/sbdeveloper/showapi/ShowAPIPlugin.java
@@ -30,6 +30,7 @@ public final class ShowAPIPlugin extends JavaPlugin {
APIManager.initAPI(ShowAPI.class);
spiGUI = new SpiGUI(this);
+ spiGUI.setEnableAutomaticPagination(true);
getCommand("mctpshow").setExecutor(new ShowCMD());
}
diff --git a/src/main/java/nl/sbdeveloper/showapi/api/ShowCue.java b/src/main/java/nl/sbdeveloper/showapi/api/ShowCue.java
index 1655c59..49bfbb4 100644
--- a/src/main/java/nl/sbdeveloper/showapi/api/ShowCue.java
+++ b/src/main/java/nl/sbdeveloper/showapi/api/ShowCue.java
@@ -14,34 +14,66 @@ public class ShowCue {
private final TriggerData data;
private int taskID;
+ /**
+ * Create a new cue point
+ *
+ * @param timeSeconds The starttime in seconds
+ * @param data The data
+ */
public ShowCue(int timeSeconds, TriggerData data) {
- this.cueID = UUID.randomUUID();
- this.timeSeconds = timeSeconds;
- this.data = data;
+ this(UUID.randomUUID(), timeSeconds, data);
}
+ /**
+ * Load an exisiting cue point
+ *
+ * @param uuid The UUID
+ * @param timeSeconds The starttime in seconds
+ * @param data The data
+ */
public ShowCue(UUID uuid, int timeSeconds, TriggerData data) {
this.cueID = uuid;
this.timeSeconds = timeSeconds;
this.data = data;
}
+ /**
+ * Get the ID of the cue point
+ *
+ * @return The UUID
+ */
public UUID getCueID() {
return cueID;
}
+ /**
+ * Get the time in seconds
+ *
+ * @return The time in seconds
+ */
public int getTimeSeconds() {
return timeSeconds;
}
+ /**
+ * Get the data of this cue
+ *
+ * @return The data
+ */
public TriggerData getData() {
return data;
}
+ /**
+ * Start this cue point
+ */
public void runAtTime() {
this.taskID = Bukkit.getScheduler().runTaskLater(ShowAPIPlugin.getInstance(), data::trigger, 20 * timeSeconds).getTaskId();
}
+ /**
+ * Cancel this cue point
+ */
public void cancel() {
Bukkit.getScheduler().cancelTask(taskID);
}
diff --git a/src/main/java/nl/sbdeveloper/showapi/api/TriggerData.java b/src/main/java/nl/sbdeveloper/showapi/api/TriggerData.java
index 2b71150..be8a712 100644
--- a/src/main/java/nl/sbdeveloper/showapi/api/TriggerData.java
+++ b/src/main/java/nl/sbdeveloper/showapi/api/TriggerData.java
@@ -17,6 +17,11 @@ public abstract class TriggerData {
*/
public void trigger() {}
+ /**
+ * This method gets fired when the cue gets removed
+ */
+ public void remove() {}
+
/**
* Get the trigger type
*
@@ -26,6 +31,11 @@ public abstract class TriggerData {
return type;
}
+ /**
+ * Get the datastring from this cue
+ *
+ * @return The datastring
+ */
public String getDataString() {
StringBuilder builder = new StringBuilder();
for (String s : dataString) {
diff --git a/src/main/java/nl/sbdeveloper/showapi/api/TriggerType.java b/src/main/java/nl/sbdeveloper/showapi/api/TriggerType.java
index ceda5e6..b8b8252 100644
--- a/src/main/java/nl/sbdeveloper/showapi/api/TriggerType.java
+++ b/src/main/java/nl/sbdeveloper/showapi/api/TriggerType.java
@@ -1,5 +1,28 @@
package nl.sbdeveloper.showapi.api;
+import nl.sbdeveloper.showapi.api.triggers.*;
+
public enum TriggerType {
- COMMAND, FIREWORK, SPOT, LASER, ANIMA
+ COMMAND(CommandTrigger.class, 2),
+ FIREWORK(FireworkTrigger.class, 6),
+ SPOT(SpotTrigger.class, 6),
+ LASER(LaserTrigger.class, 6),
+ ANIMA(AnimaTrigger.class, 2),
+ PARTICLE(ParticleTrigger.class, 7);
+
+ private final Class extends TriggerData> trigger;
+ private final int minArgs;
+
+ TriggerType(Class extends TriggerData> trigger, int minArgs) {
+ this.trigger = trigger;
+ this.minArgs = minArgs;
+ }
+
+ public Class extends TriggerData> getTrigger() {
+ return trigger;
+ }
+
+ public int getMinArgs() {
+ return minArgs;
+ }
}
diff --git a/src/main/java/nl/sbdeveloper/showapi/api/triggers/LaserTrigger.java b/src/main/java/nl/sbdeveloper/showapi/api/triggers/LaserTrigger.java
index ba314ba..b00916d 100644
--- a/src/main/java/nl/sbdeveloper/showapi/api/triggers/LaserTrigger.java
+++ b/src/main/java/nl/sbdeveloper/showapi/api/triggers/LaserTrigger.java
@@ -8,13 +8,15 @@ import org.bukkit.Location;
import org.bukkit.World;
public class LaserTrigger extends TriggerData {
- private String name;
+ private final String name;
private Location newLocation;
public LaserTrigger(String[] data) {
super(TriggerType.LASER, data);
- World w = Bukkit.getWorld(data[0]);
+ this.name = data[0];
+
+ World w = Bukkit.getWorld(data[1]);
if (w == null) {
Bukkit.getLogger().info("De wereld is null!");
return;
@@ -24,9 +26,9 @@ public class LaserTrigger extends TriggerData {
int y;
int z;
try {
- x = Integer.parseInt(data[1]);
- y = Integer.parseInt(data[2]);
- z = Integer.parseInt(data[3]);
+ x = Integer.parseInt(data[2]);
+ y = Integer.parseInt(data[3]);
+ z = Integer.parseInt(data[4]);
} catch (NumberFormatException ex) {
Bukkit.getLogger().info("De positie is null!");
return;
@@ -34,8 +36,6 @@ public class LaserTrigger extends TriggerData {
this.newLocation = new Location(w, x, y, z);
- this.name = data[4];
-
if (!ShowAPI.Lasers.exists(name)) {
ShowAPI.Lasers.start(name, newLocation);
}
@@ -45,4 +45,9 @@ public class LaserTrigger extends TriggerData {
public void trigger() {
ShowAPI.Lasers.move(name, newLocation);
}
+
+ @Override
+ public void remove() {
+ ShowAPI.Lasers.remove(name);
+ }
}
diff --git a/src/main/java/nl/sbdeveloper/showapi/api/triggers/ParticleTrigger.java b/src/main/java/nl/sbdeveloper/showapi/api/triggers/ParticleTrigger.java
new file mode 100644
index 0000000..4a57307
--- /dev/null
+++ b/src/main/java/nl/sbdeveloper/showapi/api/triggers/ParticleTrigger.java
@@ -0,0 +1,56 @@
+package nl.sbdeveloper.showapi.api.triggers;
+
+import nl.sbdeveloper.showapi.api.TriggerData;
+import nl.sbdeveloper.showapi.api.TriggerType;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Particle;
+import org.bukkit.World;
+
+public class ParticleTrigger extends TriggerData {
+ 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);
+ }
+}
diff --git a/src/main/java/nl/sbdeveloper/showapi/api/triggers/SpotTrigger.java b/src/main/java/nl/sbdeveloper/showapi/api/triggers/SpotTrigger.java
index ee2eac7..8e87f0c 100644
--- a/src/main/java/nl/sbdeveloper/showapi/api/triggers/SpotTrigger.java
+++ b/src/main/java/nl/sbdeveloper/showapi/api/triggers/SpotTrigger.java
@@ -8,13 +8,15 @@ import org.bukkit.Location;
import org.bukkit.World;
public class SpotTrigger extends TriggerData {
- private String name;
+ private final String name;
private Location newLocation;
public SpotTrigger(String[] data) {
super(TriggerType.SPOT, data);
- World w = Bukkit.getWorld(data[0]);
+ this.name = data[0];
+
+ World w = Bukkit.getWorld(data[1]);
if (w == null) {
Bukkit.getLogger().info("De wereld is null!");
return;
@@ -24,9 +26,9 @@ public class SpotTrigger extends TriggerData {
int y;
int z;
try {
- x = Integer.parseInt(data[1]);
- y = Integer.parseInt(data[2]);
- z = Integer.parseInt(data[3]);
+ x = Integer.parseInt(data[2]);
+ y = Integer.parseInt(data[3]);
+ z = Integer.parseInt(data[4]);
} catch (NumberFormatException ex) {
Bukkit.getLogger().info("De positie is null!");
return;
@@ -34,10 +36,8 @@ public class SpotTrigger extends TriggerData {
this.newLocation = new Location(w, x, y, z);
- this.name = data[4];
-
- if (!ShowAPI.Lasers.exists(name)) {
- ShowAPI.Lasers.start(name, newLocation);
+ if (!ShowAPI.Spots.exists(name)) {
+ ShowAPI.Spots.start(name, newLocation);
}
}
@@ -45,4 +45,9 @@ public class SpotTrigger extends TriggerData {
public void trigger() {
ShowAPI.Spots.move(name, newLocation);
}
+
+ @Override
+ public void remove() {
+ ShowAPI.Spots.remove(name);
+ }
}
diff --git a/src/main/java/nl/sbdeveloper/showapi/data/Shows.java b/src/main/java/nl/sbdeveloper/showapi/data/Shows.java
index af064a1..ab9efaa 100644
--- a/src/main/java/nl/sbdeveloper/showapi/data/Shows.java
+++ b/src/main/java/nl/sbdeveloper/showapi/data/Shows.java
@@ -33,21 +33,22 @@ public class Shows {
return showsMap.get(name);
}
- public static void removePoint(String name, ShowCue point) {
- if (!exists(name)) return;
-
- showsMap.get(name).remove(point);
-
- ShowAPIPlugin.getData().getFile().set("Shows." + name + "." + point.getCueID(), null);
- ShowAPIPlugin.getData().saveFile();
- }
-
public static void addPoint(String name, int sec, TriggerData data) {
if (!exists(name)) return;
getPoints(name).add(new ShowCue(sec, data));
Bukkit.getScheduler().runTaskAsynchronously(ShowAPIPlugin.getInstance(), DataSaving::save);
}
+ public static void removePoint(String name, ShowCue point) {
+ if (!exists(name)) return;
+
+ point.getData().remove();
+ showsMap.get(name).remove(point);
+
+ ShowAPIPlugin.getData().getFile().set("Shows." + name + "." + point.getCueID(), null);
+ ShowAPIPlugin.getData().saveFile();
+ }
+
public static void startShow(String name) {
if (!exists(name)) return;
getPoints(name).forEach(ShowCue::runAtTime);
diff --git a/src/main/java/nl/sbdeveloper/showapi/gui/ShowCueGUI.java b/src/main/java/nl/sbdeveloper/showapi/gui/ShowCueGUI.java
index ac38fb2..1faa42f 100644
--- a/src/main/java/nl/sbdeveloper/showapi/gui/ShowCueGUI.java
+++ b/src/main/java/nl/sbdeveloper/showapi/gui/ShowCueGUI.java
@@ -12,16 +12,15 @@ import org.bukkit.event.inventory.InventoryClickEvent;
public class ShowCueGUI {
public static void openGUI(String name, Player p) {
- SGMenu menu = ShowAPIPlugin.getSpiGUI().create(ChatColor.DARK_AQUA + "Show Cue Manager:", MainUtil.pointsToRow(Shows.getPoints(name).size()));
+ SGMenu menu = ShowAPIPlugin.getSpiGUI().create(ChatColor.DARK_AQUA + "Show Cue Manager:", 5);
menu.setAutomaticPaginationEnabled(true);
for (ShowCue cue : Shows.getPoints(name)) {
SGButton button = new SGButton(MainUtil.pointToItem(cue))
- .withListener((InventoryClickEvent e) -> {
- Shows.removePoint(name, cue);
-
- openGUI(name, p); //Refresh
- });
+ .withListener((InventoryClickEvent e) -> {
+ Shows.removePoint(name, cue); //Remove the point
+ openGUI(name, p); //Refresh
+ });
menu.addButton(button);
}
diff --git a/src/main/java/nl/sbdeveloper/showapi/utils/Laser.java b/src/main/java/nl/sbdeveloper/showapi/utils/Laser.java
index 021eda7..46a7b23 100644
--- a/src/main/java/nl/sbdeveloper/showapi/utils/Laser.java
+++ b/src/main/java/nl/sbdeveloper/showapi/utils/Laser.java
@@ -158,6 +158,7 @@ public class Laser {
static int generateEID() {
return lastIssuedEID++;
}
+ private static String nmsVersion = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
private static int version = Integer.parseInt(Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3].substring(1).split("_")[1]);
private static String npack = "net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3] + ".";
private static String cpack = Bukkit.getServer().getClass().getPackage().getName() + ".";
@@ -205,8 +206,13 @@ public class Laser {
watcherName3 = "bA";
squidID = 74;
guardianID = 31;
- }else if (version >= 16) {
- watcherName1 = "T";
+ }else if (version == 16) {
+ if (nmsVersion.equals("v1_16_R3")) {
+ watcherName1 = "S";
+ } else {
+ watcherName1 = "T";
+ }
+
watcherName2 = "b";
watcherName3 = "d";
squidID = 74;
diff --git a/src/main/java/nl/sbdeveloper/showapi/utils/MainUtil.java b/src/main/java/nl/sbdeveloper/showapi/utils/MainUtil.java
index 5d7cb1e..87c8c82 100644
--- a/src/main/java/nl/sbdeveloper/showapi/utils/MainUtil.java
+++ b/src/main/java/nl/sbdeveloper/showapi/utils/MainUtil.java
@@ -1,27 +1,22 @@
package nl.sbdeveloper.showapi.utils;
import com.samjakob.spigui.item.ItemBuilder;
-import nl.sbdeveloper.showapi.ShowAPI;
import nl.sbdeveloper.showapi.api.ShowCue;
import nl.sbdeveloper.showapi.api.TriggerData;
import nl.sbdeveloper.showapi.api.TriggerType;
-import nl.sbdeveloper.showapi.api.triggers.*;
import org.apache.commons.lang.StringUtils;
-import org.bukkit.*;
-import org.bukkit.craftbukkit.libs.org.apache.commons.lang3.ArrayUtils;
+import org.bukkit.ChatColor;
+import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.ChatPaginator;
-import java.lang.reflect.Array;
+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 {
- public static int pointsToRow(int points) {
- return (int) Math.ceil((double) points / 9);
- }
-
public static ItemStack pointToItem(ShowCue point) {
ItemBuilder builder = new ItemBuilder(Material.NOTE_BLOCK);
builder.name(ChatColor.ITALIC + "TimeCode: " + TimeUtil.showTime(point.getTimeSeconds()));
@@ -50,19 +45,12 @@ public class MainUtil {
return null;
}
- if (type == TriggerType.COMMAND && dataSplitter.length >= 2) {
- return new CommandTrigger(dataSplitterNew);
- } else if (type == TriggerType.FIREWORK && dataSplitter.length >= 6) {
- return new FireworkTrigger(dataSplitterNew);
- } else if (type == TriggerType.LASER && dataSplitter.length == 6) {
- return new LaserTrigger(dataSplitterNew);
- } else if (type == TriggerType.SPOT && dataSplitter.length == 6) {
- return new SpotTrigger(dataSplitterNew);
- } else if (type == TriggerType.ANIMA && dataSplitter.length == 2) {
- return new AnimaTrigger(dataSplitterNew);
+ try {
+ Constructor extends TriggerData> ctor = type.getTrigger().getConstructor(String[].class);
+ if (dataSplitter.length < type.getMinArgs()) return null;
+ return ctor.newInstance(new Object[] { dataSplitterNew });
+ } catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
+ return null;
}
-
- Bukkit.getLogger().info("Aan het einde. Incorrecte type of te weinig data!");
- return null;
}
}