WorldSystem/src/main/java/de/butzlabben/world/command/WSCommand.java

259 lines
9.7 KiB
Java

package de.butzlabben.world.command;
import de.butzlabben.world.WorldSystem;
import de.butzlabben.world.autoupdater.AutoUpdater;
import de.butzlabben.world.config.DependenceConfig;
import de.butzlabben.world.config.MessageConfig;
import de.butzlabben.world.config.PluginConfig;
import de.butzlabben.world.config.WorldConfig;
import de.butzlabben.world.gui.WorldChooseGUI;
import de.butzlabben.world.gui.WorldSystemGUI;
import de.butzlabben.world.util.MoneyUtil;
import de.butzlabben.world.wrapper.SystemWorld;
import de.butzlabben.world.wrapper.WorldPlayer;
import de.butzlabben.world.wrapper.WorldTemplate;
import de.butzlabben.world.wrapper.WorldTemplateProvider;
import net.myplayplanet.commandframework.CommandArgs;
import net.myplayplanet.commandframework.api.Command;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Iterator;
import java.util.List;
public class WSCommand {
@Command(name = "ws")
public void mainCommand(CommandArgs args) {
CommandSender cs = args.getSender(CommandSender.class);
String prefix = PluginConfig.getPrefix();
cs.sendMessage(
prefix + "WorldSystem by Butzlabben v" + WorldSystem.getInstance().getDescription().getVersion());
cs.sendMessage(prefix + "Contributors: Jubeki, montlikadani, jstoeckm2");
List<String> cmdHelp = MessageConfig.getCommandHelp();
cmdHelp.forEach(s -> cs.sendMessage(prefix + s));
if (cs.hasPermission("ws.delete"))
cs.sendMessage(MessageConfig.getDeleteCommandHelp());
}
@Command(name = "ws.gui", inGameOnly = true)
public void guiCommand(CommandArgs args) {
Player p = args.getSender(Player.class);
WorldPlayer wp = new WorldPlayer(p);
if (!wp.isOnSystemWorld()) {
p.sendMessage(MessageConfig.getNotOnWorld());
return;
}
if (!wp.isOwnerofWorld()) {
p.sendMessage(MessageConfig.getNoPermission());
return;
}
p.openInventory(new WorldSystemGUI().getInventory(p));
}
@Command(name = "ws.confirm", permission = "ws.confirm")
public void confirmCommand(CommandArgs args) {
CommandSender cs = args.getSender(Player.class);
if (AutoUpdater.getInstance().confirmed()) {
cs.sendMessage(PluginConfig.getPrefix() + "§cAlready confirmed or no confirm needed");
return;
}
AutoUpdater.getInstance().confirm();
cs.sendMessage(PluginConfig.getPrefix() + "§aAutoupdate confirmed, §crestart §ato apply changes");
}
@Command(name = "ws.get", inGameOnly = true)
public void getCommand(CommandArgs args) {
Player p = args.getSender(Player.class);
// Check if use can create a world
if (!p.hasPermission("ws.get")) {
p.sendMessage(MessageConfig.getNoPermission());
return;
}
// create New Entry
DependenceConfig dc = new DependenceConfig(p);
if (dc.hasWorld()) {
p.sendMessage(MessageConfig.getWorldAlreadyExists());
return;
}
if (PluginConfig.isMultiChoose()) {
if (args.length() > 0) {
String key = args.getArgument(0);
WorldTemplate template = WorldTemplateProvider.getInstance().getTemplate(key);
if (template != null) {
// Permission for this specific template
if (template.getPermission() != null && !p.hasPermission(template.getPermission())) {
p.sendMessage(MessageConfig.getNoPermission());
return;
}
// Implementation check for #15
if (template.getCost() > 0) {
if (!MoneyUtil.hasMoney(p.getUniqueId(), template.getCost())) {
p.sendMessage(MessageConfig.getNotEnoughMoney());
return;
}
MoneyUtil.removeMoney(p.getUniqueId(), template.getCost());
}
create(p, template);
return;
}
}
WorldChooseGUI.letChoose(p);
} else {
WorldTemplate template = WorldTemplateProvider.getInstance()
.getTemplate(PluginConfig.getDefaultWorldTemplate());
if (template != null)
create(p, template);
else {
p.sendMessage(PluginConfig.getPrefix() + "§cError in config at \"worldtemplates.default\"");
p.sendMessage(PluginConfig.getPrefix() + "§cPlease contact an administrator");
}
}
}
@Command(name = "ws.home", inGameOnly = true)
public void homeCommand(CommandArgs args) {
Player p = args.getSender(Player.class);
String worldname = p.getWorld().getName();
DependenceConfig dc = new DependenceConfig(p);
if (!dc.hasWorld()) {
p.sendMessage(MessageConfig.getNoWorldOwn());
return;
}
WorldPlayer wp = new WorldPlayer(p, worldname);
if (wp.isOnSystemWorld()) {
SystemWorld.tryUnloadLater(Bukkit.getWorld(worldname));
}
SystemWorld sw = SystemWorld.getSystemWorld(dc.getWorldname());
if (sw == null) {
p.sendMessage(MessageConfig.getNoWorldOwn());
return;
}
if (sw.isLoaded()) {
sw.teleportToWorldSpawn(p);
} else {
sw.load(p);
}
}
@Command(name = "ws.info", inGameOnly = true)
public void infoComannd(CommandArgs args) {
Player p = args.getSender(Player.class);
WorldPlayer wp = new WorldPlayer(p, p.getWorld().getName());
if (!wp.isOnSystemWorld()) {
p.sendMessage(MessageConfig.getNotOnWorld());
return;
}
WorldConfig wc = WorldConfig.getWorldConfig(p.getWorld().getName());
int id = wc.getId();
String owner = wc.getOwnerName();
boolean fire = wc.isFire();
boolean tnt = wc.isTnt();
p.sendMessage(MessageConfig.getInfoOwner().replaceAll("%data", owner));
p.sendMessage(MessageConfig.getInfoId().replaceAll("%data", "" + id));
p.sendMessage(MessageConfig.getInfoTnt().replaceAll("%data",
tnt ? MessageConfig.getInfoEnabled() : MessageConfig.getInfoDisabled()));
p.sendMessage(MessageConfig.getInfoFire().replaceAll("%data",
fire ? MessageConfig.getInfoEnabled() : MessageConfig.getInfoDisabled()));
StringBuilder sb = new StringBuilder();
Iterator<String> it = wc.getMembersWithNames().values().iterator();
while (it.hasNext()) {
sb.append(it.next());
if (it.hasNext())
sb.append(" ");
}
p.sendMessage(MessageConfig.getInfoMember().replaceAll("%data", sb.toString().trim()));
}
@Command(name = "ws.leave", inGameOnly = true)
public void leaveCommand(CommandArgs args) {
Player p = args.getSender(Player.class);
String worldname = p.getWorld().getName();
WorldPlayer wp = new WorldPlayer(p, worldname);
if (wp.isOnSystemWorld()) {
// Extra safety for #2
if (PluginConfig.getSpawn(null).getWorld() == null) {
Bukkit.getConsoleSender().sendMessage(PluginConfig.getPrefix() + "§cThe spawn is not properly set");
p.sendMessage(PluginConfig.getPrefix() + "§cThe spawn is not properly set");
return;
}
p.teleport(PluginConfig.getSpawn(p));
p.setGameMode(PluginConfig.getSpawnGamemode());
World w = Bukkit.getWorld(p.getWorld().getName());
SystemWorld.tryUnloadLater(w);
} else {
p.sendMessage(MessageConfig.getNotOnWorld());
}
}
@Command(name = "ws.tp", inGameOnly = true)
public void tpCommand(CommandArgs args) {
Player p = args.getSender(Player.class);
if (args.length() < 1) {
p.sendMessage(MessageConfig.getWrongUsage().replaceAll("%usage", "/ws tp <World>"));
return;
}
if (args.getArgument(0).equalsIgnoreCase(p.getName()) || args.getArgument(0).equalsIgnoreCase(p.getUniqueId().toString())) {
p.chat("/ws home");
return;
}
DependenceConfig dc = new DependenceConfig(args.getArgument(0));
String worldname = dc.getWorldNameByOfflinePlayer();
if (!dc.hasWorld()) {
p.sendMessage(MessageConfig.getNoWorldOther());
return;
}
SystemWorld sw = SystemWorld.getSystemWorld(worldname);
WorldPlayer wp1 = new WorldPlayer(p, p.getWorld().getName());
WorldPlayer wp = new WorldPlayer(p, worldname);
if (p.getWorld().getName().equals(worldname)) {
sw.teleportToWorldSpawn(p);
return;
}
if (!p.hasPermission("ws.tp.world")) {
if (!wp.isMemberofWorld(worldname) && !wp.isOwnerofWorld()) {
p.sendMessage(MessageConfig.getNoMemberOther());
return;
}
}
if (wp1.isOnSystemWorld()) {
World w = p.getWorld();
SystemWorld.tryUnloadLater(w);
}
if (sw != null)
if (!sw.isLoaded()) {
sw.load(p);
} else {
sw.teleportToWorldSpawn(p);
}
}
private void create(Player p, WorldTemplate template) {
Bukkit.getScheduler().runTask(WorldSystem.getInstance(), () -> {
if (SystemWorld.create(p, template))
p.sendMessage(MessageConfig.getSettingUpWorld());
});
}
}