Add factions top
This commit is contained in:
		@@ -92,6 +92,7 @@ permissions:
 | 
				
			|||||||
  factions.title: {description: set player title, default: false}
 | 
					  factions.title: {description: set player title, default: false}
 | 
				
			||||||
  factions.title.color: {description: set player title with color, default: false}
 | 
					  factions.title.color: {description: set player title with color, default: false}
 | 
				
			||||||
  factions.territorytitles: {description: toggle territory titles, default: false}
 | 
					  factions.territorytitles: {description: toggle territory titles, default: false}
 | 
				
			||||||
 | 
					  factions.top: {description: show faction top, default: false}
 | 
				
			||||||
  factions.unclaim: {description: unclaim faction territory, default: false}
 | 
					  factions.unclaim: {description: unclaim faction territory, default: false}
 | 
				
			||||||
  factions.unclaim.one: {description: unclaim a single chunk, default: false}
 | 
					  factions.unclaim.one: {description: unclaim a single chunk, default: false}
 | 
				
			||||||
  factions.unclaim.auto: {description: unclaim as you walk around, default: false}
 | 
					  factions.unclaim.auto: {description: unclaim as you walk around, default: false}
 | 
				
			||||||
@@ -202,6 +203,7 @@ permissions:
 | 
				
			|||||||
      factions.title: true
 | 
					      factions.title: true
 | 
				
			||||||
      factions.title.color: true
 | 
					      factions.title.color: true
 | 
				
			||||||
      factions.territorytitles: true
 | 
					      factions.territorytitles: true
 | 
				
			||||||
 | 
					      factions.top: true
 | 
				
			||||||
      factions.unclaim: true
 | 
					      factions.unclaim: true
 | 
				
			||||||
      factions.unclaim.one: true
 | 
					      factions.unclaim.one: true
 | 
				
			||||||
      factions.unclaim.auto: true
 | 
					      factions.unclaim.auto: true
 | 
				
			||||||
