more stable, progress for making 'easier-to-use'

This commit is contained in:
Teddy 2016-01-11 12:06:30 +00:00
parent 5caeb8bee0
commit ec6e916c7b
6 changed files with 155 additions and 48 deletions

View File

@ -1,12 +1,10 @@
package nautilus.game.arcade.game; package nautilus.game.arcade.game;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
@ -75,8 +73,8 @@ import nautilus.game.arcade.game.GameTeam.PlayerState;
import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.kit.KitAvailability; import nautilus.game.arcade.kit.KitAvailability;
import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.Perk;
import nautilus.game.arcade.managers.GameChatManager;
import nautilus.game.arcade.managers.GameLobbyManager; import nautilus.game.arcade.managers.GameLobbyManager;
import nautilus.game.arcade.managers.chat.ChatStatData;
import nautilus.game.arcade.scoreboard.GameScoreboard; import nautilus.game.arcade.scoreboard.GameScoreboard;
import nautilus.game.arcade.stats.AssistsStatTracker; import nautilus.game.arcade.stats.AssistsStatTracker;
import nautilus.game.arcade.stats.DamageDealtStatTracker; import nautilus.game.arcade.stats.DamageDealtStatTracker;
@ -274,6 +272,11 @@ public abstract class Game implements Listener
public long PrepareTime = 9000; public long PrepareTime = 9000;
public boolean PlaySoundGameStart = true; public boolean PlaySoundGameStart = true;
// Chat Stats
public final ChatStatData Kills = new ChatStatData(new String[]{"Kills"}, "Kills", true);
public final ChatStatData Deaths = new ChatStatData(new String[]{"Deaths"}, "Kills", true);
public final ChatStatData KDRatio = new ChatStatData(new String[]{"KDRatio"}, "KD-Ratio", true);
// Gems // Gems
public double GemMultiplier = 1; public double GemMultiplier = 1;
public boolean GemHunterEnabled = true; public boolean GemHunterEnabled = true;

View File

@ -39,7 +39,7 @@ public class BaconBrawl extends SoloGame
HungerSet = 20; HungerSet = 20;
PrepareFreeze = false; PrepareFreeze = false;
Manager.getGameChatManager().setGameChatStats("Kills", "Deaths"); Manager.getGameChatManager().setGameChatStats(Kills, Deaths);
} }
@EventHandler @EventHandler

View File

@ -163,7 +163,7 @@ public class Evolution extends SoloGame
new KillsWhileEvolvingTracker(this) new KillsWhileEvolvingTracker(this)
); );
Manager.getGameChatManager().setGameChatStats("Kills", "Deaths"); Manager.getGameChatManager().setGameChatStats(Kills, Deaths);
} }
public EvolveManager getEvolve() public EvolveManager getEvolve()

View File

@ -104,6 +104,7 @@ import nautilus.game.arcade.game.games.minestrike.items.guns.GunStats;
import nautilus.game.arcade.game.games.minestrike.items.guns.GunType; import nautilus.game.arcade.game.games.minestrike.items.guns.GunType;
import nautilus.game.arcade.game.games.minestrike.kits.KitPlayer; import nautilus.game.arcade.game.games.minestrike.kits.KitPlayer;
import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.kit.Kit;
import nautilus.game.arcade.managers.chat.ChatStatData;
import nautilus.game.arcade.stats.KaboomStatTracker; import nautilus.game.arcade.stats.KaboomStatTracker;
import nautilus.game.arcade.stats.KillAllOpposingMineStrikeRoundStatTracker; import nautilus.game.arcade.stats.KillAllOpposingMineStrikeRoundStatTracker;
import nautilus.game.arcade.stats.KillFastStatTracker; import nautilus.game.arcade.stats.KillFastStatTracker;
@ -309,7 +310,14 @@ public class MineStrike extends TeamGame
new TeamKillsStatTracker(this) new TeamKillsStatTracker(this)
); );
Manager.getGameChatManager().setGameChatStats("Kills", "Deaths", "KDRatio"); //"Kills", "Deaths", "KDRatio", "", "BoomHeadshot"
Manager.getGameChatManager().setGameChatStats(
Kills,
Deaths,
KDRatio,
new ChatStatData().blankLine(),
new ChatStatData(new String[]{null}, "Testing", false)
);
} }
@Override @Override

View File

