Skip to content

Instantly share code, notes, and snippets.

@mtbarr
Created November 9, 2020 18:17
Show Gist options
  • Save mtbarr/87e3ea06b1fba8f5d22107d2ed25a798 to your computer and use it in GitHub Desktop.
Save mtbarr/87e3ea06b1fba8f5d22107d2ed25a798 to your computer and use it in GitHub Desktop.
Se liga que beleza
package com.massivecraft.factions.engine;
import com.massivecraft.factions.Rel;
import com.massivecraft.factions.customclaim.CustomClaim;
import com.massivecraft.factions.engine.GuiHolder.Menu;
import com.massivecraft.factions.entity.*;
import com.massivecraft.factions.event.EventFactionsMembershipChange;
import com.massivecraft.factions.integration.vault.Eco;
import com.massivecraft.factions.util.ItemBuilder;
import com.massivecraft.massivecore.Engine;
import com.massivecraft.massivecore.ps.PS;
import com.massivecraft.massivecore.store.EntityInternalMap;
import com.massivecraft.massivecore.util.TimeDiffUtil;
import com.massivecraft.massivecore.util.TimeUnit;
import io.github.ninjaservices.item.HeadTexture;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Color;
import org.bukkit.Material;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Player;
import org.bukkit.event.Event.Result;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
public class EngineMenuGui extends Engine {
// -------------------------------------------- //
// INSTANCE & CONSTRUCT
// -------------------------------------------- //
static final SimpleDateFormat SDF = new SimpleDateFormat("dd/MM/yyyy '§s' hh:mm");
static final ItemStack SETSPAWN, NEGAR, AJUDA, CONVITES, PERMISSOES, RELACOES, CONFIRMAR,
DESFAZER, SAIR, A_TITULOS, D_TITULOS, CRIAR,
A_DELIMITACOES, D_DELIMITACOES, BAU, S_CONVITES, VOLTAR,
TOP, E_CONVITES, BASE1, BASE2, BASE3, BASE4, GERADORES,
D_RELACAO, S_ALIANCAS, S_RELACOES, S_PERM1, S_PERM2;
private static final EngineMenuGui i = new EngineMenuGui();
static {
SETSPAWN = new ItemBuilder(Material.MONSTER_EGG).setDurability(54).setName("§ePontos de Spawn")
.setLore("§7Clique aqui para escolher", "§7o local de nascença dos", "§7seus §fGeradores de Monstros§7.").hide().toItemStack();
TOP = new ItemBuilder(HeadTexture.getTempHead("http://textures.minecraft.net/texture/593f67f9f730d42fda8de69565ea55892c5f85d9cae6dd6fcba5d26f1e7238d1%22")).hide().setName("§eRanking das Facções").setLore("§7Clique para ver os rankings com as", "§7Facções mais poderosas do servidor.").toItemStack();
AJUDA = new ItemBuilder(HeadTexture.getTempHead("http://textures.minecraft.net/texture/14c4141c1edf3f7e41236bd658c5bc7b5aa7abf7e2a852b647258818acd70d8%22")).hide().setName("§eAjuda").setLore("§7Todas as ações disponíveis neste menu", "§7também podem ser realizadas por", "§7comando. Utilize o comando '§f/f ajuda§7'", "§7para ver todos os comandos disponíveis.").toItemStack();
CONVITES = new ItemBuilder(Material.PAPER).hide().setName("§eGerenciar Convites").setLore("§7Clique para gerenciar os", "§7convites da sua facção.").toItemStack();
PERMISSOES = new ItemBuilder(Material.BOOK_AND_QUILL).hide().setName("§9Gerenciar permissões").setLore("§7Clique para gerenciar as", "§7permissões da sua facção.").toItemStack();
RELACOES = new ItemBuilder(Material.LEATHER_CHESTPLATE).hide().setName("§aRelações").setLore("§7Clique para gerenciar todas", "§7as relações da sua facção.").setLeatherArmorColor(Color.LIME).hide().toItemStack();
CRIAR = new ItemBuilder(Material.BANNER, 1, 15).hide().setName("§aCriar facção").setLore("§7Clique para criar a sua", "§7facção ou se preferir use", "§7o comando '§f/f criar <tag> <nome>§7'").hide().toItemStack();
DESFAZER = new ItemBuilder(Material.DARK_OAK_DOOR_ITEM).hide().setName("§cDesfazer facção").setLore("§7Clique para desfazer a sua facção.").toItemStack();
SAIR = new ItemBuilder(Material.DARK_OAK_DOOR_ITEM).hide().setName("§cSair da facção").setLore("§7Clique para abandonar a sua facção.").toItemStack();
A_TITULOS = new ItemBuilder(Material.PAINTING).hide().setName("§eTitulos dos Territórios").setLore("§7Clique para alternar.", "", "§fStatus: §aAtivado").hide().toItemStack();
D_TITULOS = new ItemBuilder(Material.PAINTING).hide().setName("§eTitulos dos Territórios").setLore("§7Clique para alternar.", "", "§fStatus: §cDesativado").hide().toItemStack();
A_DELIMITACOES = new ItemBuilder(Material.BARRIER).hide().setName("§aDelimitações das Terras").setLore("§7Clique para alternar.", "", "§fStatus: §aAtivado").toItemStack();
D_DELIMITACOES = new ItemBuilder(Material.BARRIER).hide().setName("§aDelimitações das Terras").setLore("§7Clique para alternar.", "", "§fStatus: §cDesativado").toItemStack();
GERADORES = new ItemBuilder(Material.MOB_SPAWNER).hide().setName("§aGeradores").setLore("§7Clique para gerenciar os", "§7geradores da sua facção.").toItemStack();
BAU = new ItemBuilder(Material.CHEST).hide().setName("§aBaú da facção").setLore("§7Clique para abir o baú", "§7virtual da sua facção.").toItemStack();
S_CONVITES = new ItemBuilder(Material.PAPER).hide().setName("§eConvites de Facções").setLore("§cvocê não possui convites pendentes.").setAmount(0).toItemStack();
CONFIRMAR = new ItemBuilder(Material.WOOL, 1, (byte) 5).hide().setName("§aConfirmar Ação").setLore("§7Clique para confirmar.").toItemStack();
NEGAR = new ItemBuilder(Material.WOOL, 1, (byte) 14).hide().setName("§cCancelar Ação").setLore("§7Clique para cancelar.").toItemStack();
E_CONVITES = new ItemBuilder(HeadTexture.getTempHead("http://textures.minecraft.net/texture/bfaf7aab1e177ad38e51bfc19ab662149c31953a569a40caa81f7a4932069%22")).hide().setName("§aEnviar convite").setLore("§7Clique para enviar um convite de facção", "§7para um player ou se preferir use", "§7o comando '§f/f convite enviar <nome>§7'").toItemStack();
BASE1 = new ItemBuilder(Material.BEDROCK)
.hide()
.setName("§aBase da facção")
.setLore(
"§7Sua facção possui uma base!",
"",
"§fBotão esquerdo: §7Ir para base.",
"§fBotão direito: §7Definir base.",
"§fShift + Botão direito: §7Remover base."
)
.toItemStack();
BASE2 = new ItemBuilder(Material.BEDROCK)
.hide()
.setName("§aBase da facção")
.setLore("§7Sua facção possui uma base!",
"",
"§fBotão esquerdo: §7Ir para base."
)
.toItemStack();
BASE3 = new ItemBuilder(Material.BEDROCK)
.hide()
.setName("§aBase da facção")
.setLore("§7Sua facção ainda não definiu uma base.",
"",
"§fBotão direito: §7Definir base."
)
.toItemStack();
BASE4 = new ItemBuilder(Material.BEDROCK)
.hide()
.setName("§aBase da facção")
.setLore("§7Sua facção ainda não definiu uma base.")
.toItemStack();
VOLTAR = new ItemBuilder(Material.ARROW)
.hide()
.setName("§cVoltar")
.toItemStack();
D_RELACAO = new ItemBuilder(HeadTexture.getTempHead("http://textures.minecraft.net/texture/bfaf7aab1e177ad38e51bfc19ab662149c31953a569a40caa81f7a4932069%22"))
.hide()
.setName("§aDefinir relação")
.setLore("§7Clique para definir uma relação com",
"§7alguma facção ou se preferir use",
"§7o comando '§f/f relação <facção>§7'"
)
.toItemStack();
S_ALIANCAS = new ItemBuilder(Material.LEATHER_CHESTPLATE)
.hide()
.setName("§aAlianças pendentes")
.setLore(
"§cSua facção não possui relações pendentes."
)
.setLeatherArmorColor(Color.LIME)
.hide()
.setAmount(0)
.toItemStack();
S_RELACOES = new ItemBuilder(Material.BOOK).hide().setName("§eVer relações").setLore("§cSua facção não possui relações definidas.").setAmount(0).toItemStack();
S_PERM1 = new ItemBuilder(Material.BARRIER).hide().setName("§aDefinir relação").setLore("§cVocê não tem permissão para isso.").toItemStack();
S_PERM2 = new ItemBuilder(Material.BARRIER).hide().setName("§aAlianças pendentes").setLore("§cVocê não tem permissão para isso.").toItemStack();
}
public static EngineMenuGui get() {
return i;
}
public void abrirMenuPlayerComFaccao(MPlayer mplayer) {
// Variaveis
final Rel cargo = mplayer.getRole();
final Faction factionclaim = BoardColl.get().getFactionAt(PS.valueOf(mplayer.getPlayer().getLocation()));
final Faction faction = mplayer.getFaction();
final String factionNome = faction.getName();
final String factionTag = faction.getTag();
int membrosnafac = faction.getMembersCount();
int membroslimite = faction.getMembersLimit();
int terrastotal = faction.getLandCount();
int mortes = mplayer.getDeaths();
int kills = mplayer.getKills();
int playerpodermaximo = mplayer.getPowerMaxRounded();
int factionpoder = faction.getPowerRounded();
int playerpoder = mplayer.getPowerRounded();
final String kdr = mplayer.getKdrRounded();
final GuiHolder holder = new GuiHolder(Menu.COM_FACCAO);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 54, "[" + factionTag + "§r] " + factionNome);
// Setando os itens normais
inv.setItem(10, new ItemBuilder(Material.SKULL_ITEM, 1, 3).setSkullOwner(mplayer.getPlayer().getName()).setName("§7" + mplayer.getPlayer().getName()).setLore("§fPoder: §7" + playerpoder + "/" + playerpodermaximo, "§fCargo: §7" + cargo.getPrefix() + cargo.getName(), "§fAbates: §7" + kills, "§fMortes: §7" + mortes, "§fKDR: §7" + kdr).toItemStack());
inv.setItem(15, TOP);
inv.setItem(16, AJUDA);
inv.setItem(30, CONVITES);
inv.setItem(31, PERMISSOES);
inv.setItem(32, RELACOES);
inv.setItem(39, new ItemBuilder(Material.SKULL_ITEM, membrosnafac, 3).setName("§aMembros").setLore("§7A sua facção possui §a" + membrosnafac + (membrosnafac == 1 ? "§7 membro." : "§7 membros."), "§7Clique para obter mais Informações.").toItemStack());
inv.setItem(41, SETSPAWN);
inv.setItem(34, faction.getBanner().lore(
"&fTerras: &7" + terrastotal,
"&fPoder: &7" + factionpoder,
"&fMembros: &7" + membroslimite + "/" + membroslimite
).make()
);
if (MConf.get().colocarIconeDoFGeradoresNoMenuGUI) {
inv.setItem(40, GERADORES);
}
if (MConf.get().colocarIconeDoFBauNoMenuGUI) {
inv.setItem(42, BAU);
}
if (mplayer.getRole() == Rel.LEADER) {
inv.setItem(43, DESFAZER);
} else {
inv.setItem(43, SAIR);
}
if (mplayer.isSeeingChunk()) {
inv.setItem(28, A_DELIMITACOES);
} else {
inv.setItem(28, D_DELIMITACOES);
}
if (mplayer.isMapAutoUpdating()) {
inv.setItem(38, new ItemBuilder(Material.MAP)
.setName("§aMapa dos Territórios")
.setLore(
"§7você esta pisando em um território",
"§7protegido pela facção §e[" + factionclaim.getTag() + "§e] " + factionclaim.getName() + "§7.",
"",
"§fBotão esquerdo: §7Desliga o mapa automático.",
"§fBotão direito: §7Mostra o mapa completo.",
"",
"§fMapa automático: §aLigado"
)
.addItemFlag(ItemFlag.HIDE_POTION_EFFECTS)
.toItemStack());
} else {
inv.setItem(38, new ItemBuilder(Material.EMPTY_MAP).setName("§aMapa dos Territórios").setLore("§7você esta pisando em um território", "§7protegido pela facção §e[" + factionclaim.getTag() + "§e] " + factionclaim.getName() + "§7.", "", "§fBotão esquerdo: §7Liga o mapa automático.", "§fBotão direito: §7Mostra o mapa completo.", "", "§fMapa automático: §cDesligado").toItemStack());
}
if (faction.hasHome() && (cargo == Rel.LEADER || cargo == Rel.OFFICER)) {
inv.setItem(29, BASE1);
} else if (faction.hasHome() && (!(cargo == Rel.LEADER || cargo == Rel.OFFICER))) {
inv.setItem(29, BASE2);
} else if (!faction.hasHome() && (cargo == Rel.LEADER || cargo == Rel.OFFICER)) {
inv.setItem(29, BASE3);
} else if (!faction.hasHome() && (!(cargo == Rel.LEADER || cargo == Rel.OFFICER))) {
inv.setItem(29, BASE4);
}
// Abrindo o inventario
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuPlayerSemFaccao(MPlayer mplayer) {
// Variaveis
final Faction factionclaim = BoardColl.get().getFactionAt(PS.valueOf(mplayer.getPlayer().getLocation()));
int mortes = mplayer.getDeaths();
int kills = mplayer.getKills();
int playerpodermaximo = mplayer.getPowerMaxRounded();
int playerpoder = mplayer.getPowerRounded();
int invitations = mplayer.getInvitations().size();
final String kdr2f = mplayer.getKdrRounded();
final GuiHolder holder = new GuiHolder(Menu.SEM_FACCAO);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 45, "Sem facção");
// Setando os itens normais
inv.setItem(10, new ItemBuilder(Material.SKULL_ITEM, 1, 3)
.setSkullOwner(mplayer.getPlayer().getName())
.setName("§7" + mplayer.getPlayer().getName())
.setLore(
"§fPoder: §7" + playerpoder + "/" + playerpodermaximo,
"§fCargo: §7§oNenhum", "§fAbates: §7" + kills,
"§fMortes: §7" + mortes
, "§fKDR: §7" + kdr2f
)
.toItemStack());
inv.setItem(15, TOP);
inv.setItem(16, AJUDA);
inv.setItem(29, CRIAR);
if (invitations > 0) {
inv.setItem(30, new ItemBuilder(Material.PAPER)
.setName("§eConvites de Facções")
.setLore(
"§7você possui §e" + invitations + (invitations == 1 ? "§7 convite pendente." : "§7 convites pendentes."),
"§7Clique para gerenciar " + (invitations == 1 ? "o convite pendente." : "os convites pendentes.")
)
.setAmount(invitations)
.toItemStack());
} else {
inv.setItem(30, S_CONVITES);
}
if (mplayer.isMapAutoUpdating()) {
inv.setItem(31, new ItemBuilder(Material.MAP).setName("§aMapa dos Territórios").setLore("§7você esta pisando em um território", "§7protegido pela facção §e[" + factionclaim.getTag() + "§e] " + factionclaim.getName() + "§7.", "", "§fBotão esquerdo: §7Desliga o mapa automático.", "§fBotão direito: §7Mostra o mapa completo.", "", "§fMapa automático: §aLigado").addItemFlag(ItemFlag.HIDE_POTION_EFFECTS).toItemStack());
} else {
inv.setItem(31, new ItemBuilder(Material.EMPTY_MAP).setName("§aMapa dos Territórios").setLore("§7você esta pisando em um território", "§7protegido pela facção §e[" + factionclaim.getTag() + "§e] " + factionclaim.getName() + "§7.", "", "§fBotão esquerdo: §7Liga o mapa automático.", "§fBotão direito: §7Mostra o mapa completo.", "", "§fMapa automático: §cDesligado").toItemStack());
}
if (mplayer.isSeeingChunk()) {
inv.setItem(33, A_DELIMITACOES);
} else {
inv.setItem(33, D_DELIMITACOES);
}
// Abrindo o inventario
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuMembrosDaFaccao(MPlayer mplayer, Faction faction) {
// Variaveis
int limitemembros = faction.getMembersLimit();
List<MPlayer> mps = faction.getMPlayers();
Player p = mplayer.getPlayer();
GuiHolder holder = new GuiHolder(Menu.MEMBROS);
// Definindo o tamanho do menu com base no limite de membros por facção
int tamanhodomenu = 54;
int slot = 11;
if (limitemembros <= 5) {
tamanhodomenu = 27;
} else if (limitemembros <= 10) {
tamanhodomenu = 36;
} else if (limitemembros < 20) {
tamanhodomenu = 45;
}
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, tamanhodomenu, "Membros da [" + faction.getTag() + "§r]");
if (limitemembros > 25) slot = 2;
ItemStack vago = new ItemBuilder(Material.SKULL_ITEM, 1, 3).setName("§8Vago").toItemStack();
for (int i = 0; i < limitemembros && i < 30; i++) {
inv.setItem(slot, vago);
slot += slot == 6 || slot == 15 || slot == 24 || slot == 33 || slot == 42 ? +5 : +1;
}
if (limitemembros > 25) slot = 2;
else slot = 11;
for (int i = 0; i < mps.size() && slot < 30; i++) {
MPlayer mp = mps.get(i);
Rel cargo = mp.getRole();
String nome = mp.getName();
boolean isOnline = mp.isOnline();
int poderMax = mp.getPowerMaxRounded();
int poderAtual = mp.getPowerRounded();
int kills = mp.getKills();
int deaths = mp.getDeaths();
String kdr2f = mp.getKdrRounded();
String ultimoLogin = SDF.format(new Date(mp.getLastActivityMillis()));
inv.setItem(slot, new ItemBuilder(HeadTexture.getPlayerHead(nome))
.setName("§7" + nome)
.setLore("§fPoder: §7" + poderAtual + "/" + poderMax, "§fCargo: §7" + cargo.getPrefix() + cargo.getName(),
"§fAbates: §7" + kills, "§fMortes: §7" + deaths, "§fKDR: §7" + kdr2f,
"§fStats: " + (isOnline ? "§aOnline" : "§cOffline"),
"§fÚltimo login: §7" + ultimoLogin
)
.toItemStack());
slot += slot == 6 || slot == 15 || slot == 24 ? +5 : +1;
}
p.openInventory(inv);
}
public void abrirMenuDesfazerFaccao(MPlayer mp) {
// Variaveis
Player p = mp.getPlayer();
Faction faction = mp.getFaction();
String factionNome = faction.getName();
String factionTag = faction.getTag();
GuiHolder holder = new GuiHolder(Menu.DESFAZER_FACCAO);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 36, "Desfazer facção");
// Setando os itens
inv.setItem(13, new ItemBuilder(Material.PAPER)
.setName("§fInformações")
.setLore("§7você esta prestes a desfazer", "§7totalmente a facção §e[" + factionTag + "§e] " + factionNome + "§7.")
.toItemStack());
inv.setItem(20, CONFIRMAR);
inv.setItem(24, NEGAR);
// Abrindo o inventario
p.openInventory(inv);
}
public void abrirMenuAbandonarFaccao(MPlayer mp) {
// Variaveis
Player p = mp.getPlayer();
Faction faction = mp.getFaction();
String factionNome = faction.getName();
String factionTag = faction.getTag();
GuiHolder holder = new GuiHolder(Menu.ABANDONAR_FACCAO);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 36, "Abandonar facção");
// Setando os itens
inv.setItem(13, new ItemBuilder(Material.PAPER)
.setName("§fInformações")
.setLore(
"§7você esta prestes a abandonar",
"§7a facção §e[" + factionTag + "§e] " + factionNome + "§7."
)
.toItemStack());
inv.setItem(20, CONFIRMAR);
inv.setItem(24, NEGAR);
// Abrindo o inventario
p.openInventory(inv);
}
public void abrirMenuAbandonarTerras(MPlayer mplayer) {
// Variaveis
Faction faction = mplayer.getFaction();
int terras = faction.getLandCount();
GuiHolder holder = new GuiHolder(Menu.ABANDONAR_TERRAS);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 36, "Abandonar todas as terras");
// Setando os itens
inv.setItem(13, new ItemBuilder(Material.PAPER).setName("§fInformações").setLore("§7você esta prestes a abandonar §2" + terras + " §7terras.").toItemStack());
inv.setItem(20, CONFIRMAR);
inv.setItem(24, NEGAR);
// Abrindo o inventario
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuKickarPlayer(Player p, MPlayer mp) {
// Variaveis
GuiHolder holder = new GuiHolder(Menu.KICKAR_PLAYER);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 36, "Expulsar player");
// Setando os itens
inv.setItem(13, new ItemBuilder(Material.PAPER).setName("§fInformações").setLore("§7você esta prestes a expulsar", "§2" + mp.getName() + "§7 da sua facção.").toItemStack());
inv.setItem(20, CONFIRMAR);
inv.setItem(24, NEGAR);
// Abrindo o inventario
p.openInventory(inv);
}
public void abrirMenuConvites(MPlayer mplayer) {
// Variaveis
Faction faction = mplayer.getFaction();
int nconvites = faction.getInvitations().size();
GuiHolder holder = new GuiHolder(Menu.CONVITES);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 27, "Gerenciar convites");
//Setando os itens
inv.setItem(11, E_CONVITES);
if (nconvites == 0) {
inv.setItem(15, new ItemBuilder(Material.PAPER).setName("§eGerenciar convites pendentes").setLore("§cSua facção não possui convites pendentes.").setAmount(nconvites).toItemStack());
} else {
inv.setItem(15, new ItemBuilder(Material.PAPER).setName("§eGerenciar convites pendentes").setLore("§7Sua facção possui §e" + nconvites + (nconvites == 1 ? " §7convite pendente." : " §7convites pendentes."), "§7Clique para gerenciar" + (nconvites == 1 ? " §7o convite pendente." : " §7os convites pendentes.")).setAmount(nconvites).toItemStack());
}
// Abrindo o inventario
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuConvitesEnviados(Faction faction, MPlayer mp) {
// Variaveis
Player p = mp.getPlayer();
long now = System.currentTimeMillis();
EntityInternalMap<Invitation> invitations = faction.getInvitations();
int convites = invitations.size();
int tamanho = 54;
int flecha = 49;
int slot = 10;
GuiHolder holder = new GuiHolder(Menu.CONVITES_ENVIADOS);
// Defindindo o tamanho do inv
if (convites <= 7) {
tamanho = 36;
flecha = 31;
} else if (convites <= 14) {
tamanho = 45;
flecha = 40;
}
//Criando o inventario
Inventory inv = Bukkit.createInventory(holder, tamanho, "Convites pendentes (" + invitations.size() + ")");
int n = 1;
for (Entry<String, Invitation> invitation : invitations.entrySet()) {
// Pegando jogador convidado;
MPlayer invited = MPlayer.get(invitation.getKey());
// Pegando jogador que convidou;
MPlayer inviter = MPlayer.get(invitation.getValue().getInviterId());
// Pegando o nome do jogador convidado
String invitedName = invited != null ? invited.getName() : "§8§oDesconhecido";
// Pegando o nome do jogador que convidou
String inviterName = inviter != null ? inviter.getRole().getPrefix() + inviter.getName() : "§8§oDesconhecido";
// Pegando o tempo desde o envio do convite
String inviteTime = "§7§o0 minutos";
if (invitation.getValue().getCreationMillis() != null) {
long millis = now - invitation.getValue().getCreationMillis();
LinkedHashMap<TimeUnit, Long> ageUnitcounts = TimeDiffUtil.limit(TimeDiffUtil.unitcounts(millis, TimeUnit.getAllButMillis()), 2);
inviteTime = TimeDiffUtil.formatedMinimal(ageUnitcounts);
}
// Criando o item no menu gui
inv.setItem(slot, new ItemBuilder(Material.PAPER).setName("§eConvite #" + n).setLore("§7Player convidado: §f" + invitedName, "§7Quem convidou: §f" + inviterName, "§7Convite enviado há " + inviteTime + "§7 atrás.", "", "§fBotão direito: §7Deletar convite", "§fShift + Botão direito: §7Informações do player").toItemStack());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
n++;
}
inv.setItem(flecha, VOLTAR);
// Abrindo o inventario
p.openInventory(inv);
}
public void abrirMenuConvitesRecebidos(MPlayer mp) {
// Variaveis
Player p = mp.getPlayer();
long now = System.currentTimeMillis();
Set<String> invitations = mp.getInvitations();
int convites = invitations.size();
int tamanho = 54;
int flecha = 49;
int slot = 10;
GuiHolder holder = new GuiHolder(Menu.CONVITES_RECEBIDOS);
// Defindindo o tamanho do inv
if (convites <= 7) {
tamanho = 36;
flecha = 31;
} else if (convites <= 14) {
tamanho = 45;
flecha = 40;
}
//Criando o inventario
Inventory inv = Bukkit.createInventory(holder, tamanho, "Convites pendentes (" + invitations.size() + ")");
int n = 1;
for (String factionId : invitations) {
// Pegando a facção que enviou o convite
Faction faction = Faction.get(factionId);
// Pegando o nome da facção que convidou
String factionName = faction != null ? faction.getName() : "§cFacção Deletada";
String factionTag = faction != null ? faction.getTag() : "---";
Invitation invitation = faction != null ? faction.getInvitations().get(mp.getId()) : null;
// Pegando o tempo desde o envio do convite e pegando o player que convite
String inviteTime = "§7§o0 minutos";
String inviterName = "§8§oDesconhecido";
if (invitation != null && invitation.getCreationMillis() != null) {
long millis = now - invitation.getCreationMillis();
LinkedHashMap<TimeUnit, Long> ageUnitcounts = TimeDiffUtil.limit(TimeDiffUtil.unitcounts(millis, TimeUnit.getAllButMillis()), 2);
inviteTime = TimeDiffUtil.formatedMinimal(ageUnitcounts);
MPlayer inviter = MPlayer.get(invitation.getInviterId());
inviterName = inviter != null ? inviter.getRole().getPrefix() + inviter.getName() : "§8§oDesconhecido";
}
// Criando o item no menu gui
inv.setItem(slot, new ItemBuilder(Material.PAPER).setName("§eConvite #" + n).setLore("§7Convite da facção: §f[" + factionTag + "§f] " + factionName, "§7Convite enviado por: §f" + inviterName, "§7Convite recebido há " + inviteTime + "§7 atrás.", "", "§fBotão Esquerdo: §7Aceitar convite", "§fBotão direito: §7Recusar convite", "§fShift + Botão direito: §7Informações da facção").toItemStack());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
n++;
}
inv.setItem(flecha, VOLTAR);
// Abrindo o inventario
p.openInventory(inv);
}
public void abrirMenuGerenciarRelacoes(MPlayer mplayer) {
// Variaveis
Faction faction = mplayer.getFaction();
int npendentes = faction.getSemiAllys().size();
int nrelations = faction.getEnemies().size() + faction.getAllys().size() + npendentes;
GuiHolder holder = new GuiHolder(Menu.GERENCIAR_RELACOES);
Inventory inv = Bukkit.createInventory(holder, 27, "Gerenciar relações");
// Setando os itens
inv.setItem(11, D_RELACAO);
if (npendentes < 1) {
inv.setItem(13, S_ALIANCAS);
} else {
inv.setItem(13, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§aalianças pendentes").setLore("§7Clique para ver todos os convites", "§7de aliança pendentes recebidos ou", "§7enviados pela sua facção.").setLeatherArmorColor(Color.LIME).setAmount(npendentes).toItemStack());
}
if (nrelations < 1) {
inv.setItem(15, S_RELACOES);
} else {
inv.setItem(15, new ItemBuilder(Material.BOOK).setName("§eVer relações").setLore("§7Clique para ver a lista", "§7de relações da sua facção.").setAmount(nrelations > 64 ? 1 : nrelations).toItemStack());
}
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuVerRelacoes(MPlayer mplayer) {
// Variaveis
Faction faction = mplayer.getFaction();
int nrelations = faction.getEnemies().size() + faction.getAllys().size() + faction.getSemiAllys().size();
GuiHolder holder = new GuiHolder(Menu.VER_RELACOES);
Inventory inv = Bukkit.createInventory(holder, 27, "Gerenciar relações");
// Setando os itens
inv.setItem(11, S_PERM1);
inv.setItem(13, S_PERM2);
if (nrelations < 1) {
inv.setItem(15, S_RELACOES);
} else {
inv.setItem(15, new ItemBuilder(Material.BOOK).setName("§eVer relações").setLore("§7Clique para ver a lista", "§7de relações da sua facção.").setAmount(nrelations > 64 ? 1 : nrelations).toItemStack());
}
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuDefinirRelacao(MPlayer mplayer, Faction otherFaction) {
// Variaveis
String factionTag = otherFaction.getTag();
String factionName = otherFaction.getName();
Player p = mplayer.getPlayer();
Faction faction = mplayer.getFaction();
GuiHolder holder = new GuiHolder(Menu.DEFINIR_RELACAO);
Inventory inv = Bukkit.createInventory(holder, 27, "Relação com [" + factionTag + "§r]");
// Setando os itens
if (faction.getRelationTo(otherFaction) == Rel.ALLY) {
inv.setItem(11, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§bSua a facção já é aliada da [" + factionTag + "§b] " + factionName).setLeatherArmorColor(Color.AQUA).toItemStack());
} else if (faction.getRelationWish(otherFaction) == Rel.ALLY || otherFaction.getRelationWish(faction) == Rel.ALLY) {
inv.setItem(11, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§bDefinir aliança com a [" + factionTag + "§b] " + factionName).setLore("§eSua facção já possui um convite", "§ede aliança pendente com a §7[" + factionTag + "§7]§e!", "", "§fClique para ver a lista de", "§fconvites de aliança pendentes.").setLeatherArmorColor(Color.AQUA).toItemStack());
} else {
inv.setItem(11, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§bDefinir aliança com a [" + factionTag + "§b] " + factionName).setLore("§fClique para definir relação de aliança.").setLeatherArmorColor(Color.AQUA).toItemStack());
}
if (faction.getRelationWish(otherFaction) == Rel.NEUTRAL) {
inv.setItem(13, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§fSua a facção já é neutra da [" + factionTag + "§f] " + factionName).setLeatherArmorColor(Color.WHITE).toItemStack());
} else {
inv.setItem(13, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§fDefinir neutralidade com a [" + factionTag + "§f] " + factionName).setLore("§fClique para definir relação de neutralidade.").setLeatherArmorColor(Color.WHITE).toItemStack());
}
if (faction.getRelationWish(otherFaction) == Rel.ENEMY) {
inv.setItem(15, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§cSua a facção já é rival da [" + factionTag + "§c] " + factionName).setLeatherArmorColor(Color.RED).toItemStack());
} else {
inv.setItem(15, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§cDefinir rivalidade com a [" + factionTag + "§c] " + factionName).setLore("§fClique para definir relação de aliança.").setLeatherArmorColor(Color.RED).toItemStack());
}
// Abrindo o inventario
p.openInventory(inv);
}
public void abrirMenuRelacoesPendentes(MPlayer mplayer) {
// Variaveis
Faction faction = mplayer.getFaction();
int enviados = faction.getPendingRelationsReceived().size();
int recebidos = faction.getPendingRelationsSent().size();
int npendentes = enviados + recebidos;
GuiHolder holder = new GuiHolder(Menu.RELACOES_PENDENTES);
Inventory inv = Bukkit.createInventory(holder, 36, "alianças pendentes (" + npendentes + ")");
// Setando os itens
inv.setItem(31, new ItemBuilder(Material.ARROW).setName("§cVoltar").toItemStack());
if (recebidos > 0) {
inv.setItem(11, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§bConvites de aliança recebidos pendentes").setLore("§7Sua facção possui §b" + recebidos + (recebidos == 1 ? " §7convite recebido pendente." : " §7convites recebidos pendentes.")).setLeatherArmorColor(Color.AQUA).setAmount(recebidos).toItemStack());
} else {
inv.setItem(11, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§bConvites de aliança recebidos pendentes").setLore("§cSua facção não possui nenhum", "§cconvite recebido pendente.").setLeatherArmorColor(Color.AQUA).setAmount(0).toItemStack());
}
if (enviados > 0) {
inv.setItem(15, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§aConvites de aliança enviados pendentes").setLore("§7Sua facção possui já " + enviados + (enviados == 1 ? " §7convite enviado pendente." : " §7convites enviados pendentes.")).setLeatherArmorColor(Color.LIME).setAmount(enviados).toItemStack());
} else {
inv.setItem(15, new ItemBuilder(Material.LEATHER_CHESTPLATE).setName("§aConvites de aliança enviados pendentes").setLore("§cSua facção não possui nenhum", "§cconvite enviado pendente.").setLeatherArmorColor(Color.LIME).setAmount(0).toItemStack());
}
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuRelacoesPendentesEnviados(MPlayer mplayer) {
// Variaveis
Faction faction = mplayer.getFaction();
Set<Faction> facs = faction.getPendingRelationsReceived();
int enviados = facs.size();
int tamanho = 54;
int flecha = 49;
int slot = 10;
GuiHolder holder = new GuiHolder(Menu.RELACOES_PENDENTES_ENVIADAS);
// Tamanho do menu GUI
if (enviados <= 7) {
tamanho = 36;
flecha = 31;
} else if (enviados <= 14) {
tamanho = 45;
flecha = 40;
}
Inventory inv = Bukkit.createInventory(holder, tamanho, "Convites enviados pendentes");
// Setando os itens
for (Faction f : facs) {
String factionNome = f.getName();
String factionTag = f.getTag();
inv.setItem(slot, new ItemBuilder(Material.PAPER).setName("§eConvite para facção §f[" + factionTag + "§f] " + factionNome).setLore("§fBotão Direito: §7Deletar convite", "§fShift + Botão direito: §7Informações da facção").toItemStack());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
}
inv.setItem(flecha, VOLTAR);
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuRelacoesPendentesRecebidos(MPlayer mplayer) {
// Variaveis
Faction faction = mplayer.getFaction();
Set<Faction> facs = faction.getPendingRelationsSent();
int recebidos = facs.size();
int tamanho = 54;
int flecha = 49;
int slot = 10;
GuiHolder holder = new GuiHolder(Menu.RELACOES_PENDENTES_RECEBIDAS);
//Tamano do menu GUI
if (recebidos <= 7) {
tamanho = 36;
flecha = 31;
} else if (recebidos <= 14) {
tamanho = 45;
flecha = 40;
}
Inventory inv = Bukkit.createInventory(holder, tamanho, "Convites recebidos pendentes");
// Setando os itens
for (Faction f : facs) {
String factionNome = f.getName();
String factionTag = f.getTag();
inv.setItem(slot, new ItemBuilder(Material.PAPER).setName("§eConvite da facção §f[" + factionTag + "§f] " + factionNome).setLore("§fBotão Esquerdo: §7Aceitar convite", "§fBotão Direito: §7Deletar convite", "§fShift + Botão direito: §7Informações da facção").toItemStack());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
}
inv.setItem(flecha, VOLTAR);
mplayer.getPlayer().openInventory(inv);
}
public void abrirMenuProtegerTerreno(Player p) {
// Variaveis
GuiHolder holder = new GuiHolder(Menu.PROTEGER_TERRENO);
// Criando o inventario
Inventory inv = Bukkit.createInventory(holder, 36, "Proteger terreno");
// Setando os itens
inv.setItem(13, new ItemBuilder(Material.PAPER).setName("§fInformações").setLore("§7Você esta prestes a gastar §2" + MConf.get().dinheiroCobradoParaProteger + " §7coins.", "§7para proteger este terreno por 30 minutos.").toItemStack());
inv.setItem(20, CONFIRMAR);
inv.setItem(24, NEGAR);
// Abrindo o inventario
p.openInventory(inv);
}
public void abrirMenuRelacoesListar(MPlayer mplayer, int pag) {
// Variaveis
Faction faction = mplayer.getFaction();
GuiHolder holder = new GuiHolder(Menu.RELACOES_LISTAR);
Set<Faction> semiAllys = faction.getSemiAllys();
Set<Faction> allys = faction.getAllys();
Set<Faction> enemies = faction.getEnemies();
int jump = (pag - 1) * 28;
int slot = 10;
int i = 0;
// Tamanho do menu gui
int tamanho = (int) (Math.ceil((semiAllys.size() + allys.size() + enemies.size() - jump) / 7D) + 2) * 9;
if (tamanho > 54)
tamanho = 54;
Inventory inv = Bukkit.createInventory(holder, tamanho, "Relaçoes da facção");
if (pag == 1) {
i = 1;
for (Faction f : semiAllys) {
inv.setItem(slot, f.getBanner().name("§3Aliado PENDENTE #" + i++ + " " + f.getTag() + " §3- " + f.getName()).make());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
}
i = 1;
String allyColor = MConf.get().colorAlly.toString();
for (Faction f : allys) {
if (slot == 44) {
inv.setItem(26, new ItemBuilder(Material.ARROW).setName("§aPágina " + (pag + 1)).setLore("§7Clique para avançar", "§7de Página.").hide().toItemStack());
break;
}
inv.setItem(slot, f.getBanner().name(allyColor + "Aliado #" + i++ + " " + f.getTag() + allyColor + " - " + f.getName()).make());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
}
i = 1;
String enemyColor = MConf.get().colorEnemy.toString();
for (Faction f : enemies) {
if (slot == 44) {
inv.setItem(26, new ItemBuilder(Material.ARROW).setName("§aPágina " + (pag + 1)).setLore("§7Clique para avançar", "§7de Página.").hide().toItemStack());
break;
}
inv.setItem(slot, f.getBanner().name(enemyColor + "Inimigo #" + i++ + " " + f.getTag() + enemyColor + " - " + f.getName()).make());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
}
} else {
String enemyColor = MConf.get().colorEnemy.toString();
i += semiAllys.size() + allys.size();
int normal = 1 + jump - i;
for (Faction f : enemies) {
if (++i <= jump) continue;
if (slot == 44) {
inv.setItem(26, new ItemBuilder(Material.ARROW).setName("§aPágina " + (pag + 1)).setLore("§7Clique para avançar", "§7de Página.").hide().toItemStack());
break;
}
inv.setItem(slot, f.getBanner().name(enemyColor + "Inimigo #" + normal++ + " " + f.getTag() + enemyColor + " - " + f.getName()).make());
slot += slot == 16 || slot == 25 || slot == 34 ? +3 : +1;
}
inv.setItem(tamanho == 27 ? 9 : 18, new ItemBuilder(Material.ARROW).setName("§aPágina " + (pag - 1)).setLore("§7Clique para voltar", "§7de Página.").hide().toItemStack());
}
mplayer.getPlayer().openInventory(inv);
}
// -------------------------------------------- //
// CLICK LISTENER
// -------------------------------------------- //
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void aoClickar(InventoryClickEvent e) {
Inventory inv = e.getInventory();
InventoryHolder holder = inv.getHolder();
if (!(holder instanceof GuiHolder))
return;
e.setCancelled(true);
e.setResult(Result.DENY);
if (e.getCurrentItem() == null)
return;
Menu menu = ((GuiHolder) holder).getType();
Player p = (Player) e.getWhoClicked();
MPlayer mp = MPlayer.get(p);
int slot = e.getRawSlot();
if (inv.getSize() < slot) return;
if (menu == Menu.SEM_FACCAO) {
switch (slot) {
case 15:
p.chat("/f top");
break;
case 16:
p.chat("/f ajuda");
p.closeInventory();
break;
case 29:
p.sendMessage("§cUtilize: /f criar <tag> <nome>");
p.closeInventory();
break;
case 30: {
ItemStack item = e.getCurrentItem();
if (item.getAmount() > 0) {
abrirMenuConvitesRecebidos(mp);
return;
}
break;
}
case 31:
if (e.getClick().isRightClick()) {
p.chat("/f mapa");
} else if (e.getClick().isLeftClick()) {
mp.setMapAutoUpdating(!mp.isMapAutoUpdating());
abrirMenuPlayerSemFaccao(mp);
}
break;
case 32:
p.chat("/f tt");
abrirMenuPlayerSemFaccao(mp);
break;
case 33:
p.chat("/f sc");
abrirMenuPlayerSemFaccao(mp);
break;
}
} else if (menu == Menu.COM_FACCAO) {
Faction f = mp.getFaction();
switch (slot) {
case 15:
p.chat("/f top");
break;
case 16:
p.chat("/f ajuda");
p.closeInventory();
break;
case 28:
p.chat("/f sc");
p.closeInventory();
break;
case 29:
if (!f.hasHome()) {
if (mp.getRole() == Rel.LEADER || mp.getRole() == Rel.OFFICER || mp.isOverriding()) {
if (e.getClick().isRightClick()) {
p.chat("/f sethome");
abrirMenuPlayerComFaccao(mp);
}
}
} else {
if (e.getClick().isShiftClick()) {
if (mp.getRole() == Rel.LEADER || mp.getRole() == Rel.OFFICER || mp.isOverriding()) {
p.chat("/f delhome");
abrirMenuPlayerComFaccao(mp);
return;
}
}
if (e.getClick().isRightClick()) {
if (mp.getRole() == Rel.LEADER || mp.getRole() == Rel.OFFICER || mp.isOverriding()) {
p.chat("/f sethome");
return;
}
}
if (e.getClick().isLeftClick()) {
p.chat("/f home");
p.closeInventory();
}
}
break;
case 30:
if (mp.getRole() == Rel.LEADER || mp.getRole() == Rel.OFFICER || mp.isOverriding()) {
abrirMenuConvites(mp);
} else {
p.sendMessage("§cVocê precisar ser capitão ou superior para poder gerenciar os convites da facção.");
}
break;
case 31:
EngineMenuPermissoes.get().abrirMenuPermissoes(mp, f);
break;
case 37:
p.chat("/f tt");
abrirMenuPlayerComFaccao(mp);
break;
case 38:
if (e.getClick().isRightClick()) {
p.chat("/f mapa");
} else if (e.getClick().isLeftClick()) {
mp.setMapAutoUpdating(!mp.isMapAutoUpdating());
abrirMenuPlayerComFaccao(mp);
}
break;
case 39:
abrirMenuMembrosDaFaccao(mp, f);
break;
case 41:
p.chat("/f setspawn");
break;
case 32:
if (mp.getRole() == Rel.LEADER || mp.getRole() == Rel.OFFICER || mp.isOverriding()) {
abrirMenuGerenciarRelacoes(mp);
} else {
abrirMenuVerRelacoes(mp);
}
break;
case 40:
if (MConf.get().colocarIconeDoFGeradoresNoMenuGUI) {
p.chat("/f geradores");
}
break;
case 42:
if (MConf.get().colocarIconeDoFBauNoMenuGUI) {
p.chat("/f bau");
}
break;
case 43:
if (mp.getRole() == Rel.LEADER || mp.isOverriding()) {
abrirMenuDesfazerFaccao(mp);
} else {
abrirMenuAbandonarFaccao(mp);
}
break;
}
} else if (menu == Menu.DESFAZER_FACCAO) {
if (slot == 20) {
p.chat("/f desfazer confirmar");
p.closeInventory();
} else if (slot == 24) {
p.sendMessage("§cAção cancelada com sucesso.");
p.closeInventory();
}
} else if (menu == Menu.ABANDONAR_FACCAO) {
if (slot == 20) {
p.chat("/f sair confirmar");
p.closeInventory();
} else if (slot == 24) {
p.sendMessage("§cAção cancelada com sucesso.");
p.closeInventory();
}
} else if (menu == Menu.ABANDONAR_TERRAS) {
if (slot == 20) {
AtomicInteger count = new AtomicInteger(0);
BoardColl.get().getChunks(mp.getFaction()).forEach(ps -> {
Chunk chunk = ps.asBukkitChunk(true);
if (chunk == null) {
return;
}
for (BlockState tileEntity : chunk.getTileEntities()) {
if (tileEntity.getType() != Material.MOB_SPAWNER) {
continue;
}
count.incrementAndGet();
}
});
if (count.get() > 0) {
p.sendMessage("§cA facção possui spawners em alguma de suas terras, por isto, não podemos abandonar todas.");
return;
}
p.chat("/f unclaim all confirmar");
p.closeInventory();
} else if (slot == 24) {
p.sendMessage("§cAção cancelada com sucesso.");
p.closeInventory();
}
} else if (menu == Menu.KICKAR_PLAYER) {
if (slot == 20) {
String name = inv.getItem(13).getItemMeta().getLore().get(1).replace("§7 da sua facção.", "").replace("§2", "").trim();
p.chat("/f kickar " + name + " confirmar");
p.closeInventory();
} else if (slot == 24) {
p.sendMessage("§cAção cancelada com sucesso.");
p.closeInventory();
}
} else if (menu == Menu.PROTEGER_TERRENO) {
if (slot == 20) {
Faction f = mp.getFaction();
if (!Eco.isEnabled()) {
p.sendMessage("§cNenhum sistema de economia pode ser encontrado.");
p.closeInventory();
return;
}
double price = MConf.get().dinheiroCobradoParaProteger;
if (!Eco.has(p, price)) {
p.sendMessage("§cVocê não possui dinheiro suficiente para proteger este terreno.");
p.closeInventory();
return;
}
Chunk location = p.getLocation().getChunk();
PS ps = PS.valueOf(location);
Faction at = BoardColl.get().getFactionAt(ps);
if (!at.isNone()) {
p.sendMessage("§cVocê só pode proteger terrenos que estejam livres.");
p.closeInventory();
return;
}
if (!MConf.get().worldsClaimingEnabled.contains(ps.getWorld())) {
p.sendMessage("§cA compra de territórios esta desabilitada neste mundo.");
return;
}
int limit = MConf.get().limiteDeProtecoesTemporaria;
if (limit > 0 && EngineCustomClaim.get().getTemporaryChunksSize(f.getId()) >= 2) {
p.sendMessage("§cLimite máximo de terrenos temporários atingido (" + limit + ")! Abandone terrenos temporário antigos para poder proteger novos terrenos.");
p.closeInventory();
return;
}
p.closeInventory();
CustomClaim customClaim = EngineCustomClaim.get().addClaim(f, location.getX(), location.getZ(), true);
if (customClaim == null) {
return;
}
Eco.Withdraw(p, price);
BoardColl.get().setFactionAt(ps, f);
p.sendMessage("§aTerreno protegido com sucesso.");
} else if (slot == 24) {
p.sendMessage("§cAção cancelada com sucesso.");
p.closeInventory();
}
} else if (menu == Menu.CONVITES) {
Faction f = mp.getFaction();
if (slot == 11) {
p.sendMessage("§cUtilize o comando, esta função foi desativada.");
p.closeInventory();
} else if (slot == 15) {
if (f.getInvitations().size() > 0) {
abrirMenuConvitesEnviados(mp.getFaction(), mp);
}
}
} else if (menu == Menu.CONVITES_ENVIADOS) {
ItemStack item = e.getCurrentItem();
if (item.getType() == Material.ARROW) {
abrirMenuConvites(mp);
} else if (item.getType() == Material.PAPER) {
String nome = item.getItemMeta().getLore().get(0).replace("§7Player convidado: §f", "").replace(" ", "");
if (e.getClick().isShiftClick()) {
p.chat("/f perfil " + nome);
p.closeInventory();
} else if (e.getClick().isRightClick()) {
p.chat("/f convite del " + nome);
abrirMenuConvitesEnviados(mp.getFaction(), mp);
}
}
} else if (menu == Menu.CONVITES_RECEBIDOS) {
ItemStack item = e.getCurrentItem();
if (item.getType() == Material.ARROW) {
abrirMenuPlayerSemFaccao(mp);
} else if (item.getType() == Material.PAPER) {
String tag = item.getItemMeta()
.getLore()
.get(0)
.replace("§7Convite da facção: §f[", "")
.split("§f]")[0]
.replace("§f]", "")
.replace(" ", "")
.toUpperCase();
if (e.getClick().isShiftClick()) {
p.chat("/f info " + tag);
p.closeInventory();
} else if (e.getClick().isLeftClick()) {
Faction faction = FactionColl.get().getByTag(tag);
faction.uninvite(mp);
faction.changed();
mp.removeInvitation(faction);
if (mp.hasFaction()) {
mp.msg("§cVocê já possui facção.");
return;
}
// Verificando se a facção atingiu o limite de membros definido na config
if (MConf.get().factionMemberLimit > 0 && faction.getMembersCount() >= faction.getMembersLimit()) {
mp.msg("§cA facção §f[%s§f] %s§c já atingiu o limite maximo de membros por facção (%d), portanto você não pode entrar.", faction.getTag(), faction.getName(), faction.getMembersLimit());
return;
}
// Evento
EventFactionsMembershipChange membershipChangeEvent = new EventFactionsMembershipChange(p, mp, faction, EventFactionsMembershipChange.MembershipChangeReason.JOIN);
membershipChangeEvent.run();
if (membershipChangeEvent.isCancelled()) return;
// Informando o player e a facção
faction.msg("§f%s§e entrou na facção§e.", mp.getName());
mp.msg("§aVocê entrou na facção §f[%s§f] %s§a.", faction.getTag(), faction.getName());
// Aplicando o evento
mp.resetFactionData();
mp.setFaction(faction);
mp.setRole(Rel.RECRUIT);
mp.changed();
p.closeInventory();
} else {
Faction target = FactionColl.get().getByTag(tag);
if (target == null) {
p.sendMessage("§cUm erro interno foi detectado, por favor contato um administrou ou aguarde a reinicialização do servidor.");
return;
}
p.sendMessage("§aConvite da facção §f[" + tag + "§f]§a deletado com sucesso.");
target.msg("§f" + mp.getName() + "§e recuso o convite para entrar na facção.");
target.uninvite(mp);
abrirMenuConvitesRecebidos(mp);
}
}
} else if (menu == Menu.GERENCIAR_RELACOES) {
switch (slot) {
case 11:
p.sendMessage("§cUtilize o comando, esta função foi desativada.");
p.closeInventory();
break;
case 13:
if (e.getCurrentItem().getAmount() > 0) {
abrirMenuRelacoesPendentes(mp);
}
break;
case 15:
if (e.getCurrentItem().getAmount() > 0) {
abrirMenuRelacoesListar(mp, 1);
}
break;
}
} else if (menu == Menu.VER_RELACOES) {
if (slot == 15) {
ItemStack item = e.getCurrentItem();
if (item.getAmount() > 0) {
abrirMenuRelacoesListar(mp, 1);
}
}
} else if (menu == Menu.DEFINIR_RELACAO) {
ItemStack item = e.getCurrentItem();
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return;
String faction = e.getInventory().getName().replace("Relação com [", "")
.replace("§r]", "").replace(" ", "").toUpperCase();
switch (slot) {
case 11:
if (item.getItemMeta().getLore().size() < 2) {
p.chat("/f relacao " + faction + " ally");
p.closeInventory();
} else {
abrirMenuRelacoesPendentes(mp);
}
break;
case 13:
p.chat("/f relacao " + faction + " neutral");
p.closeInventory();
break;
case 15:
p.chat("/f relacao " + faction + " enemy");
p.closeInventory();
break;
}
} else if (menu == Menu.RELACOES_PENDENTES) {
ItemStack item = e.getCurrentItem();
switch (slot) {
case 11:
if (item.getAmount() > 0) {
abrirMenuRelacoesPendentesRecebidos(mp);
}
break;
case 15:
if (item.getAmount() > 0) {
abrirMenuRelacoesPendentesEnviados(mp);
}
break;
case 31:
abrirMenuGerenciarRelacoes(mp);
break;
}
} else if (menu == Menu.RELACOES_PENDENTES_ENVIADAS) {
Faction f = mp.getFaction();
ItemStack item = e.getCurrentItem();
if (item.getType() == Material.ARROW) {
abrirMenuRelacoesPendentes(mp);
} else if (item.getType() == Material.PAPER) {
String tag = item.getItemMeta().getDisplayName().replace("§eConvite para facção §f[", "").split("§f]")[0].replace("§f]", "").replace(" ", "").toUpperCase();
if (e.getClick().isShiftClick()) {
p.chat("/f info " + tag.replace(" ", ""));
p.closeInventory();
} else if (e.getClick().isRightClick()) {
Faction target = FactionColl.get().getByTag(tag);
String factionNome = target.getName();
String factionTag = target.getTag();
f.setRelationWish(target, Rel.NEUTRAL);
p.sendMessage("§eConvite de aliança para a facção §f[" + factionTag + "§f] " + factionNome + "§e deletado com sucesso.");
abrirMenuRelacoesPendentesEnviados(mp);
}
}
} else if (menu == Menu.RELACOES_PENDENTES_RECEBIDAS) {
Faction f = mp.getFaction();
String factionNome = f.getName();
String factionTag = f.getTag();
ItemStack item = e.getCurrentItem();
if (item.getType() == Material.ARROW) {
abrirMenuRelacoesPendentes(mp);
} else if (item.getType() == Material.PAPER) {
String tag = item.getItemMeta().getDisplayName().replace("§eConvite da facção §f[", "").split("§f]")[0].replace("§f]", "").replace(" ", "").toUpperCase();
if (e.getClick().isShiftClick()) {
p.chat("/f info " + tag.replace(" ", ""));
p.closeInventory();
} else if (e.getClick().isLeftClick()) {
p.chat("/f relacao " + tag.replace(" ", "") + " ally");
abrirMenuRelacoesPendentesRecebidos(mp);
} else if (e.getClick().isRightClick()) {
Faction target = FactionColl.get().getByTag(tag);
target.setRelationWish(f, Rel.NEUTRAL);
target.msg("§eA facção §f[" + factionTag + "§f] " + factionNome + "§e recusou seu pedido de aliança.");
f.removePendingRelation(target);
f.msg("§ePedido de aliança da facção §f[" + target.getTag() + "§f] " + target.getName() + "§e recusado com sucesso.");
abrirMenuRelacoesPendentesRecebidos(mp);
}
}
} else if (menu == Menu.RELACOES_LISTAR) {
ItemStack item = e.getCurrentItem();
if (item.getType() == Material.ARROW) {
int pag = Integer.parseInt(item.getItemMeta().getDisplayName().replace("§aPágina ", "").trim());
abrirMenuRelacoesListar(mp, pag);
}
}
}
}
@kauepalota
Copy link

GOSTEI MUITO PRIMO PARECE CODIGO DE UMA AMIGA MINHA PRIMO!

@Yuhtin
Copy link

Yuhtin commented Jan 31, 2021

caralho, que porra é essa, desisti de scrollar, tive que ir pela barrinha do lado

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment