287 lines
11 KiB
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;
|
|
}
|
|
}
|
|
|
|
}
|