DungeonsXL/core/src/main/java/de/erethon/dungeonsxl/command/GroupCommand.java

287 lines
11 KiB
Java

/*
* Copyright (C) 2012-2022 Frank Baumann
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package de.erethon.dungeonsxl.command;
import de.erethon.dungeonsxl.DungeonsXL;
import de.erethon.dungeonsxl.api.event.group.GroupCreateEvent.Cause;
import de.erethon.dungeonsxl.api.event.group.GroupDisbandEvent;
import de.erethon.dungeonsxl.api.event.group.GroupPlayerKickEvent;
import de.erethon.dungeonsxl.config.DMessage;
import de.erethon.dungeonsxl.player.DGroup;
import de.erethon.dungeonsxl.player.DPermission;
import de.erethon.bedrock.chat.MessageUtil;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* @author Daniel Saukel
*/
public class GroupCommand extends DCommand {
public GroupCommand(DungeonsXL plugin) {
super(plugin);
setCommand("group");
setMinArgs(0);
setMaxArgs(2);
setHelp(DMessage.CMD_GROUP_HELP_MAIN.getMessage());
setPermission(DPermission.GROUP.getNode());
setPlayerCommand(true);
}
private CommandSender sender;
private Player player;
private String[] args;
@Override
public void onExecute(String[] args, CommandSender sender) {
this.sender = sender;
this.player = (Player) sender;
this.args = args;
DGroup dGroup = (DGroup) plugin.getPlayerGroup(player);
if (args.length == 2) {
if (args[1].equalsIgnoreCase("disband")) {
disbandGroup(dGroup, null);
return;
} else if (args[1].equalsIgnoreCase("show")) {
showGroup(dGroup);
return;
}
} else if (args.length >= 3) {
if (args[1].equalsIgnoreCase("kick")) {
kickPlayer(dGroup);
return;
} else if (args[1].equalsIgnoreCase("invite")) {
invitePlayer(dGroup);
return;
} else if (args[1].equalsIgnoreCase("uninvite")) {
uninvitePlayer(dGroup);
return;
} else if (args[1].equalsIgnoreCase("help")) {
showHelp(args[2]);
return;
} else if (args[1].equalsIgnoreCase("create")) {
createGroup();
return;
} else if (args[1].equalsIgnoreCase("disband") && DPermission.hasPermission(sender, DPermission.GROUP_ADMIN)) {
disbandGroup((DGroup) plugin.getGroupCache().get(args[2]), args[2]);
return;
} else if (args[1].equalsIgnoreCase("join")) {
joinGroup((DGroup) plugin.getGroupCache().get(args[2]));
return;
} else if (args[1].equalsIgnoreCase("show") && DPermission.hasPermission(sender, DPermission.GROUP_ADMIN)) {
DGroup group = (DGroup) plugin.getGroupCache().get(args[2]);
Player player = Bukkit.getPlayer(args[2]);
if (group == null && player != null) {
group = (DGroup) plugin.getPlayerGroup(player);
}
showGroup(group);
return;
}
}
showHelp("1");
}
public void createGroup() {
if (plugin.getPlayerGroup(player) != null) {
MessageUtil.sendMessage(sender, DMessage.ERROR_LEAVE_GROUP.getMessage());
return;
}
if (plugin.getGroupCache().get(args[2]) != null) {
MessageUtil.sendMessage(sender, DMessage.ERROR_NAME_IN_USE.getMessage(args[2]));
return;
}
DGroup dGroup = DGroup.create(plugin, Cause.COMMAND, player, args[2], null, null);
if (dGroup != null) {
MessageUtil.sendMessage(sender, DMessage.GROUP_CREATED.getMessage(sender.getName(), args[2]));
}
}
public void disbandGroup(DGroup dGroup, String name) {
if (dGroup == null) { // only gets here
MessageUtil.sendMessage(sender,
name == null ? DMessage.ERROR_SELF_NOT_IN_GROUP.getMessage()
: DMessage.ERROR_NO_SUCH_GROUP.getMessage(name));
return;
}
if (dGroup.isPlaying()) {
MessageUtil.sendMessage(sender, DMessage.ERROR_LEAVE_DUNGEON.getMessage());
return;
}
GroupDisbandEvent event = new GroupDisbandEvent(dGroup, plugin.getPlayerCache().get(player), GroupDisbandEvent.Cause.COMMAND);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
dGroup.delete();
MessageUtil.sendMessage(sender, DMessage.GROUP_DISBANDED.getMessage(sender.getName(), dGroup.getName()));
dGroup = null;
}
}
public void invitePlayer(DGroup dGroup) {
if (dGroup == null) {
MessageUtil.sendMessage(sender, DMessage.ERROR_JOIN_GROUP.getMessage());
return;
}
Player toInvite = Bukkit.getPlayer(args[2]);
if (toInvite != null) {
dGroup.addInvitedPlayer(toInvite, false);
} else {
MessageUtil.sendMessage(sender, DMessage.ERROR_NO_SUCH_PLAYER.getMessage(args[2]));
}
}
public void uninvitePlayer(DGroup dGroup) {
if (dGroup == null) {
MessageUtil.sendMessage(sender, DMessage.ERROR_JOIN_GROUP.getMessage());
return;
}
dGroup.clearOfflineInvitedPlayers();
Player toUninvite = Bukkit.getPlayer(args[2]);
if (toUninvite != null) {
if (dGroup.getInvitedPlayers().contains(toUninvite)) {
dGroup.removeInvitedPlayer(toUninvite, false);
} else {
MessageUtil.sendMessage(sender, DMessage.ERROR_NOT_IN_GROUP.getMessage(args[2]));
}
} else {
MessageUtil.sendMessage(sender, DMessage.ERROR_NO_SUCH_PLAYER.getMessage(args[2]));
}
}
public void joinGroup(DGroup dGroup) {
if (dGroup == null) {
MessageUtil.sendMessage(sender, DMessage.ERROR_NO_SUCH_GROUP.getMessage(args[2]));
return;
}
if (plugin.getPlayerGroup(player) != null) {
MessageUtil.sendMessage(sender, DMessage.ERROR_LEAVE_GROUP.getMessage());
return;
}
if (dGroup.isPlaying()) {
MessageUtil.sendMessage(sender, DMessage.ERROR_GROUP_IS_PLAYING.getMessage());
return;
}
if (!dGroup.getInvitedPlayers().contains(player) && !DPermission.hasPermission(player, DPermission.BYPASS)) {
MessageUtil.sendMessage(sender, DMessage.ERROR_NOT_INVITED.getMessage(args[2]));
return;
}
dGroup.addMember(player);
dGroup.removeInvitedPlayer(player, true);
}
public void kickPlayer(DGroup dGroup) {
if (dGroup == null) {
MessageUtil.sendMessage(sender, DMessage.ERROR_JOIN_GROUP.getMessage());
}
Player toKick = Bukkit.getPlayer(args[2]);
if (toKick != null) {
GroupPlayerKickEvent event = new GroupPlayerKickEvent(dGroup, dPlayers.get(toKick.getPlayer()), GroupPlayerKickEvent.Cause.COMMAND);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
if (dGroup.getMembers().contains(toKick)) {
dGroup.removeMember(toKick);
MessageUtil.sendMessage(sender, DMessage.GROUP_KICKED_PLAYER.getMessage(sender.getName(), args[2], dGroup.getName()));
} else {
MessageUtil.sendMessage(sender, DMessage.ERROR_NOT_IN_GROUP.getMessage(args[2], dGroup.getName()));
}
}
} else {
MessageUtil.sendMessage(sender, DMessage.ERROR_NO_SUCH_PLAYER.getMessage(args[2]));
}
}
public void showGroup(DGroup dGroup) {
if (dGroup == null) {
if (args.length == 3) {
MessageUtil.sendMessage(sender, DMessage.ERROR_NO_SUCH_GROUP.getMessage(args[2]));
} else if (args.length == 2) {
MessageUtil.sendMessage(sender, DMessage.ERROR_JOIN_GROUP.getMessage());
}
return;
}
MessageUtil.sendCenteredMessage(sender, "&4&l[ &6" + dGroup.getName() + " &4&l]");
MessageUtil.sendMessage(sender, "&bCaptain: &e" + dGroup.getLeader().getName());
String players = "";
for (String player : dGroup.getMembers().getNames()) {
players += (players.isEmpty() ? "" : "&b, &e") + player;
}
MessageUtil.sendMessage(sender, "&bPlayers: &e" + players);
MessageUtil.sendMessage(sender, "&bDungeon: &e" + (dGroup.getDungeonName() == null ? "N/A" : dGroup.getDungeonName()));
MessageUtil.sendMessage(sender, "&bMap: &e" + (dGroup.getMapName() == null ? "N/A" : dGroup.getMapName()));
MessageUtil.sendMessage(sender, "&bScore: &e" + (dGroup.getScore() == 0 ? "N/A" : dGroup.getScore()));
MessageUtil.sendMessage(sender, "&bLives: &e" + (dGroup.getLives() == -1 ? "N/A" : dGroup.getLives()));
}
public void showHelp(String page) {
MessageUtil.sendPluginTag(sender, plugin);
switch (page) {
default:
MessageUtil.sendCenteredMessage(sender, "&4&l[ &61-5 &4/ &67 &4| &61 &4&l]");
MessageUtil.sendMessage(sender, "&bcreate" + "&7 - " + DMessage.CMD_GROUP_HELP_CREATE.getMessage());
MessageUtil.sendMessage(sender, "&bdisband" + "&7 - " + DMessage.CMD_GROUP_HELP_DISBAND.getMessage());
MessageUtil.sendMessage(sender, "&binvite" + "&7 - " + DMessage.CMD_GROUP_HELP_INVITE.getMessage());
MessageUtil.sendMessage(sender, "&buninvite" + "&7 - " + DMessage.CMD_GROUP_HELP_UNINVITE.getMessage());
MessageUtil.sendMessage(sender, "&bjoin" + "&7 - " + DMessage.CMD_GROUP_HELP_JOIN.getMessage());
break;
case "2":
MessageUtil.sendCenteredMessage(sender, "&4&l[ &66-10 &4/ &67 &4| &62 &4&l]");
MessageUtil.sendMessage(sender, "&bkick" + "&7 - " + DMessage.CMD_GROUP_HELP_KICK.getMessage());
MessageUtil.sendMessage(sender, "&bshow" + "&7 - " + DMessage.CMD_GROUP_HELP_SHOW.getMessage());
break;
}
}
}