diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java index 9b6044b4e..429523451 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilSkull.java @@ -1,6 +1,13 @@ package mineplex.core.common.util; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.bukkit.Material; import org.bukkit.entity.*; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; public class UtilSkull { @@ -25,6 +32,17 @@ public class UtilSkull return 3; } + public static ItemStack getPlayerHead(String playerName, String itemName, List itemLore) + { + ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 0, (byte) 3); + SkullMeta meta = ((SkullMeta) skull.getItemMeta()); + meta.setOwner(playerName); + meta.setDisplayName(itemName); + meta.setLore(itemLore); + skull.setItemMeta(meta); + return skull; + } + public static boolean isPlayerHead(byte data) { return data == 3; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/TablistFix.java b/Plugins/Mineplex.Core/src/mineplex/core/TablistFix.java index b42535c48..0287b6508 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/TablistFix.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/TablistFix.java @@ -58,8 +58,8 @@ public class TablistFix extends MiniPlugin { if (player.canSee(other)) { - PacketPlayOutPlayerInfo packet = PacketPlayOutPlayerInfo.updateDisplayName(((CraftPlayer) player).getHandle(), ((CraftPlayer) other).getHandle()); - UtilPlayer.sendPacket(player, packet); +// PacketPlayOutPlayerInfo packet = PacketPlayOutPlayerInfo.updateDisplayName(((CraftPlayer) player).getHandle(), ((CraftPlayer) other).getHandle()); +// UtilPlayer.sendPacket(player, packet); } } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java index 2ec050910..d42d26815 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanInfo.java @@ -577,6 +577,16 @@ public class ClanInfo } } + public List getInitiatedWars() + { + return new ArrayList(_initiatedWars.values()); + } + + public List getInitiatedOnWars() + { + return new ArrayList(_initiatedOnWars.values()); + } + public ClanWar getWar(String againstClan) { ClanWar initiated = getInitiatedWar(againstClan); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java index 70fc4777b..1f48f1d7e 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClanRole.java @@ -2,6 +2,23 @@ package mineplex.game.clans.clans; public enum ClanRole { - NONE, RECRUIT, MEMBER, ADMIN, LEADER; -} + NONE(0), RECRUIT(100), MEMBER(500), ADMIN(1000), LEADER(Integer.MAX_VALUE); + + private int _powerValue; + + ClanRole(int powerValue) + { + _powerValue = powerValue; + } + + public boolean has(ClanRole role) + { + return getPowerValue() >= role.getPowerValue(); + } + + public int getPowerValue() + { + return _powerValue; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java index 2773230d3..ecfa993fb 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java @@ -656,7 +656,7 @@ public class ClansDataAccessLayer @Override public void run() { - final boolean ran = _repository.updateWar(clanA.getId(), clanB.getId(), war.getScore(), war.isCompleted(), war.getLastUpdated(), war.getEnded()); + final boolean ran = _repository.updateWar(clanA.getId(), clanB.getId(), war.getClanAScore(), war.isCompleted(), war.getLastUpdated(), war.getEnded()); runSync(new Runnable() { @Override @@ -678,7 +678,7 @@ public class ClansDataAccessLayer * EnemyData iData = initiator.getEnemyData(); ClanInfo other = clan == * initiator ? otherClan : clan; EnemyData oData = other.getEnemyData(); * _repository.updateEnemy(initiator.getId(), other.getId(), - * iData.getScore(), oData.getScore(), iData.getKills(), oData.getKills()); + * iData.getClanAScore(), oData.getClanAScore(), iData.getKills(), oData.getKills()); * //Log _manager.log("Updated Enemy Data for [" + clan.getName() + ", " + * otherClan.getName() + "]"); } */ diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 2c521b2e9..37ef7bf1d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -19,6 +19,7 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemBreakEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -63,6 +64,7 @@ import mineplex.game.clans.clans.commands.MapCommand; import mineplex.game.clans.clans.commands.RegionsCommand; import mineplex.game.clans.clans.data.PlayerClan; import mineplex.game.clans.clans.event.ClansPlayerDeathEvent; +import mineplex.game.clans.clans.gui.ClansCommandShop; import mineplex.game.clans.clans.loot.LootManager; import mineplex.game.clans.clans.map.ItemMapManager; import mineplex.game.clans.clans.murder.MurderManager; @@ -158,6 +160,9 @@ public class ClansManager extends MiniClientPlugin implements IRelat private long _reclaimTime = 1800000; private long _onlineTime = 1200000; + // Command Shop + private ClansCommandShop _commandShop; + //Clans private NautHashMap _clanMap = new NautHashMap(); // private NautHashMap _clanMemberNameMap = new NautHashMap(); @@ -215,7 +220,9 @@ public class ClansManager extends MiniClientPlugin implements IRelat _explosion = new Explosion(plugin, blockRestore); - new ClansLoginManager(getPlugin(), clientManager, _serverName); +// new ClansLoginManager(getPlugin(), clientManager, _serverName); + + _commandShop = new ClansCommandShop(this, clientManager, donationManager); Energy energy = new Energy(plugin); // TODO: Re-enable customtagfix with NCP update? @@ -839,6 +846,16 @@ public class ClansManager extends MiniClientPlugin implements IRelat } } + @EventHandler + public void openShop(PlayerCommandPreprocessEvent event) + { + if (event.getMessage().equals("/cgui")) + { + _commandShop.attemptShopOpen(event.getPlayer()); + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.HIGH) public void handleClansDeath(PlayerDeathEvent event) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java index 8273a8bcf..fe32dd04a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansUtility.java @@ -15,11 +15,17 @@ import org.bukkit.World; import org.bukkit.entity.Player; import mineplex.core.common.util.C; +import mineplex.core.common.util.Callback; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilInput; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; +import mineplex.game.clans.clans.event.ClanDisbandedEvent; import mineplex.game.clans.core.repository.ClanTerritory; +import mineplex.game.clans.tutorials.TutorialManager; +import mineplex.game.clans.tutorials.types.TutorialGettingStarted; public class ClansUtility { @@ -588,4 +594,143 @@ public class ClansUtility { return Math.abs(loc.getBlockX()) > ClansManager.CLAIMABLE_RADIUS || Math.abs(loc.getBlockZ()) > ClansManager.CLAIMABLE_RADIUS; } + + + /** + * Used for commands + */ + + public void join(final Player caller, final ClanInfo clanInfo) + { + if (Clans.getClanMemberUuidMap().containsKey(caller.getUniqueId())) + { + UtilPlayer.message(caller, F.main("Clans", "You are already in a Clan.")); + return; + } + + if (!Clans.Get(caller).canJoin()) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot join a Clan for " + C.mTime + UtilTime.convertString(System.currentTimeMillis() - Clans.Get(caller).getDelay(), 1, UtilTime.TimeUnit.FIT) + C.mBody + ".")); + return; + } + + if (clanInfo == null) + { + UtilPlayer.message(caller, F.main("Clans", "Error: Clan does not exist")); + return; + } + + if (!clanInfo.isInvited(caller.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You are not invited to " + F.elem("Clan " + clanInfo.getName()) + ".")); + return; + } + + if (clanInfo.getSize() >= clanInfo.getMaxSize()) + { + UtilPlayer.message(caller, F.main("Clans", "The clan " + F.elem("Clan " + clanInfo.getName()) + " is full and cannot be joined!")); + return; + } + + // Task + Clans.getClanDataAccess().join(clanInfo, caller, ClanRole.RECRUIT, new Callback() + { + @Override + public void run(Boolean data) + { + if (data) + { + // Inform + UtilPlayer.message(caller, F.main("Clans", "You joined " + F.elem("Clan " + clanInfo.getName()) + ".")); + clanInfo.inform(F.name(caller.getName()) + " has joined your Clan.", caller.getName()); + } + else + { + UtilPlayer.message(caller, F.main("Clans", "There was an error processing your request")); + } + } + }); + + } + + public void leave(final Player caller) + { + final ClanInfo clan = getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (clan.getMembers().get(caller.getUniqueId()).getRole() == ClanRole.LEADER && clan.getMembers().size() > 1) + { + UtilPlayer.message(caller, F.main("Clans", "You must pass on " + F.elem("Leadership") + " before leaving.")); + return; + } + + // Leave or Delete + if (clan.getMembers().size() > 1) + { + // Task + Clans.getClanDataAccess().leave(clan, caller, new Callback() + { + @Override + public void run(Boolean data) + { + // Inform + UtilPlayer.message(caller, F.main("Clans", "You left " + F.elem("Clan " + clan.getName()) + ".")); + clan.inform(F.name(caller.getName()) + " has left your Clan.", null); + } + }); + } + else + { + delete(caller); + } + } + + public void delete(final Player caller) + { + final ClanInfo clan = getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (getRole(caller) != ClanRole.LEADER) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader can disband the Clan.")); + return; + } + + // Event + ClanDisbandedEvent event = new ClanDisbandedEvent(clan, caller); + UtilServer.getServer().getPluginManager().callEvent(event); + + if (event.isCancelled()) + { + return; + } + + // Task + Clans.getClanDataAccess().delete(clan, new Callback() + { + @Override + public void run(Boolean data) + { + if (data) + { + // Inform + UtilServer.broadcast(F.main("Clans", F.name(caller.getName()) + " disbanded " + F.elem("Clan " + clan.getName()) + ".")); + } + else + { + UtilPlayer.message(caller, F.main("Clans", "There was an error processing your request. Try again later")); + } + } + }); + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/ClansCommandShop.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/ClansCommandShop.java new file mode 100644 index 000000000..c7bec2d37 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/ClansCommandShop.java @@ -0,0 +1,25 @@ +package mineplex.game.clans.clans.gui; + +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.CurrencyType; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.ShopBase; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.gui.page.ClansMainPage; + +public class ClansCommandShop extends ShopBase +{ + public ClansCommandShop(ClansManager plugin, CoreClientManager clientManager, DonationManager donationManager) + { + super(plugin, clientManager, donationManager, "Clans Commands"); + } + + @Override + protected ShopPageBase> buildPagesFor(Player player) + { + return new ClansMainPage(getPlugin(), this, getClientManager(), getDonationManager(), player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddAllyButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddAllyButton.java new file mode 100644 index 000000000..58b7d88c3 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddAllyButton.java @@ -0,0 +1,21 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.C; +import mineplex.core.shop.item.IButton; + +public class ClanAddAllyButton implements IButton +{ + @Override + public void onClick(Player player, ClickType clickType) + { + player.closeInventory(); + + JsonMessage message = new JsonMessage(C.cRed + C.Bold + "Click here to add an Ally").click(ClickEvent.SUGGEST_COMMAND, "/c ally "); + message.sendToPlayer(player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddTrustedButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddTrustedButton.java new file mode 100644 index 000000000..505eb674b --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddTrustedButton.java @@ -0,0 +1,21 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.C; +import mineplex.core.shop.item.IButton; + +public class ClanAddTrustedButton implements IButton +{ + @Override + public void onClick(Player player, ClickType clickType) + { + player.closeInventory(); + + JsonMessage message = new JsonMessage(C.cRed + C.Bold + "Click here to trust a clan").click(ClickEvent.SUGGEST_COMMAND, "/c trust "); + message.sendToPlayer(player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddWarButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddWarButton.java new file mode 100644 index 000000000..22e4ce7ef --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanAddWarButton.java @@ -0,0 +1,21 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.C; +import mineplex.core.shop.item.IButton; + +public class ClanAddWarButton implements IButton +{ + @Override + public void onClick(Player player, ClickType clickType) + { + player.closeInventory(); + + JsonMessage message = new JsonMessage(C.cRed + C.Bold + "Click here to war a clan").click(ClickEvent.SUGGEST_COMMAND, "/war "); + message.sendToPlayer(player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanButton.java new file mode 100644 index 000000000..13cdcb2f1 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanButton.java @@ -0,0 +1,44 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; + +import mineplex.core.shop.item.IButton; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; + +public abstract class ClanButton implements IButton +{ + private ClansManager _clansManager; + private Player _player; + private ClanInfo _clanInfo; + private ClanRole _clanRole; + + public ClanButton(ClansManager clansManager, Player player, ClanInfo clanInfo, ClanRole clanRole) + { + _clansManager = clansManager; + _player = player; + _clanInfo = clanInfo; + _clanRole = clanRole; + } + + public ClansManager getClansManager() + { + return _clansManager; + } + + public Player getPlayer() + { + return _player; + } + + public ClanInfo getClanInfo() + { + return _clanInfo; + } + + public ClanRole getClanRole() + { + return _clanRole; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanCreateButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanCreateButton.java new file mode 100644 index 000000000..5776f58b0 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanCreateButton.java @@ -0,0 +1,26 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.C; +import mineplex.core.shop.item.IButton; + +public class ClanCreateButton implements IButton +{ + public ClanCreateButton() + { + + } + + @Override + public void onClick(Player player, ClickType clickType) + { + player.closeInventory(); + + JsonMessage message = new JsonMessage(C.cRed + C.Bold + "Click here to create a clan").click(ClickEvent.SUGGEST_COMMAND, "/c create "); + message.sendToPlayer(player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanDisbandButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanDisbandButton.java new file mode 100644 index 000000000..b0603b0e6 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanDisbandButton.java @@ -0,0 +1,23 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; + +public class ClanDisbandButton extends ClanButton +{ + public ClanDisbandButton(ClansManager clansManager, Player player, ClanInfo clanInfo, ClanRole clanRole) + { + super(clansManager, player, clanInfo, clanRole); + } + + @Override + public void onClick(Player player, ClickType clickType) + { + getPlayer().closeInventory(); + getClansManager().getClanUtility().delete(getPlayer()); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanInviteButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanInviteButton.java new file mode 100644 index 000000000..27add6b61 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanInviteButton.java @@ -0,0 +1,28 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.C; +import mineplex.core.shop.item.IButton; + +public class ClanInviteButton implements IButton +{ + private Player _player; + + public ClanInviteButton(Player player) + { + _player = player; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + _player.closeInventory(); + + JsonMessage message = new JsonMessage(C.cRed + C.Bold + "Click Here to invite a player to your Clan").click(ClickEvent.SUGGEST_COMMAND, "/c invite "); + message.sendToPlayer(_player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanJoinButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanJoinButton.java new file mode 100644 index 000000000..f3e451d0a --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanJoinButton.java @@ -0,0 +1,27 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.shop.item.IButton; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClansManager; + +public class ClanJoinButton implements IButton +{ + private ClansManager _clansManager; + private ClanInfo _clanInfo; + + public ClanJoinButton(ClansManager clansManager, ClanInfo clanInfo) + { + _clansManager = clansManager; + _clanInfo = clanInfo; + } + + @Override + public void onClick(Player player, ClickType clickType) + { + player.closeInventory(); + _clansManager.getClanUtility().join(player, _clanInfo); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanLeaveButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanLeaveButton.java new file mode 100644 index 000000000..c33dc3f15 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanLeaveButton.java @@ -0,0 +1,24 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.shop.item.IButton; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; + +public class ClanLeaveButton extends ClanButton +{ + public ClanLeaveButton(ClansManager clansManager, Player player, ClanInfo clanInfo, ClanRole clanRole) + { + super(clansManager, player, clanInfo, clanRole); + } + + @Override + public void onClick(Player player, ClickType clickType) + { + getPlayer().closeInventory(); + getClansManager().getClanUtility().leave(getPlayer()); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanRelationsButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanRelationsButton.java new file mode 100644 index 000000000..134973507 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanRelationsButton.java @@ -0,0 +1,8 @@ +package mineplex.game.clans.clans.gui.button; + +/** + * Created by phina on 10/31/2015. + */ +public class ClanRelationsButton +{ +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanTerritoryButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanTerritoryButton.java new file mode 100644 index 000000000..091b88e3a --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanTerritoryButton.java @@ -0,0 +1,8 @@ +package mineplex.game.clans.clans.gui.button; + +/** + * Created by phina on 10/31/2015. + */ +public class ClanTerritoryButton +{ +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanWhoButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanWhoButton.java new file mode 100644 index 000000000..20385402b --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/ClanWhoButton.java @@ -0,0 +1,21 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.common.jsonchat.ClickEvent; +import mineplex.core.common.jsonchat.JsonMessage; +import mineplex.core.common.util.C; +import mineplex.core.shop.item.IButton; + +public class ClanWhoButton implements IButton +{ + @Override + public void onClick(Player player, ClickType clickType) + { + player.closeInventory(); + + JsonMessage message = new JsonMessage(C.cRed + C.Bold + "Click here to lookup a clan").click(ClickEvent.SUGGEST_COMMAND, "/c who "); + message.sendToPlayer(player); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/MemberButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/MemberButton.java new file mode 100644 index 000000000..a9464da3f --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/MemberButton.java @@ -0,0 +1,16 @@ +package mineplex.game.clans.clans.gui.button; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.shop.item.IButton; + +public class MemberButton implements IButton +{ + @Override + public void onClick(Player player, ClickType clickType) + { + Bukkit.broadcastMessage("Member button click"); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/MemberManagementButton.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/MemberManagementButton.java new file mode 100644 index 000000000..b9c261a1f --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/button/MemberManagementButton.java @@ -0,0 +1,8 @@ +package mineplex.game.clans.clans.gui.button; + +/** + * Created by phina on 10/31/2015. + */ +public class MemberManagementButton +{ +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansCommandPageBase.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansCommandPageBase.java new file mode 100644 index 000000000..15d7982dd --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansCommandPageBase.java @@ -0,0 +1,61 @@ +package mineplex.game.clans.clans.gui.page; + +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.gui.ClansCommandShop; + +public abstract class ClansCommandPageBase extends ShopPageBase +{ + public ClansCommandPageBase(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, int size) + { + super(plugin, shop, clientManager, donationManager, name, player, size); + + buildPage(); + } + + @Override + protected final void buildPage() + { + ClanInfo clanInfo = getPlugin().getClan(getPlayer()); + + if (clanInfo == null) + { + buildNoClan(); + } + else + { + ClanRole role = getPlugin().getClanUtility().getRole(getPlayer()); + buildClan(clanInfo, role); + } + } + + public abstract void buildNoClan(); + + public abstract void buildClan(ClanInfo clanInfo, ClanRole clanRole); + + protected void addBackButton() + { + addButton(4, new ShopItem(Material.BED, C.cGray + " \u21FD Go Back", new String[]{}, 1, false), new IButton() + { + public void onClick(Player player, ClickType clickType) + { + ShopPageBase mainPage = new ClansMainPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), getPlayer()); + + getShop().openPageForPlayer(getPlayer(), mainPage); + player.playSound(player.getLocation(), Sound.CLICK, 1, 1); + } + }); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansJoinPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansJoinPage.java new file mode 100644 index 000000000..7b7838adc --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansJoinPage.java @@ -0,0 +1,57 @@ +package mineplex.game.clans.clans.gui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.ShopItem; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.gui.ClansCommandShop; +import mineplex.game.clans.clans.gui.button.ClanJoinButton; + +public class ClansJoinPage extends ClansCommandPageBase +{ + public ClansJoinPage(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Join Clan", player, 54); + } + + @Override + public void buildNoClan() + { + int currentIndex = 9; + + for (ClanInfo clanInfo : getPlugin().getClanMap().values()) + { + if (clanInfo.isInvited(getPlayer().getName())) + { + addInvitation(currentIndex, clanInfo); + currentIndex++; + } + } + + if (currentIndex == 9) + { + // No invitations :( + ShopItem shopItem = new ShopItem(Material.BOOK, "You have no Clan Invitations!", new String[] {}, 1, true, false); + setItem(22, shopItem); + } + + addBackButton(); + } + + private void addInvitation(int index, ClanInfo clanInfo) + { + ShopItem shopItem = new ShopItem(Material.BOOK_AND_QUILL, clanInfo.getName(), new String[] {}, 1, false, false); + addButton(index, shopItem, new ClanJoinButton(getPlugin(), clanInfo)); + } + + @Override + public void buildClan(ClanInfo clanInfo, ClanRole clanRole) + { + // Nothing + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansListWarPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansListWarPage.java new file mode 100644 index 000000000..b07421847 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansListWarPage.java @@ -0,0 +1,68 @@ +package mineplex.game.clans.clans.gui.page; + +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.ShopItem; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.gui.ClansCommandShop; +import mineplex.game.clans.clans.war.ClanWar; + +public class ClansListWarPage extends ClansCommandPageBase +{ + public ClansListWarPage(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Active Wars", player, 54); + } + + @Override + public void buildNoClan() + { + // Nothing to do here + } + + @Override + public void buildClan(ClanInfo clanInfo, ClanRole clanRole) + { + List initiatedWars = clanInfo.getInitiatedWars(); + List initiatedOnWars = clanInfo.getInitiatedOnWars(); + + int currentIndex = 9; + + for (ClanWar war : initiatedWars) + { + addWar(currentIndex, war, true); + currentIndex++; + } + for (ClanWar war : initiatedOnWars) + { + addWar(currentIndex, war, false); + currentIndex++; + } + + if (currentIndex == 9) + { + ShopItem shopItem = new ShopItem(Material.BOOK, "You are not at war with any clan!", new String[] {}, 1, true, false); + setItem(22, shopItem); + } + + addBackButton(); + } + + private void addWar(int index, ClanWar war, boolean initiated) + { + String enemyName = initiated ? war.getClanB() : war.getClanA(); + int score = initiated ? war.getClanAScore() : war.getClanBScore(); + ShopItem shopItem = new ShopItem(initiated ? Material.BOW : Material.GOLD_SWORD, enemyName, + new String[] {ChatColor.RESET + C.cGray + "Score: " + C.cYellow + score }, 1, false, false); + setItem(index, shopItem); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansMainPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansMainPage.java new file mode 100644 index 000000000..994ece21b --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansMainPage.java @@ -0,0 +1,142 @@ +package mineplex.game.clans.clans.gui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.gui.ClansCommandShop; +import mineplex.game.clans.clans.gui.button.ClanCreateButton; +import mineplex.game.clans.clans.gui.button.ClanWhoButton; + +public class ClansMainPage extends ShopPageBase +{ + public ClansMainPage(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Clans", player, 9); + + buildPage(); + } + + @Override + protected void buildPage() + { + ClanInfo clanInfo = getPlugin().getClan(getPlayer()); + + if (clanInfo == null) + { + // Clan does not exist state + + // Clan Create + ShopItem clanCreate = new ShopItem(Material.BOOK_AND_QUILL, "Create Clan", new String[] {}, 1, false, false); + addButton(2, clanCreate, new ClanCreateButton()); + + // Clan Join + ShopItem clanJoin = new ShopItem(Material.BOOK, "Join Clan", new String[] {}, 1, false, false); + addButton(4, clanJoin, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new ClansJoinPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), getPlayer())); + } + }); + + // Clan Who + ShopItem clanWho = new ShopItem(Material.MAP, "Lookup Clan", new String[] {}, 1, false, false); + addButton(6, clanWho, new ClanWhoButton()); + } + else + { + // Clan does exist state + + ClanRole role = getPlugin().getClanUtility().getRole(getPlayer()); + + boolean canOpenClanManagement = role.has(ClanRole.MEMBER); + boolean canOpenClanRelations = role.has(ClanRole.MEMBER); + boolean canOpenMemberManagement = role.has(ClanRole.MEMBER); + boolean canOpenClanTerritory = role.has(ClanRole.MEMBER); + + ShopItem clanManagement = new ShopItem(Material.BOOK_AND_QUILL, "Clan Management", new String[]{}, 1, !canOpenClanManagement, false); + ShopItem clanRelations = new ShopItem(Material.DIAMOND_SWORD, "Clan Relations", new String[]{}, 1, !canOpenClanRelations, false); + ShopItem memberManagement = new ShopItem(Material.SKULL_ITEM, (byte) 3, "Member Management", new String[]{}, 1, !canOpenMemberManagement, false); + ShopItem clanTerritory = new ShopItem(Material.MAP, "Clan Territory", new String[]{}, 1, !canOpenClanTerritory, false); + + // Clan Manage + if (canOpenClanManagement) + { + addButton(1, clanManagement, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new ClansManagePage(getPlugin(), getShop(), getClientManager(), getDonationManager(), getPlayer())); + } + }); + } + else + { + setItem(1, clanManagement); + } + + // Clan Relations + if (canOpenClanRelations) + { + addButton(3, clanRelations, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new ClansRelationsPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), getPlayer())); + } + }); + } + else + { + setItem(3, clanRelations); + } + + // Member Management + if (canOpenMemberManagement) + { + addButton(5, memberManagement, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new MemberManagementPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), getPlayer())); + } + }); + } + else + { + setItem(5, memberManagement); + } + + // Clan Territory + if (canOpenClanTerritory) + { + addButton(7, clanTerritory, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new ClansTerritoryPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), getPlayer())); + } + }); + } + else + { + setItem(7, clanTerritory); + } + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansManagePage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansManagePage.java new file mode 100644 index 000000000..46de3ff31 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansManagePage.java @@ -0,0 +1,56 @@ +package mineplex.game.clans.clans.gui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.gui.ClansCommandShop; +import mineplex.game.clans.clans.gui.button.ClanDisbandButton; +import mineplex.game.clans.clans.gui.button.ClanInviteButton; +import mineplex.game.clans.clans.gui.button.ClanLeaveButton; + +public class ClansManagePage extends ClansCommandPageBase +{ + public ClansManagePage(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Clan Management", player, 18); + } + + @Override + public void buildNoClan() + { + // Nothing to do here + } + + @Override + public void buildClan(ClanInfo clanInfo, ClanRole clanRole) + { + // Invite + boolean canInvite = clanRole.has(clanRole.ADMIN); + ShopItem invite = new ShopItem(Material.PAPER, "Invite Player", new String[] {}, 1, !canInvite, false); + if (canInvite) + addButton(11, invite, new ClanInviteButton(getPlayer())); + else + setItem(11, invite); + + // Leave + ShopItem leave = new ShopItem(Material.POTATO, "Leave Clan", new String[] {}, 1, false, false); + addButton(13, leave, new ClanLeaveButton(getPlugin(), getPlayer(), clanInfo, clanRole)); + + // Disband + boolean canDisband = clanRole == ClanRole.LEADER; + ShopItem disband = new ShopItem(Material.TNT, "Disband Clan", new String[] {}, 1, !canDisband, false); + if (canDisband) + addButton(15, disband, new ClanDisbandButton(getPlugin(), getPlayer(), clanInfo, clanRole)); + else + setItem(15, disband); + + addBackButton(); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansRelationsPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansRelationsPage.java new file mode 100644 index 000000000..5f982816e --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansRelationsPage.java @@ -0,0 +1,93 @@ +package mineplex.game.clans.clans.gui.page; + +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.inventory.ClickType; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.item.ShopItem; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.commands.ClansCommand; +import mineplex.game.clans.clans.gui.ClansCommandShop; +import mineplex.game.clans.clans.gui.button.ClanAddAllyButton; +import mineplex.game.clans.clans.gui.button.ClanAddTrustedButton; +import mineplex.game.clans.clans.gui.button.ClanAddWarButton; + +public class ClansRelationsPage extends ClansCommandPageBase +{ + public ClansRelationsPage(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Clan Relations", player, 27); + } + + @Override + public void buildNoClan() + { + // Nothing! + } + + @Override + public void buildClan(ClanInfo clanInfo, ClanRole clanRole) + { + // Add Ally + boolean canAddAlly = clanRole.has(ClanRole.ADMIN); + ShopItem addAlly = new ShopItem(Material.DIAMOND_SWORD, "Add Ally", new String[] {}, 1, !canAddAlly, false); + if (canAddAlly) + addButton(11, addAlly, new ClanAddAllyButton()); + else + setItem(11, addAlly); + + // List Allys + ShopItem listAlly = new ShopItem(Material.POTATO, "List Allies", new String[] {}, 1, false, false); + addButton(20, listAlly, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + // TODO + } + }); + + // Add Trust + boolean canAddTrusted = clanRole.has(ClanRole.ADMIN); + ShopItem addTrusted = new ShopItem(Material.RED_ROSE, "Add Trusted", new String[] {}, 1, !canAddTrusted, false); + if (canAddTrusted) + addButton(13, addTrusted, new ClanAddTrustedButton()); + else + setItem(13, addTrusted); + // List Trusted + ShopItem listTrusted = new ShopItem(Material.POTATO, "List Trusted", new String[] {}, 1, false, false); + addButton(22, listTrusted, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + // TODO + } + }); + + // Add War + boolean canAddWar = clanRole.has(ClanRole.ADMIN); + ShopItem addWar = new ShopItem(Material.BOW, "Add War", new String[] {}, 1, !canAddWar, false); + if (canAddWar) + addButton(15, addWar, new ClanAddWarButton()); + + // List War + ShopItem listWar = new ShopItem(Material.POTATO, "List Wars", new String[] {}, 1, false, false); + addButton(24, listWar, new IButton() + { + @Override + public void onClick(Player player, ClickType clickType) + { + getShop().openPageForPlayer(getPlayer(), new ClansListWarPage(getPlugin(), getShop(), getClientManager(), getDonationManager(), getPlayer())); + } + }); + + addBackButton(); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansTerritoryPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansTerritoryPage.java new file mode 100644 index 000000000..0a784d94b --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/ClansTerritoryPage.java @@ -0,0 +1,31 @@ +package mineplex.game.clans.clans.gui.page; + +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.page.ShopPageBase; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.gui.ClansCommandShop; + +public class ClansTerritoryPage extends ClansCommandPageBase +{ + public ClansTerritoryPage(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Clan Territory", player, 18); + } + + @Override + public void buildNoClan() + { + // Nothing! + } + + @Override + public void buildClan(ClanInfo clanInfo, ClanRole clanRole) + { + addBackButton(); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/MemberManagementPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/MemberManagementPage.java new file mode 100644 index 000000000..8e90990a4 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/gui/page/MemberManagementPage.java @@ -0,0 +1,88 @@ +package mineplex.game.clans.clans.gui.page; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilSkull; +import mineplex.core.donation.DonationManager; +import mineplex.core.shop.item.IButton; +import mineplex.core.shop.page.ShopPageInventory; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanRole; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.ClansPlayer; +import mineplex.game.clans.clans.ClansPlayerComparator; +import mineplex.game.clans.clans.gui.ClansCommandShop; +import mineplex.game.clans.clans.gui.button.MemberButton; + +public class MemberManagementPage extends ShopPageInventory +{ + private IButton[] _buttons; + private ItemStack[] _items; + + public MemberManagementPage(ClansManager plugin, ClansCommandShop shop, CoreClientManager clientManager, DonationManager donationManager, Player player) + { + super(plugin, shop, clientManager, donationManager, "Member Manager", player); + + buildPage(); + } + + @Override + protected IButton[] getButtons() + { + return _buttons; + } + + @Override + protected ItemStack[] getItems() + { + return _items; + } + + @Override + protected void buildItems() + { + ClanInfo clanInfo = getPlugin().getClan(getPlayer()); + + if (clanInfo == null) + { + // do nothing + _buttons = new IButton[0]; + _items = new ItemStack[0]; + } + else + { + ClanRole role = getPlugin().getClanUtility().getRole(getPlayer()); + + List playerList = new ArrayList(clanInfo.getMembers().values()); + Collections.sort(playerList, new ClansPlayerComparator()); + + _buttons = new IButton[playerList.size()]; + _items = new ItemStack[_buttons.length]; + + + int currentIndex = 0; + for (ClansPlayer clansPlayer : playerList) + { + addPlayerButton(clansPlayer, currentIndex); + currentIndex++; + } + } + } + + private void addPlayerButton(ClansPlayer player, int index) + { + ItemStack playerHead = UtilSkull.getPlayerHead(player.getPlayerName(), C.cGreen + player.getPlayerName(), Arrays.asList(new String[] {ChatColor.RESET + "Role: " + player.getRole().ordinal()})); + _items[index] = playerHead; + _buttons[index] = new MemberButton(); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/ClanWar.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/ClanWar.java index 5e1a2564e..acd385a54 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/ClanWar.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/ClanWar.java @@ -61,11 +61,16 @@ public class ClanWar * Get the score of the war. Score is represented as an int value with the initiator clan's score. The score * works as a tug of war, score starts at 20 and either the initiator will get to 40 or 0 to trigger the end of war */ - public int getScore() + public int getClanAScore() { return _score; } + public int getClanBScore() + { + return WarManager.WAR_MAX_SCORE - getClanAScore(); + } + /** * Is the war finished (has a clan won already) */ @@ -132,7 +137,7 @@ public class ClanWar if (obj instanceof ClanWar) { ClanWar war = ((ClanWar) obj); - return _clanA.equals(war.getClanA()) && _clanB.equals(war.getClanB()) && _completed == war.isCompleted() && _score == war.getScore() + return _clanA.equals(war.getClanA()) && _clanB.equals(war.getClanB()) && _completed == war.isCompleted() && _score == war.getClanAScore() && _created.equals(war.getCreated()); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarInvasion.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarInvasion.java index ab2e84da8..e031df4ac 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarInvasion.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarInvasion.java @@ -1,7 +1,5 @@ package mineplex.game.clans.clans.war; -import mineplex.game.clans.clans.ClanInfo; - public class WarInvasion { private static final long INVADE_LENGTH = 60000L * 30; // 30 Minutes @@ -13,7 +11,7 @@ public class WarInvasion public WarInvasion(ClanWar clanWar) { - if (clanWar.getScore() > WarManager.WAR_START_SCORE) + if (clanWar.getClanAScore() > WarManager.WAR_START_SCORE) { // Initiator Won _invaderClan = clanWar.getClanA(); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java index 00506a0ab..acec276cf 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/WarManager.java @@ -32,6 +32,7 @@ import mineplex.game.clans.clans.war.event.WarInvasionStartEvent; public class WarManager extends MiniPlugin { public static final int WAR_START_SCORE = 20; + public static final int WAR_MAX_SCORE = 40; private final ClansManager _clansManager; @@ -113,12 +114,12 @@ public class WarManager extends MiniPlugin { boolean completed = false; - if (clanWar.getScore() >= WAR_START_SCORE * 2) + if (clanWar.getClanAScore() >= WAR_START_SCORE * 2) { // Initiator Won completed = true; } - else if (clanWar.getScore() <= 0) + else if (clanWar.getClanAScore() <= 0) { // Initiated On Won completed = true; diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/command/DominanceCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/command/DominanceCommand.java index b4679b186..6aa16b570 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/command/DominanceCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/war/command/DominanceCommand.java @@ -48,10 +48,10 @@ public class DominanceCommand extends CommandBase { System.out.println("Initiator: " + war.getClanA()); System.out.println("Other Clan: " + war.getClanB()); - System.out.println("Score: " + war.getScore()); + System.out.println("Score: " + war.getClanAScore()); UtilPlayer.message(caller, F.main("War", "War Status with " + searchName)); UtilPlayer.message(caller, F.main("War", "Initiated by: " + (war.getClanA().equals(clan.getName()) ? selfName : searchName))); - UtilPlayer.message(caller, F.main("War", "Initiator Dominance: " + F.elem("" + war.getScore()))); + UtilPlayer.message(caller, F.main("War", "Initiator Dominance: " + F.elem("" + war.getClanAScore()))); UtilPlayer.message(caller, F.main("War", "Age: " + F.elem(UtilTime.convertString(System.currentTimeMillis() - war.getCreated().getTime(), 1, UtilTime.TimeUnit.FIT)))); }