package tc.oc.commons.bukkit.util; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; import org.bukkit.plugin.Plugin; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; @Singleton public class PlayerStatesImpl implements PlayerStates { private final static String DEAD_KEY = "isDead"; private final static String PARTICIPATING_KEY = "isParticipating"; private final Plugin plugin; @Inject PlayerStatesImpl(Plugin plugin) { this.plugin = plugin; } private boolean get(Player player, String key, boolean fallback) { final MetadataValue value = player.getMetadata(key, plugin); return value != null ? value.asBoolean() : fallback; } private void set(Player player, String key, @Nullable Boolean value) { if(value != null) { player.setMetadata(key, new FixedMetadataValue(plugin, value)); } else { player.removeMetadata(key, plugin); } } @Override public boolean isDead(Player player) { return get(player, DEAD_KEY, player.isDead()); } @Override public void setDead(Player player, @Nullable Boolean dead) { set(player, DEAD_KEY, dead); } @Override public boolean isParticipating(Player player) { return get(player, PARTICIPATING_KEY, player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE); } @Override public void setParticipating(Player player, @Nullable Boolean value) { set(player, PARTICIPATING_KEY, value); } }