diff --git a/src/org/apollo/game/message/impl/IdAssignmentMessage.java b/src/org/apollo/game/message/impl/IdAssignmentMessage.java index aaadda5b..72e50362 100644 --- a/src/org/apollo/game/message/impl/IdAssignmentMessage.java +++ b/src/org/apollo/game/message/impl/IdAssignmentMessage.java @@ -1,6 +1,7 @@ package org.apollo.game.message.impl; import org.apollo.game.message.Message; +import org.apollo.game.model.entity.setting.MembershipStatus; /** * A {@link Message} sent to the client that specifies the local id and membership status of the current player. @@ -15,17 +16,17 @@ public final class IdAssignmentMessage extends Message { private final int id; /** - * The membership flag. + * The MembershipStatus. */ - private final boolean members; + private final MembershipStatus members; /** * Creates the local id message. * * @param id The id. - * @param members The membership flag. + * @param members The MembershipStatus. */ - public IdAssignmentMessage(int id, boolean members) { + public IdAssignmentMessage(int id, MembershipStatus members) { this.id = id; this.members = members; } @@ -40,12 +41,12 @@ public final class IdAssignmentMessage extends Message { } /** - * Gets the membership flag. + * Gets whether or not the Player is a {@link MembershipStatus#PAID paying member}. * - * @return The membership flag. + * @return {@code true} if the Player is a paying member, {@code false} if not. */ public boolean isMembers() { - return members; + return members == MembershipStatus.PAID; } } \ No newline at end of file diff --git a/src/org/apollo/game/model/entity/Player.java b/src/org/apollo/game/model/entity/Player.java index 8b02a12b..50e1aeee 100644 --- a/src/org/apollo/game/model/entity/Player.java +++ b/src/org/apollo/game/model/entity/Player.java @@ -19,6 +19,7 @@ import org.apollo.game.model.Appearance; import org.apollo.game.model.Position; import org.apollo.game.model.World; import org.apollo.game.model.area.Sector; +import org.apollo.game.model.entity.setting.MembershipStatus; import org.apollo.game.model.entity.setting.PrivacyState; import org.apollo.game.model.entity.setting.PrivilegeLevel; import org.apollo.game.model.entity.setting.ScreenBrightness; @@ -131,9 +132,9 @@ public final class Player extends Mob { private transient Position lastKnownSector; /** - * The membership flag. + * The MembershipStatus of this Player. */ - private transient boolean members = false; + private transient MembershipStatus members = MembershipStatus.FREE; /** * A flag indicating if the player is new. @@ -558,6 +559,15 @@ public final class Player extends Mob { * @return {@code true} if so, {@code false} if not. */ public boolean isMembers() { + return members == MembershipStatus.PAID; + } + + /** + * Gets the {@link MembershipStatus} of this Player. + * + * @return The MembershipStatus. + */ + public MembershipStatus getMembershipStatus() { return members; } @@ -830,7 +840,7 @@ public final class Player extends Mob { * * @param members The new membership flag. */ - public void setMembers(boolean members) { + public void setMembers(MembershipStatus members) { this.members = members; } diff --git a/src/org/apollo/game/model/entity/setting/MembershipStatus.java b/src/org/apollo/game/model/entity/setting/MembershipStatus.java new file mode 100644 index 00000000..c02f86f3 --- /dev/null +++ b/src/org/apollo/game/model/entity/setting/MembershipStatus.java @@ -0,0 +1,58 @@ +package org.apollo.game.model.entity.setting; + +import java.util.Arrays; +import java.util.Optional; + +/** + * The membership status of a Player. + * + * @author Major + */ +public enum MembershipStatus { + + /** + * The free membership status. + */ + FREE(0), + + /** + * The paid membership status. + */ + PAID(1); + + /** + * Gets the MembershipStatus with the specified value. + * + * @param value The integer value of the MembershipStatus. + * @return The MembershipStatus. + * @throws IllegalArgumentException If no MembershipStatus with the specified the value exists. + */ + public static MembershipStatus valueOf(int value) { + Optional optional = Arrays.stream(values()).filter(status -> status.value == value).findAny(); + return optional.orElseThrow(() -> new IllegalArgumentException("Illegal membership status value.")); + } + + /** + * The integer value of this MembershipStatus. + */ + private final int value; + + /** + * Creates the MembershipStatus. + * + * @param value The integer value. + */ + private MembershipStatus(int value) { + this.value = value; + } + + /** + * Gets the value of this MembershipStatus. + * + * @return The value. + */ + public int getValue() { + return value; + } + +} \ No newline at end of file diff --git a/src/org/apollo/io/player/impl/BinaryPlayerLoader.java b/src/org/apollo/io/player/impl/BinaryPlayerLoader.java index 00d2fe89..204dbe43 100644 --- a/src/org/apollo/io/player/impl/BinaryPlayerLoader.java +++ b/src/org/apollo/io/player/impl/BinaryPlayerLoader.java @@ -21,6 +21,7 @@ import org.apollo.game.model.entity.attr.BooleanAttribute; import org.apollo.game.model.entity.attr.NumericalAttribute; import org.apollo.game.model.entity.attr.StringAttribute; import org.apollo.game.model.entity.setting.Gender; +import org.apollo.game.model.entity.setting.MembershipStatus; import org.apollo.game.model.entity.setting.PrivacyState; import org.apollo.game.model.entity.setting.PrivilegeLevel; import org.apollo.game.model.entity.setting.ScreenBrightness; @@ -69,7 +70,7 @@ public final class BinaryPlayerLoader implements PlayerLoader { credentials.setPassword(pass); PrivilegeLevel privilegeLevel = PrivilegeLevel.valueOf(in.readByte()); - boolean members = in.readBoolean(); + MembershipStatus members = MembershipStatus.valueOf(in.readByte()); // read settings PrivacyState chatPrivacy = PrivacyState.valueOf(in.readByte(), true); @@ -166,21 +167,21 @@ public final class BinaryPlayerLoader implements PlayerLoader { String name = StreamUtil.readString(in); AttributeType type = AttributeType.valueOf(in.read()); switch (type) { - case BOOLEAN: - attribute = new BooleanAttribute(in.read() == 1); - break; - case DOUBLE: - attribute = new NumericalAttribute(in.readDouble()); - break; - case LONG: - attribute = new NumericalAttribute(in.readLong()); - break; - case STRING: - case SYMBOL: - attribute = new StringAttribute(StreamUtil.readString(in), type == AttributeType.SYMBOL); - break; - default: - throw new IllegalArgumentException("Undefined attribute type: " + type + "."); + case BOOLEAN: + attribute = new BooleanAttribute(in.read() == 1); + break; + case DOUBLE: + attribute = new NumericalAttribute(in.readDouble()); + break; + case LONG: + attribute = new NumericalAttribute(in.readLong()); + break; + case STRING: + case SYMBOL: + attribute = new StringAttribute(StreamUtil.readString(in), type == AttributeType.SYMBOL); + break; + default: + throw new IllegalArgumentException("Undefined attribute type: " + type + "."); } attributes.put(name, attribute); } diff --git a/src/org/apollo/io/player/impl/BinaryPlayerSaver.java b/src/org/apollo/io/player/impl/BinaryPlayerSaver.java index 082731cf..5a0f9e50 100644 --- a/src/org/apollo/io/player/impl/BinaryPlayerSaver.java +++ b/src/org/apollo/io/player/impl/BinaryPlayerSaver.java @@ -39,7 +39,7 @@ public final class BinaryPlayerSaver implements PlayerSaver { StreamUtil.writeString(out, player.getUsername()); StreamUtil.writeString(out, player.getCredentials().getPassword()); out.writeByte(player.getPrivilegeLevel().toInteger()); - out.writeBoolean(player.isMembers()); + out.writeByte(player.getMembershipStatus().getValue()); // write settings out.writeByte(player.getChatPrivacy().toInteger(true)); @@ -118,21 +118,21 @@ public final class BinaryPlayerSaver implements PlayerSaver { out.writeByte(type.getValue()); switch (type) { - case BOOLEAN: - out.writeByte((Boolean) attribute.getValue() ? 1 : 0); - break; - case DOUBLE: - out.writeDouble((Double) attribute.getValue()); - break; - case LONG: - out.writeLong((Long) attribute.getValue()); - break; - case STRING: - case SYMBOL: - StreamUtil.writeString(out, (String) attribute.getValue()); - break; - default: - throw new IllegalArgumentException("Undefined attribute type " + type + "."); + case BOOLEAN: + out.writeByte((Boolean) attribute.getValue() ? 1 : 0); + break; + case DOUBLE: + out.writeDouble((Double) attribute.getValue()); + break; + case LONG: + out.writeLong((Long) attribute.getValue()); + break; + case STRING: + case SYMBOL: + StreamUtil.writeString(out, (String) attribute.getValue()); + break; + default: + throw new IllegalArgumentException("Undefined attribute type " + type + "."); } } diff --git a/src/org/apollo/io/player/impl/DummyPlayerLoader.java b/src/org/apollo/io/player/impl/DummyPlayerLoader.java index 95cd971d..83b0aedf 100644 --- a/src/org/apollo/io/player/impl/DummyPlayerLoader.java +++ b/src/org/apollo/io/player/impl/DummyPlayerLoader.java @@ -2,6 +2,7 @@ package org.apollo.io.player.impl; import org.apollo.game.model.Position; import org.apollo.game.model.entity.Player; +import org.apollo.game.model.entity.setting.MembershipStatus; import org.apollo.game.model.entity.setting.PrivilegeLevel; import org.apollo.io.player.PlayerLoader; import org.apollo.io.player.PlayerLoaderResponse; @@ -26,7 +27,7 @@ public final class DummyPlayerLoader implements PlayerLoader { Player player = new Player(credentials, DEFAULT_POSITION); player.setPrivilegeLevel(PrivilegeLevel.ADMINISTRATOR); - player.setMembers(true); + player.setMembers(MembershipStatus.PAID); return new PlayerLoaderResponse(status, player); }