Re-add promote/demote options to rank set
This commit is contained in:
		@@ -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;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user