2013-08-27 17:14:08 +02:00
package nautilus.game.arcade.managers ;
import java.util.ArrayList ;
import mineplex.core.account.CoreClient ;
import mineplex.core.common.CurrencyType ;
import mineplex.core.common.Rank ;
import mineplex.core.common.util.C ;
import mineplex.core.common.util.F ;
import mineplex.core.common.util.UtilPlayer ;
import mineplex.core.donation.Donor ;
import mineplex.core.shop.page.ConfirmationPage ;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent ;
import mineplex.minecraft.game.core.damage.CustomDamageEvent ;
import nautilus.game.arcade.ArcadeManager ;
2013-09-14 12:03:24 +02:00
import nautilus.game.arcade.GameType ;
2013-08-27 17:14:08 +02:00
import nautilus.game.arcade.game.Game ;
import nautilus.game.arcade.game.GameTeam ;
import nautilus.game.arcade.game.Game.GameState ;
import nautilus.game.arcade.kit.Kit ;
import nautilus.game.arcade.kit.KitAvailability ;
import nautilus.game.arcade.shop.ArcadeShop ;
import nautilus.game.arcade.shop.KitPackage ;
2013-09-20 10:50:56 +02:00
import net.minecraft.server.v1_6_R3.Packet40EntityMetadata ;
2013-08-27 17:14:08 +02:00
2013-09-14 12:03:24 +02:00
import org.bukkit.ChatColor ;
2013-09-09 10:06:44 +02:00
import org.bukkit.Location ;
2013-08-27 17:14:08 +02:00
import org.bukkit.Sound ;
2013-09-20 10:50:56 +02:00
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEntity ;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer ;
2013-08-27 17:14:08 +02:00
import org.bukkit.entity.Entity ;
import org.bukkit.entity.LivingEntity ;
import org.bukkit.entity.Player ;
import org.bukkit.event.EventHandler ;
import org.bukkit.event.EventPriority ;
import org.bukkit.event.Listener ;
import org.bukkit.event.player.PlayerInteractEntityEvent ;
import org.bukkit.event.player.PlayerJoinEvent ;
import org.bukkit.event.player.PlayerRespawnEvent ;
public class GamePlayerManager implements Listener
{
ArcadeManager Manager ;
public GamePlayerManager ( ArcadeManager manager )
{
Manager = manager ;
Manager . GetPluginManager ( ) . registerEvents ( this , Manager . GetPlugin ( ) ) ;
2013-12-14 06:00:56 +01:00
Manager . GetStatsManager ( ) . addTable ( " Pvp " ) ;
2013-08-27 17:14:08 +02:00
}
@EventHandler ( priority = EventPriority . HIGH )
public void PlayerDeath ( CombatDeathEvent event )
{
//Don't actually die
event . GetEvent ( ) . getEntity ( ) . setHealth ( 20 ) ;
//Dont display message
2013-09-09 10:06:44 +02:00
if ( Manager . GetGame ( ) ! = null )
event . SetBroadcastType ( Manager . GetGame ( ) . GetDeathMessageType ( ) ) ;
2013-08-27 17:14:08 +02:00
//Colors
if ( event . GetLog ( ) . GetKiller ( ) ! = null )
{
Player player = UtilPlayer . searchExact ( event . GetLog ( ) . GetKiller ( ) . GetName ( ) ) ;
if ( player ! = null )
event . GetLog ( ) . SetKillerColor ( Manager . GetColor ( player ) + " " ) ;
}
if ( event . GetEvent ( ) . getEntity ( ) instanceof Player )
{
Player player = ( Player ) event . GetEvent ( ) . getEntity ( ) ;
if ( player ! = null )
event . GetLog ( ) . SetKilledColor ( Manager . GetColor ( player ) + " " ) ;
}
}
@EventHandler
public void PlayerJoin ( PlayerJoinEvent event )
{
final Player player = event . getPlayer ( ) ;
2013-12-14 06:00:56 +01:00
2013-08-27 17:14:08 +02:00
//Lobby Name
Manager . GetLobby ( ) . AddPlayerToScoreboards ( player , null ) ;
//Lobby Spawn
if ( Manager . GetGame ( ) = = null | | ! Manager . GetGame ( ) . InProgress ( ) )
{
2013-09-09 10:06:44 +02:00
Manager . Clear ( player ) ;
2013-08-27 17:14:08 +02:00
player . teleport ( Manager . GetLobby ( ) . GetSpawn ( ) ) ;
return ;
}
//Game Spawn
if ( Manager . GetGame ( ) . IsAlive ( player ) )
{
2013-09-09 10:06:44 +02:00
Location loc = Manager . GetGame ( ) . GetLocationStore ( ) . remove ( player . getName ( ) ) ;
if ( loc ! = null & & ! loc . getWorld ( ) . getName ( ) . equalsIgnoreCase ( " world " ) )
{
player . teleport ( loc ) ;
}
else
{
Manager . Clear ( player ) ;
player . teleport ( Manager . GetGame ( ) . GetTeam ( player ) . GetSpawn ( ) ) ;
}
2013-08-27 17:14:08 +02:00
}
else
{
2013-09-09 10:06:44 +02:00
Manager . Clear ( player ) ;
2013-08-27 17:14:08 +02:00
Manager . GetGame ( ) . SetSpectator ( player ) ;
UtilPlayer . message ( player , F . main ( " Game " , Manager . GetGame ( ) . GetName ( ) + " is in progress, please wait for next game! " ) ) ;
}
player . setScoreboard ( Manager . GetGame ( ) . GetScoreboard ( ) ) ;
}
@EventHandler
public void PlayerRespawn ( PlayerRespawnEvent event )
{
if ( Manager . GetGame ( ) = = null | | ! Manager . GetGame ( ) . InProgress ( ) )
{
event . setRespawnLocation ( Manager . GetLobby ( ) . GetSpawn ( ) ) ;
return ;
}
Player player = event . getPlayer ( ) ;
if ( Manager . GetGame ( ) . IsAlive ( player ) )
{
event . setRespawnLocation ( Manager . GetGame ( ) . GetTeam ( player ) . GetSpawn ( ) ) ;
}
else
{
Manager . GetGame ( ) . SetSpectator ( player ) ;
event . setRespawnLocation ( Manager . GetGame ( ) . GetSpectatorLocation ( ) ) ;
}
}
@EventHandler ( priority = EventPriority . HIGH )
public void TeamInteract ( PlayerInteractEntityEvent event )
{
if ( event . getRightClicked ( ) = = null )
return ;
Player player = event . getPlayer ( ) ;
GameTeam team = Manager . GetLobby ( ) . GetClickedTeam ( event . getRightClicked ( ) ) ;
if ( team = = null )
return ;
TeamClick ( player , team ) ;
}
@EventHandler
public void TeamDamage ( CustomDamageEvent event )
{
Player player = event . GetDamagerPlayer ( false ) ;
if ( player = = null ) return ;
LivingEntity target = event . GetDamageeEntity ( ) ;
GameTeam team = Manager . GetLobby ( ) . GetClickedTeam ( target ) ;
if ( team = = null )
return ;
TeamClick ( player , team ) ;
}
public void TeamClick ( final Player player , final GameTeam team )
{
if ( Manager . GetGame ( ) = = null )
return ;
if ( Manager . GetGame ( ) . GetState ( ) ! = GameState . Recruit )
return ;
if ( ! Manager . GetGame ( ) . HasTeam ( team ) )
return ;
AddTeamPreference ( Manager . GetGame ( ) , player , team ) ;
}
public void AddTeamPreference ( Game game , Player player , GameTeam team )
{
GameTeam past = game . GetTeamPreference ( player ) ;
GameTeam current = game . GetTeam ( player ) ;
if ( current ! = null & & current . equals ( team ) )
{
game . RemoveTeamPreference ( player ) ;
UtilPlayer . message ( player , F . main ( " Team " , " You are already on " + F . elem ( team . GetFormattedName ( ) ) + " . " ) ) ;
return ;
}
if ( past = = null | | ! past . equals ( team ) )
{
if ( past ! = null )
2013-09-14 12:03:24 +02:00
{
2013-08-27 17:14:08 +02:00
game . RemoveTeamPreference ( player ) ;
2013-09-14 12:03:24 +02:00
if ( game . GetType ( ) = = GameType . UHC )
{
String players = " " ;
for ( Player other : game . GetTeamPreferences ( ) . get ( past ) )
players + = other . getName ( ) + " " ;
if ( players . length ( ) > 0 )
players = players . substring ( 0 , players . length ( ) - 1 ) ;
for ( Player other : game . GetTeamPreferences ( ) . get ( past ) )
UtilPlayer . message ( other , past . GetFormattedName ( ) + " Team: " + ChatColor . RESET + players ) ;
}
}
2013-08-27 17:14:08 +02:00
if ( ! game . GetTeamPreferences ( ) . containsKey ( team ) )
game . GetTeamPreferences ( ) . put ( team , new ArrayList < Player > ( ) ) ;
game . GetTeamPreferences ( ) . get ( team ) . add ( player ) ;
}
2013-09-14 12:03:24 +02:00
if ( game . GetType ( ) = = GameType . UHC )
{
String players = " " ;
for ( Player other : game . GetTeamPreferences ( ) . get ( team ) )
players + = other . getName ( ) + " " ;
if ( players . length ( ) > 0 )
players = players . substring ( 0 , players . length ( ) - 1 ) ;
for ( Player other : game . GetTeamPreferences ( ) . get ( team ) )
UtilPlayer . message ( other , team . GetFormattedName ( ) + " Team: " + ChatColor . RESET + players ) ;
}
else
{
UtilPlayer . message ( player , F . main ( " Team " , " You are " + F . elem ( game . GetTeamQueuePosition ( player ) ) + " in queue for " + F . elem ( team . GetFormattedName ( ) + " Team " ) + " . " ) ) ;
}
2013-08-27 17:14:08 +02:00
}
@EventHandler ( priority = EventPriority . HIGH )
public void KitInteract ( PlayerInteractEntityEvent event )
{
if ( event . getRightClicked ( ) = = null )
return ;
Player player = event . getPlayer ( ) ;
Kit kit = Manager . GetLobby ( ) . GetClickedKit ( event . getRightClicked ( ) ) ;
if ( kit = = null )
return ;
KitClick ( player , kit , event . getRightClicked ( ) ) ;
}
@EventHandler
public void KitDamage ( CustomDamageEvent event )
{
Player player = event . GetDamagerPlayer ( false ) ;
if ( player = = null ) return ;
LivingEntity target = event . GetDamageeEntity ( ) ;
Kit kit = Manager . GetLobby ( ) . GetClickedKit ( target ) ;
if ( kit = = null )
return ;
KitClick ( player , kit , target ) ;
}
public void KitClick ( final Player player , final Kit kit , final Entity entity )
{
kit . DisplayDesc ( player ) ;
if ( Manager . GetGame ( ) = = null )
return ;
if ( ! Manager . GetGame ( ) . HasKit ( kit ) )
return ;
CoreClient client = Manager . GetClients ( ) . Get ( player ) ;
Donor donor = Manager . GetDonation ( ) . Get ( player . getName ( ) ) ;
if ( kit . GetAvailability ( ) = = KitAvailability . Free | | client . GetRank ( ) . Has ( Rank . ULTRA ) | | donor . OwnsUnknownPackage ( Manager . GetServerConfig ( ) . ServerType + " ULTRA " ) | | donor . OwnsUnknownPackage ( Manager . GetGame ( ) . GetName ( ) + " " + kit . GetName ( ) ) )
{
Manager . GetGame ( ) . SetKit ( player , kit , true ) ;
}
else if ( kit . GetAvailability ( ) = = KitAvailability . Green & & donor . GetBalance ( CurrencyType . Gems ) > kit . GetCost ( ) )
{
Manager . GetShop ( ) . OpenPageForPlayer ( player , new ConfirmationPage < ArcadeManager , ArcadeShop > (
Manager , Manager . GetShop ( ) , Manager . GetClients ( ) , Manager . GetDonation ( ) , new Runnable ( )
{
public void run ( )
{
if ( player . isOnline ( ) )
{
Manager . GetGame ( ) . SetKit ( player , kit , true ) ;
( ( CraftPlayer ) player ) . getHandle ( ) . playerConnection . sendPacket ( new Packet40EntityMetadata ( entity . getEntityId ( ) , ( ( CraftEntity ) entity ) . getHandle ( ) . getDataWatcher ( ) , true ) ) ;
}
}
} , null , new KitPackage ( Manager . GetGame ( ) . GetName ( ) , kit ) , CurrencyType . Gems , player ) ) ;
}
else
{
player . playSound ( player . getLocation ( ) , Sound . NOTE_BASS , 2f , 0 . 5f ) ;
if ( kit . GetAvailability ( ) = = KitAvailability . Blue )
2013-09-22 00:01:40 +02:00
{
UtilPlayer . message ( player , F . main ( " Kit " , " This kit requires " + F . elem ( C . cAqua + " Ultra " ) + " . " ) ) ;
UtilPlayer . message ( player , F . main ( " Kit " , " Purchase at " + F . elem ( C . cYellow + " www.mineplex.com/shop " ) ) ) ;
}
2013-08-27 17:14:08 +02:00
else
2013-09-22 00:01:40 +02:00
{
UtilPlayer . message ( player , F . main ( " Kit " , " You do not have enough " + F . elem ( C . cGreen + " Gems " ) + " . " ) ) ;
UtilPlayer . message ( player , F . main ( " Kit " , " Purchase more at " + F . elem ( C . cYellow + " www.mineplex.com/shop " ) ) ) ;
}
2013-08-27 17:14:08 +02:00
}
}
}