package me.gtacraft.plugins.gangs.commands;
import me.gtacraft.plugins.gangs.GTAGangs;
import me.gtacraft.plugins.gangs.Gang;
import me.gtacraft.plugins.gangs.GangInviteManager;
import me.gtacraft.plugins.gangs.GangMember;
import me.gtacraft.plugins.gangs.database.SQLVars;
import me.gtacraft.plugins.gangs.enumeration.GangRole;
import me.gtacraft.plugins.gangs.util.Formatting;
import me.gtacraft.plugins.gangs.util.LocationUtil;
import me.gtacraft.plugins.gangs.util.MessageType;
import me.gtacraft.plugins.gangs.util.Util;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import javax.print.DocFlavor;
/**
* Created by Connor on 6/30/14. Designed for the GTA-Factions project.
*/
public class GangStaffCommands {
public GangStaffCommands() {
CommandHandler.getInstance().registerCommandChannel(this);
}
@CommandHandler.CommandContext(name="sethideout", aliases={"sh", "sethome"}, help = "&5&l/gang sethideout &e- &fSet your gangs hideout at your location")
public void setHideoutCommand(final Player player, String[] args) {
Runnable async = new Runnable() {
public void run() {
GangMember member = GangMember.fromPlayer(player);
if (!(player.hasPermission("gangs.user"))) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You do not have permission to use this command!")));
return;
}
if (member.getGang() == null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be in a gang to set the hideout!")));
return;
}
if (member.getRole().getPermissionLevel() == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be a homie or the leader in your gang to set the hideout!")));
return;
}
Gang gang = member.getGang();
Location pLoc = player.getLocation();
String serialized = LocationUtil.fromLocation(pLoc);
GTAGangs.sql_query.add(SQLVars.SET_GANG_HIDEOUT.replace("%hideout%", serialized).replace("%name%", gang.getName()));
gang.setHideout(pLoc);
String fName = pLoc.getBlockX()+", "+pLoc.getBlockY()+", "+pLoc.getBlockZ();
player.sendMessage(Formatting.formatMessage(MessageType.SUCCESS.getPattern().replace("%m%", "You set your gangs hideout to: &7"+fName+"&f!")));
}
};
Bukkit.getScheduler().scheduleAsyncDelayedTask(GTAGangs.getInstance(), async);
}
@CommandHandler.CommandContext(name="invite", aliases={"i"}, help="&5&l/gang invite [player] &e- &fInvite the given player to your gang")
public void invitePlayerCommand(final Player player, final String[] args) {
Runnable async = new Runnable() {
public void run() {
GangMember member = GangMember.fromPlayer(player);
if (!(player.hasPermission("gangs.user"))) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You do not have permission to use this command!")));
return;
}
if (member.getGang() == null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be in a gang to invite a member!")));
return;
}
if (member.getRole().getPermissionLevel() == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be a homie or the leader in your gang to invite a member!")));
return;
}
if (args.length == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "Please specify a player to invite!")));
return;
}
Player invited = Bukkit.getPlayer(args[0]);
if (invited == null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "No such player with the name &7"+args[0]+" &fexists!")));
return;
}
GangMember invitedMember = GangMember.fromPlayer(invited);
if (invitedMember.getGang() != null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "This player is already in a gang!")));
return;
}
if (!(invited.hasPermission("gangs.user"))) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You cannot invited this player because they do not have permission to join!")));
return;
}
GangInviteManager.addPlayerToInvites(invited, member.getGang());
invited.sendMessage(Formatting.formatMessage(MessageType.INFO.getPattern().replace("%m%", "&7"+player.getName()+" &fhas invited you to &7"+member.getGang().getName()+"&f!")));
player.sendMessage(Formatting.formatMessage(MessageType.SUCCESS.getPattern().replace("%m%", "You invited &7"+invited.getName()+"&f to your gang!")));
}
};
Bukkit.getScheduler().scheduleAsyncDelayedTask(GTAGangs.getInstance(), async);
}
@CommandHandler.CommandContext(name="kick",aliases={"kickplayer"},help="&5&l/gang kick [player] &e- &fKick the given player from your gang")
public void kickPlayerCommand(final Player player, final String[] args) {
Runnable async = new Runnable() {
public void run() {
GangMember member = GangMember.fromPlayer(player);
if (!(player.hasPermission("gangs.user"))) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You do not have permission to use this command!")));
return;
}
if (member.getGang() == null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be in a gang to kick a player!")));
return;
}
if (member.getRole().getPermissionLevel() == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be a homie or the leader in your gang to kick a player!")));
return;
}
if (args.length == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "Please specify a player to kick!")));
return;
}
Gang gang = member.getGang();
OfflinePlayer kick = Bukkit.getOfflinePlayer(args[0]);
if (!(kick.hasPlayedBefore())) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "The given player does not exist!")));
return;
}
if (!gang.getAllMembers().contains(kick)) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "The given player is not in your gang!")));
return;
}
int permLevel;
if (kick.isOnline())
permLevel = GangMember.fromPlayer(kick).getRole().getPermissionLevel();
else
permLevel = SQLVars.getPermissionLevel(kick);
if (permLevel >= member.getRole().getPermissionLevel()) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You can only kick a player who is a lower rank than you!")));
return;
}
gang.getAllMembers().remove(kick);
gang.getOnlineMembers().remove(GangMember.fromPlayer(kick));
GTAGangs.sql_query.add(SQLVars.REMOVE_PLAYER_FROM_GANG
.replace("%uuid%", kick.getUniqueId().toString()));
if (kick.isOnline()) {
kick.getPlayer().sendMessage(Formatting.formatMessage(MessageType.INFO.getPattern().replace("%m%", "You have been kicked from your gang by &7"+player.getName())));
GangMember edit = GangMember.fromPlayer(kick);
edit.setGang(null);
edit.setRole(null);
}
player.sendMessage(Formatting.formatMessage(MessageType.SUCCESS.getPattern().replace("%m%", "You kicked &7"+kick.getName()+" &ffrom the faction!")));
}
};
Bukkit.getScheduler().scheduleAsyncDelayedTask(GTAGangs.getInstance(), async);
}
@CommandHandler.CommandContext(name="promote",aliases={"homie"},help="&5&l/gang promote [player] &e- &fPromote the given player to a homie in your faction")
public void promotePlayerCommand(final Player player, final String[] args) {
Runnable async = new Runnable() {
public void run() {
GangMember member = GangMember.fromPlayer(player);
if (!(player.hasPermission("gangs.user"))) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You do not have permission to use this command!")));
return;
}
if (member.getGang() == null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be in a gang to promote a player!")));
return;
}
if (member.getRole().getPermissionLevel() == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be a homie or the leader in your gang to promote a player!")));
return;
}
if (args.length == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "Please specify a player to promote!")));
return;
}
Gang gang = member.getGang();
OfflinePlayer promote = Bukkit.getOfflinePlayer(args[0]);
if (!(promote.hasPlayedBefore())) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "The given player does not exist!")));
return;
}
if (!gang.getAllMembers().contains(promote)) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "The given player is not in your gang!")));
return;
}
int permLevel;
if (promote.isOnline())
permLevel = GangMember.fromPlayer(promote).getRole().getPermissionLevel();
else
permLevel = SQLVars.getPermissionLevel(promote);
if (permLevel != 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You can only promote a player with the rank member!")));
return;
}
GTAGangs.sql_query.add(SQLVars.UPDATE_PLAYER.replace("%gang%", gang.getName()).replace("%role%", 1+"").replace("%uuid%", promote.getUniqueId().toString()));
if (promote.isOnline()) {
GangMember.fromPlayer(promote).setRole(GangRole.HOMIE);
promote.getPlayer().sendMessage(Formatting.formatMessage(MessageType.INFO.getPattern().replace("%m%", "You have been promoted in your gang!")));
}
player.sendMessage(Formatting.formatMessage(MessageType.SUCCESS.getPattern().replace("%m%", "You have promoted &7"+promote.getName()+" &fto a homie in your faction!")));
}
};
Bukkit.getScheduler().scheduleAsyncDelayedTask(GTAGangs.getInstance(), async);
}
@CommandHandler.CommandContext(name="demote",aliases={"fire"},help="&5&l/gang demote [player] &e- &fDemote the given player to a member in your faction")
public void demotePlayerCommand(final Player player, final String[] args) {
Runnable async = new Runnable() {
public void run() {
GangMember member = GangMember.fromPlayer(player);
if (!(player.hasPermission("gangs.user"))) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You do not have permission to use this command!")));
return;
}
if (member.getGang() == null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be in a gang to demote a player!")));
return;
}
if (member.getRole().getPermissionLevel() != 2) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be the leader in your gang to demote a player!")));
return;
}
if (args.length == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "Please specify a player to promote!")));
return;
}
Gang gang = member.getGang();
OfflinePlayer promote = Bukkit.getOfflinePlayer(args[0]);
if (!(promote.hasPlayedBefore())) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "The given player does not exist!")));
return;
}
if (!gang.getAllMembers().contains(promote)) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "The given player is not in your gang!")));
return;
}
int permLevel;
if (promote.isOnline())
permLevel = GangMember.fromPlayer(promote).getRole().getPermissionLevel();
else
permLevel = SQLVars.getPermissionLevel(promote);
if (permLevel != 1) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You can only demote a player with the rank homie!")));
return;
}
GTAGangs.sql_query.add(SQLVars.UPDATE_PLAYER.replace("%gang%", gang.getName()).replace("%role%", 0+"").replace("%uuid%", promote.getUniqueId().toString()));
if (promote.isOnline()) {
GangMember.fromPlayer(promote).setRole(GangRole.MEMBER);
promote.getPlayer().sendMessage(Formatting.formatMessage(MessageType.INFO.getPattern().replace("%m%", "You have been demoted in your gang! >;(")));
}
player.sendMessage(Formatting.formatMessage(MessageType.SUCCESS.getPattern().replace("%m%", "You have demoted &7"+promote.getName()+" &fback to a member!")));
}
};
Bukkit.getScheduler().scheduleAsyncDelayedTask(GTAGangs.getInstance(), async);
}
@CommandHandler.CommandContext(name="friendlyfire", aliases={"ff", "togglefriendlyfire", "setfriendlyfire"},help="&5&l/gang friendlyfire [on/off/toggle] &e- &fSet friendly fire either on or off")
public void friendlyFireCommand(final Player player, final String[] args) {
Runnable async = new Runnable() {
public void run() {
GangMember member = GangMember.fromPlayer(player);
if (!(player.hasPermission("gangs.user"))) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You do not have permission to use this command!")));
return;
}
if (member.getGang() == null) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be in a gang to set friendly fire!")));
return;
}
if (member.getRole().getPermissionLevel() == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "You must be a homie or higher to set friendly fire!")));
return;
}
if (args.length == 0) {
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "Please specify either yes or no to friendly fire!")));
return;
}
Gang gang = member.getGang();
String ff = args[0];
switch (ff.toLowerCase()) {
case "true":
case "on":
case "yes": { //on
gang.setFriendlyFire(true);
break;
}
case "false":
case "off":
case "no": { //off
gang.setFriendlyFire(false);
break;
}
case "toggle": { //toggle
gang.setFriendlyFire(!gang.isFriendlyFire());
break;
}
default: { //none
player.sendMessage(Formatting.formatMessage(MessageType.ERROR.getPattern().replace("%m%", "Please specify either yes/no or toggle!")));
return;
}
}
player.sendMessage(Formatting.formatMessage(MessageType.SUCCESS.getPattern().replace("%m%", "Friendly fire toggled: &7"+(gang.isFriendlyFire() ? "on" : "off")+"&f!")));
}
};
Bukkit.getScheduler().scheduleAsyncDelayedTask(GTAGangs.getInstance(), async);
}
}