package in.twizmwaz.cardinal.module.modules.scorebox;
import in.twizmwaz.cardinal.GameHandler;
import in.twizmwaz.cardinal.chat.ChatConstant;
import in.twizmwaz.cardinal.chat.LocalizedChatMessage;
import in.twizmwaz.cardinal.chat.UnlocalizedChatMessage;
import in.twizmwaz.cardinal.event.ScoreUpdateEvent;
import in.twizmwaz.cardinal.module.Module;
import in.twizmwaz.cardinal.module.modules.filter.FilterModule;
import in.twizmwaz.cardinal.module.modules.filter.FilterState;
import in.twizmwaz.cardinal.module.modules.regions.RegionModule;
import in.twizmwaz.cardinal.module.modules.score.ScoreModule;
import in.twizmwaz.cardinal.module.modules.team.TeamModule;
import in.twizmwaz.cardinal.util.ChatUtils;
import in.twizmwaz.cardinal.util.TeamUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
import java.util.HashMap;
public class Scorebox implements Module {
private final RegionModule region;
private final int points;
private final FilterModule filter;
private final HashMap<ItemStack, Integer> redeemables;
protected Scorebox(final RegionModule region, final int points, final FilterModule filter, final HashMap<ItemStack, Integer> redeemables) {
this.region = region;
this.points = points;
this.filter = filter;
this.redeemables = redeemables;
}
@Override
public void unload() {
HandlerList.unregisterAll(this);
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerMove(PlayerMoveEvent event) {
if (GameHandler.getGameHandler().getMatch().isRunning()) {
if (region.contains(event.getTo().toVector()) && !region.contains(event.getFrom().toVector())) {
if (filter == null || filter.evaluate(event.getPlayer()).equals(FilterState.ALLOW)) {
if (event.getPlayer().getHealth() > 0) {
int points = 0;
if (redeemables.size() > 0) {
for (ItemStack item : redeemables.keySet()) {
if (event.getPlayer().getInventory().contains(item)) {
for (ScoreModule score : GameHandler.getGameHandler().getMatch().getModules().getModules(ScoreModule.class)) {
TeamModule playerTeam = TeamUtils.getTeamByPlayer(event.getPlayer());
if (playerTeam != null && score.getTeam() == playerTeam) {
event.getPlayer().getInventory().remove(item);
points += redeemables.get(item);
}
}
}
}
}
points += this.points;
if (points != 0) {
TeamModule playerTeam = TeamUtils.getTeamByPlayer(event.getPlayer());
if (playerTeam != null) {
for (ScoreModule score : GameHandler.getGameHandler().getMatch().getModules().getModules(ScoreModule.class)) {
if (score.getTeam() == playerTeam) {
score.setScore(score.getScore() + points);
Bukkit.getServer().getPluginManager().callEvent(new ScoreUpdateEvent(score));
ChatUtils.getGlobalChannel().sendLocalizedMessage(new UnlocalizedChatMessage(ChatColor.GRAY + "{0}", new LocalizedChatMessage(ChatConstant.UI_SCORED_FOR, new UnlocalizedChatMessage(playerTeam.getColor() + event.getPlayer().getName() + ChatColor.GRAY), new UnlocalizedChatMessage(ChatColor.DARK_AQUA + "{0}" + ChatColor.GRAY, points == 1 ? new LocalizedChatMessage(ChatConstant.UI_ONE_POINT) : new LocalizedChatMessage(ChatConstant.UI_POINTS, points + "" + ChatColor.GRAY)), new UnlocalizedChatMessage(playerTeam.getCompleteName()))));
}
}
}
}
}
}
}
}
}
}