3
0
Fork 0
This repository has been archived on 2024-11-14. You can view files and clone it, but cannot push or open issues or pull requests.
ThemePark/src/main/java/me/paradoxpixel/themepark/command/ThemeParkCommand.java
2019-01-19 23:22:15 +01:00

338 lines
13 KiB
Java

package me.paradoxpixel.themepark.command;
import me.paradoxpixel.themepark.ThemeParkPlugin;
import me.paradoxpixel.themepark.api.API;
import me.paradoxpixel.themepark.api.attraction.Attraction;
import me.paradoxpixel.themepark.api.attraction.Region;
import me.paradoxpixel.themepark.api.attraction.component.Status;
import me.paradoxpixel.themepark.attraction.AttractionMenu;
import me.paradoxpixel.themepark.attraction.status.StatusManager;
import me.paradoxpixel.themepark.config.YamlConfig;
import me.paradoxpixel.themepark.utils.ItemBuilder;
import me.paradoxpixel.themepark.utils.Message;
import me.paradoxpixel.themepark.utils.Utils;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.command.defaults.BukkitCommand;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Player;
import java.util.Scanner;
import java.util.UUID;
public class ThemeParkCommand extends BukkitCommand {
private String name;
public ThemeParkCommand(String name) {
super(name);
this.name = name;
}
public boolean execute(CommandSender sender,String label, String[] args) {
if (args.length == 0 || args[0].equalsIgnoreCase("help")) {
sender.sendMessage(Utils.color("&f>==== &6ThemePark &f ====<"));
sender.sendMessage(Utils.color("&f/" + name + " help"));
sender.sendMessage(Utils.color("&f/" + name + " list"));
sender.sendMessage(Utils.color("&f/" + name + " warp [id]"));
if(sender.hasPermission("themepark.admin") || sender.hasPermission("themepark.item")) {
sender.sendMessage(Utils.color("&f/" + name + " toggleitem"));
sender.sendMessage(Utils.color("&f/" + name + " getitem"));
}
if(sender.hasPermission("themepark.admin")) {
sender.sendMessage(Utils.color("&f/" + name + " reload"));
sender.sendMessage(Utils.color("&f/" + name + " regionname [id] [name]"));
sender.sendMessage(Utils.color("&f/" + name + " regionlore [id] [index] [lore]"));
sender.sendMessage(Utils.color("&f/" + name + " setlocation [id]"));
sender.sendMessage(Utils.color("&f/" + name + " attraction [id] [status]"));
}
return true;
}
if (args[0].equalsIgnoreCase("list")) {
sender.sendMessage(Utils.color("&f>==== &6ThemePark &f ====<"));
if (API.getAttractions().size() == 0) {
sender.sendMessage(Utils.color(Message.getMessage("attraction.notfound")));
return true;
}
for (Attraction attraction : API.getAttractions().values()) {
String message = Message.getMessage("attraction.list");
message = message.replace("{id}", attraction.getId());
message = message.replace("{name}", attraction.getName());
message = message.replace("{region}", API.getRegion(attraction.getRegion_id()).getName());
message = message.replace("{status}", StatusManager.getName(attraction.getStatus()));
sender.sendMessage(Utils.color(message));
}
return true;
}
if(args[0].equalsIgnoreCase("warp")) {
if(args.length < 2) {
sender.sendMessage(Utils.color( "&6Themepark&f: &4/" + name + " warp [id]"));
return true;
}
String id = args[1];
if(!API.isAttraction(id)) {
String message = Message.getMessage("attraction.no");
message = message.replace("{id}", id);
sender.sendMessage(Utils.color(message));
return true;
}
if(sender instanceof Player) {
Attraction attraction = API.getAttraction(id);
Player player = (Player) sender;
if(!StatusManager.canTeleport(attraction.getStatus())) {
String message = Message.getMessage("attraction.teleport.status");
message = message.replace("{name}", attraction.getName());
message = message.replace("{status}", StatusManager.getName(attraction.getStatus()));
player.sendMessage(Utils.color(message));
return true;
}
player.teleport(attraction.getLocation());
if(player.isInsideVehicle())
if(player.getVehicle() instanceof Minecart)
return true;
player.sendMessage(Utils.color(Message.getMessage("attraction.teleport.success").replace("{name}", attraction.getName())));
return true;
} else {
sender.sendMessage(Utils.color(Message.getMessage("onlyplayers")));
return true;
}
}
if(!sender.hasPermission("themepark.admin") && !sender.hasPermission("themepark.item")) {
sender.sendMessage(Utils.color(Message.getMessage("nopermission")));
return true;
}
if(args[0].equalsIgnoreCase("toggleitem")) {
if(!(sender instanceof Player)) {
sender.sendMessage(Utils.color(Message.getMessage("onlyplayers")));
return true;
}
Player player = (Player) sender;
UUID uuid = player.getUniqueId();
YamlConfig config = ThemeParkPlugin.getInstance().getData();
boolean b = config.getConfig().getBoolean(uuid.toString() + ".item");
b = !b;
config.getConfig().set(uuid.toString() + ".item", b);
config.save();
String message = Message.getMessage("menu.item.toggle");
message = message.replace("{status}", b ? Message.getMessage("enabled") : Message.getMessage("disabled"));
sender.sendMessage(Utils.color(message));
return true;
}
if(args[0].equalsIgnoreCase("getitem")) {
YamlConfig settings = ThemeParkPlugin.getInstance().getSettings();
Material material = Material.getMaterial(settings.getConfig().getString("item.material"));
String name = Utils.color(settings.getConfig().getString("item.display-name"));
if(material == null || name.isEmpty())
return true;
Player player;
if(args.length >= 2) {
String string = args[1];
if(Bukkit.getPlayerExact(string) == null) {
String message = Message.getMessage("noplayer");
message = message.replace("{name}", string);
sender.sendMessage(Utils.color(message));
return true;
}
player = Bukkit.getPlayerExact(string);
} else {
if(!(sender instanceof Player)) {
sender.sendMessage(Utils.color(Message.getMessage("onlyplayers")));
return true;
}
player = (Player) sender;
}
ItemBuilder builder = new ItemBuilder(material);
builder.setName(name);
player.getInventory().addItem(builder.getItem());
}
if(!sender.hasPermission("themepark.admin")) {
sender.sendMessage(Utils.color(Message.getMessage("nopermission")));
return true;
}
if(args[0].equalsIgnoreCase("reload")) {
ThemeParkPlugin.getInstance().getData().reload();
ThemeParkPlugin.getInstance().getAttraction().reload();
ThemeParkPlugin.getInstance().getSigns().reload();
ThemeParkPlugin.getInstance().getSettings().reload();
ThemeParkPlugin.getInstance().getMessage().reload();
StatusManager.load();
AttractionMenu.load();
Bukkit.getScheduler().runTaskAsynchronously(ThemeParkPlugin.getInstance(),() -> {
ThemeParkPlugin.getInstance().getDatabaseHandler().load();
});
sender.sendMessage(Utils.color(Message.getMessage("reloaded")));
}
if (args[0].equalsIgnoreCase("regionname")) {
if (args.length < 3) {
sender.sendMessage(Utils.color("&6Themepark&f: &4/" + name + " regionname [id] [name]"));
return true;
}
String id = args[1];
if (!API.isRegion(id)) {
String message = Message.getMessage("region.no");
message = message.replace("{id}", id);
sender.sendMessage(Utils.color(message));
return true;
}
String name = args[2];
name = name.replaceAll("_", " ");
Region region = API.getRegion(id);
if(region.getName().equals(name))
return true;
region.setName(name);
String message = Message.getMessage("region.changed.name");
message = message.replace("{id}", id);
message = message.replace("{name}", name);
sender.sendMessage(Utils.color(message));
return true;
}
if (args[0].equalsIgnoreCase("regionlore")) {
if (args.length < 4) {
sender.sendMessage(Utils.color("&6Themepark&f: &4/" + name + " regionlore[id] [index] [lore]"));
return true;
}
String id = args[1];
if (!API.isRegion(id)) {
String message = Message.getMessage("region.no");
message = message.replace("{id}", id);
sender.sendMessage(Utils.color(message));
return true;
}
String string = args[2];
if(!isInteger(string)) {
sender.sendMessage(Message.getMessage("nonumber").replace("{number}", string));
return true;
}
int i = Integer.parseInt(string);
String lore = args[3];
lore = lore.replaceAll("_", " ");
Region region = API.getRegion(id);
if(region.getLore().size() > i && region.getLore().get(i).equals(lore))
return true;
region.setLore(i, lore);
String message = Message.getMessage("region.changed.lore");
message = message.replace("{id}", id);
message = message.replace("{index}", "" + i);
message = message.replace("{lore}", lore);
sender.sendMessage(Utils.color(message));
return true;
}
if (args[0].equalsIgnoreCase("setlocation")) {
if (args.length < 2 ) {
sender.sendMessage(Utils.color("&6Themepark&f: &4/" + name + " setlocation [id]"));
return true;
}
String id = args[1];
if(!API.isAttraction(id)) {
String message = Message.getMessage("attraction.no");
message = message.replace("{id}", id);
sender.sendMessage(Utils.color(message));
return true;
}
if(!(sender instanceof Player)) {
sender.sendMessage(Utils.color(Message.getMessage("onlyplayers")));
return true;
}
Attraction attraction = API.getAttraction(id);
attraction.setLocation(((Player) sender).getLocation().clone());
sender.sendMessage(Utils.color(Message.getMessage("attraction.location").replace("{name}", attraction.getName())));
return true;
}
if (args[0].equalsIgnoreCase("attraction")) {
if (args.length < 3 ) {
sender.sendMessage(Utils.color("&6Themepark&f: &4/" + name + " attraction [id] [status]"));
return true;
}
String id = args[1];
if (!API.isAttraction(id)) {
String message = Message.getMessage("attraction.no");
message = message.replace("{id}", id);
sender.sendMessage(Utils.color(message));
return true;
}
Status status = Status.getStatus(args[2]);
if (status == null) {
String message = Message.getMessage("status.no");
message = message.replace("{status}", args[2]);
sender.sendMessage(Utils.color(message));
return true;
}
Attraction attraction = API.getAttraction(id);
if(!attraction.getType().containsStatus(status)) {
String message = Message.getMessage("attraction.nostatus");
message = message.replace("{name}", attraction.getName());
message = message.replace("{status}", status.toString());
sender.sendMessage(Utils.color(message));
return true;
}
if(attraction.getStatus() == status)
return true;
Player player = (sender instanceof Player) ? (Player) sender : null;
attraction.setStatus(status, player);
return true;
}
return false;
}
private boolean isInteger(String s) {
int radix = 10;
Scanner sc = new Scanner(s.trim());
if(!sc.hasNextInt(radix)) return false;
sc.nextInt(radix);
return !sc.hasNext();
}
}