Clans War updates

This commit is contained in:
Shaun Bennett 2015-10-17 22:55:21 -04:00
parent 589c05f8c0
commit 523378aae7
25 changed files with 603 additions and 544 deletions

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" hash="1293212710">
<component name="DataSourceManagerImpl" format="xml" hash="4112117047">
<data-source source="LOCAL" name="Mineplex" uuid="14dfc55d-5343-47c4-ab24-76a055b8059e">
<driver-ref>mysql</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://db.mineplex.com:3306</jdbc-url>
<jdbc-url>jdbc:mysql://db.mineplex.com:3306/Account</jdbc-url>
<driver-properties>
<property name="zeroDateTimeBehavior" value="convertToNull" />
<property name="tinyInt1isBit" value="false" />

View File

@ -47,8 +47,9 @@ public class ClanRepository extends RepositoryBase
private static String RETRIEVE_CLAN_MEMBER_INFO = "SELECT c.name, a.name, a.uuid, clanRole FROM accountClan AS ac INNER JOIN accounts AS a ON a.id = ac.accountId INNER JOIN clans AS c on c.id = ac.clanId WHERE c.serverId = ?;";
private static String RETRIEVE_CLAN_MEMBERS = "SELECT c.name, a.name, a.uuid, clanRole FROM accountClan AS ac INNER JOIN accounts AS a ON a.id = ac.accountId INNER JOIN clans AS c on c.id = ac.clanId WHERE lower(c.name) = ?;";
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 WHERE c.serverId = ?;";
private static String RETRIEVE_CLAN_ENEMY_INFO = "SELECT c.name, cOther.name, clanScore, otherClanScore, clanKills, otherClanKills, timeFormed FROM clanEnemies AS ce INNER JOIN clans AS c ON c.id = ce.clanId INNER JOIN clans as cOther ON cOther.id = ce.otherClanId WHERE c.serverId = ?;";
// private static String RETRIEVE_CLAN_ENEMY_INFO = "SELECT c.name, cOther.name, clanScore, otherClanScore, clanKills, otherClanKills, timeFormed FROM clanEnemies AS ce INNER JOIN clans AS c ON c.id = ce.clanId INNER JOIN clans as cOther ON cOther.id = ce.otherClanId WHERE c.serverId = ?;";
private static String RETRIEVE_CLAN_WAR_INFO = "SELECT c.name, cOther.name, cw.score, cw.created, cw.ended, cw.lastUpdated FROM clanWar AS cw INNER JOIN clans AS c on c.id = cw.initiatorId INNER JOIN clans as cOther ON cOther.id = cw.clanId WHERE c.serverId = ? AND completed = FALSE";
private static String DELETE_CLAN_MEMBER = "DELETE aC FROM accountClan AS aC INNER JOIN accounts ON accounts.id = aC.accountId WHERE aC.clanId = ? AND accounts.name = ?;";
private static String DELETE_CLAN_MEMBERS = "DELETE FROM accountClan WHERE clanId = ?;";
private static String DELETE_CLAN_TERRITORY = "DELETE FROM clanTerritory WHERE clanId = ? AND chunk = ?;";
@ -56,20 +57,21 @@ public class ClanRepository extends RepositoryBase
private static String DELETE_CLAN_TERRITORIES = "DELETE FROM clanTerritory WHERE clanId = ?;"; //
private static String DELETE_CLAN_ALLIANCE = "DELETE FROM clanAlliances WHERE clanId = ? AND otherClanId = ?;";
private static String DELETE_CLAN_ALLIANCES = "DELETE FROM clanAlliances WHERE clanId = ? OR otherClanId = ?;";
private static String DELETE_CLAN_ENEMIES = "DELETE FROM clanEnemies WHERE clanId = ? OR otherClanId = ?;";
// private static String DELETE_CLAN_ENEMIES = "DELETE FROM clanEnemies WHERE clanId = ? OR otherClanId = ?;";
private static String DELETE_CLAN = "DELETE FROM clans WHERE id = ?;";
private static String DELETE_ALL_WAR = "DELETE FROM clanWar WHERE initiatorId = ? OR clanId = ?";
private static String ADD_CLAN = "INSERT INTO clans (serverId, name, description, home, admin, dateCreated, energy, lastOnline) VALUES (?, ?, ?, ?, ?, now(), ?, now());";
private static String ADD_CLAN_MEMBER = "INSERT INTO accountClan (accountId, clanId, clanRole) SELECT accounts.id, ?, ? FROM accounts WHERE accounts.name = ?;";
private static String ADD_CLAN_ALLIANCE = "INSERT INTO clanAlliances (clanId, otherClanId, trusted) VALUES (?, ?, ?);";
private static String ADD_CLAN_ENEMY = "INSERT INTO clanEnemies (clanId, otherClanId, initiator, timeFormed) VALUES (?, ?, 1, now());";
private static String ADD_CLAN_WAR = "INSERT INTO clanWar (initiatorId, clanId, score) VALUES (?, ?, ?)";
private static String ADD_CLAN_TERRITORY = "INSERT INTO clanTerritory (clanId, chunk, safe) VALUES (?, ?, ?);";
private static String UPDATE_CLAN = "UPDATE clans SET name = ?, description = ?, home = ?, admin = ?, energy = ?, kills = ?, murder = ?, deaths = ?, warWins = ?, warLosses = ?, lastOnline = ? WHERE id = ?;";
private static String UPDATE_CLAN_MEMBER = "UPDATE accountClan AS AC INNER JOIN accounts ON accounts.id = AC.accountId SET AC.clanRole = ? WHERE AC.clanId = ? AND accounts.name = ?;";
private static String UPDATE_CLAN_ALLIANCE = "UPDATE clanAlliances SET trusted = ? WHERE clanId = ? AND otherClanId = ?;";
private static String UPDATE_CLAN_ENEMY = "UPDATE clanEnemies SET clanScore = ?, otherClanScore = ?, clanKills = ?, otherClanKills = ? WHERE clanId = ? AND otherClanId = ?;";
private static String UPDATE_CLAN_TERRITORY = "UPDATE clanTerritory SET safe = ? WHERE chunk = ?;"; //
private static String UPDATE_CLAN_WAR = "UPDATE clanWar SET score = ?, completed = ?, ended = ?, lastUpdated = NOW() WHERE initiatorId = ? AND clanId = ?";
private static String UPDATE_CLAN_SERVER_ID = "UPDATE clans SET serverId = ?, home = '', generator = '' WHERE id = ?;";
private static String UPDATE_CLAN_GENERATOR = "UPDATE clans SET generator = ?, generatorStock = ? WHERE id = ?;";
@ -161,7 +163,7 @@ public class ClanRepository extends RepositoryBase
ColumnInt serverIdCol = new ColumnInt("serverId", serverId);
executeUpdate(DELETE_CLAN_ALLIANCES, clanIdCol, clanIdCol);
executeUpdate(DELETE_CLAN_ENEMIES, clanIdCol, clanIdCol);
deleteAllWar(clanId);
executeUpdate(DELETE_CLAN_TERRITORIES, clanIdCol);
executeUpdate(UPDATE_CLAN_SERVER_ID, serverIdCol, clanIdCol);
}
@ -356,44 +358,6 @@ public class ClanRepository extends RepositoryBase
}, new ColumnInt("serverId", _serverId));
System.out.println("3");
executeQuery(RETRIEVE_CLAN_ENEMY_INFO, new ResultSetCallable()
{
@Override
public void processResultSet(ResultSet resultSet) throws SQLException
{
while (resultSet.next())
{
ClanEnemyToken clanToken = new ClanEnemyToken();
ClanEnemyToken otherClanToken = new ClanEnemyToken();
//c.name, cOther.name, clanScore, otherClanScore, clanKills, otherClanKills
String clanName = resultSet.getString(1);
String otherClanName = resultSet.getString(2);
int clanScore = resultSet.getInt(3);
int otherClanScore = resultSet.getInt(4);
int clanKills = resultSet.getInt(5);
int otherClanKills = resultSet.getInt(6);
Timestamp timeFormed = resultSet.getTimestamp(7);
clanToken.EnemyName = otherClanName;
clanToken.Score = clanScore;
clanToken.Kills = clanKills;
clanToken.Initiator = true;
clanToken.TimeFormed = timeFormed;
otherClanToken.EnemyName = clanName;
otherClanToken.Score = otherClanScore;
otherClanToken.Kills = otherClanKills;
otherClanToken.Initiator = false;
otherClanToken.TimeFormed = timeFormed;
clans.get(clanName).EnemyToken = clanToken;
clans.get(otherClanName).EnemyToken = otherClanToken;
}
}
}, new ColumnInt("serverId", _serverId));
System.out.println("Finished loading clans from database...");
return clans.values();
@ -521,11 +485,27 @@ public class ClanRepository extends RepositoryBase
return affectedRows == size;
}
public void addEnemy(int clanId, int otherClanId)
public void addWar(int initiatorId, int clanId, int score)
{
executeUpdate(ADD_CLAN_ENEMY, new ColumnInt("clanId", clanId), new ColumnInt("otherClanId", otherClanId));
executeUpdate(ADD_CLAN_WAR, new ColumnInt("initiatorId", initiatorId), new ColumnInt("clanId", clanId), new ColumnInt("score", score));
}
public void updateWar(int initiatorId, int clanId, int score, boolean completed, Timestamp ended)
{
executeUpdate(UPDATE_CLAN_WAR, new ColumnInt("score", score), new ColumnBoolean("completed", completed), new ColumnTimestamp("ended", ended),
new ColumnInt("initiatorId", initiatorId), new ColumnInt("clanId", clanId));
}
public void deleteAllWar(int clanId)
{
executeUpdate(DELETE_ALL_WAR, new ColumnInt("initiatorId", clanId), new ColumnInt("clanId", clanId));
}
// public void addEnemy(int clanId, int otherClanId)
// {
// executeUpdate(ADD_CLAN_ENEMY, new ColumnInt("clanId", clanId), new ColumnInt("otherClanId", otherClanId));
// }
public void removeTerritoryClaim(int clanId, String chunk)
{
executeUpdate(DELETE_CLAN_TERRITORY, new ColumnInt("clanId", clanId), new ColumnVarChar("chunk", 100, chunk));
@ -543,12 +523,12 @@ public class ClanRepository extends RepositoryBase
new ColumnInt("warWins", warWins), new ColumnInt("warLosses", warLosses), new ColumnTimestamp("lastOnline", lastOnline), new ColumnInt("clanId", clanId));
}
public void updateEnemy(int clanId, int otherClanId, int clanScore, int otherClanScore, int clanKills, int otherClanKills)
{
executeUpdate(UPDATE_CLAN_ENEMY, new ColumnInt("clanId", clanId), new ColumnInt("otherClanId", otherClanId),
new ColumnInt("clanScore", clanScore), new ColumnInt("otherClanScore", otherClanScore), new ColumnInt("clanKills", clanKills),
new ColumnInt("otherClanKills", otherClanKills), new ColumnInt("clanId", clanId), new ColumnInt("otherClanId", otherClanId));
}
// public void updateEnemy(int clanId, int otherClanId, int clanScore, int otherClanScore, int clanKills, int otherClanKills)
// {
// executeUpdate(UPDATE_CLAN_ENEMY, new ColumnInt("clanId", clanId), new ColumnInt("otherClanId", otherClanId),
// new ColumnInt("clanScore", clanScore), new ColumnInt("otherClanScore", otherClanScore), new ColumnInt("clanKills", clanKills),
// new ColumnInt("otherClanKills", otherClanKills), new ColumnInt("clanId", clanId), new ColumnInt("otherClanId", otherClanId));
// }
public boolean updateClanGenerator(int clanId, String generator, int generatorStock)
{

View File

@ -2,6 +2,7 @@ package mineplex.game.clans.clans;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@ -17,11 +18,11 @@ import mineplex.core.common.util.F;
import mineplex.core.common.util.NautHashMap;
import mineplex.core.common.util.UtilAlg;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTime.TimeUnit;
import mineplex.core.common.util.UtilWorld;
import mineplex.game.clans.clans.ClansUtility.ClanRelation;
import mineplex.game.clans.clans.war.ClanWar;
import mineplex.game.clans.core.repository.tokens.ClanAllianceToken;
import mineplex.game.clans.core.repository.tokens.ClanEnemyToken;
import mineplex.game.clans.core.repository.tokens.ClanMemberToken;
@ -58,6 +59,13 @@ public class ClanInfo
private HashSet<String> _claimSet = new HashSet<String>();
private EnemyData _enemyData;
/**
* When a war is formed, a clan can either be the initiator, or be initiated on. We seperate these
* two categories into separate maps, as they are treated slightly different.
*/
private HashMap<String, ClanWar> _initiatedWars = new HashMap<String, ClanWar>();
private HashMap<String, ClanWar> _initiatedOnWars = new HashMap<String, ClanWar>();
// Temporary
private NautHashMap<String, Long> _inviteeMap = new NautHashMap<String, Long>();
private NautHashMap<String, String> _inviterMap = new NautHashMap<String, String>();
@ -308,7 +316,7 @@ public class ClanInfo
EnemyData otherEnemyData = Clans.getClanUtility().getClanByClanName(enemyName).getEnemyData();
stringList.add(F.value("Enemy", _enemyData.getEnemyName()));
stringList.add(F.value("Formed", _enemyData.getRelativeTimeFormed()));
stringList.add(F.value("War Score", _enemyData.getScore() + " : " + otherEnemyData.getScore()));
stringList.add(F.value("ClanWar Score", _enemyData.getScore() + " : " + otherEnemyData.getScore()));
}
return stringList;
@ -552,6 +560,47 @@ public class ClanInfo
{
return hasEnemy() && clanName != null && clanName.equals(_enemyData.getEnemyName());
}
public ClanWar getInitiatedWar(ClanInfo againstClan)
{
return getInitiatedWar(againstClan.getName());
}
public ClanWar getInitiatedOnWar(ClanInfo againstClan)
{
return getInitiatedOnWar(againstClan.getName());
}
public ClanWar getWar(ClanInfo againstClan)
{
return getWar(againstClan.getName());
}
public ClanWar getInitiatedWar(String againstClan)
{
return _initiatedWars.get(againstClan);
}
public ClanWar getInitiatedOnWar(String againstClan)
{
return _initiatedOnWars.get(againstClan);
}
public ClanWar getWar(String againstClan)
{
ClanWar initiated = getInitiatedWar(againstClan);
return initiated == null ? getInitiatedOnWar(againstClan) : initiated;
}
public boolean isAtWar(ClanInfo clanInfo)
{
return isAtWar(clanInfo.getName());
}
public boolean isAtWar(String clanName)
{
return _initiatedWars.containsKey(clanName) || _initiatedOnWars.containsKey(clanName);
}
public void adjustEnergy(int energy)
{

View File

@ -327,6 +327,7 @@ public class ClansDataAccessLayer
_manager.log("Added Ally for [" + cB.getName() + "] and [" + cA.getName() + "] by [" + player + "].");
}
/*
public void enemy(final ClanInfo clan, final ClanInfo otherClan, String player)
{
runAsync(new Runnable()
@ -360,6 +361,7 @@ public class ClansDataAccessLayer
_manager.log("Added Enemy for [" + clan.getName() + "] and [" + otherClan.getName() + "] by [" + player + "].");
}
*/
public boolean trust(final ClanInfo ownerClan, final ClanInfo otherClan, String player)
{
@ -610,6 +612,7 @@ public class ClansDataAccessLayer
});
}
/*
public void updateEnemy(ClanInfo clan, ClanInfo otherClan)
{
assert clan.getEnemyData() != null && otherClan.getEnemyData() != null;
@ -624,6 +627,7 @@ public class ClansDataAccessLayer
//Log
_manager.log("Updated Enemy Data for [" + clan.getName() + ", " + otherClan.getName() + "]");
}
*/
public void updateGenerator(final ClanInfo clanInfo, final Callback<Boolean> callback)
{

View File

@ -39,14 +39,8 @@ import mineplex.core.common.util.UtilItem;
import mineplex.core.common.util.UtilGear;
import mineplex.core.common.util.UtilPlayer;
import mineplex.core.common.util.UtilServer;
import mineplex.core.common.util.UtilTime;
import mineplex.core.common.util.UtilTime.TimeUnit;
import mineplex.core.itemstack.ItemStackFactory;
import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClansUtility.ClanRelation;
import mineplex.minecraft.game.classcombat.Skill.event.SkillTriggerEvent;
import mineplex.minecraft.game.core.condition.Condition.ConditionType;
import mineplex.minecraft.game.core.damage.CustomDamageEvent;
public class ClansGame extends MiniPlugin
@ -60,18 +54,6 @@ public class ClansGame extends MiniPlugin
Clans = clans;
}
@EventHandler
public void deductEnergy(UpdateEvent event)
{
if (event.getType() != UpdateType.SEC)
return;
for (ClanInfo clan : Clans.getClanMap().values())
{
}
}
@EventHandler(ignoreCancelled = true)
public void openClanShop(PlayerInteractEvent event)
{
@ -194,7 +176,7 @@ public class ClansGame extends MiniPlugin
else
mimic = "";
}
//Borderlands
if (Clans.getClanUtility().isBorderlands(event.getBlock().getLocation()) && event.getPlayer().getGameMode() != GameMode.CREATIVE)
{
@ -249,6 +231,12 @@ public class ClansGame extends MiniPlugin
return;
}
if (Clans.getWarManager().allowFromInvade(event.getBlock().getLocation(), event.getPlayer()))
{
// Allow because of invasion
return;
}
//Disallow
event.setCancelled(true);
@ -302,6 +290,12 @@ public class ClansGame extends MiniPlugin
//Block Interaction
Location loc = event.getClickedBlock().getRelative(event.getBlockFace()).getLocation();
if (UtilBlock.usable(event.getClickedBlock())) loc = event.getClickedBlock().getLocation();
if (Clans.getWarManager().allowFromInvade(loc, event.getPlayer()))
{
// Allow because of invasion
return;
}
//Borderlands
if ( player.getGameMode() != GameMode.CREATIVE &&
@ -547,6 +541,12 @@ public class ClansGame extends MiniPlugin
ClanInfo clan = Clans.getClanUtility().getOwner(event.getEntity().getLocation());
if (clan == null) return;
if (Clans.getWarManager().isBeingInvaded(clan))
{
// Allow because of invasion
return;
}
if (!clan.isOnline())
event.setCancelled(true);
else

View File

@ -6,8 +6,6 @@ import java.util.TimeZone;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack;
import org.bukkit.craftbukkit.v1_7_R4.util.CraftMagicNumbers;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -16,6 +14,7 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerItemBreakEvent;
@ -39,14 +38,12 @@ 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.UtilWorld;
import mineplex.core.creature.Creature;
import mineplex.core.creature.event.CreatureSpawnCustomEvent;
import mineplex.core.disguise.DisguiseManager;
import mineplex.core.donation.DonationManager;
import mineplex.core.energy.Energy;
import mineplex.core.explosion.Explosion;
import mineplex.core.gui.SimpleGuiItem;
import mineplex.core.movement.Movement;
import mineplex.core.npc.NpcManager;
import mineplex.core.packethandler.PacketHandler;
@ -61,7 +58,8 @@ import mineplex.game.clans.clans.commands.ClansCommand;
import mineplex.game.clans.clans.commands.ClansLoginManager;
import mineplex.game.clans.clans.commands.MapCommand;
import mineplex.game.clans.clans.commands.RegionsCommand;
import mineplex.game.clans.clans.commands.ServerTimeCommand;
import mineplex.game.clans.clans.data.PlayerClan;
import mineplex.game.clans.clans.event.ClansPlayerDeathEvent;
import mineplex.game.clans.clans.loot.LootManager;
import mineplex.game.clans.clans.map.ItemMapManager;
import mineplex.game.clans.clans.murder.MurderManager;
@ -101,11 +99,7 @@ import mineplex.minecraft.game.core.condition.ConditionManager;
import mineplex.minecraft.game.core.damage.DamageManager;
import mineplex.minecraft.game.core.fire.Fire;
import mineplex.minecraft.game.core.mechanics.Weapon;
import mineplex.serverdata.Region;
import mineplex.serverdata.commands.ServerCommandManager;
import mineplex.serverdata.redis.RedisDataRepository;
import mineplex.serverdata.servers.ConnectionData;
import mineplex.serverdata.servers.ServerManager;
public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelation
{
@ -259,7 +253,6 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
addCommand(new RegionsCommand(this));
addCommand(new ClansChatCommand(this));
addCommand(new ClansAllyChatCommand(this));
addCommand(new ServerTimeCommand(this));
addCommand(new ClanManagementCommand(this));
addCommand(new MapCommand(this));
}
@ -778,6 +771,27 @@ public class ClansManager extends MiniClientPlugin<ClientClan> implements IRelat
Bukkit.broadcastMessage("name: " + item.getName() + " max dur: " + item.getMaxDurability());
}
@EventHandler(priority = EventPriority.HIGH)
public void handleClansDeath(PlayerDeathEvent event)
{
PlayerClan playerClan;
PlayerClan killerClan = null;
Player player = event.getEntity();
ClanInfo pClan = _clanMemberMap.get(player.getName());
playerClan = new PlayerClan(player, pClan);
if (player.getKiller() != null)
{
Player killer = player.getKiller();
ClanInfo kClan = _clanMemberMap.get(killer.getName());
killerClan = new PlayerClan(killer, kClan);
}
ClansPlayerDeathEvent clansPlayerDeathEvent = new ClansPlayerDeathEvent(event, playerClan, killerClan);
Bukkit.getServer().getPluginManager().callEvent(clansPlayerDeathEvent);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onJoin(PlayerLoginEvent event)
{

View File

@ -104,8 +104,10 @@ public class ClansCommand extends CommandBase<ClansManager>
else if (args[0].equalsIgnoreCase("sethome"))
homeSet(caller);
/*
else if (args[0].equalsIgnoreCase("enemy") || args[0].equals("e"))
enemy(caller, args);
*/
else if (args[0].equalsIgnoreCase("territory") || args[0].equalsIgnoreCase("t"))
infoTerritory(caller, args);
@ -119,6 +121,7 @@ public class ClansCommand extends CommandBase<ClansManager>
infoClan(caller, args[0]);
}
/*
public void enemy(Player caller, String[] args)
{
if (args.length == 2)
@ -143,11 +146,14 @@ public class ClansCommand extends CommandBase<ClansManager>
infoEnemy(caller);
}
}
*/
/*
private void attemptEnemy(Player caller, ClanInfo initiatorClan, ClanInfo otherClan)
{
Plugin.getWarManager().attemptEnemy(caller, initiatorClan, otherClan);
}
*/
private void infoEnemy(Player caller)
{
@ -211,7 +217,7 @@ public class ClansCommand extends CommandBase<ClansManager>
UtilPlayer.message(caller, F.help("/c invite <player>", "Invite Player to Clan", Rank.ADMIN));
UtilPlayer.message(caller, F.help("/c kick <player>", "Kick Player from Clan", Rank.ADMIN));
UtilPlayer.message(caller, F.help("/c neutral <clan>", "Request Neutrality with Clan", Rank.ADMIN));
UtilPlayer.message(caller, F.help("/c enemy <clan>", "Declare War with Clan", Rank.ADMIN));
UtilPlayer.message(caller, F.help("/c enemy <clan>", "Declare ClanWar with Clan", Rank.ADMIN));
UtilPlayer.message(caller, F.help("/c ally <clan>", "Send Alliance to Clan", Rank.ADMIN));
UtilPlayer.message(caller, F.help("/c trust <clan>", "Give Trust to Clan", Rank.ADMIN));
UtilPlayer.message(caller, F.help("/c claim", "Claim Territory", Rank.ADMIN));

View File

@ -1,22 +0,0 @@
package mineplex.game.clans.clans.commands;
import org.bukkit.entity.Player;
import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank;
import mineplex.core.common.util.UtilPlayer;
import mineplex.game.clans.clans.ClansManager;
public class ServerTimeCommand extends CommandBase<ClansManager>
{
public ServerTimeCommand(ClansManager plugin)
{
super(plugin, Rank.ALL, "servertime", "t");
}
@Override
public void Execute(Player caller, String[] args)
{
UtilPlayer.message(caller, Plugin.getWarManager().mServerTime());
}
}

View File

@ -0,0 +1,27 @@
package mineplex.game.clans.clans.data;
import org.bukkit.entity.Player;
import mineplex.game.clans.clans.ClanInfo;
public class PlayerClan
{
private Player _player;
private ClanInfo _clan;
public PlayerClan(Player player, ClanInfo clan)
{
_player = player;
_clan = clan;
}
public Player getPlayer()
{
return _player;
}
public ClanInfo getClan()
{
return _clan;
}
}

View File

@ -0,0 +1,51 @@
package mineplex.game.clans.clans.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.PlayerDeathEvent;
import mineplex.game.clans.clans.data.PlayerClan;
public class ClansPlayerDeathEvent extends Event
{
private PlayerDeathEvent _event;
private PlayerClan _player;
private PlayerClan _killer;
public ClansPlayerDeathEvent(PlayerDeathEvent event, PlayerClan player, PlayerClan killer)
{
_event = event;
_player = player;
_killer = killer;
}
public PlayerDeathEvent getEvent()
{
return _event;
}
public PlayerClan getPlayer()
{
return _player;
}
public PlayerClan getKiller()
{
return _killer;
}
public void setPlayer(PlayerClan player)
{
_player = player;
}
public void setKiller(PlayerClan killer)
{
_killer = killer;
}
// Bukkit event stuff
private static final HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() { return handlers; }
public HandlerList getHandlers() { return handlers; }
}

View File

@ -4,7 +4,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
import mineplex.core.TablistFix;
import mineplex.core.account.CoreClientManager;
import mineplex.core.donation.DonationManager;
@ -17,7 +16,6 @@ import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.scoreboard.elements.ScoreboardElementClan;
import mineplex.game.clans.clans.scoreboard.elements.ScoreboardElementPlayer;
import mineplex.game.clans.clans.scoreboard.elements.ScoreboardElementWar;
import mineplex.game.clans.clans.war.WarManager;
import mineplex.game.clans.clans.worldevent.WorldEventManager;
@ -46,9 +44,6 @@ public class ClansScoreboardManager extends ScoreboardManager
data.writeEmpty();
data.writeElement(new ScoreboardElementClan(_clansManager));
data.writeEmpty();
data.writeElement(new ScoreboardElementWar(_clansManager, _warManager));
data.writeEmpty();
data.writeElement(new ScoreboardElementPlayer(_clansManager));

View File

@ -1,82 +0,0 @@
package mineplex.game.clans.clans.scoreboard.elements;
import java.util.ArrayList;
import java.util.Date;
import org.bukkit.entity.Player;
import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilTime;
import mineplex.core.scoreboard.ScoreboardManager;
import mineplex.core.scoreboard.elements.ScoreboardElement;
import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.EnemyData;
import mineplex.game.clans.clans.war.WarManager;
import mineplex.game.clans.clans.war.WarState;
public class ScoreboardElementWar implements ScoreboardElement
{
private ClansManager _clansManager;
private WarManager _warManager;
public ScoreboardElementWar(ClansManager clansManager, WarManager warManager)
{
_clansManager = clansManager;
_warManager = warManager;
}
@Override
public ArrayList<String> getLines(ScoreboardManager manager, Player player)
{
ArrayList<String> output = new ArrayList<String>();
ClanInfo clanInfo = _clansManager.getClan(player);
EnemyData enemyData = clanInfo == null ? null : clanInfo.getEnemyData();
if (_warManager.getWarState() == WarState.WAR)
{
if (clanInfo != null && enemyData != null)
{
ClanInfo enemy = _clansManager.getClan(enemyData.getEnemyName());
output.add(C.cGreen + "Enemy: " + C.cWhite + enemyData.getEnemyName());
output.add(C.cGreen + "Score: " + C.cWhite + enemyData.getScore() + " to " + enemy.getEnemyData().getScore());
}
else
{
output.add(C.cGreen + "War in Progress");
}
Date invade = _warManager.getNextInvadeTime();
String invadeString = UtilTime.convertString(invade.getTime() - System.currentTimeMillis(), 1, UtilTime.TimeUnit.FIT);
output.add(C.cGreen + "Raid: " + C.cWhite + invadeString);
}
else if (_warManager.getWarState() == WarState.FORM_ENEMIES)
{
output.add(C.cGreen + "War: " + C.cWhite + "Form Enemies");
Date start = _warManager.getNextWarStart();
String startString = UtilTime.convertString(start.getTime() - System.currentTimeMillis(), 1, UtilTime.TimeUnit.FIT);
output.add(C.cGreen + "War Start: " + C.cWhite + startString);
}
else if (_warManager.getWarState() == WarState.INVADE)
{
output.add(C.cGreen + "War: " + C.cWhite + "Raid in Progress");
if (clanInfo != null && enemyData != null)
{
ClanInfo enemy = _clansManager.getClan(enemyData.getEnemyName());
output.add(C.cGreen + "Enemy: " + C.cWhite + enemyData.getEnemyName());
output.add(C.cGreen + "Score: " + C.cWhite + enemyData.getScore() + " to " + enemy.getEnemyData().getScore());
}
Date end = _warManager.getNextEnemyTime();
String startString = UtilTime.convertString(end.getTime() - System.currentTimeMillis(), 1, UtilTime.TimeUnit.FIT);
output.add(C.cGreen + "Finish: " + C.cWhite + startString);
}
return output;
}
}

View File

@ -0,0 +1,110 @@
package mineplex.game.clans.clans.war;
import java.sql.Timestamp;
import mineplex.game.clans.clans.ClanInfo;
public class ClanWar
{
private ClanInfo _clanA;
private ClanInfo _clanB;
private int _score;
private boolean _completed;
private Timestamp _created;
private Timestamp _ended;
private Timestamp _lastUpdated;
public ClanWar(ClanInfo clanA, ClanInfo clanB, int score, boolean completed, Timestamp created, Timestamp ended, Timestamp lastUpdated)
{
_clanA = clanA;
_clanB = clanB;
_score = score;
_completed = completed;
_created = created;
_ended = ended;
_lastUpdated = lastUpdated;
}
/**
* Get the clan that was the initiator for this war
*/
public ClanInfo getClanA()
{
return _clanA;
}
/**
* Get the clan that was initiated on for this war
*/
public ClanInfo getClanB()
{
return _clanB;
}
/**
* 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()
{
return _score;
}
/**
* Is the war finished (has a clan won already)
*/
public boolean isCompleted()
{
return _completed;
}
public void setCompleted(boolean completed)
{
_completed = completed;
}
public void setEnded(Timestamp ended)
{
_ended = ended;
}
/**
* Timestamp the war was initiated at
*/
public Timestamp getCreated()
{
return _created;
}
/**
* Timestamp that the war ended. Could be null if the war is still in progress (isCompleted() false)
*/
public Timestamp getEnded()
{
return _ended;
}
/**
* Timestamp that the war was last updated at. Currently not used, could be used to prune old wars
* @return
*/
public Timestamp getLastUpdated()
{
return _lastUpdated;
}
/**
* Utility method, adds a point for clanInfo
*/
public void increaseScoreFor(ClanInfo clanInfo)
{
if (_clanA.equals(clanInfo))
{
_score++;
}
else if (_clanB.equals(clanInfo))
{
_score--;
}
}
}

View File

@ -0,0 +1,60 @@
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
private ClanInfo _invadedClan;
private ClanInfo _invaderClan;
private long _startTime;
private long _endTime;
public WarInvasion(ClanWar clanWar)
{
if (clanWar.getScore() > WarManager.WAR_START_SCORE)
{
// Initiator Won
_invaderClan = clanWar.getClanA();
_invadedClan = clanWar.getClanB();
}
else
{
// Initiated On Won
_invaderClan = clanWar.getClanB();
_invadedClan = clanWar.getClanA();
}
_startTime = System.currentTimeMillis();
_endTime = _startTime + INVADE_LENGTH;
}
public WarInvasion(ClanInfo invadedClan, ClanInfo invaderClan)
{
_invadedClan = invadedClan;
_invaderClan = invaderClan;
_startTime = System.currentTimeMillis();
_endTime = _startTime + INVADE_LENGTH;
}
public ClanInfo getInvadedClan()
{
return _invadedClan;
}
public ClanInfo getInvaderClan()
{
return _invaderClan;
}
public long getStartTime()
{
return _startTime;
}
public long getEndTime()
{
return _endTime;
}
}

View File

@ -1,338 +1,175 @@
package mineplex.game.clans.clans.war;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin;
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.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.ClanInfo;
import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.EnemyData;
import mineplex.game.clans.clans.event.ClansPlayerDeathEvent;
import mineplex.game.clans.clans.war.event.WarEndEvent;
import mineplex.game.clans.clans.war.event.WarInvasionEndEvent;
import mineplex.game.clans.clans.war.event.WarInvasionStartEvent;
public class WarManager extends MiniPlugin
{
private static final int INVADE_ENEMY_DATE = Calendar.SATURDAY;
private static final int CREATE_ENEMY_DATE = Calendar.SUNDAY;
public static final int WAR_START_SCORE = 20;
private final ClansManager _clansManager;
private WarState _warState;
/**
* Map of the active war invasions. This is indexed by the clan that is being invaded on
* We will need to access this when blocks are broken in the invaded on clan's land!
*/
private HashMap<String, List<WarInvasion>> _activeInvasions;
public WarManager(JavaPlugin plugin, ClansManager clansManager)
{
super("War Manager", plugin);
super("ClanWar Manager", plugin);
_clansManager = clansManager;
_warState = calculateWarState();
_activeInvasions = new HashMap<String, List<WarInvasion>>();
}
@EventHandler
public void update(UpdateEvent event)
public ClansManager getClansManager()
{
if (event.getType() != UpdateType.SLOWEST)
return;
WarState currentState = calculateWarState();
if (currentState != _warState)
{
WarStateChangeEvent warEvent = new WarStateChangeEvent(_warState, currentState);
UtilServer.getServer().getPluginManager().callEvent(warEvent);
_warState = currentState;
}
return _clansManager;
}
private WarState calculateWarState()
public List<WarInvasion> getWarInvasions(ClanInfo invadedOn)
{
// Get a calendar snapshot of the current time using server timezone
Calendar calendar = getCurrentDate();
WarState warState = WarState.WAR;
if (isEnemyTime(calendar))
warState = WarState.FORM_ENEMIES;
else if (isInvadeTime(calendar))
warState = WarState.INVADE;
return warState;
}
private Calendar getCurrentDate()
{
Calendar date = Calendar.getInstance(_clansManager.getServerTimeZone());
return date;
return _activeInvasions.get(invadedOn.getName());
}
public void attemptEnemy(Player player, ClanInfo initiatingClan, ClanInfo otherClan)
private void addInvasion(WarInvasion invasion)
{
attemptEnemy(player, initiatingClan, otherClan, true);
}
public void attemptEnemy(Player player, ClanInfo initiatingClan, ClanInfo otherClan, boolean notify)
{
String notifyMessage = null;
if (_warState != WarState.FORM_ENEMIES)
ClanInfo invaded = invasion.getInvadedClan();
if (_activeInvasions.containsKey(invaded))
{
notifyMessage = "Enemies cannot be formed at this time. Please see mineplex.com/clans for info";
}
else if (initiatingClan.getEnemyData() != null)
{
notifyMessage = "Your clan already has an enemy.";
}
else if (otherClan.getEnemyData() != null)
{
notifyMessage = "The clan " + F.elem(otherClan.getName()) + " already has an enemy.";
}
else if (initiatingClan.getSize() > (otherClan.getSize() * 2)) // Initiators have more than double the members of other clan
{
notifyMessage = "The clan " + F.elem(otherClan.getName()) + " has less than half your members!";
_activeInvasions.get(invaded.getName()).add(invasion);
}
else
{
_clansManager.getClanDataAccess().enemy(initiatingClan, otherClan, player.getName());
_clansManager.messageClan(initiatingClan, F.main("Clans", "Your clan is now enemies with " + F.elem(otherClan.getName())));
_clansManager.messageClan(otherClan, F.main("Clans", "Your clan is now enemies with " + F.elem(initiatingClan.getName())));
}
if (notify && notifyMessage != null)
{
UtilPlayer.message(player, F.main("Clans", notifyMessage));
LinkedList<WarInvasion> invasions = new LinkedList<WarInvasion>();
invasions.add(invasion);
_activeInvasions.put(invaded.getName(), invasions);
}
}
@EventHandler
public void handleDeath(PlayerDeathEvent event)
private void checkWarComplete(ClanWar clanWar)
{
Player player = event.getEntity();
Player killer = player.getKiller();
if (killer == null) return; // Wasn't killed by player
boolean completed = false;
if (clanWar.getScore() >= WAR_START_SCORE * 2)
{
// Initiator Won
completed = true;
}
else if (clanWar.getScore() <= 0)
{
// Initiated On Won
completed = true;
}
if (completed)
{
clanWar.setCompleted(true);
clanWar.setEnded(new Timestamp(System.currentTimeMillis()));
WarInvasion invasion = new WarInvasion(clanWar);
addInvasion(invasion);
WarEndEvent warEndEvent = new WarEndEvent(clanWar);
WarInvasionStartEvent invasionStartEvent = new WarInvasionStartEvent(invasion);
Bukkit.getServer().getPluginManager().callEvent(warEndEvent);
Bukkit.getServer().getPluginManager().callEvent(invasionStartEvent);
}
}
public boolean isBeingInvaded(ClanInfo clanInfo)
{
List<WarInvasion> invasions = _activeInvasions.get(clanInfo.getName());
return invasions != null && !invasions.isEmpty();
}
public boolean allowFromInvade(Location location, Player player)
{
ClanInfo clanInfo = _clansManager.getClanUtility().getOwner(location);
ClanInfo playerClan = _clansManager.getClan(player);
ClanInfo killerClan = _clansManager.getClan(killer);
if (playerClan != null && killerClan != null)
if (clanInfo != null)
{
if (playerClan.getEnemyData() != null && playerClan.getEnemyData().getEnemyName().equalsIgnoreCase(killerClan.getName()))
List<WarInvasion> invasions = _activeInvasions.get(clanInfo.getName());
if (invasions != null)
{
// Only adjust score if we are in WAR or FORM ENEMIES state. Once invasion begins score should never change
// Adjust kill stats no matter what war state we are in (so we track kills during invasion)
if (_warState == WarState.WAR || _warState == WarState.FORM_ENEMIES)
for (WarInvasion invasion : invasions)
{
playerClan.getEnemyData().addScore(-1);
killerClan.getEnemyData().addScore(1);
if (invasion.getInvaderClan().equals(playerClan))
return true;
}
killerClan.getEnemyData().addKill();
}
}
}
/**
* Check if a specific Calendar is currently in enemy time
* If this returns true, isInvadeTime should always return false for the same Calendar
*
* @param c {@link java.util.Calendar} instance that should be checked
*/
private boolean isEnemyTime(Calendar c)
{
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == CREATE_ENEMY_DATE)
{
return true;
}
return false;
}
/**
* Check if a specific Calendar is currently in invade time
* If this returns true, isEnemyTime should always return false for the same Calendar
*
* @param c {@link java.util.Calendar} instance that should be checked
*/
private boolean isInvadeTime(Calendar c)
{
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == INVADE_ENEMY_DATE)
{
return true;
}
return false;
}
/**
* Get the starting time of when enemies can be formed next
* @return The enemy start time in the form of {@link java.util.Date}
*/
public Date getNextEnemyTime()
{
Calendar c = getCurrentDate();
int currDayOfWeek = c.get(Calendar.DAY_OF_WEEK);
c.set(Calendar.DAY_OF_WEEK, CREATE_ENEMY_DATE);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
if (currDayOfWeek >= CREATE_ENEMY_DATE)
c.add(Calendar.DATE, 7);
return c.getTime();
}
/**
* Get the starting time of the next enemy invasion
* @return The invasion start time in the form of {@link java.util.Date}
*/
public Date getNextInvadeTime()
{
Calendar c = getCurrentDate();
int currDayOfWeek = c.get(Calendar.DAY_OF_WEEK);
c.set(Calendar.DAY_OF_WEEK, INVADE_ENEMY_DATE);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
if (currDayOfWeek >= INVADE_ENEMY_DATE)
c.add(Calendar.DATE, 7);
return c.getTime();
}
public Date getNextWarStart()
{
Calendar c = getCurrentDate();
int currDayOfWeek = c.get(Calendar.DAY_OF_WEEK);
c.set(Calendar.DAY_OF_WEEK, INVADE_ENEMY_DATE);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
if (currDayOfWeek >= INVADE_ENEMY_DATE)
c.add(Calendar.DATE, 7);
c.add(Calendar.DATE, 1);
return c.getTime();
}
/**
* Get the current War State of the server
* War state determines what events are going on
* with respect to the current war.
*/
public WarState getWarState()
{
return _warState;
}
@EventHandler
public void stateChange(WarStateChangeEvent event)
public void handleDeath(ClansPlayerDeathEvent event)
{
WarState state = event.getNewState();
Bukkit.broadcastMessage(F.main("Clans", "War state changed: " + F.elem(state.getDescription())));
}
@EventHandler
private void updateClanWins(WarStateChangeEvent event)
{
for (ClanInfo clan : _clansManager.getClanMap().values())
if (event.getPlayer() != null && event.getPlayer().getClan() != null)
{
WarOutcome outcome = getWarOutcome(clan);
switch (outcome)
if (event.getKiller() != null && event.getKiller().getClan() != null)
{
case WIN:
clan.addWarWins(1);
break;
case LOSE:
clan.addWarLosses(1);
default:
ClanInfo clan = event.getPlayer().getClan();
ClanInfo killerClan = event.getKiller().getClan();
ClanWar war = clan.getWar(killerClan);
if (war != null && !war.isCompleted())
{
war.increaseScoreFor(killerClan);
checkWarComplete(war);
}
}
}
}
public WarOutcome getWarOutcome(ClanInfo clanInfo)
@EventHandler
public void clearInvasions(UpdateEvent event)
{
WarOutcome outcome = WarOutcome.NOT_IN_WAR;
if (event.getType() != UpdateType.SEC)
return;
EnemyData enemyData = clanInfo.getEnemyData();
long currentTime = System.currentTimeMillis();
if (enemyData != null)
Iterator<Map.Entry<String, List<WarInvasion>>> iterator = _activeInvasions.entrySet().iterator();
while (iterator.hasNext())
{
ClanInfo enemyClan = _clansManager.getClan(enemyData.getEnemyName());
if (enemyClan != null)
List<WarInvasion> invasions = iterator.next().getValue();
Iterator<WarInvasion> invasionIterator = invasions.iterator();
while (invasionIterator.hasNext())
{
if (enemyData.getScore() > enemyClan.getEnemyData().getScore())
WarInvasion invasion = invasionIterator.next();
if (invasion.getEndTime() > currentTime)
{
outcome = WarOutcome.WIN;
}
else if (enemyData.getScore() < enemyClan.getEnemyData().getScore())
{
outcome = WarOutcome.LOSE;
}
else
{
outcome = WarOutcome.TIE;
WarInvasionEndEvent endEvent = new WarInvasionEndEvent(invasion);
Bukkit.getServer().getPluginManager().callEvent(endEvent);
invasionIterator.remove();
}
}
if (invasions.isEmpty())
iterator.remove();
}
return outcome;
}
/**
* Send the current server time information to the player
*/
public LinkedList<String> mServerTime()
{
LinkedList<String> messageList = new LinkedList<String>();
messageList.add(F.main("Clans", "Server Time"));
Date currDate = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss yyyy");
dateFormat.setTimeZone(_clansManager.getServerTimeZone());
messageList.add(F.value("Server Time", dateFormat.format(currDate)));
messageList.add(F.value("Status", _warState.getDescription()));
if (_warState != WarState.INVADE)
{
long next = getNextInvadeTime().getTime();
long currTime = System.currentTimeMillis();
messageList.add(F.value("Invasion", UtilTime.convertString(next - currTime, 1, UtilTime.TimeUnit.FIT)));
}
if (_warState != WarState.FORM_ENEMIES)
{
long next = getNextEnemyTime().getTime();
long currTime = System.currentTimeMillis();
messageList.add(F.value("Enemy Reset", UtilTime.convertString(next - currTime, 1, UtilTime.TimeUnit.FIT)));
}
return messageList;
}
}

