Re-add promote/demote options to rank set
This commit is contained in:
parent
abc27821f4
commit
bcae649e0e
@ -105,7 +105,7 @@ public class CmdFactionsRankSet extends FactionsCommand
|
|||||||
private void registerFields() throws MassiveException
|
private void registerFields() throws MassiveException
|
||||||
{
|
{
|
||||||
// Getting the target and faction.
|
// Getting the target and faction.
|
||||||
target = this.readArg(msender);
|
target = this.readArg();
|
||||||
targetFaction = target.getFaction();
|
targetFaction = target.getFaction();
|
||||||
|
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ public class CmdFactionsRankSet extends FactionsCommand
|
|||||||
factionChange = (endFaction != targetFaction);
|
factionChange = (endFaction != targetFaction);
|
||||||
|
|
||||||
// Rank if any passed.
|
// Rank if any passed.
|
||||||
TypeRank typeRank = new TypeRank(endFaction);
|
TypeRank typeRank = new TypeRank(endFaction, target.getRank());
|
||||||
rank = typeRank.read(this.argAt(1), sender);
|
rank = typeRank.read(this.argAt(1), sender);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,12 @@ package com.massivecraft.factions.cmd.type;
|
|||||||
|
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.factions.entity.Rank;
|
import com.massivecraft.factions.entity.Rank;
|
||||||
import com.massivecraft.massivecore.util.MUtil;
|
import com.massivecraft.massivecore.collections.MassiveList;
|
||||||
|
import com.massivecraft.massivecore.collections.MassiveSet;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class TypeRank extends TypeEntityInternalFaction<Rank>
|
public class TypeRank extends TypeEntityInternalFaction<Rank>
|
||||||
@ -18,14 +21,28 @@ public class TypeRank extends TypeEntityInternalFaction<Rank>
|
|||||||
private TypeRank()
|
private TypeRank()
|
||||||
{
|
{
|
||||||
super(Rank.class);
|
super(Rank.class);
|
||||||
|
this.currentRank = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TypeRank get(Faction faction) { return new TypeRank(faction); }
|
@Deprecated public static TypeRank get(Faction faction) { return new TypeRank(faction, null); }
|
||||||
public TypeRank(Faction faction)
|
@Deprecated public TypeRank(Faction faction)
|
||||||
|
{
|
||||||
|
this(faction, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TypeRank get(Faction faction, Rank rank) { return new TypeRank(faction, rank); }
|
||||||
|
public TypeRank(Faction faction, Rank rank)
|
||||||
{
|
{
|
||||||
super(Rank.class, faction);
|
super(Rank.class, faction);
|
||||||
|
this.currentRank = rank;
|
||||||
|
|
||||||
|
// When setAll is done in the super constructor some optimisations are done
|
||||||
|
// which don't take the promote/demote thing into account.
|
||||||
|
this.setAll(this.getAll(faction));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final Rank currentRank;
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// OVERRIDE
|
// OVERRIDE
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -36,10 +53,59 @@ public class TypeRank extends TypeEntityInternalFaction<Rank>
|
|||||||
return faction.getRanks().getAll();
|
return faction.getRanks().getAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<String> getTabList(CommandSender sender, String arg)
|
||||||
|
{
|
||||||
|
List<String> ret = new MassiveList<>(super.getTabList(sender, arg));
|
||||||
|
ret.add("promote");
|
||||||
|
ret.add("demote");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getNamesInner(Rank value)
|
public Set<String> getNamesInner(Rank value)
|
||||||
{
|
{
|
||||||
return MUtil.set(value.getName(), value.getPrefix() + value.getName());
|
Set<String> names = new MassiveSet<>();
|
||||||
|
names.add(value.getName());
|
||||||
|
|
||||||
|
if (this.currentRank != null)
|
||||||
|
{
|
||||||
|
// You can't use "promote" to make someone leader.
|
||||||
|
Rank promote = getPromote(currentRank);
|
||||||
|
if (value == promote && !promote.isLeader()) names.add("promote");
|
||||||
|
|
||||||
|
if (value == getDemote(currentRank)) names.add("demote");
|
||||||
|
}
|
||||||
|
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Rank getPromote(Rank rank)
|
||||||
|
{
|
||||||
|
Rank ret = null;
|
||||||
|
for (Rank r : rank.getFaction().getRanks().getAll())
|
||||||
|
{
|
||||||
|
if (rank == r) continue;
|
||||||
|
if (rank.isMoreThan(r)) continue;
|
||||||
|
if (ret != null && ret.isLessThan(r)) continue;
|
||||||
|
|
||||||
|
ret = r;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Rank getDemote(Rank rank)
|
||||||
|
{
|
||||||
|
Rank ret = null;
|
||||||
|
for (Rank r : rank.getFaction().getRanks().getAll())
|
||||||
|
{
|
||||||
|
if (rank == r) continue;
|
||||||
|
if (rank.isLessThan(r)) continue;
|
||||||
|
if (ret != null && ret.isMoreThan(r)) continue;
|
||||||
|
|
||||||
|
ret = r;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user