Something like this ?
package drake.aepvp.model.enums;
import drake.aepvp.drivers.PlayerDriver;
import drake.aepvp.model.interfaces.Getter;
public enum PlayerParser
{
//event
event_Kills(PlayerDriver::getEventKills),
event_Deaths(PlayerDriver::getEventDeaths),
event_Flags(PlayerDriver::getEventFlags),
event_Spree(PlayerDriver::getEventSpree),
event_Top(PlayerDriver::getEventPosition),
event_AFK(PlayerDriver::getEventAFKSeconds),
event_DamageDealt(PlayerDriver::getEventDamageDealt),
event_DamageTaken(PlayerDriver::getEventHealingDone),
event_HealingDone(PlayerDriver::getEventHealingDone),
event_FastRegister(PlayerDriver::getEventRegistrationPosition),
player_PvP(PlayerDriver::getPlayerPvPs),
player_PK(PlayerDriver::getPlayerPKs),
player_LvL(PlayerDriver::getPlayerLevel),
player_Fame(PlayerDriver::getPlayerFame),
player_Sex(PlayerDriver::getPlayerSex),
player_Race(PlayerDriver::getPlayerRace),
//clan
clan_OnlineCount(PlayerDriver::getClanOnlineCount),
clan_Rep(PlayerDriver::getClanReputation),
clan_LvL(PlayerDriver::getClanLevel),
clan_Size(PlayerDriver::getClanSize),
//party
party_Size(PlayerDriver::getPartySize),
party_Healers(PlayerDriver::getPartyHealersCount),
party_TotalPvP(PlayerDriver::getPartyTotalPvPs),
party_TotalPK(PlayerDriver::getPartyTotalPKs);
private final Getter<PlayerDriver> _eventGetter;
private PlayerParser(Getter<PlayerDriver> eventGetter)
{
_eventGetter = eventGetter;
}
public int getValue(PlayerDriver playerData)
{
return _eventGetter.getValue(playerData);
}
}
package drake.aepvp.model.interfaces;
import java.util.LinkedHashSet;
import java.util.Set;
public interface Getter<E>
{
public LinkedHashSet<Getter<?>> getters = new LinkedHashSet<>();
int getValue(E data);
static void add(Getter<?> getter)
{
getters.add(getter);
}
public static Set<Getter<?>> values()
{
return getters;
}
}
XML parser:
if ("require".equalsIgnoreCase(n6.getNodeName()))
{
Requirement firstReq = null;
for (PlayerParser det : PlayerParser.values())
{
final String[] nodeName = det.toString().split("_");
final Node detNode = nnm3.getNamedItem(nodeName[0] + nodeName[1]);
final Node noMsgNode = nnm3.getNamedItem("msg");
final String noMsg = noMsgNode == null ? null : noMsgNode.getNodeValue();
if (detNode != null)
{
final Requirement req = new Requirement(det, detNode.getNodeValue(), noMsg);
if (firstReq == null)
firstReq = req;
else
firstReq.attachReq(req);
}
}
if (firstReq != null)
reqs.add(firstReq);
}
Something like that? Thats how I parse requirement conditions on my private event engine