Mineplex2018-withcommit/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/GameGemManager.java

273 lines
7.2 KiB
Java
Raw Normal View History

2013-08-27 17:14:08 +02:00
package nautilus.game.arcade.managers;
import java.util.HashMap;
import mineplex.core.achievement.Achievement;
2013-08-27 17:14:08 +02:00
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.minecraft.game.core.combat.CombatComponent;
import mineplex.minecraft.game.core.combat.event.CombatDeathEvent;
import nautilus.game.arcade.ArcadeFormat;
import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.GameType;
2013-08-27 17:14:08 +02:00
import nautilus.game.arcade.events.GameStateChangeEvent;
import nautilus.game.arcade.events.PlayerStateChangeEvent;
import nautilus.game.arcade.game.Game;
import nautilus.game.arcade.game.GemData;
import nautilus.game.arcade.game.Game.GameState;
import nautilus.game.arcade.game.GameTeam.PlayerState;
import org.bukkit.Sound;
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.PlayerQuitEvent;
public class GameGemManager implements Listener
{
ArcadeManager Manager;
boolean DoubleGem = false;
2013-08-27 17:14:08 +02:00
public GameGemManager(ArcadeManager manager)
{
Manager = manager;
2013-08-27 17:14:08 +02:00
Manager.GetPluginManager().registerEvents(this, Manager.GetPlugin());
}
@EventHandler
public void PlayerKillAward(CombatDeathEvent event)
{
if (!Manager.IsRewardGems())
2014-05-02 06:35:41 +02:00
return;
2013-08-27 17:14:08 +02:00
Game game = Manager.GetGame();
if (game == null) return;
2013-08-27 17:14:08 +02:00
if (!(event.GetEvent().getEntity() instanceof Player))
return;
2013-08-27 17:14:08 +02:00
Player killed = (Player)event.GetEvent().getEntity();
if (event.GetLog().GetKiller() != null)
{
Player killer = UtilPlayer.searchExact(event.GetLog().GetKiller().GetName());
if (killer != null && !killer.equals(killed))
{
//Kill
game.AddGems(killer, game.GetKillsGems(killer, killed, false), "Kills", true, true);
2013-08-27 17:14:08 +02:00
//First Kill
if (game.FirstKill)
{
game.AddGems(killer, 10, "First Blood", false, false);
2013-08-27 17:14:08 +02:00
game.FirstKill = false;
game.Announce(F.main("Game", Manager.GetColor(killer) + killer.getName() + " drew first blood!"));
}
}
}
for (CombatComponent log : event.GetLog().GetAttackers())
{
if (event.GetLog().GetKiller() != null && log.equals(event.GetLog().GetKiller()))
continue;
Player assist = UtilPlayer.searchExact(log.GetName());
//Assist
if (assist != null)
game.AddGems(assist, game.GetKillsGems(assist, killed, true), "Kill Assists", true, true);
2013-08-27 17:14:08 +02:00
}
}
2013-08-27 17:14:08 +02:00
@EventHandler
public void PlayerQuit(PlayerQuitEvent event)
{
if (!Manager.IsRewardGems())
2014-05-02 06:35:41 +02:00
return;
2013-08-27 17:14:08 +02:00
Game game = Manager.GetGame();
if (game == null) return;
RewardGems(game, event.getPlayer(), true);
}
2013-08-27 17:14:08 +02:00
@EventHandler(priority = EventPriority.MONITOR)
public void PlayerStateChange(PlayerStateChangeEvent event)
{
if (!Manager.IsRewardGems())
2014-05-02 06:35:41 +02:00
return;
2013-08-27 17:14:08 +02:00
if (event.GetState() != PlayerState.OUT)
return;
2014-11-21 06:32:12 +01:00
if (event.GetGame().GetType() == GameType.WitherAssault || event.GetGame().GetType() == GameType.Paintball || event.GetGame().GetType() == GameType.MineStrike)
2013-11-02 05:42:37 +01:00
return;
2013-08-27 17:14:08 +02:00
RewardGems(event.GetGame(), event.GetPlayer(), false);
}
2014-08-08 09:05:11 +02:00
@EventHandler(priority = EventPriority.MONITOR)
2013-08-27 17:14:08 +02:00
public void GameStateChange(GameStateChangeEvent event)
{
if (!Manager.IsRewardGems())
2014-05-02 06:35:41 +02:00
return;
2013-08-27 17:14:08 +02:00
if (event.GetState() != GameState.Dead)
return;
2013-08-27 17:14:08 +02:00
for (Player player : UtilServer.getPlayers())
RewardGems(event.GetGame(), player, true);
}
public void RewardGems(Game game, Player player, boolean give)
{
if (!Manager.IsRewardGems())
2014-05-02 06:35:41 +02:00
return;
2013-08-27 17:14:08 +02:00
//Inform Gems
AnnounceGems(game, player, game.GetPlayerGems().get(player), give);
2013-08-27 17:14:08 +02:00
//Give Gems
if (give)
GiveGems(game, player, game.GetPlayerGems().remove(player), game.GemMultiplier);
2013-08-27 17:14:08 +02:00
}
public void GiveGems(Game game, Player player, HashMap<String,GemData> gems, double gameMult)
2013-08-27 17:14:08 +02:00
{
if (!Manager.IsRewardGems())
2014-05-02 06:35:41 +02:00
return;
2013-08-27 17:14:08 +02:00
if (gems == null)
return;
int earned = 0;
2013-08-27 17:14:08 +02:00
for (GemData data : gems.values())
earned += (int)data.Gems;
2013-08-27 17:14:08 +02:00
if (earned <= 0)
earned = 1;
earned = (int) (earned * gameMult);
int total = earned;
//Gem Boooster
if (game.GemBoosterEnabled)
total += (int)(earned * game.GetGemBoostAmount());
//Gem Finder
if (game.GemHunterEnabled)
{
int gemFinder = Manager.GetAchievement().get(player.getName(), Achievement.GLOBAL_GEM_HUNTER).getLevel();
if (gemFinder > 0)
{
total += (int)(earned * (gemFinder * 0.25));
}
}
if (DoubleGem && game.GemDoubleEnabled)
total += earned;
2013-08-27 17:14:08 +02:00
Manager.GetDonation().RewardGems(null, "Earned " + game.GetName(), player.getName(), player.getUniqueId(), total);
//Stats
Manager.GetStatsManager().incrementStat(player, "Global.GemsEarned", total);
Manager.GetStatsManager().incrementStat(player, game.GetName()+".GemsEarned", total);
2013-08-27 17:14:08 +02:00
}
2014-08-08 09:05:11 +02:00
public void AnnounceGems(Game game, Player player, HashMap<String,GemData> gems, boolean give)
2013-08-27 17:14:08 +02:00
{
if (!Manager.IsRewardGems())
2014-05-02 06:35:41 +02:00
return;
2013-08-27 17:14:08 +02:00
if (gems == null)
return;
2013-08-27 17:14:08 +02:00
player.playSound(player.getLocation(), Sound.LEVEL_UP, 2f, 1f);
UtilPlayer.message(player, "");
UtilPlayer.message(player, ArcadeFormat.Line);
2014-08-08 09:05:11 +02:00
UtilPlayer.message(player, "§f§lGems Earned");
2013-08-27 17:14:08 +02:00
UtilPlayer.message(player, "");
2013-08-27 17:14:08 +02:00
int earnedGems = 0;
for (String type : gems.keySet())
{
int gemCount = (int)gems.get(type).Gems;
if (gemCount <= 0)
gemCount = 1;
earnedGems += gemCount;
2013-08-27 17:14:08 +02:00
int amount = gems.get(type).Amount;
String amountStr = "";
if (amount > 0)
amountStr = amount + " ";
UtilPlayer.message(player, F.elem(C.cGreen + "+" + (int)(gemCount * game.GemMultiplier) + " Gems") + " for " + F.elem(amountStr + type));
2013-08-27 17:14:08 +02:00
}
2013-09-21 05:53:12 +02:00
earnedGems = (int) (earnedGems * game.GemMultiplier);
2013-08-27 17:14:08 +02:00
int totalGems = earnedGems;
//Gem Booster
if (game.GetGemBoostAmount() > 0 && game.GemBoosterEnabled)
2013-12-24 09:14:40 +01:00
{
2014-08-08 09:05:11 +02:00
UtilPlayer.message(player, F.elem(C.cGreen + "+" + (int)(earnedGems*game.GetGemBoostAmount()) + " Gems") + " for " +
F.elem(game.GemBoosters.size() + " Gem Boosters " + C.cGreen + "+" + (int)(game.GetGemBoostAmount()*100) + "%"));
totalGems += earnedGems * game.GetGemBoostAmount();
2013-12-24 09:14:40 +01:00
}
//Gem Finder
if (game.GemHunterEnabled)
2013-08-27 17:14:08 +02:00
{
int gemFinder = Manager.GetAchievement().get(player.getName(), Achievement.GLOBAL_GEM_HUNTER).getLevel();
if (gemFinder > 0)
{
UtilPlayer.message(player, F.elem(C.cGreen + "+" + ((int)(earnedGems*(gemFinder * 0.25)) + " Gems")) + " for " +
F.elem("Gem Hunter " + gemFinder + C.cGreen + " +" + (gemFinder*25) + "%"));
totalGems += earnedGems * (gemFinder * 0.25);
}
2013-08-27 17:14:08 +02:00
}
2014-03-01 00:35:06 +01:00
//Double Gem
if (DoubleGem && game.GemDoubleEnabled)
2014-03-01 00:35:06 +01:00
{
UtilPlayer.message(player, F.elem(C.cGreen + "+" + (earnedGems) + " Gems") + " for " + F.elem(C.cDGreen + "Double Gem Weekend"));
totalGems += earnedGems;
2014-03-01 00:35:06 +01:00
}
2013-12-24 09:14:40 +01:00
//Inform
2013-08-27 17:14:08 +02:00
UtilPlayer.message(player, "");
if (give)
{
UtilPlayer.message(player, F.elem(C.cWhite + "§lYou now have " +
C.cGreen + C.Bold + (Manager.GetDonation().Get(player.getName()).GetGems() + totalGems) + " Gems"));
2013-08-27 17:14:08 +02:00
}
else
{
UtilPlayer.message(player, F.elem(C.cWhite + "§lGame is still in progress..."));
UtilPlayer.message(player, F.elem(C.cWhite + "§lYou may earn more " + C.cGreen + C.Bold + "Gems" + C.cWhite + C.Bold + " when its completed."));
2013-08-27 17:14:08 +02:00
}
2013-08-27 17:14:08 +02:00
UtilPlayer.message(player, ArcadeFormat.Line);
}
2013-08-27 17:14:08 +02:00
}