you define something abstract when theres really no way to implement it on the abstract class.
for example you have onDie abstract, thats wrong since you can handle player death from the abstract class
like:
TvT:
@Override
public void onDie(...)
{
Announce(killer has killed victim);
super.onDie(...);
}
parent:
public void onDie()
{
//handle the death code
//that is common for all other events
}
//////////////////////////////////////////
example 2
abstract public boolean areSameTeam(player1, player2);
thats wrong, cause you CAN
public boolean areSameTeam(player1, player2)
{
return false;
}
TvT:
@Override
public boolean areSameTeam(player1, player2)
{
return getTeam(player1) == getTeam(player);
}
Deathmatch
//no need to override anything, areSameTeam returns from its parent
I really hope you get my point