Started with show (GUI) system
This commit is contained in:
parent
83aa45ac7f
commit
de7cc235b4
18 changed files with 721 additions and 8 deletions
25
pom.xml
25
pom.xml
|
@ -49,6 +49,16 @@
|
||||||
</goals>
|
</goals>
|
||||||
<configuration>
|
<configuration>
|
||||||
<createDependencyReducedPom>false</createDependencyReducedPom>
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.inventivetalent.apihelper</pattern>
|
||||||
|
<shadedPattern>nl.sbdeveloper.showapi.helpers.apihelper</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.samjakob.spigui</pattern>
|
||||||
|
<shadedPattern>nl.sbdeveloper.showapi.helpers.guihelper</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
@ -102,25 +112,30 @@
|
||||||
<id>inventive-repo</id>
|
<id>inventive-repo</id>
|
||||||
<url>https://repo.inventivetalent.org/content/groups/public/</url>
|
<url>https://repo.inventivetalent.org/content/groups/public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>jitpack.io</id>
|
||||||
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bukkit</groupId>
|
<groupId>org.bukkit</groupId>
|
||||||
<artifactId>craftbukkit</artifactId>
|
<artifactId>craftbukkit</artifactId>
|
||||||
<version>1.15.2-R0.1-SNAPSHOT</version>
|
<version>1.16.4-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.15.2-R0.1-SNAPSHOT</version>
|
<version>1.16.4-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.inventivetalent</groupId>
|
<groupId>org.inventivetalent</groupId>
|
||||||
<artifactId>apimanager</artifactId>
|
<artifactId>apimanager</artifactId>
|
||||||
<version>1.0.3-SNAPSHOT</version>
|
<version>1.0.3-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jetbrains</groupId>
|
<groupId>org.jetbrains</groupId>
|
||||||
|
@ -128,5 +143,11 @@
|
||||||
<version>18.0.0</version>
|
<version>18.0.0</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.samjakob</groupId>
|
||||||
|
<artifactId>SpiGUI</artifactId>
|
||||||
|
<version>v1.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -7,7 +7,6 @@ import org.bukkit.FireworkEffect;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.EnderCrystal;
|
import org.bukkit.entity.EnderCrystal;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Firework;
|
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.inventory.meta.FireworkMeta;
|
import org.bukkit.inventory.meta.FireworkMeta;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
@ -33,7 +32,7 @@ public class ShowAPI implements API, Listener {
|
||||||
@Override
|
@Override
|
||||||
public void init(Plugin plugin) {
|
public void init(Plugin plugin) {
|
||||||
if (VersionUtil.getVersion() < 9 || VersionUtil.getVersion() > 16) {
|
if (VersionUtil.getVersion() < 9 || VersionUtil.getVersion() > 16) {
|
||||||
logger.severe("This API only works from 1.9 to 1.16.1.");
|
logger.severe("Deze API werkt alleen tussen 1.9.x en 1.16.x.");
|
||||||
disable(plugin);
|
disable(plugin);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -53,7 +52,7 @@ public class ShowAPI implements API, Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Firework {
|
public static class Firework {
|
||||||
private FireworkEffect.Builder effectBuilder;
|
private final FireworkEffect.Builder effectBuilder;
|
||||||
private int power;
|
private int power;
|
||||||
|
|
||||||
public Firework() {
|
public Firework() {
|
||||||
|
@ -102,7 +101,17 @@ public class ShowAPI implements API, Listener {
|
||||||
|
|
||||||
//SPOTS -> End Crystals
|
//SPOTS -> End Crystals
|
||||||
public static class Spots {
|
public static class Spots {
|
||||||
private static Map<String, SpotRunnable> spots = new HashMap<>();
|
private static final Map<String, SpotRunnable> spots = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a spot exists
|
||||||
|
*
|
||||||
|
* @param name The name of the spot
|
||||||
|
* @return true if it exists, false if not
|
||||||
|
*/
|
||||||
|
public static boolean exists(String name) {
|
||||||
|
return spots.containsKey(name);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spawn a new spot, and start it
|
* Spawn a new spot, and start it
|
||||||
|
@ -165,7 +174,17 @@ public class ShowAPI implements API, Listener {
|
||||||
|
|
||||||
//LASERS -> Guardian beams
|
//LASERS -> Guardian beams
|
||||||
public static class Lasers {
|
public static class Lasers {
|
||||||
private static Map<String, LaserRunnable> lasers = new HashMap<>();
|
private static final Map<String, LaserRunnable> lasers = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a laser exists
|
||||||
|
*
|
||||||
|
* @param name The name of the laser
|
||||||
|
* @return true if it exists, false if not
|
||||||
|
*/
|
||||||
|
public static boolean exists(String name) {
|
||||||
|
return lasers.containsKey(name);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spawn a new laser, and start it
|
* Spawn a new laser, and start it
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
package nl.sbdeveloper.showapi;
|
package nl.sbdeveloper.showapi;
|
||||||
|
|
||||||
|
import com.samjakob.spigui.SpiGUI;
|
||||||
|
import nl.sbdeveloper.showapi.commands.ShowCMD;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.inventivetalent.apihelper.APIManager;
|
import org.inventivetalent.apihelper.APIManager;
|
||||||
|
|
||||||
public final class ShowAPIPlugin extends JavaPlugin {
|
public final class ShowAPIPlugin extends JavaPlugin {
|
||||||
|
|
||||||
private static ShowAPIPlugin instance;
|
private static ShowAPIPlugin instance;
|
||||||
private ShowAPI showAPI = new ShowAPI();
|
private final ShowAPI showAPI = new ShowAPI();
|
||||||
|
private static SpiGUI spiGUI;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoad() {
|
public void onLoad() {
|
||||||
|
@ -16,7 +19,12 @@ public final class ShowAPIPlugin extends JavaPlugin {
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
APIManager.initAPI(ShowAPI.class);
|
APIManager.initAPI(ShowAPI.class);
|
||||||
|
|
||||||
|
spiGUI = new SpiGUI(this);
|
||||||
|
|
||||||
|
getCommand("mctpshow").setExecutor(new ShowCMD());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -28,4 +36,8 @@ public final class ShowAPIPlugin extends JavaPlugin {
|
||||||
public static ShowAPIPlugin getInstance() {
|
public static ShowAPIPlugin getInstance() {
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static SpiGUI getSpiGUI() {
|
||||||
|
return spiGUI;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
34
src/main/java/nl/sbdeveloper/showapi/api/ShowCue.java
Normal file
34
src/main/java/nl/sbdeveloper/showapi/api/ShowCue.java
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
package nl.sbdeveloper.showapi.api;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.ShowAPIPlugin;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cue point of a show
|
||||||
|
*/
|
||||||
|
public class ShowCue {
|
||||||
|
private final int timeSeconds;
|
||||||
|
private final TriggerData data;
|
||||||
|
private int taskID;
|
||||||
|
|
||||||
|
public ShowCue(int timeSeconds, TriggerData data) {
|
||||||
|
this.timeSeconds = timeSeconds;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTimeSeconds() {
|
||||||
|
return timeSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TriggerData getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void runAtTime() {
|
||||||
|
this.taskID = Bukkit.getScheduler().runTaskLater(ShowAPIPlugin.getInstance(), data::trigger, 20 * timeSeconds).getTaskId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cancel() {
|
||||||
|
Bukkit.getScheduler().cancelTask(taskID);
|
||||||
|
}
|
||||||
|
}
|
36
src/main/java/nl/sbdeveloper/showapi/api/TriggerData.java
Normal file
36
src/main/java/nl/sbdeveloper/showapi/api/TriggerData.java
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
package nl.sbdeveloper.showapi.api;
|
||||||
|
|
||||||
|
public abstract class TriggerData {
|
||||||
|
private final TriggerType type;
|
||||||
|
private final String[] dataString;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new trigger
|
||||||
|
*/
|
||||||
|
public TriggerData(TriggerType type, String[] dataString) {
|
||||||
|
this.type = type;
|
||||||
|
this.dataString = dataString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method gets fired when the cue gets triggered
|
||||||
|
*/
|
||||||
|
public void trigger() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the trigger type
|
||||||
|
*
|
||||||
|
* @return The trigger type
|
||||||
|
*/
|
||||||
|
public TriggerType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDataString() {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (String s : dataString) {
|
||||||
|
builder.append(s).append(" ");
|
||||||
|
}
|
||||||
|
return builder.toString().trim();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package nl.sbdeveloper.showapi.api;
|
||||||
|
|
||||||
|
public enum TriggerType {
|
||||||
|
COMMAND, FIREWORK, SPOT, LASER, ANIMA
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package nl.sbdeveloper.showapi.api.triggers;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerData;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerType;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
public class AnimaTrigger extends TriggerData {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package nl.sbdeveloper.showapi.api.triggers;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerData;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerType;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
public class CommandTrigger extends TriggerData {
|
||||||
|
private final String command;
|
||||||
|
|
||||||
|
public CommandTrigger(String[] data) {
|
||||||
|
super(TriggerType.COMMAND, data);
|
||||||
|
|
||||||
|
this.command = getDataString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
package nl.sbdeveloper.showapi.api.triggers;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.ShowAPI;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerData;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerType;
|
||||||
|
import nl.sbdeveloper.showapi.utils.Color;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.FireworkEffect;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
public class FireworkTrigger extends TriggerData {
|
||||||
|
private ShowAPI.Fireworks.Firework fw;
|
||||||
|
private Location spawnLoc;
|
||||||
|
|
||||||
|
public FireworkTrigger(String[] data) {
|
||||||
|
super(TriggerType.FIREWORK, 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);
|
||||||
|
|
||||||
|
ShowAPI.Fireworks.Firework firework = new ShowAPI.Fireworks.Firework();
|
||||||
|
for (int i = 4; i < data.length; i++) {
|
||||||
|
if (data[i].split(":").length != 2) continue;
|
||||||
|
|
||||||
|
String key = data[i].split(":")[0];
|
||||||
|
String value = data[i].split(":")[1];
|
||||||
|
if (key.equalsIgnoreCase("color")) {
|
||||||
|
firework = firework.addColor(Color.valueOf(value.toUpperCase()).getBukkitColor());
|
||||||
|
} else if (key.equalsIgnoreCase("shape")) {
|
||||||
|
firework = firework.setType(FireworkEffect.Type.valueOf(value.toUpperCase()));
|
||||||
|
} else if (key.equalsIgnoreCase("fade")) {
|
||||||
|
firework = firework.addFade(Color.valueOf(value.toUpperCase()).getBukkitColor());
|
||||||
|
} else if (key.equalsIgnoreCase("effect")) {
|
||||||
|
if (value.equalsIgnoreCase("trail")) {
|
||||||
|
firework = firework.addTrail();
|
||||||
|
} else if (value.equalsIgnoreCase("twinkle")) {
|
||||||
|
firework = firework.addFlicker();
|
||||||
|
}
|
||||||
|
} else if (key.equalsIgnoreCase("power")) {
|
||||||
|
int power;
|
||||||
|
try {
|
||||||
|
power = Integer.parseInt(value);
|
||||||
|
} catch (NumberFormatException ex) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
firework = firework.setPower(power);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.fw = firework;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
ShowAPI.Fireworks.spawn(fw, spawnLoc);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package nl.sbdeveloper.showapi.api.triggers;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.ShowAPI;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerData;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerType;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
public class LaserTrigger extends TriggerData {
|
||||||
|
private String name;
|
||||||
|
private Location newLocation;
|
||||||
|
|
||||||
|
public LaserTrigger(String[] data) {
|
||||||
|
super(TriggerType.LASER, 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 null!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.newLocation = new Location(w, x, y, z);
|
||||||
|
|
||||||
|
this.name = data[4];
|
||||||
|
|
||||||
|
if (!ShowAPI.Lasers.exists(name)) {
|
||||||
|
ShowAPI.Lasers.start(name, newLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
ShowAPI.Lasers.move(name, newLocation);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package nl.sbdeveloper.showapi.api.triggers;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.ShowAPI;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerData;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerType;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
|
||||||
|
public class SpotTrigger extends TriggerData {
|
||||||
|
private String name;
|
||||||
|
private Location newLocation;
|
||||||
|
|
||||||
|
public SpotTrigger(String[] data) {
|
||||||
|
super(TriggerType.SPOT, 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 null!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.newLocation = new Location(w, x, y, z);
|
||||||
|
|
||||||
|
this.name = data[4];
|
||||||
|
|
||||||
|
if (!ShowAPI.Lasers.exists(name)) {
|
||||||
|
ShowAPI.Lasers.start(name, newLocation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void trigger() {
|
||||||
|
ShowAPI.Spots.move(name, newLocation);
|
||||||
|
}
|
||||||
|
}
|
120
src/main/java/nl/sbdeveloper/showapi/commands/ShowCMD.java
Normal file
120
src/main/java/nl/sbdeveloper/showapi/commands/ShowCMD.java
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
package nl.sbdeveloper.showapi.commands;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerData;
|
||||||
|
import nl.sbdeveloper.showapi.data.Shows;
|
||||||
|
import nl.sbdeveloper.showapi.gui.ShowCueGUI;
|
||||||
|
import nl.sbdeveloper.showapi.utils.MainUtil;
|
||||||
|
import nl.sbdeveloper.showapi.utils.TimeUtil;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class ShowCMD implements CommandExecutor {
|
||||||
|
/*
|
||||||
|
/mctpshow create <Naam>
|
||||||
|
/mctpshow delete <Naam>
|
||||||
|
/mctpshow add <Naam> <Tijd> <Type> <Data ...>
|
||||||
|
/mctpshow start <Naam>
|
||||||
|
/mctpshow cancel <Naam>
|
||||||
|
/mctpshow gui <Naam>
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String label, @NotNull String[] args) {
|
||||||
|
if (label.equalsIgnoreCase("mctpshow")) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
sender.sendMessage(ChatColor.RED + "Je moet een speler zijn om dit te doen.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player p = (Player) sender;
|
||||||
|
if (!p.hasPermission("mctp.show")) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Je hebt hier geen permissie voor.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (args.length == 2 && args[0].equalsIgnoreCase("create")) {
|
||||||
|
String name = args[1];
|
||||||
|
if (Shows.exists(name)) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Die show bestaat al.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Shows.create(name);
|
||||||
|
|
||||||
|
p.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is aangemaakt!");
|
||||||
|
return true;
|
||||||
|
} else if (args.length == 2 && args[0].equalsIgnoreCase("delete")) {
|
||||||
|
String name = args[1];
|
||||||
|
if (!Shows.exists(name)) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Shows.delete(name);
|
||||||
|
|
||||||
|
p.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is verwijderd!");
|
||||||
|
return true;
|
||||||
|
} else if (args.length >= 5 && args[0].equalsIgnoreCase("add")) {
|
||||||
|
String name = args[1];
|
||||||
|
if (!Shows.exists(name)) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int seconds = TimeUtil.parseSeconds(args[2]);
|
||||||
|
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (int i = 3; i < args.length; i++) {
|
||||||
|
builder.append(args[i]).append(" ");
|
||||||
|
}
|
||||||
|
TriggerData data = MainUtil.parseData(builder.toString().trim());
|
||||||
|
|
||||||
|
if (data == null) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Je hebt niet genoeg informatie meegeven voor de trigger.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Shows.addPoint(name, seconds, data);
|
||||||
|
|
||||||
|
p.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " bevat nu een extra punt!");
|
||||||
|
return true;
|
||||||
|
} else if (args.length == 2 && args[0].equalsIgnoreCase("start")) {
|
||||||
|
String name = args[1];
|
||||||
|
if (!Shows.exists(name)) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Shows.startShow(name);
|
||||||
|
|
||||||
|
p.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is gestart!");
|
||||||
|
return true;
|
||||||
|
} else if (args.length == 2 && args[0].equalsIgnoreCase("cancel")) {
|
||||||
|
String name = args[1];
|
||||||
|
if (!Shows.exists(name)) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Shows.cancelShow(name);
|
||||||
|
|
||||||
|
p.sendMessage(ChatColor.GREEN + "De show " + ChatColor.WHITE + name + ChatColor.GREEN + " is gestopt!");
|
||||||
|
return true;
|
||||||
|
} else if (args.length == 2 && args[0].equalsIgnoreCase("gui")) {
|
||||||
|
String name = args[1];
|
||||||
|
if (!Shows.exists(name)) {
|
||||||
|
p.sendMessage(ChatColor.RED + "Die show bestaat niet.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShowCueGUI.openGUI(name, p);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
44
src/main/java/nl/sbdeveloper/showapi/data/Shows.java
Normal file
44
src/main/java/nl/sbdeveloper/showapi/data/Shows.java
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
package nl.sbdeveloper.showapi.data;
|
||||||
|
|
||||||
|
import nl.sbdeveloper.showapi.api.ShowCue;
|
||||||
|
import nl.sbdeveloper.showapi.api.TriggerData;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Shows {
|
||||||
|
private static final HashMap<String, List<ShowCue>> showsMap = new HashMap<>();
|
||||||
|
|
||||||
|
public static void create(String name) {
|
||||||
|
showsMap.put(name, new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void delete(String name) {
|
||||||
|
showsMap.remove(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean exists(String name) {
|
||||||
|
return showsMap.containsKey(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<ShowCue> getPoints(String name) {
|
||||||
|
if (!exists(name)) return new ArrayList<>();
|
||||||
|
return showsMap.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addPoint(String name, int sec, TriggerData data) {
|
||||||
|
if (!exists(name)) return;
|
||||||
|
getPoints(name).add(new ShowCue(sec, data));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void startShow(String name) {
|
||||||
|
if (!exists(name)) return;
|
||||||
|
getPoints(name).forEach(ShowCue::runAtTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cancelShow(String name) {
|
||||||
|
if (!exists(name)) return;
|
||||||
|
getPoints(name).forEach(ShowCue::cancel);
|
||||||
|
}
|
||||||
|
}
|
35
src/main/java/nl/sbdeveloper/showapi/gui/ShowCueGUI.java
Normal file
35
src/main/java/nl/sbdeveloper/showapi/gui/ShowCueGUI.java
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
package nl.sbdeveloper.showapi.gui;
|
||||||
|
|
||||||
|
import com.samjakob.spigui.SGMenu;
|
||||||
|
import com.samjakob.spigui.buttons.SGButton;
|
||||||
|
import nl.sbdeveloper.showapi.ShowAPIPlugin;
|
||||||
|
import nl.sbdeveloper.showapi.api.ShowCue;
|
||||||
|
import nl.sbdeveloper.showapi.data.Shows;
|
||||||
|
import nl.sbdeveloper.showapi.utils.MainUtil;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ShowCueGUI {
|
||||||
|
public static void openGUI(String name, Player p) {
|
||||||
|
List<ShowCue> points = Shows.getPoints(name);
|
||||||
|
|
||||||
|
SGMenu menu = ShowAPIPlugin.getSpiGUI().create(ChatColor.DARK_AQUA + "Show Cue Manager:", MainUtil.pointsToRow(points.size()));
|
||||||
|
menu.setAutomaticPaginationEnabled(true);
|
||||||
|
|
||||||
|
for (ShowCue cue : points) {
|
||||||
|
SGButton button = new SGButton(MainUtil.pointToItem(cue))
|
||||||
|
.withListener((InventoryClickEvent e) -> {
|
||||||
|
points.remove(cue);
|
||||||
|
|
||||||
|
openGUI(name, p); //Refresh
|
||||||
|
});
|
||||||
|
|
||||||
|
menu.addButton(button);
|
||||||
|
}
|
||||||
|
|
||||||
|
p.openInventory(menu.getInventory());
|
||||||
|
}
|
||||||
|
}
|
31
src/main/java/nl/sbdeveloper/showapi/utils/Color.java
Normal file
31
src/main/java/nl/sbdeveloper/showapi/utils/Color.java
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package nl.sbdeveloper.showapi.utils;
|
||||||
|
|
||||||
|
public enum Color {
|
||||||
|
WHITE(org.bukkit.Color.fromRGB(16777215)),
|
||||||
|
SILVER(org.bukkit.Color.fromRGB(12632256)),
|
||||||
|
GRAY(org.bukkit.Color.fromRGB(8421504)),
|
||||||
|
BLACK(org.bukkit.Color.fromRGB(0)),
|
||||||
|
RED(org.bukkit.Color.fromRGB(16711680)),
|
||||||
|
MAROON(org.bukkit.Color.fromRGB(8388608)),
|
||||||
|
YELLOW(org.bukkit.Color.fromRGB(16776960)),
|
||||||
|
OLIVE(org.bukkit.Color.fromRGB(8421376)),
|
||||||
|
LIME(org.bukkit.Color.fromRGB(65280)),
|
||||||
|
GREEN(org.bukkit.Color.fromRGB(32768)),
|
||||||
|
AQUA(org.bukkit.Color.fromRGB(65535)),
|
||||||
|
TEAL(org.bukkit.Color.fromRGB(32896)),
|
||||||
|
BLUE(org.bukkit.Color.fromRGB(255)),
|
||||||
|
NAVY(org.bukkit.Color.fromRGB(128)),
|
||||||
|
FUCHSIA(org.bukkit.Color.fromRGB(16711935)),
|
||||||
|
PURPLE(org.bukkit.Color.fromRGB(8388736)),
|
||||||
|
ORANGE(org.bukkit.Color.fromRGB(16753920));
|
||||||
|
|
||||||
|
private final org.bukkit.Color color;
|
||||||
|
|
||||||
|
Color(org.bukkit.Color color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
public org.bukkit.Color getBukkitColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
}
|
68
src/main/java/nl/sbdeveloper/showapi/utils/MainUtil.java
Normal file
68
src/main/java/nl/sbdeveloper/showapi/utils/MainUtil.java
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
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.inventory.ItemStack;
|
||||||
|
import org.bukkit.util.ChatPaginator;
|
||||||
|
|
||||||
|
import java.lang.reflect.Array;
|
||||||
|
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()));
|
||||||
|
|
||||||
|
List<String> lores = new ArrayList<>();
|
||||||
|
lores.add(ChatColor.GREEN + "Type: " + ChatColor.AQUA + StringUtils.capitalize(point.getData().getType().name()));
|
||||||
|
lores.add(ChatColor.GREEN + "Data:");
|
||||||
|
for (String str : ChatPaginator.paginate(point.getData().getDataString(), 20).getLines()) {
|
||||||
|
lores.add(ChatColor.AQUA + ChatColor.stripColor(str));
|
||||||
|
}
|
||||||
|
lores.add("");
|
||||||
|
lores.add(ChatColor.RED + ChatColor.BOLD.toString() + "Click to remove!");
|
||||||
|
|
||||||
|
builder.lore(lores);
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TriggerData 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
Bukkit.getLogger().info("Aan het einde. Incorrecte type of te weinig data!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
70
src/main/java/nl/sbdeveloper/showapi/utils/TimeUtil.java
Normal file
70
src/main/java/nl/sbdeveloper/showapi/utils/TimeUtil.java
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
package nl.sbdeveloper.showapi.utils;
|
||||||
|
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.time.format.DateTimeParseException;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class TimeUtil {
|
||||||
|
private static final int s = 1000;
|
||||||
|
private static final int m = s * 60;
|
||||||
|
private static final int h = m * 60;
|
||||||
|
private static final int d = h * 24;
|
||||||
|
private static final int w = d * 7;
|
||||||
|
private static final int y = (int)(d * 365.25);
|
||||||
|
|
||||||
|
public static String showTime(int seconds) {
|
||||||
|
LocalTime timeOfDay = LocalTime.ofSecondOfDay(seconds);
|
||||||
|
return timeOfDay.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int parseSeconds(String str) {
|
||||||
|
try {
|
||||||
|
LocalTime localTime = LocalTime.parse(str);
|
||||||
|
return localTime.toSecondOfDay();
|
||||||
|
} catch (DateTimeParseException ex) {
|
||||||
|
Pattern pattern = Pattern.compile("^(-?(?:\\d+)?\\.?\\d+) *(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$");
|
||||||
|
Matcher matcher = pattern.matcher(str);
|
||||||
|
|
||||||
|
if (!matcher.find()) return 0;
|
||||||
|
|
||||||
|
float n = Float.parseFloat(matcher.group(1));
|
||||||
|
switch (matcher.group(2).toLowerCase()) {
|
||||||
|
case "years":
|
||||||
|
case "year":
|
||||||
|
case "yrs":
|
||||||
|
case "yr":
|
||||||
|
case "y":
|
||||||
|
return (int)(n * y) / 1000;
|
||||||
|
case "weeks":
|
||||||
|
case "week":
|
||||||
|
case "w":
|
||||||
|
return (int)(n * w) / 1000;
|
||||||
|
case "days":
|
||||||
|
case "day":
|
||||||
|
case "d":
|
||||||
|
return (int)(n * d) / 1000;
|
||||||
|
case "hours":
|
||||||
|
case "hour":
|
||||||
|
case "hrs":
|
||||||
|
case "hr":
|
||||||
|
case "h":
|
||||||
|
return (int)(n * h) / 1000;
|
||||||
|
case "minutes":
|
||||||
|
case "minute":
|
||||||
|
case "mins":
|
||||||
|
case "min":
|
||||||
|
case "m":
|
||||||
|
return (int)(n * m) / 1000;
|
||||||
|
case "seconds":
|
||||||
|
case "second":
|
||||||
|
case "secs":
|
||||||
|
case "sec":
|
||||||
|
case "s":
|
||||||
|
return (int)(n * s) / 1000;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,3 +5,9 @@ api-version: 1.13
|
||||||
authors: [SBDeveloper]
|
authors: [SBDeveloper]
|
||||||
description: Make perfect shows with this API!
|
description: Make perfect shows with this API!
|
||||||
website: https://sbdplugins.nl
|
website: https://sbdplugins.nl
|
||||||
|
commands:
|
||||||
|
mctpshow:
|
||||||
|
description: Het show command!
|
||||||
|
permissions:
|
||||||
|
mctp.show:
|
||||||
|
description: De permissie voor /mctpshow
|
Loading…
Add table
Reference in a new issue