@ -3,6 +3,7 @@ package nautilus.game.arcade.managers;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@ -20,6 +21,7 @@ import org.bukkit.event.player.PlayerItemConsumeEvent;
import net.minecraft.server.v1_8_R3.IChatBaseComponent; import net.minecraft.server.v1_8_R3.IChatBaseComponent;
import net.minecraft.server.v1_8_R3.PacketPlayOutChat; import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
import com.google.gson.stream.MalformedJsonException;
import mineplex.core.account.CoreClient; import mineplex.core.account.CoreClient;
import mineplex.core.common.Rank; import mineplex.core.common.Rank;
import mineplex.core.common.jsonchat.JsonMessage; import mineplex.core.common.jsonchat.JsonMessage;
@ -28,8 +30,10 @@ import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilPlayer;
import mineplex.core.party.Party; import mineplex.core.party.Party;
import nautilus.game.arcade.ArcadeManager; import nautilus.game.arcade.ArcadeManager;
import nautilus.game.arcade.game.Game;
import nautilus.game.arcade.game.Game.GameState; import nautilus.game.arcade.game.Game.GameState;
import nautilus.game.arcade.game.GameTeam; import nautilus.game.arcade.game.GameTeam;
import nautilus.game.arcade.managers.chat.ChatStatData;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
@ -38,7 +42,7 @@ public class GameChatManager implements Listener
private ArcadeManager _manager; private ArcadeManager _manager;
private LinkedList<String> _chatStats = new LinkedList<>(); private LinkedList<ChatStatData> _chatStats = new LinkedList<ChatStatData>();
public GameChatManager(ArcadeManager manager) public GameChatManager(ArcadeManager manager)
{ {
@ -149,11 +153,9 @@ public class GameChatManager implements Listener
} }
else else
{ {
event.setCancelled(true); if(safeSend(sender, format, name, message, party.GetPlayersOnline()))
IChatBaseComponent baseComponent = IChatBaseComponent.ChatSerializer.a(buildJSON(sender, format, name, _chatStats, message));
for(Player partyUser : party.GetPlayersOnline())
{ {
UtilPlayer.sendPacket(partyUser, new PacketPlayOutChat(baseComponent)); event.setCancelled(true);
} }
} }
@ -200,11 +202,9 @@ public class GameChatManager implements Listener
{ {
if(_manager.GetGame().IsLive()) if(_manager.GetGame().IsLive())
{ {
event.setCancelled(true); if(safeSend(sender, format, name, message, _manager.GetGame().GetPlayers(false)))
IChatBaseComponent baseComponent = IChatBaseComponent.ChatSerializer.a(buildJSON(sender, format, name, _chatStats, message));
for(Player player : _manager.GetGame().GetPlayers(false))
{ {
UtilPlayer.sendPacket(player, new PacketPlayOutChat(baseComponent)); event.setCancelled(true);
} }
} }
return; return;
@ -232,66 +232,113 @@ public class GameChatManager implements Listener
recipientIterator.remove(); recipientIterator.remove();
} }
IChatBaseComponent baseComponent = IChatBaseComponent.ChatSerializer.a(buildJSON(sender, format, name, _chatStats, message)); if(safeSend(sender, format, name, message, event.getRecipients()))
for(Player player : event.getRecipients()) {
event.setCancelled(true);
}
}
}
public boolean safeSend(Player sender, String format, String name, String message, Collection<Player> sendto)
{
String json = buildJSON(sender, format, name, _chatStats, message);
try
{
IChatBaseComponent baseComponent = IChatBaseComponent.ChatSerializer.a(json);
for(Player player : sendto)
{ {
UtilPlayer.sendPacket(player, new PacketPlayOutChat(baseComponent)); UtilPlayer.sendPacket(player, new PacketPlayOutChat(baseComponent));
} }
}
}
public void setGameChatStats(String... stats) return true;
{ }
for(String str : stats) catch (Exception e)
{ {
System.out.println(str); System.out.println("");
_chatStats.add(str); System.out.println("ChatStats Failed to send JSON message..");
System.out.println(json);
System.out.println("");
return false;
} }
} }
private String buildJSON(Player player, String format, String name, LinkedList<String> hoverText, String message) public void setGameChatStats(ChatStatData... stats)
{ {
LinkedHashMap<Integer, Map.Entry<String, String>> temp = new LinkedHashMap<Integer, Map.Entry<String, String>>(); for(ChatStatData chatStat : stats)
{
System.out.println(chatStat.getStat());
_chatStats.add(chatStat);
}
}
private String buildJSON(Player player, String format, String name, LinkedList<ChatStatData> hoverText, String message)
{
LinkedList<Map.Entry<String, String>> temp = new LinkedList<Map.Entry<String, String>>();
ChatColor teamColor = _manager.GetGame().GetTeam(player).GetColor(); ChatColor teamColor = _manager.GetGame().GetTeam(player).GetColor();
temp.put(0, new AbstractMap.SimpleEntry<String, String>(C.Bold + teamColor + ChatColor.stripColor(name) + teamColor + "'s stats", "")); temp.add(new AbstractMap.SimpleEntry<String, String>(teamColor + C.Bold + ChatColor.stripColor(name) + teamColor + "'s stats", ""));
temp.put(1, new AbstractMap.SimpleEntry<String, String>(" ", "")); temp.add(new AbstractMap.SimpleEntry<String, String>(" ", ""));
int x = 2; Game game = _manager.GetGame();
for(String str : hoverText) String gameName = game.GetName();
for (int i = 0; i < hoverText.size(); i++)
{ {
if(!_manager.GetGame().GetStats().containsKey(player)) if (!_manager.GetGame().GetStats().containsKey(player))
{ {
temp.put(x, new AbstractMap.SimpleEntry<String, String>(C.cGray + "Retrieving stats..", "")); temp.add(new AbstractMap.SimpleEntry<String, String>(C.cGray + "Retrieving stats..", ""));
x++;
break; break;
} }
if(_manager.GetGame().GetStats().get(player).containsKey(_manager.GetGame().GetName() + "." + str)) ChatStatData chatStatData = hoverText.get(i);
String display = (chatStatData.getDisplay() == null ? chatStatData.getStat()[0] : chatStatData.getDisplay());
if(!chatStatData.isValue())
{ {
temp.put(x, new AbstractMap.SimpleEntry<String, String>(str, (_manager.GetGame().GetStats().get(player).get(_manager.GetGame().GetName() + "." + str).toString()))); temp.add(new AbstractMap.SimpleEntry<String, String>(chatStatData.getDisplay(), ""));
} continue;
else if(str.equalsIgnoreCase("kdratio"))
{
int kills = _manager.GetGame().GetStats().get(player).get(_manager.GetGame().GetName() + ".Kills");
int deaths = _manager.GetGame().GetStats().get(player).get(_manager.GetGame().GetName() + ".Deaths");
temp.put(x, new AbstractMap.SimpleEntry<String, String>(str, getRatio(kills, deaths, "##.##")));
} }
x++; if (chatStatData.getStat()[0].equalsIgnoreCase("kdratio"))
{
int kills;
int deaths;
if (game.GetStats().get(player).containsKey(gameName + ".Kills"))
kills = game.GetStats().get(player).get(gameName + ".Kills");
else
kills = 0;
if (game.GetStats().get(player).containsKey(gameName + ".Deaths"))
deaths = game.GetStats().get(player).get(gameName + ".Deaths");
else
deaths = 0;
temp.add(new AbstractMap.SimpleEntry<String, String>(display + ": ", getRatio(kills, deaths, "##.##")));
continue;
}
if (game.GetStats().get(player).containsKey(gameName + "." + chatStatData.getStat()))
{
temp.add(new AbstractMap.SimpleEntry<String, String>(display + ": ", (game.GetStats().get(player).get(gameName + "." + chatStatData.getStat()).toString())));
}
else
{
temp.add(new AbstractMap.SimpleEntry<String, String>(display + ": ", "0"));
}
} }
String f = "{\"text\":\"\",\"extra\":[{\"text\":\"" + format + "\"},"; String f = "{\"text\":\"\",\"extra\":[{\"text\":\"" + JSONObject.escape(format) + "\"},";
String n = "{\"text\":\"" + name + "\","; String n = "{\"text\":\"" + JSONObject.escape(name) + "\",";
String stats = "\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\""; String stats = "\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"";
String m = ",{\"text\":\"" + message + "\"}]}"; String m = ",{\"text\":\"" + JSONObject.escape(message) + "\"}]}";
for(int i = 0; i < temp.size(); i++) for (int i = 0; i < temp.size(); i++)
{ {
if(temp.containsKey(i)) stats += C.cWhite + JSONObject.escape(temp.get(i).getKey()) + C.cGray + JSONObject.escape(temp.get(i).getValue()) + (i >= temp.size()-1 ? "\"}}}" : "\\n");
stats += C.cWhite + temp.get(i).getKey() + ": " + C.cGray + temp.get(i).getValue() + (i == hoverText.size()-1 ? "\"}}}" : "\\n");
} }
System.out.println(f + n + stats + m);
return f + n + stats + m; return f + n + stats + m;
} }

View File

@ -0,0 +1,49 @@
package nautilus.game.arcade.managers.chat;
import mineplex.core.chat.Chat;
/**
* Created by TeddyDev on 10/01/2016.
*/
public class ChatStatData
{
private String[] _stat;
private String _display;
private boolean _isValue;
public ChatStatData()
{
}
public ChatStatData(String[] stat, String display, boolean isValue)
{
_stat = stat;
_display = display;
_isValue = isValue;
}
public ChatStatData blankLine()
{
_stat = new String[]{null};
_display = " ";
_isValue = false;
return this;
}
public String[] getStat()
{
return _stat;
}
public String getDisplay()
{
return _display;
}
public boolean isValue()
{
return _isValue;
}
}