@@ -333,6 +335,7 @@ permissions:
 | 
				
			|||||||
      factions.title: true
 | 
					      factions.title: true
 | 
				
			||||||
      factions.title.color: true
 | 
					      factions.title.color: true
 | 
				
			||||||
      factions.territorytitles: true
 | 
					      factions.territorytitles: true
 | 
				
			||||||
 | 
					      factions.top: true
 | 
				
			||||||
      factions.unclaim: true
 | 
					      factions.unclaim: true
 | 
				
			||||||
      factions.unclaim.one: true
 | 
					      factions.unclaim.one: true
 | 
				
			||||||
      factions.unclaim.auto: true
 | 
					      factions.unclaim.auto: true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,6 +93,7 @@ public enum Perm implements Identified
 | 
				
			|||||||
	TITLE,
 | 
						TITLE,
 | 
				
			||||||
	TITLE_COLOR,
 | 
						TITLE_COLOR,
 | 
				
			||||||
	TERRITORYTITLES,
 | 
						TERRITORYTITLES,
 | 
				
			||||||
 | 
						TOP,
 | 
				
			||||||
	UNCLAIM,
 | 
						UNCLAIM,
 | 
				
			||||||
	UNCLAIM_ONE,
 | 
						UNCLAIM_ONE,
 | 
				
			||||||
	UNCLAIM_AUTO,
 | 
						UNCLAIM_AUTO,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,6 +40,7 @@ public class CmdFactions extends FactionsCommand
 | 
				
			|||||||
	public CmdFactionsTitle cmdFactionsTitle = new CmdFactionsTitle();
 | 
						public CmdFactionsTitle cmdFactionsTitle = new CmdFactionsTitle();
 | 
				
			||||||
	public CmdFactionsRank cmdFactionsRank = new CmdFactionsRank();
 | 
						public CmdFactionsRank cmdFactionsRank = new CmdFactionsRank();
 | 
				
			||||||
	public CmdFactionsMoney cmdFactionsMoney = new CmdFactionsMoney();
 | 
						public CmdFactionsMoney cmdFactionsMoney = new CmdFactionsMoney();
 | 
				
			||||||
 | 
						public CmdFactionsTop cmdFactionsTop = new CmdFactionsTop();
 | 
				
			||||||
	public CmdFactionsSeeChunk cmdFactionsSeeChunk = new CmdFactionsSeeChunk();
 | 
						public CmdFactionsSeeChunk cmdFactionsSeeChunk = new CmdFactionsSeeChunk();
 | 
				
			||||||
	public CmdFactionsSeeChunkOld cmdFactionsSeeChunkOld = new CmdFactionsSeeChunkOld();
 | 
						public CmdFactionsSeeChunkOld cmdFactionsSeeChunkOld = new CmdFactionsSeeChunkOld();
 | 
				
			||||||
	public CmdFactionsTerritorytitles cmdFactionsTerritorytitles = new CmdFactionsTerritorytitles();
 | 
						public CmdFactionsTerritorytitles cmdFactionsTerritorytitles = new CmdFactionsTerritorytitles();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										112
									
								
								src/com/massivecraft/factions/cmd/CmdFactionsTop.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								src/com/massivecraft/factions/cmd/CmdFactionsTop.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
				
			|||||||
 | 
					package com.massivecraft.factions.cmd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.Faction;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.FactionColl;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.entity.MPlayer;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.integration.Econ;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.MassiveException;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.command.Parameter;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.command.type.enumeration.TypeEnum;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.money.Money;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.pager.Pager;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.pager.Stringifier;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.TimeDiffUtil;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.TimeUnit;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.Txt;
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.command.CommandSender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.LinkedHashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class CmdFactionsTop extends FactionsCommand
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// CONSTRUCT
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public CmdFactionsTop()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// Parameters
 | 
				
			||||||
 | 
							this.addParameter(new TypeEnum<>(TopCategory.class));
 | 
				
			||||||
 | 
							this.addParameter(Parameter.getPage());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// OVERRIDE
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public void perform() throws MassiveException
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// Args
 | 
				
			||||||
 | 
							TopCategory category = this.readArg();
 | 
				
			||||||
 | 
							int page = this.readArg();
 | 
				
			||||||
 | 
							final CommandSender sender = this.sender;
 | 
				
			||||||
 | 
							final MPlayer msender = this.msender;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (category == TopCategory.MONEY && !Econ.isEnabled())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								throw new MassiveException().addMsg("<b>Economy is not enabled.");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Pager<Faction> pager = new Pager<>(this, "Faction top", page);
 | 
				
			||||||
 | 
							pager.setMsonifier((Stringifier<Faction>) (f, i) -> getValue(category, f, msender));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// NOTE: The faction list is quite slow and mostly thread safe.
 | 
				
			||||||
 | 
							// We run it asynchronously to spare the primary server thread.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Bukkit.getScheduler().runTaskAsynchronously(Factions.get(), new Runnable()
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								@Override
 | 
				
			||||||
 | 
								public void run()
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									// Pager Items
 | 
				
			||||||
 | 
									List<Faction> factions = FactionColl.get().getAll((f1, f2) -> (int) (getNumber(category, f2) - getNumber(category, f1)));
 | 
				
			||||||
 | 
									pager.setItems(factions);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// Pager Message
 | 
				
			||||||
 | 
									pager.message();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static double getNumber(TopCategory category, Faction faction)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							switch(category)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								case MONEY: return Money.get(faction);
 | 
				
			||||||
 | 
								case MEMBERS: return faction.getMPlayers().size();
 | 
				
			||||||
 | 
								case TERRITORY: return faction.getLandCount();
 | 
				
			||||||
 | 
								case AGE: return faction.getAge();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							throw new RuntimeException();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static String getValue(TopCategory category, Faction faction, MPlayer mplayer)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							String ret = Txt.parse("%s<i>: ", faction.getName(mplayer));
 | 
				
			||||||
 | 
							switch(category)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								case MONEY: ret += Money.format(Money.get(faction), true); break;
 | 
				
			||||||
 | 
								case MEMBERS: ret += faction.getMPlayers().size() + " members"; break;
 | 
				
			||||||
 | 
								case TERRITORY: ret += faction.getLandCount() + " chunks"; break;
 | 
				
			||||||
 | 
								case AGE:
 | 
				
			||||||
 | 
									long ageMillis = faction.getAge();
 | 
				
			||||||
 | 
									LinkedHashMap<TimeUnit, Long> ageUnitcounts = TimeDiffUtil.limit(TimeDiffUtil.unitcounts(ageMillis, TimeUnit.getAllButMillis()), 3);
 | 
				
			||||||
 | 
									ret += TimeDiffUtil.formatedVerboose(ageUnitcounts);
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public enum TopCategory
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							MONEY,
 | 
				
			||||||
 | 
							MEMBERS,
 | 
				
			||||||
 | 
							TERRITORY,
 | 
				
			||||||
 | 
							AGE,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user