View File

@ -1,21 +0,0 @@
package mineplex.game.clans.clans.war;
public enum WarOutcome
{
WIN("Win"),
LOSE("Lose"),
TIE("Tie"),
NOT_IN_WAR("Not in War");
private String _friendlyName;
WarOutcome(String friendlyName)
{
_friendlyName = friendlyName;
}
public String getFriendlyName()
{
return _friendlyName;
}
}

View File

@ -1,20 +0,0 @@
package mineplex.game.clans.clans.war;
public enum WarState
{
FORM_ENEMIES("Enemies can now be formed"),
WAR("War is in progress"),
INVADE("Winning teams can invade enemies");
private String _description;
WarState(String description)
{
_description = description;
}
public String getDescription()
{
return _description;
}
}

View File

@ -1,39 +0,0 @@
package mineplex.game.clans.clans.war;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class WarStateChangeEvent extends Event
{
private static final HandlerList handlers = new HandlerList();
private WarState _oldState;
private WarState _newState;
public WarStateChangeEvent(WarState oldState, WarState newState)
{
_oldState = oldState;
_newState = newState;
}
public HandlerList getHandlers()
{
return handlers;
}
public static HandlerList getHandlerList()
{
return handlers;
}
public WarState getOldState()
{
return _oldState;
}
public WarState getNewState()
{
return _newState;
}
}

