diff --git a/Plugins/Core/src/me/chiss/Core/Modules/PointManager.java b/Plugins/Core/src/me/chiss/Core/Modules/PointManager.java index 7b7ae669e..ebcc3333d 100644 --- a/Plugins/Core/src/me/chiss/Core/Modules/PointManager.java +++ b/Plugins/Core/src/me/chiss/Core/Modules/PointManager.java @@ -10,7 +10,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; -import me.chiss.Core.Clans.ClansClan; +import me.chiss.Core.Clans.ClanInfo; import me.chiss.Core.Clans.ClansUtility.ClanRelation; import me.chiss.Core.ClientData.ClientGame; import me.chiss.Core.Module.AModule; @@ -263,7 +263,7 @@ public class PointManager extends AModule implements IScheduleListener double petLevel = 0; double clanAge = 0; - ClansClan clan = Clans().CUtil().getClanByPlayer(cur); + ClanInfo clan = Clans().CUtil().getClanByPlayer(cur); if (clan != null) clanAge = (System.currentTimeMillis() - clan.GetDateCreated()) / 86400000d; if (clanAge > 7) clanAge = 7; @@ -341,7 +341,7 @@ public class PointManager extends AModule implements IScheduleListener double petLevel = 0; double clanAge = 0; - ClansClan clan = Clans().CUtil().getClanByPlayer(cur); + ClanInfo clan = Clans().CUtil().getClanByPlayer(cur); if (clan != null) clanAge = (System.currentTimeMillis() - clan.GetDateCreated()) / 86400000d; if (clanAge > 7) clanAge = 7; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java b/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java index 6add4954e..ec018f133 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/MiniPlugin.java @@ -89,7 +89,7 @@ public abstract class MiniPlugin implements Listener CommandCenter.Instance.RemoveCommand(command); } - protected void log(String message) + public void log(String message) { System.out.println(F.main(_moduleName, message)); } 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 b5eb58fcf..f14afd7ca 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 @@ -1,25 +1,20 @@ package mineplex.game.clans.clans; -import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; -import mineplex.core.account.CoreClient; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilTime.TimeUnit; -import mineplex.core.itemstack.ItemStackFactory; -import mineplex.game.clans.clans.repository.tokens.ClanAllianceToken; +import mineplex.game.clans.clans.ClansUtility.ClanRelation; import mineplex.game.clans.clans.repository.tokens.ClanToken; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -172,7 +167,7 @@ public class ClanInfo { LinkedList stringList = new LinkedList(); - stringList.add(F.main("Clans", C.mRel(C.relPC(caller, this), getName() + " Information;", true))); + stringList.add(F.main("Clans", Clans.getClanUtility().mRel(Clans.getClanUtility().relPC(caller, this), getName() + " Information;", true))); // stringList.add(F.value("Desc", _desc)); // Age @@ -180,7 +175,7 @@ public class ClanInfo UtilTime.convertString(System.currentTimeMillis() - _dateCreated, 1, TimeUnit.FIT))); // Home - if (C.relPC(caller, this) == ClanRelation.SELF) + if (Clans.getClanUtility().relPC(caller, this) == ClanRelation.SELF) stringList.add(F.value("Home", UtilWorld.locToStrClean(getHome()))); // Land @@ -194,7 +189,7 @@ public class ClanInfo allyUnsorted.add(allyName); for (String cur : UtilAlg.sortKey(allyUnsorted)) - allySorted += C.mRel(C.relPC(caller, Clans.getClanMap().get(cur)), cur, false) + allySorted += Clans.getClanUtility().mRel(Clans.getClanUtility().relPC(caller, Clans.getClanMap().get(cur)), cur, false) + ", "; stringList.add(F.value("Allies", allySorted)); @@ -224,12 +219,6 @@ public class ClanInfo // Protected stringList.add(F.value("TNT Protection", getProtected())); - // Dominance - ClanInfo callerClan = Clans.CUtil().getClanByPlayer(caller); - if (callerClan != null) - if (this.isEnemy(callerClan.getName())) - stringList.add(F.value("Dominance", callerClan.getDominanceString(this))); - return stringList; } @@ -264,44 +253,6 @@ public class ClanInfo } } - public void chat(Player sender, String message, String filteredMessage) - { - for (String cur : getMembers().keySet()) - { - Player player = UtilPlayer.searchOnline(null, cur, false); - - if (player == null) - continue; - - CoreClient client = Clans.Clients().Get(player); - - if (client.Game().GetFilterChat()) - UtilPlayer.message(player, C.cAqua + sender.getName() + C.cDAqua + " " + filteredMessage); - else - UtilPlayer.message(player, C.cAqua + sender.getName() + C.cDAqua + " " + message); - } - } - - public void allyChat(ClanInfo senderClan, Player sender, String message, String filteredMessage) - { - for (String cur : getMembers().keySet()) - { - Player player = UtilPlayer.searchOnline(null, cur, false); - - if (player == null) - continue; - - CoreClient client = Clans.Clients().Get(player); - - // C.cDGreen + senderClan.GetName() + " " + - - if (client.Game().GetFilterChat()) - UtilPlayer.message(player, C.cDGreen + sender.getName() + C.cGreen + " " + filteredMessage); - else - UtilPlayer.message(player, C.cDGreen + sender.getName() + C.cGreen + " " + message); - } - } - public String getName() { return _name; @@ -382,73 +333,6 @@ public class ClanInfo _lastOnline = lastOnline; } - public void saveAlliances() - { - - } - - public void saveMembers() - { - - } - - public void saveTerritories() - { - - } - - public void saveBasicInfo() - { - - } - - public ClanToken GetToken() - { - // Update Members - _token.Members = new ArrayList(); - for (String name : getMembers().keySet()) - { - ClanMemberToken token = new ClanMemberToken(); - token.Name = name; - token.ClanRole = getMembers().get(name).toString(); - - _token.Members.add(token); - } - - // Update Territory - _token.Territories = new ArrayList(); - for (String chunk : getClaimSet()) - { - ClanTerritoryToken token = new ClanTerritoryToken(); - token.ClanName = _token.Name; - token.ClanId = _token.ClanId; - token.ServerName = Clans.GetServerName(); - token.Chunk = chunk; - - if (Clans.GetClaimMap().get(chunk) != null) - token.Safe = Clans.GetClaimMap().get(chunk).safe; - - _token.Territories.add(token); - } - - // Update Relations - _token.Alliances = new ArrayList(); - for (String clanName : getAllyMap().keySet()) - { - ClanInfo clan = Clans.getClan(clanName); - ClanAllianceToken token = new ClanAllianceToken(); - token.ClanId = clan.GetTokenUnupdated().ClanId; - token.ClanName = clan.GetTokenUnupdated().Name; - - if (getAllyMap().get(clanName)) - token.Trusted = true; - - _token.Alliances.add(token); - } - - return _token; - } - public boolean isOnlineNow() { for (String cur : getMembers().keySet()) @@ -464,7 +348,7 @@ public class ClanInfo if (UtilPlayer.isOnline(cur)) return true; - return System.currentTimeMillis() - _lastOnline < Clans.GetOnlineTime(); + return System.currentTimeMillis() - _lastOnline < Clans.getOnlineTime(); } public String getProtected() @@ -473,12 +357,12 @@ public class ClanInfo if (UtilPlayer.isOnline(cur)) return C.cRed + "No - Clan Members are Online"; - if (System.currentTimeMillis() - _lastOnline > Clans.GetOnlineTime()) + if (System.currentTimeMillis() - _lastOnline > Clans.getOnlineTime()) return C.cGreen + "Yes - Clan Members are Offline"; return C.cGold + "No, " - + UtilTime.convertString(Clans.GetOnlineTime() - (System.currentTimeMillis() - _lastOnline), 1, + + UtilTime.convertString(Clans.getOnlineTime() - (System.currentTimeMillis() - _lastOnline), 1, TimeUnit.FIT) + " to Protection"; } 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 new file mode 100644 index 000000000..cb93e8ea5 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansDataAccessLayer.java @@ -0,0 +1,309 @@ +package mineplex.game.clans.clans; + +import java.util.ArrayList; + +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; + +import mineplex.core.account.CoreClient; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilWorld; +import mineplex.game.clans.clans.ClanInfo.Role; +import mineplex.game.clans.clans.repository.ClanRepository; +import mineplex.game.clans.clans.repository.ClanTerritory; +import mineplex.game.clans.clans.repository.tokens.ClanMemberToken; +import mineplex.game.clans.clans.repository.tokens.ClanToken; + +public class ClansDataAccessLayer +{ + private ClansManager _manager; + private ClanRepository _repository; + + public ClansDataAccessLayer(ClansManager clans) + { + _manager = clans; + _repository = new ClanRepository(clans.GetPlugin(), clans.GetServerName()); + } + + public void delete(ClanInfo clan) + { + //Territory Unclaim + for (String cur : clan.getClaimSet()) + _manager.getClaimMap().remove(cur); + + _manager.getClanMap().remove(clan.getName()); + + for (String cur : clan.getMembers().keySet()) + { + _manager.getClanMemberMap().remove(cur); + } + + //Clean from Others + for (ClanInfo cur : _manager.getClanMap().values()) + { + cur.getAllyMap().remove(clan.getName()); + cur.getRequestMap().remove(clan.getName()); + } + + //Save + _repository.deleteClan(clan.getName()); + + //Log + _manager.log("Deleted [" + clan.getName() + "]."); + } + + public ClanInfo create(String creator, String name, boolean admin) + { + ClanToken token = new ClanToken(); + token.Name = name; + token.Description = "No Description"; + token.Home = ""; + token.Admin = admin; + + token.Members = new ArrayList(); + ClanMemberToken memberToken = new ClanMemberToken(); + memberToken.ClanRole = Role.ADMIN.toString(); + memberToken.Name = creator; + + //Create Clan + ClanInfo clan = new ClanInfo(_manager, token); + _manager.getClanMap().put(name, clan); + + //Save + _repository.addClan(token); + + //Log + _manager.log("[" + clan.getName() + "] with Admin [" + admin + "] created by [" + creator + "]."); + + return clan; + } + + public void join(ClanInfo clan, String player, Role role) + { + if (_manager.getClanMemberMap().containsKey(player)) + leave(_manager.getClanUtility().getClanByPlayer(player), player); + + //Update Clan + clan.getMembers().put(player, role); + _manager.getClanMemberMap().put(player, clan); + clan.getInviteeMap().remove(player); + clan.getInviterMap().remove(player); + + //Save + _repository.addMember(clan.getName(), player); + + //Log + _manager.log("Added [" + player + "] to [" + clan.getName() + "]."); + } + + public void leave(ClanInfo clan, String player) + { + if (clan == null) + return; + + //Update Clan + clan.getMembers().remove(player); + _manager.getClanMemberMap().remove(player); + + //Save + _repository.removeMember(clan.getName(), player); + + //Log + _manager.log("Removed [" + player + "] from [" + clan.getName() + "]."); + } + + public void role(ClanInfo clan, String player, Role role) + { + //Update Clan + clan.getMembers().put(player, role); + + //Save + _repository.updateMember(clan.getName(), player, role); + + //Log + _manager.log("Removed [" + player + "] from [" + clan.getName() + "]."); + } + + public void invite(ClanInfo clan, String player, String inviter) + { + clan.getInviteeMap().put(player, System.currentTimeMillis()); + clan.getInviterMap().put(player, inviter); + + //Log + _manager.log("Invited [" + player + "] to [" + clan.getName() + "] by [" + inviter + "]."); + } + + public void requestAlly(ClanInfo clan, ClanInfo target, String player) + { + clan.getRequestMap().put(target.getName(), System.currentTimeMillis()); + + //Log + _manager.log("Alliance Request to [" + target.getName() + "] from [" + clan.getName() + "] by [" + player + "]."); + } + + public void ally(ClanInfo cA, ClanInfo cB, String player) + { + //Remove Requests + cA.getRequestMap().remove(cB.getName()); + cB.getRequestMap().remove(cA.getName()); + + //Update ClansManager + cA.getAllyMap().put(cB.getName(), false); + cB.getAllyMap().put(cA.getName(), false); + + //Save + _manager.CRepo().EditClan(cA.GetToken()); + _manager.CRepo().EditClan(cB.GetToken()); + + //Log + _manager.log("Added Ally for [" + cB.getName() + "] and [" + cA.getName() + "] by [" + player + "]."); + } + + public boolean trust(ClanInfo cA, ClanInfo cB, String player) + { + if (!cA.getAllyMap().containsKey(cB.getName())) + return false; + + boolean trust = !cA.getAllyMap().get(cB.getName()); + + //Memory + cA.getAllyMap().put(cB.getName(), trust); + + //Save + _manager.CRepo().EditClan(cA.GetToken()); + _manager.CRepo().EditClan(cB.GetToken()); + + //Update Relations + for (String cur : cA.getMembers().keySet()) + _manager.getClanUtility().updateRelations(cur); + + //Update Relations + for (String cur : cB.getMembers().keySet()) + _manager.getClanUtility().updateRelations(cur); + + //Log + _manager.log("Gave Trust [" + trust + "] to [" + cB.getName() + "] for [" + cA.getName() + "] by [" + player + "]."); + + return trust; + } + + public void neutral(ClanInfo cA, ClanInfo cB, String player, boolean bothClansManager) + { + //Update ClansManager + cA.getAllyMap().remove(cB.getName()); + cB.getAllyMap().remove(cA.getName()); + + //Save + _manager.CRepo().EditClan(cA.GetToken()); + _manager.CRepo().EditClan(cB.GetToken()); + + //Update Relations + for (String cur : cA.getMembers().keySet()) + _manager.getClanUtility().updateRelations(cur); + + //Update Relations + for (String cur : cB.getMembers().keySet()) + _manager.getClanUtility().updateRelations(cur); + + //Log + _manager.log("Added Neutral between [" + cA.getName() + "] and [" + cB.getName() + "] by [" + player + "]."); + } + + public boolean claim(String name, String chunk, String player, boolean safe) + { + if (!_manager.getClanMap().containsKey(name)) + return false; + + ClanInfo clan = _manager.getClanMap().get(name); + + //Unclaim + if (_manager.getClaimMap().containsKey(chunk)) + unclaim(chunk, player, false); + + //Memory + ClanTerritory claim = new ClanTerritory(_manager, name, chunk, safe); + clan.getClaimSet().add(chunk); + _manager.getClaimMap().put(chunk, claim); + + //Save + _manager.CRepo().EditClan(clan.GetToken()); + + //Visual + Chunk c = UtilWorld.strToChunk(chunk); + if (!clan.IsAdmin()) + for (int i = 0 ; i < 3 ; i++) + for (int x=0 ; x < 16 ; x++) + for (int z=0 ; z < 16 ; z++) + if (z == 0 || z == 15 || x == 0 || x == 15) + { + Block down = UtilBlock.getHighest(c.getWorld(), c.getBlock(x, 0, z).getX(), c.getBlock(x, 0, z).getZ()).getRelative(BlockFace.DOWN); + + if (down.getTypeId() == 1 || down.getTypeId() == 2 || down.getTypeId() == 3 || down.getTypeId() == 12 || down.getTypeId() == 8) + _manager.BlockRestore().Add(down, 89, (byte)0, 180000); + } + + //Log + _manager.log("Added Claim for [" + name + "] at [" + chunk + "] by [" + player + "]."); + + return true; + } + + public boolean unclaim(String chunk, String player, boolean sql) + { + ClanTerritory claim = _manager.getClaimMap().remove(chunk); + + if (claim == null) + { + _manager.log("Unclaiming NULL Chunk Failed."); + return false; + } + + ClanInfo clan = _manager.getClanMap().get(claim.Owner); + + if (clan == null) + { + _manager.log("Unclaiming from NULL Clan Failed."); + return false; + } + + //Memory + clan.getClaimSet().remove(chunk); + + //Save + _manager.CRepo().EditClan(clan.GetToken()); + + //Register + _manager.getUnclaimMap().put(chunk, System.currentTimeMillis()); + + //Log + _manager.log("Removed Claim for [" + clan.getName() + "] at [" + chunk + "] by [" + player + "]."); + + return true; + } + + public void home(ClanInfo clan, Location loc, String player) + { + //Memory + clan.SetHome(loc); + + //Save + _manager.CRepo().EditClan(clan.GetToken()); + + //Log + _manager.log("Set Home for [" + clan.getName() + "] to " + UtilWorld.locToStrClean(loc) + " by [" + player + "]."); + } + + public void safe(ClanTerritory claim, String player) + { + //Memory + claim.Safe = !claim.Safe; + + //Save + _manager.CRepo().EditClan(_manager.getClan(claim.Owner).GetToken()); + + //Log + _manager.log("Safe Zone at [" + claim.chunk + "] set to [" + claim.Safe + "] by [" + player + "]."); + } +} 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 b61293a0e..68a316c0e 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 @@ -1,13 +1,49 @@ package mineplex.game.clans.clans; +import java.util.HashMap; +import java.util.HashSet; + +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; +import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.event.block.BlockPistonExtendEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.MiniClientPlugin; import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClient; +import mineplex.core.account.event.RetrieveClientInformationEvent; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilTime; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilTime.TimeUnit; +import mineplex.core.creature.event.CreatureSpawnCustomEvent; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.repository.ClanTerritory; +import mineplex.minecraft.game.core.combat.CombatManager; +import mineplex.minecraft.game.core.damage.CustomDamageEvent; -public class ClansManager extends MiniPlugin +public class ClansManager extends MiniClientPlugin { + private CombatManager _combatManager; + private ClansUtility _clanUtility; + private int _dominanceLimit = 16; private int _inviteExpire = 2; private int _nameMin = 3; @@ -21,9 +57,12 @@ public class ClansManager extends MiniPlugin private NautHashMap _claimMap = new NautHashMap(); private NautHashMap _unclaimMap = new NautHashMap(); - public ClansManager(String moduleName, JavaPlugin plugin) + public ClansManager(JavaPlugin plugin, CombatManager combatManager) { - super(moduleName, plugin); + super("Clans Manager", plugin); + + _combatManager = combatManager; + _clanUtility = new ClansUtility(this); } public int getInviteExpire() @@ -50,4 +89,317 @@ public class ClansManager extends MiniPlugin { return _claimMap; } + + @Override + public void commands() + { + AddCommand("cc"); + AddCommand("fc"); + AddCommand("ac"); + } + + @Override + public void command(Player caller, String cmd, String[] args) + { + if (cmd.equals("cc") || cmd.equals("fc")) + CCommand().commandChat(caller, args); + + else if (cmd.equals("ac")) + CCommand().commandAllyChat(caller, args); + + else + CCommand().command(caller, args); + } + + public ClansClan getClan(String name) + { + return GetClanMap().get(name); + } + + @EventHandler + public void Update(UpdateEvent event) + { + if (event.getType() == UpdateType.SEC) + Power(); + + if (event.getType() == UpdateType.FAST) + CGame().UpdateSafe(); + + if (event.getType() == UpdateType.FASTER) + CGame().UpdateDisplay(); + + if (event.getType() == UpdateType.SEC) + { + for (ClansClan clan : _clanMap.values()) + { + if (clan.GeneratorUpdate()) + _genUpdateList.add(clan); + + clan.OutpostUpdate(); + } + + if (_genUpdateList.size() > 0) + { + CRepo().Repository.UpdateClanTNTGenerators(_genUpdateList); + _genUpdateList.clear(); + } + } + + if (event.getType() == UpdateType.FAST) + for (ClansClan clan : _clanMap.values()) + if (clan.GetOutpost() != null) + clan.GetOutpost().BuildUpdate(); + } + + public long lastPower = System.currentTimeMillis(); + + @EventHandler(priority = EventPriority.LOW) + public void BlockBurn(BlockBurnEvent event) + { + CGame().BlockBurn(event); + } + + @EventHandler(priority = EventPriority.LOW) + public void BlockIgnite(BlockIgniteEvent event) + { + CGame().BlockSpread(event); + } + + @EventHandler(priority = EventPriority.LOW) + public void BlockPlace(BlockPlaceEvent event) + { + if (event.isCancelled()) + return; + + CGame().BlockPlace(event); + } + + @EventHandler(priority = EventPriority.HIGHEST) + public void BlockCreatureSpawn(CreatureSpawnCustomEvent event) + { + ClansClan clan = Clans().CUtil().getOwner(event.GetLocation()); + + if (clan != null) + if (!clan.IsAdmin() && !clan.GetName().equals("Spawn")) + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void Damage(CustomDamageEvent event) + { + if (event.IsCancelled()) + return; + + CGame().Damage(event); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void Interact(PlayerInteractEvent event) + { + CGame().Interact(event); + CDisplay().handleInteract(event); + + if (Util().Event().isAction(event, ActionType.R_BLOCK)) + if (event.getClickedBlock().getType() == Material.BREWING_STAND && !event.isCancelled()) + { + for (ClansClan clan : _clanMap.values()) + clan.GeneratorUse(event.getPlayer(), event.getClickedBlock().getLocation()); + + event.setCancelled(true); + } + else if (event.getClickedBlock().getType() == Material.BEACON) + { + for (ClansClan clan : _clanMap.values()) + clan.OutpostUse(event.getPlayer(), event.getClickedBlock().getLocation()); + + event.setCancelled(true); + } + } + + @EventHandler(priority = EventPriority.LOWEST) + public void Piston(BlockPistonExtendEvent event) + { + CGame().Piston(event); + } + + @EventHandler(priority = EventPriority.LOW) + public void SkillTrigger(SkillTriggerEvent event) + { + CGame().SafeSkill(event); + } + + @EventHandler(priority = EventPriority.MONITOR) + public void Death(CombatDeathEvent event) + { + CGame().DeathDominance(event); + + CGame().DeathColor(event); + } + + @EventHandler + public void Join(PlayerJoinEvent event) + { + CGame().Join(event); + } + + @EventHandler + public void Quit(PlayerQuitEvent event) + { + CGame().Quit(event); + } + + @EventHandler(priority = EventPriority.LOWEST) + public void Explosion(EntityExplodeEvent event) + { + CGame().Explode(event); + } + + public boolean HandleClanChat(AsyncPlayerChatEvent event, String filteredMessage) + { + CoreClient client = Clients().Get(event.getPlayer()); + + if (client == null) + return false; + + if (!client.Clan().IsClanChat()) + return false; + + ClansClan clan = CUtil().getClanByPlayer(event.getPlayer()); + if (clan == null) + { + Clients().Get(event.getPlayer()).Clan().SetClanChat(false); + return false; + } + + ChatClan(clan, event.getPlayer(), event.getMessage(), filteredMessage); + return true; + } + + public boolean HandleAllyChat(AsyncPlayerChatEvent event, String filteredMessage) + { + if (!Get(event.getPlayer()).isAllyChat()) + return false; + + ClansClan clan = CUtil().getClanByPlayer(event.getPlayer()); + if (clan == null) + { + Clients().Get(event.getPlayer()).Clan().SetAllyChat(false); + return false; + } + + ChatAlly(clan, event.getPlayer(), event.getMessage(), filteredMessage); + return true; + } + + public void ChatClan(ClanInfo clan, Player sender, String message, String filteredMessage) + { + clan.chat(sender, message, filteredMessage); + } + + public void ChatAlly(ClanInfo clan, Player sender, String message, String filteredMessage) + { + for (String cur : clan.getAllyMap().keySet()) + { + ClanInfo ally = _clanUtility.getClanByClanName(cur); + if (ally == null) continue; + + ally.allyChat(clan, sender, message, filteredMessage); + } + + clan.allyChat(clan, sender, message, filteredMessage); + } + + public int getNameMin() + { + return _nameMin; + } + + public int getNameMax() + { + return _nameMax; + } + + public long getReclaimTime() + { + return _reclaimTime; + } + + @Override + public boolean CanHurt(Player a, Player b) + { + if (a.equals(b)) + return false; + + return CUtil().canHurt(a, b); + } + + @Override + public boolean CanHurt(String a, String b) + { + if (a.equals(b)) + return false; + + return CUtil().canHurt(UtilPlayer.searchExact(a), UtilPlayer.searchExact(b)); + } + + @Override + public boolean IsSafe(Player a) + { + return CUtil().isSafe(a); + } + + public IRepository GetRepository() { + return _repository; + } + + public void SetRepository(IRepository _repository) { + this._repository = _repository; + } + + public HashMap GetClanMemberMap() + { + return _clanMemberMap; + } + + public ClanRelation GetRelation(String playerA, String playerB) + { + return Clients().Get(playerA).Clan().GetRelation(playerB); + } + + @Override + public ChatColor GetColorOfFor(String other, Player player) + { + return CUtil().relChatColor(Clients().Get(player).Clan().GetRelation(other), false); + } + + public String GetServerName() + { + return _serverName; + } + + public long getOnlineTime() + { + return _onlineTime; + } + + public CombatManager getCombatManager() + { + return _combatManager; + } + + public ClansUtility getClanUtility() + { + return _clanUtility; + } + + @Override + protected ClientClan AddPlayer(String player) + { + return new ClientClan(); + } + + @Override + protected void loadClientInformation(RetrieveClientInformationEvent 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 181898923..1ab5184c0 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 @@ -8,15 +8,13 @@ import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.entity.Player; -import mineplex.core.account.CoreClient; import mineplex.core.common.util.C; import mineplex.core.common.util.F; 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.ClanInfo.Role; import mineplex.game.clans.clans.repository.ClanTerritory; -import mineplex.game.clans.clans.repository.tokens.ClanTerritoryToken; public class ClansUtility { @@ -33,8 +31,6 @@ public class ClansUtility ALLY, ALLY_TRUST, NEUTRAL, - ENEMY, - PILLAGE, ADMIN, SAFE } @@ -178,9 +174,7 @@ public class ClansUtility public boolean isSafe(Player player) { - ClanInfo clan = getClanByPlayer(player); - - if (!UtilTime.elapsed(Clans.Clients().Get(player).Player().GetLastDamager(), 15000)) + if (!UtilTime.elapsed(Clans.getCombatManager().Get(player).GetLastDamaged(), 15000)) return false; return isSafe(player.getLocation()); @@ -307,24 +301,12 @@ public class ClansUtility public ClanRelation getAccess(Player player, Location loc) { - //Observer Override - if (Clans.Observer().isObserver(player, false)) - { - if (Clans.Observer().isObserver(player, true)) - return ClanRelation.SELF; - else - return ClanRelation.NEUTRAL; - } - ClanInfo owner = this.getOwner(loc); ClanInfo clan = getClanByPlayer(player); if (owner == null) return ClanRelation.SELF; - if (owner.equals(Clans.CAdmin().getMimic(player, false))) - return ClanRelation.SELF; - if (owner.equals(clan)) return ClanRelation.SELF; @@ -336,10 +318,6 @@ public class ClansUtility if (owner.isAlly(clan.getName())) return ClanRelation.ALLY; - if (clan != null) - if (owner.isEnemy(clan.getName())) - return ClanRelation.ENEMY; - return ClanRelation.NEUTRAL; } @@ -428,16 +406,12 @@ public class ClansUtility if (relation == ClanRelation.SELF) return C.xSelf; if (relation == ClanRelation.ALLY_TRUST) return C.xdAlly; if (relation == ClanRelation.ALLY) return C.xAlly; - if (relation == ClanRelation.ENEMY) return C.xWar; - if (relation == ClanRelation.PILLAGE) return C.xPillage; return C.xEnemy; } if (relation == ClanRelation.SELF) return C.xdSelf; if (relation == ClanRelation.ALLY_TRUST) return C.xAlly; if (relation == ClanRelation.ALLY) return C.xdAlly; - if (relation == ClanRelation.ENEMY) return C.xdWar; - if (relation == ClanRelation.PILLAGE) return C.xdPillage; return C.xdEnemy; } @@ -500,49 +474,13 @@ public class ClansUtility if (isSafe(damager)) return false; - ClanRelation rel = Clans.CUtil().relPP(damagee.getName(), damager.getName()); + ClanRelation rel = relPP(damagee.getName(), damager.getName()); if (rel == ClanRelation.ALLY || rel == ClanRelation.ALLY_TRUST || rel == ClanRelation.SELF) return false; return true; } - - public void updateRelations(String name) - { - updateRelations(UtilPlayer.searchExact(name)); - } - - public void updateRelations(Player player) - { - if (player == null) - return; - - CoreClient client = Clans.Clients().Get(player); - - for (Player cur : UtilServer.getPlayers()) - { - //For Player - client.Clan().SetRelationship( - cur.getName(), relPP(cur.getName(), player.getName())); - - //For Other - Clans.Clients().Get(cur.getName()).Clan().SetRelationship( - player.getName(), relPP(player.getName(), cur.getName())); - - if (player.canSee(cur)) - { - player.hidePlayer(cur); - player.showPlayer(cur); - } - - if (cur.canSee(player)) - { - cur.hidePlayer(player); - cur.showPlayer(player); - } - } - } public boolean isBorderlands(Location loc) { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClientClan.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClientClan.java new file mode 100644 index 000000000..bb0a2a2a1 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClientClan.java @@ -0,0 +1,51 @@ +package mineplex.game.clans.clans; + +public class ClientClan +{ + private boolean _clanChat; + private boolean _allyChat; + + private boolean _mapOn; + private boolean _canJoin; + private long _joinDelay; + + public boolean isAllyChat() + { + return _allyChat; + } + + public void setAllyChat(boolean allyChat) + { + _allyChat = allyChat; + } + + public boolean isClanChat() + { + return _clanChat; + } + + public void setClanChat(boolean clanChat) + { + _clanChat = clanChat; + } + + public boolean isMapOn() + { + return _mapOn; + } + + public void setMapOn(boolean mapOn) + { + _mapOn = mapOn; + } + + public boolean canJoin() + { + return _canJoin; + } + + public long getDelay() + { + return _joinDelay; + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java new file mode 100644 index 000000000..ae7ea0e73 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/commands/ClansCommand.java @@ -0,0 +1,1158 @@ +package mineplex.game.clans.clans.commands; + +import java.util.ArrayList; + +import org.bukkit.Chunk; +import org.bukkit.entity.Player; + +import mineplex.core.account.CoreClient; +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilMath; +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.core.common.util.UtilTime.TimeUnit; +import mineplex.core.recharge.Recharge; +import mineplex.game.clans.clans.ClanInfo; +import mineplex.game.clans.clans.ClanInfo.Role; +import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.ClansUtility.ClanRelation; +import mineplex.game.clans.clans.ClientClan; + +public class ClansCommand extends CommandBase +{ + public String[] denyClan = new String[] { + "neut", "neutral", "sethome", "promote", "demote", "admin", "help", "create", "disband", "delete", "invite", "join", "kick", "ally", "trust", "claim", "unclaim", "territory", "home"}; + + public ClansCommand(ClansManager plugin) + { + super(plugin, Rank.ALL, "c", "clans", "f", "factions"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + if (Plugin.getClanMemberMap().containsKey(caller.getName())) + infoClan(caller, Plugin.getClanMemberMap().get(caller.getName()).getName()); + + else + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("h")) + help(caller); + + else if (args[0].equalsIgnoreCase("admin") || args[0].equalsIgnoreCase("x")) + Plugin.CAdmin().command(caller, args); + + else if (args[0].equalsIgnoreCase("create")) + create(caller, args); + + else if (args[0].equalsIgnoreCase("disband") || args[0].equalsIgnoreCase("delete")) + delete(caller, args); + + else if (args[0].equalsIgnoreCase("invite") || args[0].equalsIgnoreCase("i")) + invite(caller, args); + + else if (args[0].equalsIgnoreCase("promote") || args[0].equalsIgnoreCase("+")) + promote(caller, args); + + else if (args[0].equalsIgnoreCase("demote") || args[0].equalsIgnoreCase("-")) + demote(caller, args); + + else if (args[0].equalsIgnoreCase("join") || args[0].equalsIgnoreCase("j")) + join(caller, args); + + else if (args[0].equalsIgnoreCase("leave") || args[0].equalsIgnoreCase("l")) + leave(caller, args); + + else if (args[0].equalsIgnoreCase("kick") || args[0].equalsIgnoreCase("k")) + kick(caller, args); + + else if (args[0].equalsIgnoreCase("ally") || args[0].equalsIgnoreCase("a")) + ally(caller, args); + + else if (args[0].equalsIgnoreCase("trust")) + trust(caller, args); + + else if (args[0].equalsIgnoreCase("neutral") || args[0].equalsIgnoreCase("neut") || args[0].equalsIgnoreCase("n")) + neutral(caller, args); + + else if (args[0].equalsIgnoreCase("claim") || args[0].equalsIgnoreCase("c")) + claim(caller, args); + + else if (args[0].equalsIgnoreCase("unclaim") || args[0].equalsIgnoreCase("uc")) + unclaim(caller, args); + + else if (args[0].equalsIgnoreCase("map") || args[0].equalsIgnoreCase("m")) + map(caller, args); + + else if (args[0].equalsIgnoreCase("home") || args[0].equalsIgnoreCase("h")) + home(caller, args); + + else if (args[0].equalsIgnoreCase("sethome")) + homeSet(caller); + + else if (args[0].equalsIgnoreCase("territory") || args[0].equalsIgnoreCase("t")) + infoTerritory(caller, args); + + else if (args[0].equalsIgnoreCase("who") || args[0].equalsIgnoreCase("w")) + { + if (args.length > 1) infoClan(caller, args[1]); + else infoClan(caller, null); + } + + else + infoClan(caller, args[0]); + } + + public void commandChat(Player caller, String[] args) + { + if (args.length == 0) + { + Plugin.Get(caller).setClanChat(!Plugin.Get(caller).isClanChat()); + UtilPlayer.message(caller, F.main("Clans", "Clan Chat: " + F.oo(Plugin.Get(caller).isClanChat()))); + return; + } + + //Single Clan + if (!Plugin.Get(caller).isClanChat()) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + if (clan == null) + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + else + Plugin.ChatClan(clan, caller, F.combine(args, 0, null, false), F.combine(args, 0, null, false)); + } + } + + public void commandAllyChat(Player caller, String[] args) + { + if (args.length == 0) + { + Plugin.Get(caller).setAllyChat(!Plugin.Get(caller).isAllyChat()); + UtilPlayer.message(caller, F.main("Clans", "Ally Chat: " + F.oo(Plugin.Get(caller).isAllyChat()))); + return; + } + + //Single Clan + if (!Plugin.Get(caller).isAllyChat()) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + if (clan == null) UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + else Plugin.ChatAlly(clan, caller, F.combine(args, 0, null, false), F.combine(args, 0, null, false)); + } + } + + private void help(Player caller) + { + UtilPlayer.message(caller, F.main("Clans", "Commands List;")); + UtilPlayer.message(caller, F.help("/c create ", "Create new Clan", Rank.ALL)); + UtilPlayer.message(caller, F.help("/c join ", "Join a Clan", Rank.ALL)); + UtilPlayer.message(caller, F.help("/c leave ", "Leave your Clan", Rank.ALL)); + UtilPlayer.message(caller, F.help("/c map ", "View Clan Map", Rank.ALL)); + UtilPlayer.message(caller, F.help("/cc (Message)", "Clan Chat (Toggle)", Rank.ALL)); + + UtilPlayer.message(caller, F.help("/c promote ", "Promote Player in Clan", Rank.MODERATOR)); + UtilPlayer.message(caller, F.help("/c demote ", "Demote Player in Clan", Rank.MODERATOR)); + + UtilPlayer.message(caller, F.help("/c home (set)", "Teleport to Clan Home", Rank.MODERATOR)); + + UtilPlayer.message(caller, F.help("/c invite ", "Invite Player to Clan", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/c kick ", "Kick Player from Clan", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/c neutral ", "Request Neutrality with Clan", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/c enemy ", "Declare War with Clan", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/c ally ", "Send Alliance to Clan", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/c trust ", "Give Trust to Clan", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/c claim", "Claim Territory", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/c unclaim (all)", "Unclaim Territory", Rank.ADMIN)); + + UtilPlayer.message(caller, F.help("/c delete", "Delete your Clan", Rank.OWNER)); + + UtilPlayer.message(caller, F.help("/c ", "View Clan Information", Rank.ALL)); + } + + public void create(Player caller, String[] args) + { + ClientClan client = Plugin.Get(caller); + + if (Plugin.getClanMemberMap().containsKey(caller.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You are already in a Clan.")); + return; + } + + if (!client.canJoin()) + { + UtilPlayer.message(caller, F.main("Clans", "You recently left a Clan with low Dominance.")); + UtilPlayer.message(caller, F.main("Clans", "You cannot join a Clan for " + + C.mTime + UtilTime.convertString(System.currentTimeMillis() - client.getDelay(), 1, TimeUnit.FIT) + + C.mBody + ".")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input a Clan name.")); + return; + } + + if (!Plugin.Util().Input().valid(args[1])) + { + UtilPlayer.message(caller, F.main("Clans", "Invalid characters in Clan name.")); + return; + } + + if (args[1].length() < Plugin.getNameMin()) + { + UtilPlayer.message(caller, F.main("Clans", "Clan name too short. Minimum length is " + (Plugin.getNameMin()) + ".")); + return; + } + + if (args[1].length() > Plugin.getNameMax()) + { + UtilPlayer.message(caller, F.main("Clans", "Clan name too long. Maximum length is + " + (Plugin.getNameMax()) + ".")); + return; + } + + for (String cur : denyClan) + { + if (cur.equalsIgnoreCase(args[1])) + { + UtilPlayer.message(caller, F.main("Clans", "Clan name cannot be a Clan command.")); + return; + } + } + + for (String cur : Plugin.getClanMap().keySet()) + { + if (cur.equalsIgnoreCase(args[1])) + { + UtilPlayer.message(caller, F.main("Clans", "Clan name is already used by another Clan.")); + return; + } + } + + //Inform + UtilServer.broadcast(F.main("Clans", F.name(caller.getName()) + " formed " + F.elem("Clan " + args[1]) + ".")); + + //Create and Join + Plugin.CTask().join(Plugin.CTask().create(caller.getName(), args[1], false), caller.getName(), Role.LEADER); + } + + public void delete(Player caller, String[] args) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (Plugin.getClanUtility().getRole(caller) != Role.LEADER) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader can disband the Clan.")); + return; + } + + //Task + Plugin.CTask().delete(clan); + + //Inform + UtilServer.broadcast(F.main("Clans", F.name(caller.getName()) + " disbanded " + F.elem("Clan " + clan.getName()) + ".")); + } + + public void invite(Player caller, String[] args) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (clan.getMembers().get(caller.getName()) != Role.LEADER && + clan.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can send invites.")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input an invitee.")); + return; + } + + Player target = UtilPlayer.searchOnline(caller, args[1], true); + if (target == null) + return; + + if (target.getName().equals(caller.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot invite yourself.")); + return; + } + + //Inform + clan.inform(F.name(caller.getName()) + " invited " + F.name(target.getName()) + " to join your Clan.", caller.getName()); + UtilPlayer.message(caller, F.main("Clans", "You invited " + F.name(target.getName()) + " to join your Clan.")); + UtilPlayer.message(target, F.main("Clans", F.name(caller.getName()) + " invited you to join " + F.elem("Clan " + clan.getName()) + ".")); + UtilPlayer.message(target, F.main("Clans", "Type " + F.elem("/c join " + clan.getName()) + " to accept!")); + + //Task + Plugin.CTask().invite(clan, target.getName(), caller.getName()); + } + + public void join(Player caller, String[] args) + { + ClanInfo cA = Plugin.getClan(Plugin.getClanMemberMap().get(caller.getName()).getName()); + + if (Plugin.getClanMemberMap().containsKey(caller.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You are already in a Clan.")); + return; + } + + if (!Plugin.Get(caller).canJoin()) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot join a Clan for " + + C.mTime + UtilTime.convertString(System.currentTimeMillis() - Plugin.Get(caller).getDelay(), 1, TimeUnit.FIT) + + C.mBody + ".")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input a Clan name.")); + return; + } + + if (!Plugin.Util().Input().valid(args[1])) + { + UtilPlayer.message(caller, F.main("Clans", "Invalid characters in Clan name.")); + return; + } + + ClanInfo clan = Plugin.getClanUtility().searchClanPlayer(caller, args[1], true); + if (clan == null) + return; + + if (!clan.isInvited(caller.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You are not invited to " + F.elem("Clan " + clan.getName()) + ".")); + return; + } + + //Task + Plugin.CTask().join(clan, caller.getName(), Role.RECRUIT); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You joined " + F.elem("Clan " + clan.getName()) + ".")); + clan.inform(F.name(caller.getName()) + " has joined your Clan.", caller.getName()); + } + + public void leave(Player caller, String[] args) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (clan.getMembers().get(caller.getName()) == Role.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) + { + //Inform + UtilPlayer.message(caller, F.main("Clans", "You left " + F.elem("Clan " + clan.getName()) + ".")); + + //Task + Plugin.CTask().leave(clan, caller.getName()); + + //Inform + clan.inform(F.name(caller.getName()) + " has left your Clan.", null); + } + else + { + delete(caller, args); + } + } + + public void kick(Player caller, String[] args) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input a Player to kick.")); + return; + } + + String target = UtilPlayer.searchCollection(caller, args[1], clan.getMembers().keySet(), "Clan Member", true); + + if (target == null) + return; + + if (clan.getMembers().get(caller.getName()) != Role.LEADER && + clan.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can kick members.")); + return; + } + + if ((clan.getMembers().get(target) == Role.LEADER && clan.getMembers().get(caller.getName()) == Role.ADMIN) || + (clan.getMembers().get(target) == Role.ADMIN && clan.getMembers().get(caller.getName()) == Role.ADMIN)) + { + UtilPlayer.message(caller, F.main("Clans", "You do not outrank " + F.name(target) + ".")); + return; + } + + + //Task + Plugin.CTask().leave(clan, target); + + //Inform + UtilPlayer.message(UtilPlayer.searchOnline(null, target, false), F.main("Clans", F.name(caller.getName()) + " kicked you from " + F.elem("Clan " + clan.getName()) + ".")); + UtilPlayer.message(caller, F.main("Clans", "You kicked " + F.name(target) + " from your Clan.")); + clan.inform(F.main("Clans", F.name(caller.getName()) + " kicked " + F.name(target) + " from your Clan."), caller.getName()); + } + + public void promote(Player caller, String[] args) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input player to promote.")); + return; + } + + String target = UtilPlayer.searchCollection(caller, args[1], clan.getMembers().keySet(), "Clan Member", true); + + if (target == null) + return; + + if (target.equals(caller.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot promote yourself.")); + return; + } + + if (clan.getMembers().get(caller.getName()).toInt() <= clan.getMembers().get(target).toInt()) + { + UtilPlayer.message(caller, F.main("Clans", "You do not outrank " + F.name(target) + ".")); + return; + } + + //Task + String newRank = "?"; + if (clan.getMembers().get(target) == Role.RECRUIT) + { + Plugin.CTask().role(clan, target, Role.MEMBER); + newRank = "Member"; + } + else if (clan.getMembers().get(target) == Role.MEMBER) + { + Plugin.CTask().role(clan, target, Role.ADMIN); + newRank = "Admin"; + } + else if (clan.getMembers().get(target) == Role.ADMIN) + { + Plugin.CTask().role(clan, target, Role.LEADER); + newRank = "Leader"; + + //Give Leader + Plugin.CTask().role(clan, caller.getName(), Role.ADMIN); + } + + //Inform + clan.inform(F.name(caller.getName()) + " promoted " + F.name(target) + " to " + F.elem(newRank) + ".", null); + } + + public void demote(Player caller, String[] args) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input player to demote.")); + return; + } + + String target = UtilPlayer.searchCollection(caller, args[1], clan.getMembers().keySet(), "Clan Member", true); + + if (target == null) + return; + + if (target.equals(caller.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot demote yourself.")); + return; + } + + if (clan.getMembers().get(caller.getName()).toInt() <= clan.getMembers().get(target).toInt()) + { + UtilPlayer.message(caller, F.main("Clans", "You do not outrank " + F.name(target) + ".")); + return; + } + + if (clan.getMembers().get(target) == Role.RECRUIT) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot demote " + F.name(target) + " any further.")); + return; + } + + //Task + String newRank = "?"; + if (clan.getMembers().get(target) == Role.MEMBER) + { + Plugin.CTask().role(clan, target, Role.RECRUIT); + newRank = "Recruit"; + } + else if (clan.getMembers().get(target) == Role.ADMIN) + { + Plugin.CTask().role(clan, target, Role.MEMBER); + newRank = "Member"; + } + + //Inform + clan.inform(F.main("Clans", F.name(caller.getName()) + " demoted " + F.name(target) + " to " + F.elem(newRank) + "."), null); + } + + public void ally(Player caller, String[] args) + { + ClanInfo cA = Plugin.getClanUtility().getClanByPlayer(caller); + + if (cA == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (cA.getMembers().get(caller.getName()) != Role.LEADER && cA.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can manage Alliances.")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input a Clan to ally.")); + return; + } + + ClanInfo cB = Plugin.getClanUtility().searchClanPlayer(caller, args[1], true); + + if (cB == null) + return; + + if (cA.isSelf(cB.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot ally with yourself.")); + return; + } + + if (cA.isAlly(cB.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You are already allies with " + F.elem("Clan " + cB.getName()) + ".")); + return; + } + + if (cA.getAllies() >= cA.getAlliesMax()) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot have any more allies.")); + return; + } + + if (cB.getAllies() >= cB.getAlliesMax()) + { + UtilPlayer.message(caller, F.main("Clans", F.elem("Clan " + cB.getName()) + " cannot have any more allies.")); + return; + } + + if (cB.isRequested(cA.getName())) + { + //Task + Plugin.CTask().ally(cA, cB, caller.getName()); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You accepted alliance with " + F.elem("Clan " + cB.getName()) + ".")); + cA.inform(F.name(caller.getName()) + " accepted alliance with " + F.elem("Clan " + cB.getName()) + ".", caller.getName()); + cB.inform(F.elem("Clan " + cA.getName()) + " has accepted alliance with you.", null); + } + else + { + //Task + Plugin.CTask().requestAlly(cA, cB, caller.getName()); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You requested alliance with " + F.elem("Clan " + cB.getName()) + ".")); + cA.inform(F.name(caller.getName()) + " has requested alliance with " + F.elem("Clan " + cB.getName()) + ".", caller.getName()); + cB.inform(F.elem("Clan " + cA.getName()) + " has requested alliance with you.", null); + } + } + + public void trust(Player caller, String[] args) + { + ClanInfo cA = Plugin.getClan(Plugin.getClanMemberMap().get(caller.getName()).getName()); + + if (cA == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (cA.getMembers().get(caller.getName()) != Role.LEADER && cA.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can manage Trust.")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input a Clan to enemy.")); + return; + } + + ClanInfo cB = Plugin.getClanUtility().searchClanPlayer(caller, args[1], true); + + if (cB == null) + return; + + if (!cA.isAlly(cB.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot give trust to enemies.")); + return; + } + + //Task + if (Plugin.CTask().trust(cA, cB, caller.getName())) + { + //Inform + UtilPlayer.message(caller, F.main("Clans", "You gave trust to " + F.elem("Clan " + cB.getName()) + ".")); + cA.inform(F.name(caller.getName()) + " has given trust to " + F.elem("Clan " + cB.getName()) + ".", caller.getName()); + cB.inform(F.elem("Clan " + cA.getName()) + " has given trust to you.", null); + } + else + { + //Inform + UtilPlayer.message(caller, F.main("Clans", "You revoked trust to " + F.elem("Clan " + cB.getName()) + ".")); + cA.inform(F.name(caller.getName()) + " has revoked trust to " + F.elem("Clan " + cB.getName()) + ".", caller.getName()); + cB.inform(F.elem("Clan " + cA.getName()) + " has revoked trust to you.", null); + } + } + + public void neutral(Player caller, String[] args) + { + ClanInfo cA = Plugin.getClan(Plugin.getClanMemberMap().get(caller.getName()).getName()); + + if (cA == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (cA.getMembers().get(caller.getName()) != Role.LEADER && cA.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can manage relationships.")); + return; + } + + if (args.length < 2) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input a Clan to set neutrality with.")); + return; + } + + ClanInfo cB = Plugin.getClanUtility().searchClanPlayer(caller, args[1], true); + + if (cB == null) + return; + + if (cB.isSelf(cA.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You prefer to think of yourself positively...")); + return; + } + + if (cB.isNeutral(cA.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You are already neutral with " + F.elem("Clan " + cB.getName()) + ".")); + return; + } + + if (cB.isAlly(cA.getName())) + { + //Task + Plugin.CTask().neutral(cA, cB, caller.getName(), true); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You revoked alliance with " + F.elem("Clan " + cB.getName()) + ".")); + cA.inform(F.name(caller.getName()) + " revoked alliance with " + F.elem("Clan " + cB.getName()) + ".", caller.getName()); + cB.inform(F.elem("Clan " + cA.getName()) + " has revoked alliance with you.", null); + + return; + } + } + + public void claim(Player caller, String args[]) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (clan.getMembers().get(caller.getName()) != Role.LEADER && clan.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can claim Territory.")); + return; + } + + if (caller.getLocation().getChunk().getX() < -24 || + caller.getLocation().getChunk().getX() > 23 || + caller.getLocation().getChunk().getZ() < -24 || + caller.getLocation().getChunk().getZ() > 23) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot claim Territory this far away.")); + return; + } + + String chunk = UtilWorld.chunkToStr(caller.getLocation().getChunk()); + ClanInfo ownerClan = Plugin.getClanUtility().getOwner(caller.getLocation()); + + //Try to Steal + if (ownerClan != null && !ownerClan.equals(clan)) + if (unclaimSteal(caller, clan, ownerClan)) + { + return; + } + else + { + UtilPlayer.message(caller, F.main("Clans", "This Territory is owned by " + + Plugin.getClanUtility().mRel(Plugin.getClanUtility().relPC(caller.getName(), ownerClan), ownerClan.getName(), true) + ".")); + return; + } + + if (clan.getClaims() >= clan.getClaimsMax()) + { + UtilPlayer.message(caller, F.main("Clans", "Your Clan cannot claim more Territory.")); + return; + } + + //Boxed + if (checkBox(caller.getLocation().getChunk(), 4)) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot claim this Territory, it causes a box.")); + UtilPlayer.message(caller, F.main("Clans", "This means a Territory has all sides claimed.")); + return; + } + + //Adjacent + boolean selfAdj = false; + for (int x=-1 ; x<=1 ; x++) + for (int z=-1 ; z<=1 ; z++) + { + if (x== 0 && z == 0) + continue; + + String other = UtilWorld.chunkToStr(caller.getWorld().getChunkAt( + caller.getLocation().getChunk().getX()+x, + caller.getLocation().getChunk().getZ()+z)); + + ClanInfo adjClan = Plugin.getClanUtility().getOwner(other); + + if (adjClan == null) + continue; + + if (x == 0 || z == 0) + { + if (checkBox(caller.getWorld().getChunkAt( + caller.getLocation().getChunk().getX()+x, + caller.getLocation().getChunk().getZ()+z), 3)) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot claim this Territory, it causes a box.")); + UtilPlayer.message(caller, F.main("Clans", "This means a Territory has all sides claimed.")); + return; + } + + if (Plugin.getClanUtility().rel(clan, adjClan) == ClanRelation.SELF) + { + selfAdj = true; + } + + else if (Plugin.getClanUtility().rel(clan, adjClan) != ClanRelation.SELF) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot claim Territory next to " + + Plugin.getClanUtility().mRel(Plugin.getClanUtility().rel(ownerClan, adjClan), adjClan.getName(), true) + ".")); + return; + } + } + } + + //Not Next to Self + if (!selfAdj && !clan.getClaimSet().isEmpty()) + { + UtilPlayer.message(caller, F.main("Clans", "You must claim next to your other Territory.")); + return; + } + + //Claim Timer + if (Plugin.getUnclaimMap().containsKey(chunk)) + { + if (!UtilTime.elapsed(Plugin.getUnclaimMap().get(chunk), Plugin.getReclaimTime())) + { + UtilPlayer.message(caller, F.main("Clans", "This Territory cannot be claimed for " + + F.time(UtilTime.convertString(Plugin.getReclaimTime() - (System.currentTimeMillis()-Plugin.getUnclaimMap().get(chunk)), 1, TimeUnit.FIT)) + ".")); + + return; + } + else + { + Plugin.getUnclaimMap().remove(chunk); + } + } + + //Enemies in Land + for (Player cur : UtilServer.getPlayers()) + if (UtilMath.offset(cur, caller) < 16) + if (Plugin.getClanUtility().playerEnemy(caller.getName(), cur.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot claim while enemies are nearby.")); + return; + } + + //Recharge + if (!Recharge.Instance.use(caller, "Territory Claim", 60000, true, false)) + return; + + //Task + Plugin.CTask().claim(clan.getName(), chunk, caller.getName(), false); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You claimed Territory " + F.elem(UtilWorld.chunkToStrClean(caller.getLocation().getChunk())) + ".")); + clan.inform(F.name(caller.getName()) + " claimed Territory " + F.elem(UtilWorld.chunkToStrClean(caller.getLocation().getChunk())) + ".", caller.getName()); + } + + public boolean checkBox(Chunk chunk, int req) + { + int boxed = 0; + for (int x=-1 ; x<=1 ; x++) + for (int z=-1 ; z<=1 ; z++) + { + if (x == 0 && z == 0 || x != 0 && z != 0) + continue; + + String other = UtilWorld.chunkToStr(chunk.getWorld().getChunkAt( + chunk.getX()+x, chunk.getZ()+z)); + + ClanInfo adjClan = Plugin.getClanUtility().getOwner(other); + + if (adjClan == null) + continue; + + boxed++; + } + + return (boxed >= req); + } + + public void unclaim(Player caller, String args[]) + { + if (args.length > 1) + { + if (args[1].equalsIgnoreCase("all") || args[1].equalsIgnoreCase("a")) + { + unclaimall(caller); + return; + } + } + + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + String chunk = UtilWorld.chunkToStr(caller.getLocation().getChunk()); + ClanInfo ownerClan = Plugin.getClanUtility().getOwner(caller.getLocation()); + + //Try to Steal + if (ownerClan != null && !ownerClan.equals(clan)) + if (unclaimSteal(caller, clan, ownerClan)) + return; + + //Role + if (clan.getMembers().get(caller.getName()) != Role.LEADER && clan.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can unclaim Territory.")); + return; + } + + //Not Claimed + if (ownerClan == null || !ownerClan.equals(clan)) + { + UtilPlayer.message(caller, F.main("Clans", "This Territory is not owned by you.")); + return; + } + + //Task + Plugin.CTask().unclaim(chunk, caller.getName(), true); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You unclaimed Territory " + F.elem(UtilWorld.chunkToStrClean(caller.getLocation().getChunk())) + ".")); + clan.inform(F.name(caller.getName()) + " unclaimed Territory " + F.elem(UtilWorld.chunkToStrClean(caller.getLocation().getChunk())) + ".", caller.getName()); + } + + public boolean unclaimSteal(Player caller, ClanInfo clientClan, ClanInfo ownerClan) + { + if (ownerClan.getClaims() > ownerClan.getClaimsMax()) + { + //Nothing Extra + } + else + { + return false; + } + + //Change Inform + UtilPlayer.message(caller, F.main("Clans", "You can no longer 'steal' territory. " + + "You simply unclaim it and it can not be reclaimed by anyone for 30 mintes." + + "This was done to improve gameplay. Enjoy!")); + + //Inform + UtilServer.broadcast(F.main("Clans", F.elem(clientClan.getName()) + " unclaimed from " + + F.elem(ownerClan.getName()) + " at " + F.elem(UtilWorld.locToStrClean(caller.getLocation())) + ".")); + + //Unclaim + Plugin.CTask().unclaim(UtilWorld.chunkToStr(caller.getLocation().getChunk()), caller.getName(), true); + + return true; + } + + public void unclaimall(Player caller) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (clan.getMembers().get(caller.getName()) != Role.LEADER) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader can unclaim all Territory.")); + return; + } + + //Unclaim + ArrayList toUnclaim = new ArrayList(); + + for (String chunk : clan.getClaimSet()) + toUnclaim.add(chunk); + + for (String chunk : toUnclaim) + Plugin.CTask().unclaim(chunk, caller.getName(), true); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You unclaimed all your Clans Territory.")); + clan.inform(F.name(caller.getName()) + " unclaimed all your Clans Territory.", caller.getName()); + } + + public void map(Player caller, String[] args) + { + if (args.length > 1) + { + if (args[1].equals("toggle") || args[1].equals("t")) + { + Plugin.Get(caller).setMapOn(!Plugin.Get(caller).isMapOn()); + UtilPlayer.message(caller, + F.main("Clans", "You toggled Clan Map: " + F.oo(Plugin.Get(caller).isMapOn()))); + return; + } + } + + //Display + Plugin.CDisplay().displayOwner(caller); + Plugin.CDisplay().displayMap(caller); + } + + public void home(Player caller, String[] args) + { + if (args.length > 1) + { + if (args[1].equalsIgnoreCase("set") || args[1].equalsIgnoreCase("s")) + { + homeSet(caller); + return; + } + } + + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (clan.getHome() == null) + { + UtilPlayer.message(caller, F.main("Clans", "Your Clan has not set a Home.")); + return; + } + + if (!clan.getClaimSet().contains(UtilWorld.chunkToStr(clan.getHome().getChunk()))) + { + UtilPlayer.message(caller, F.main("Clans", "Your Clan has lost its Home Territory.")); + return; + } + + if (!Plugin.getClanUtility().isSafe(caller.getLocation())) + { + UtilPlayer.message(caller, F.main("Clans", "You can only use Clan Home from Spawn.")); + return; + } + + if (!Plugin.getClanUtility().isSpecial(caller.getLocation(), "Spawn")) + { + UtilPlayer.message(caller, F.main("Clans", "You can only use Clan Home from Spawn.")); + return; + } + + /* + CoreClient client = Plugin.getClientManager().Get(caller); + for (Player cur : clan.GetHome().getWorld().getPlayers()) + if (client.Clan().GetRelation(cur.getName()) == ClanRelation.NEUTRAL) + if (clan.GetClaimSet().contains(UtilWorld.chunkToStr(cur.getLocation().getChunk()))) + { + UtilPlayer.message(caller, F.main("Clans", "You cannot use Clan Home with enemies in your Territory.")); + return; + } + */ + + if (!Recharge.Instance.use(caller, "Clans Teleport", 300000, true, false)) + return; + + //Do + Plugin.Teleport().TP(caller, clan.GetHome()); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You teleported to your Clan Home " + UtilWorld.locToStrClean(caller.getLocation()) + ".")); + } + + public void homeSet(Player caller) + { + ClanInfo clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + + if (clan.getMembers().get(caller.getName()) != Role.LEADER && clan.getMembers().get(caller.getName()) != Role.ADMIN) + { + UtilPlayer.message(caller, F.main("Clans", "Only the Clan Leader and Admins can manage Clan Home.")); + return; + } + + if (Plugin.getClanUtility().getOwner(caller.getLocation()) == null) + { + UtilPlayer.message(caller, F.main("Clans", "You must set your Clan Home in your own Territory.")); + return; + } + + if (!Plugin.getClanUtility().getOwner(caller.getLocation()).isSelf(clan.getName())) + { + UtilPlayer.message(caller, F.main("Clans", "You must set your Clan Home in your own Territory.")); + return; + } + + //Task + Plugin.CTask().home(clan, caller.getLocation(), caller.getName()); + + //Inform + UtilPlayer.message(caller, F.main("Clans", "You set Clan Home to " + UtilWorld.locToStrClean(caller.getLocation()) + ".")); + clan.inform(caller.getName() + " set Clan Home to " + UtilWorld.locToStrClean(caller.getLocation()) + ".", caller.getName()); + } + + + public void infoClan(Player caller, String search) + { + if (search == null) + { + UtilPlayer.message(caller, F.main("Clans", "You did not input a search parameter.")); + return; + } + + ClanInfo clan = Plugin.getClanUtility().searchClanPlayer(caller, search, true); + if (clan == null) + return; + + UtilPlayer.message(caller, clan.mDetails(caller.getName())); + } + + public void infoTerritory(Player caller, String[] args) + { + ClanInfo clan; + if (args.length < 2) + { + clan = Plugin.getClanUtility().getClanByPlayer(caller); + + if (clan == null) + { + UtilPlayer.message(caller, F.main("Clans", "You are not in a Clan.")); + return; + } + } + + else + clan = Plugin.getClanUtility().searchClan(caller, args[1], true); + + if (clan == null) + return; + + UtilPlayer.message(caller, clan.mTerritory()); + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java index 69489e75f..0e25e07ff 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/ClanRepository.java @@ -2,13 +2,17 @@ package mineplex.game.clans.clans.repository; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.List; +import java.util.Collection; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.common.util.NautHashMap; import mineplex.core.database.RepositoryBase; import mineplex.core.database.ResultSetCallable; import mineplex.core.database.column.ColumnVarChar; +import mineplex.game.clans.clans.repository.tokens.ClanAllianceToken; +import mineplex.game.clans.clans.repository.tokens.ClanMemberToken; +import mineplex.game.clans.clans.repository.tokens.ClanTerritoryToken; import mineplex.game.clans.clans.repository.tokens.ClanToken; public class ClanRepository extends RepositoryBase @@ -18,9 +22,9 @@ public class ClanRepository extends RepositoryBase private static String CREATE_CLAN_TERRITORY_TABLE = "CREATE TABLE IF NOT EXISTS clanTerritory (id INT NOT NULL AUTO_INCREMENT, clanId INT, serverName VARCHAR(100), chunk VARCHAR(100), safe BOOL, PRIMARY KEY (id), FOREIGN KEY (clanId) REFERENCES clans(id), INDEX clanIdIndex (clanId, serverName));"; private static String CREATE_CLAN_ALLIANCE_TABLE = "CREATE TABLE IF NOT EXISTS clanAlliances (id INT NOT NULL AUTO_INCREMENT, clanId INT, otherClanId INT, trusted BOOL, PRIMARY KEY (id), FOREIGN KEY (otherClanId) REFERENCES clans(id), FOREIGN KEY (clanId) REFERENCES clans(id), INDEX clanIdIndex (clanId));"; - private static String RETRIEVE_START_CLAN_INFO = "SELECT id, name, description, home, admin, dateCreated, lastOnline FROM clans AS c INNER JOIN clanTerritory AS ct ON ct.clanId = c.id WHERE serverName = ?;"; - private static String RETRIEVE_CLAN_MEMBER_INFO = "SELECT a.name, role FROM accountClan AS ac INNER JOIN accounts AS a ON a.id = ac.accountId WHERE ac.clanId = ?;"; - private static String RETRIEVE_CLAN_ALLIANCE_INFO = "SELECT cOther.id, cOther.name FROM clanAlliances AS ca INNER JOIN clans AS c ON c.id = ca.clanId INNER JOIN clans as cOther ON cOther.id = ca.otherClanId WHERE ac.clanId = ?;"; + private static String RETRIEVE_START_CLAN_INFO = "SELECT id, name, description, home, admin, dateCreated, lastOnline, ct.chunk, ct.safe FROM clans AS c INNER JOIN clanTerritory AS ct ON ct.clanId = c.id WHERE serverName = ?;"; + private static String RETRIEVE_CLAN_MEMBER_INFO = "SELECT c.name, a.name, role FROM accountClan AS ac INNER JOIN accounts AS a ON a.id = ac.accountId INNER JOIN clans AS c on c.id = ac.clanId;"; + private static String RETRIEVE_CLAN_ALLIANCE_INFO = "SELECT c.name, cOther.name, ca.trusted FROM clanAlliances AS ca INNER JOIN clans AS c ON c.id = ca.clanId INNER JOIN clans as cOther ON cOther.id = ca.otherClanId;"; private String _serverName; @@ -40,16 +44,86 @@ public class ClanRepository extends RepositoryBase executeUpdate(CREATE_CLAN_ALLIANCE_TABLE); } - public List retrieveStartupClanInformation() + public Collection retrieveClans() { + final NautHashMap clans = new NautHashMap(); + executeQuery(RETRIEVE_START_CLAN_INFO, new ResultSetCallable() { @Override public void processResultSet(ResultSet resultSet) throws SQLException { + while (resultSet.next()) + { + ClanToken token = new ClanToken(); + token.Id = resultSet.getInt(1); + token.Name = resultSet.getString(2); + token.Description = resultSet.getString(3); + token.Home = resultSet.getString(4); + token.Admin = resultSet.getBoolean(5); + token.DateCreated = resultSet.getLong(6); + token.LastOnline = resultSet.getLong(7); + + ClanTerritoryToken territoryToken = new ClanTerritoryToken(); + territoryToken.Chunk = resultSet.getString(8); + territoryToken.Safe = resultSet.getBoolean(9); + + if (!clans.containsKey(token.Name)) + { + clans.put(token.Name, token); + } + + clans.get(token.Name).Territories.add(territoryToken); + } } }, new ColumnVarChar("serverName", 100, _serverName)); + + executeQuery(RETRIEVE_CLAN_MEMBER_INFO, new ResultSetCallable() + { + @Override + public void processResultSet(ResultSet resultSet) throws SQLException + { + while (resultSet.next()) + { + String clanName = resultSet.getString(1); + + if (clans.containsKey(clanName)) + { + ClanMemberToken memberToken = new ClanMemberToken(); + memberToken.Name = resultSet.getString(2); + memberToken.ClanRole = resultSet.getString(3); + + clans.get(clanName).Members.add(memberToken); + } + } + } + + }); + + executeQuery(RETRIEVE_CLAN_ALLIANCE_INFO, new ResultSetCallable() + { + @Override + public void processResultSet(ResultSet resultSet) throws SQLException + { + while (resultSet.next()) + { + String clanName = resultSet.getString(1); + + if (clans.containsKey(clanName)) + { + ClanAllianceToken allianceToken = new ClanAllianceToken(); + allianceToken.ClanName = resultSet.getString(2); + allianceToken.Trusted = resultSet.getBoolean(3); + + clans.get(clanName).Alliances.add(allianceToken); + } + } + } + + }, new ColumnVarChar("serverName", 100, _serverName)); + + return clans.values(); } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java index 99b18e668..a1d2a2ceb 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/repository/tokens/ClanToken.java @@ -1,9 +1,11 @@ package mineplex.game.clans.clans.repository.tokens; +import java.util.ArrayList; import java.util.List; public class ClanToken { + public int Id; public String Name; public String Description; public String Home; @@ -11,7 +13,7 @@ public class ClanToken public long DateCreated; public long LastOnline; - List Members; - List Territories; - List Alliances; + public List Members = new ArrayList(); + public List Territories = new ArrayList(); + public List Alliances = new ArrayList(); } diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java index e6630c8fe..6fce4fe6d 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatLog.java @@ -1,6 +1,5 @@ package mineplex.minecraft.game.core.combat; -import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List;