package net.sourceforge.pain.data.type; import net.sourceforge.pain.data.*; import net.sourceforge.pain.db.*; import java.util.*; /** Object considered to be a remote user instance. */ public final class Player extends Role { public static final int LOGIN = 1 + LAST_BASE_FIELD_INDEX; public static final int PASSWORD = 2 + LAST_BASE_FIELD_INDEX; /** never is null (circular) */ public static final int PREV_ACTIVE = 3 + LAST_BASE_FIELD_INDEX; /** ends with null (line) */ public static final int NEXT_ACTIVE = 4 + LAST_BASE_FIELD_INDEX; /** players that logged off from the world are moved to special space. (uniqe per player) */ public static final int QUIT_SPACE = 5 + LAST_BASE_FIELD_INDEX; /** Granted commands allowed for player*/ public static final int GRANTED_COMMANDS = 6 + LAST_BASE_FIELD_INDEX; /** common commands explicitly denied to execute by player */ public static final int REJECTED_COMMANDS = 7 + LAST_BASE_FIELD_INDEX; public static final int NFIELDS = 8 + LAST_BASE_FIELD_INDEX; public final static Class superroles[] = new Class[]{Interactive.class}; public Player(PainDB db) { super(db); } public Player() { } public DbClassSchema provideSchema() { byte types[] = new byte[NFIELDS]; String names[] = new String[NFIELDS]; fillSuperSchema(types, names); types[LOGIN] = DbType.STRING; names[LOGIN] = "name"; types[PASSWORD] = DbType.STRING; names[PASSWORD] = "password"; types[PREV_ACTIVE] = DbType.REFERENCE; names[PREV_ACTIVE] = "prev_active"; types[NEXT_ACTIVE] = DbType.REFERENCE; names[NEXT_ACTIVE] = "next_active"; types[QUIT_SPACE] = DbType.REFERENCE; names[QUIT_SPACE] = "quit_space"; types[GRANTED_COMMANDS] = DbType.STRING_SET; names[GRANTED_COMMANDS] = "granted_commands"; types[REJECTED_COMMANDS] = DbType.STRING_SET; names[REJECTED_COMMANDS] = "rejected_commands"; return new DbClassSchema(types, names); } public void setPassword(String newPass) { setString(PASSWORD, newPass); } public String getPassword() { return getString(PASSWORD); } public void setLogin(String name) { //should be lowercase setString(LOGIN, name); } public String getLogin() { //lowercase return getString(LOGIN); } public void setPrevActivePlayer(Player p) { setReference(PREV_ACTIVE, p); } public Player getPrevActivePlayer() { return (Player) getReference(PREV_ACTIVE); } public void setNextActivePlayer(Player p) { setReference(NEXT_ACTIVE, p); } public Player getNextActivePlayer() { return (Player) getReference(NEXT_ACTIVE); } public void setQuitSpace(Space value) { setReference(QUIT_SPACE, value); } public Space getQuitSpace() { return (Space) getReference(QUIT_SPACE); } public Class[] getSuperroles() { return superroles; } public Space getLocation() { return asLocated().getLocation(); } public Interactive asInteractive() { return (Interactive) getRole(Interactive.class); } public Receptive asReceptive() { return (Receptive) getRole(Receptive.class); } public Located asLocated() { return (Located) getRole(Located.class); } public Set getGrantedCommands() { return getStringSet(GRANTED_COMMANDS); } public Set getRejectedCommands() { return getStringSet(REJECTED_COMMANDS); } public String getName() { return asInteractive().getName(); } }