View File

@ -0,0 +1,26 @@
package mineplex.game.clans.clans.war.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineplex.game.clans.clans.war.ClanWar;
public class WarEndEvent extends Event
{
private ClanWar _war;
public WarEndEvent(ClanWar war)
{
_war = war;
}
public ClanWar getWar()
{
return _war;
}
// Bukkit event stuff
private static final HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() { return handlers; }
public HandlerList getHandlers() { return handlers; }
}

View File

@ -0,0 +1,29 @@
package mineplex.game.clans.clans.war.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineplex.game.clans.clans.war.WarInvasion;
/**
* Called when a war invasion is ended
*/
public class WarInvasionEndEvent extends Event
{
private WarInvasion _warInvasion;
public WarInvasionEndEvent(WarInvasion warInvasion)
{
_warInvasion = warInvasion;
}
public WarInvasion getWarInvasion()
{
return _warInvasion;
}
// Bukkit event stuff
private static final HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() { return handlers; }
public HandlerList getHandlers() { return handlers; }
}

View File

@ -0,0 +1,29 @@
package mineplex.game.clans.clans.war.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineplex.game.clans.clans.war.WarInvasion;
/**
* Called when a war invasion is started
*/
public class WarInvasionStartEvent extends Event
{
private WarInvasion _warInvasion;
public WarInvasionStartEvent(WarInvasion warInvasion)
{
_warInvasion = warInvasion;
}
public WarInvasion getWarInvasion()
{
return _warInvasion;
}
// Bukkit event stuff
private static final HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() { return handlers; }
public HandlerList getHandlers() { return handlers; }
}

