Fix TypeRank

This commit is contained in:
BuildTools 2016-01-24 11:55:44 +01:00 committed by Olof Larsson
parent 58903a998e
commit 0937e12b21
2 changed files with 41 additions and 18 deletions

View File

@ -48,9 +48,6 @@ public class CmdFactionsRank extends FactionsCommand
private Rel targetRank = null;
private Rel rank = null;
// This one is permanent
private TypeRank rankReader = new TypeRank();
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
@ -62,7 +59,7 @@ public class CmdFactionsRank extends FactionsCommand
// Parameters
this.addParameter(TypeMPlayer.get(), "player");
this.addParameter(rankReader, "action", "show");
this.addParameter(TypeRank.get(), "action", "show");
this.addParameter(TypeFaction.get(), "faction", "their");
// Requirements
@ -141,7 +138,7 @@ public class CmdFactionsRank extends FactionsCommand
// Rank if any passed.
if (this.argIsSet(1))
{
this.rankReader.setStartRank(targetRank);
this.setParameterType(1, TypeRank.get(targetRank));
rank = this.readArg();
}
@ -235,7 +232,7 @@ public class CmdFactionsRank extends FactionsCommand
// Don't change their rank to something they already are.
if (target.getRole() == rank)
{
throw new MassiveException().addMsg("%s <b>is already %s<b>.", target.describeTo(msender), rank.getColor() + rank.getDescPlayerOne());
throw new MassiveException().addMsg("%s <b>is already %s.", target.describeTo(msender), rank.getDescPlayerOne());
}
}

View File

@ -1,10 +1,16 @@
package com.massivecraft.factions.cmd.type;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.massivecraft.factions.Rel;
import com.massivecraft.massivecore.collections.MassiveMap;
import com.massivecraft.massivecore.collections.MassiveSet;
import com.massivecraft.massivecore.command.type.enumeration.TypeEnum;
import com.massivecraft.massivecore.util.MUtil;
public class TypeRank extends TypeEnum<Rel>
{
@ -29,31 +35,51 @@ public class TypeRank extends TypeEnum<Rel>
// -------------------------------------------- //
// INSTANCE & CONSTRUCT
// -------------------------------------------- //
// Because of the caching in TypeAbstractChoice, we want only one of each instance.
// Can be used to promote and demote.
public static TypeRank get(Rel rank) { return new TypeRank(rank); }
// Null instance, doesn't allow promote and demote.
private static final TypeRank i = new TypeRank(null);
public static TypeRank get() { return i; }
// Cached instances, does allow promote and demote.
private static final Map<Rel, TypeRank> instances;
static
{
Map<Rel, TypeRank> result = new MassiveMap<>();
for (Rel rel : Rel.values())
{
if ( ! rel.isRank()) continue;
result.put(rel, new TypeRank(rel));
}
result.put(null, i);
instances = Collections.unmodifiableMap(result);
}
public static TypeRank get(Rel rank) { return instances.get(rank); }
// Constructor
public TypeRank(Rel rank)
{
super(Rel.class);
if (rank != null && ! rank.isRank()) throw new IllegalArgumentException(rank + " is not a valid rank");
this.startRank = rank;
}
// Can not be used to promote and demote.
private static TypeRank i = new TypeRank();
public static TypeRank get() { return i; }
public TypeRank()
{
this(null);
// Do setAll with only ranks.
List<Rel> all = MUtil.list(Rel.values());
for (Iterator<Rel> it = all.iterator(); it.hasNext(); )
{
if ( ! it.next().isRank()) it.remove();
}
this.setAll(all);
}
// -------------------------------------------- //
// FIELDS
// -------------------------------------------- //
private Rel startRank;
// This must be final, for caching in TypeAbstractChoice to work.
private final Rel startRank;
public Rel getStartRank() { return this.startRank; }
public void setStartRank(Rel startRank) { this.startRank = startRank; }
// -------------------------------------------- //
// OVERRIDE