View File

@ -0,0 +1,26 @@
package mineplex.game.clans.clans.war.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineplex.game.clans.clans.war.ClanWar;
public class WarStartEvent extends Event
{
private ClanWar _war;
public WarStartEvent(ClanWar war)
{
_war = war;
}
public ClanWar getWar()
{
return _war;
}
// Bukkit event stuff
private static final HandlerList handlers = new HandlerList();
public static HandlerList getHandlerList() { return handlers; }
public HandlerList getHandlers() { return handlers; }
}

View File

@ -498,7 +498,7 @@ public class Gameplay extends MiniPlugin
}
@EventHandler
public void onBlockPlace(BlockBreakEvent event)
public void onBlockBreak(BlockBreakEvent event)
{
Location location = event.getBlock().getLocation();

View File

@ -431,7 +431,7 @@ public class ServerNpcPage extends ShopPageInventory<ServerManager, ServerNpcSho
ShopItem shopItem = buildShopItem(serverInfo, slotsNeeded);
addButton(slot, shopItem, new JoinServerButton(this, serverInfo));
addButton(slot, shopItem, new JoinServerButton(this, getPlugin(), serverInfo, getPlayer()));
slot++;
}

View File

@ -38,7 +38,7 @@ public class JoinServerButton implements IButton
System.out.println("Selecting server :" + serverInfo.Name);
int slots = _serverManager.getRequiredSlots(player, serverInfo.ServerType);
if (serverInfo.getAvailableSlots() < slots && !(_page.getDonationManager().Get(_player.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA") || _page.getClient().GetRank().Has(Rank.ULTRA)))
if (serverInfo.getAvailableSlots() < slots && !(_page.getDonationManager().Get(_player.getName()).OwnsUnknownPackage(serverInfo.ServerType + " ULTRA") || _page.getClient().GetRank().has(Rank.ULTRA)))
{
_page.playDenySound(player);