New access commands
This commit is contained in:
		@@ -11,6 +11,15 @@ public enum Perm implements Identified
 | 
			
		||||
	// ENUM
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	ACCESS_GRANT_ONE,
 | 
			
		||||
	ACCESS_GRANT_FILL,
 | 
			
		||||
	ACCESS_GRANT_SQUARE,
 | 
			
		||||
	ACCESS_GRANT_CIRCLE,
 | 
			
		||||
	ACCESS_DENY_ONE,
 | 
			
		||||
	ACCESS_DENY_FILL,
 | 
			
		||||
	ACCESS_DENY_SQUARE,
 | 
			
		||||
	ACCESS_DENY_CIRCLE,
 | 
			
		||||
 | 
			
		||||
	CLAIM_ONE,
 | 
			
		||||
	CLAIM_AUTO,
 | 
			
		||||
	CLAIM_FILL,
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,11 @@ public class TerritoryAccess
 | 
			
		||||
	public TerritoryAccess withGrantedIds(Collection<String> factionIds) { return valueOf(hostFactionId, hostFactionAllowed, grantedIds); }
 | 
			
		||||
	
 | 
			
		||||
	// The intermediate ones
 | 
			
		||||
	public TerritoryAccess withGranted(MPermable mpermable, boolean with)
 | 
			
		||||
	{
 | 
			
		||||
		return withGrantedId(mpermable.getId(), with);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public TerritoryAccess withGrantedId(String grantedId, boolean with)
 | 
			
		||||
	{
 | 
			
		||||
		if (this.getHostFactionId().equals(grantedId))
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,9 @@ public class CmdFactionsAccess extends FactionsCommand
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public CmdFactionsAccessView cmdFactionsAccessView = new CmdFactionsAccessView();
 | 
			
		||||
	public CmdFactionsAccessPlayer cmdFactionsAccessPlayer = new CmdFactionsAccessPlayer();
 | 
			
		||||
	public CmdFactionsAccessFaction cmdFactionsAccessFaction = new CmdFactionsAccessFaction();
 | 
			
		||||
	public CmdFactionsAccessGrant cmdFactionsAccessGrant = new CmdFactionsAccessGrant();
 | 
			
		||||
	public CmdFactionsAccessDeny cmdFactionsAccessDeny = new CmdFactionsAccessDeny();
 | 
			
		||||
	public CmdFactionsAccessInspect cmdFactionsAccessInspect = new CmdFactionsAccessInspect();
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,16 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.RelationParticipator;
 | 
			
		||||
import com.massivecraft.factions.TerritoryAccess;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm.MPermable;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PSFormatHumanSpace;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public abstract class CmdFactionsAccessAbstract extends FactionsCommand
 | 
			
		||||
@@ -38,18 +36,25 @@ public abstract class CmdFactionsAccessAbstract extends FactionsCommand
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public void perform() throws MassiveException
 | 
			
		||||
	public void senderFields(boolean set)
 | 
			
		||||
	{
 | 
			
		||||
		chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		ta = BoardColl.get().getTerritoryAccessAt(chunk);
 | 
			
		||||
		hostFaction = ta.getHostFaction();
 | 
			
		||||
		
 | 
			
		||||
		this.innerPerform();
 | 
			
		||||
		super.senderFields(set);
 | 
			
		||||
 | 
			
		||||
		if (set)
 | 
			
		||||
		{
 | 
			
		||||
			chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
			ta = BoardColl.get().getTerritoryAccessAt(chunk);
 | 
			
		||||
			hostFaction = ta.getHostFaction();
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			chunk = null;
 | 
			
		||||
			ta = null;
 | 
			
		||||
			hostFaction = null;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public abstract void innerPerform() throws MassiveException;
 | 
			
		||||
 | 
			
		||||
	public void sendAccessInfo()
 | 
			
		||||
	{
 | 
			
		||||
@@ -61,16 +66,37 @@ public abstract class CmdFactionsAccessAbstract extends FactionsCommand
 | 
			
		||||
		msg("<k>Host Faction Allowed: %s", ta.isHostFactionAllowed() ? Txt.parse("<lime>TRUE") : Txt.parse("<rose>FALSE"));
 | 
			
		||||
		msg("<k>Granted to: %s", CmdFactionsPermShow.permablesToDisplayString(ta.getGranteds(), msender));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static String describeRelationParticipators(Collection<? extends RelationParticipator> relationParticipators, RelationParticipator observer)
 | 
			
		||||
 | 
			
		||||
	public void setAccess(Collection<PS> chunks, MPermable mpermable, boolean granted)
 | 
			
		||||
	{
 | 
			
		||||
		if (relationParticipators.size() == 0) return Txt.parse("<silver><em>none");
 | 
			
		||||
		List<String> descriptions = new ArrayList<>();
 | 
			
		||||
		for (RelationParticipator relationParticipator : relationParticipators)
 | 
			
		||||
		{
 | 
			
		||||
			descriptions.add(relationParticipator.describeTo(observer));
 | 
			
		||||
		}
 | 
			
		||||
		return Txt.implodeCommaAnd(descriptions, Txt.parse("<i>, "), Txt.parse(" <i>and "));
 | 
			
		||||
		chunks.forEach(chunk -> setAccess(chunk, mpermable, granted));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	public void setAccess(PS chunk, MPermable mpermable, boolean granted)
 | 
			
		||||
	{
 | 
			
		||||
		TerritoryAccess ta = BoardColl.get().getTerritoryAccessAt(chunk);
 | 
			
		||||
		Faction faction = ta.getHostFaction();
 | 
			
		||||
 | 
			
		||||
		String chunkDesc = chunk.toString(PSFormatHumanSpace.get());
 | 
			
		||||
		String grantedDenied = granted ? "granted" : "denied";
 | 
			
		||||
		String mpermableDesc = mpermable.getDisplayName(msender);
 | 
			
		||||
 | 
			
		||||
		if ( ! MPerm.getPermAccess().has(msender, faction, false))
 | 
			
		||||
		{
 | 
			
		||||
			msg("<b>You do not have permission to edit access at %s<b>.", chunkDesc);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (ta.isGranted(mpermable) == granted)
 | 
			
		||||
		{
 | 
			
		||||
			msg("<b>Access at %s <b>is already %s to %s<b>.", chunkDesc, grantedDenied, mpermableDesc);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ta = ta.withGranted(mpermable, granted);
 | 
			
		||||
		BoardColl.get().setTerritoryAccessAt(chunk, ta);
 | 
			
		||||
 | 
			
		||||
		msg("<i>Access at %s<i> is now %s to %s<i>.", chunkDesc, grantedDenied, mpermableDesc);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								src/com/massivecraft/factions/cmd/CmdFactionsAccessDeny.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/com/massivecraft/factions/cmd/CmdFactionsAccessDeny.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessDeny extends CmdFactionsAccessAbstract
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELDS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetOne cmdFactionsAccessDenyOne = new CmdFactionsAccessSetOne(false);
 | 
			
		||||
	public CmdFactionsAccessSetSquare cmdFactionsAccessDenySquare = new CmdFactionsAccessSetSquare(false);
 | 
			
		||||
	public CmdFactionsAccessSetCircle cmdFactionsAccessDenyCircle = new CmdFactionsAccessSetCircle(false);
 | 
			
		||||
	public CmdFactionsAccessSetFill cmdFactionsAccessDenyFill = new CmdFactionsAccessSetFill(false);
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessDeny()
 | 
			
		||||
	{
 | 
			
		||||
		// Requirements
 | 
			
		||||
		this.addRequirements(RequirementIsPlayer.get());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.cmd.type.TypeFaction;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.command.type.primitive.TypeBooleanYes;
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessFaction extends CmdFactionsAccessAbstract
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public CmdFactionsAccessFaction()
 | 
			
		||||
	{
 | 
			
		||||
		// Parameters
 | 
			
		||||
		this.addParameter(TypeFaction.get(), "faction");
 | 
			
		||||
		this.addParameter(TypeBooleanYes.get(), "yes/no", "toggle");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void innerPerform() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		// Args
 | 
			
		||||
		Faction faction = this.readArg();
 | 
			
		||||
		boolean newValue = this.readArg(!ta.isGranted(faction));
 | 
			
		||||
		
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if (!MPerm.getPermAccess().has(msender, hostFaction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Apply
 | 
			
		||||
		ta = ta.withGrantedId(faction.getId(), newValue);
 | 
			
		||||
		BoardColl.get().setTerritoryAccessAt(chunk, ta);
 | 
			
		||||
		
 | 
			
		||||
		// Inform
 | 
			
		||||
		this.sendAccessInfo();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,26 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessGrant extends CmdFactionsAccessAbstract
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELDS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetOne cmdFactionsAccessGrantOne = new CmdFactionsAccessSetOne(true);
 | 
			
		||||
	public CmdFactionsAccessSetSquare cmdFactionsAccessGrantSquare = new CmdFactionsAccessSetSquare(true);
 | 
			
		||||
	public CmdFactionsAccessSetCircle cmdFactionsAccessGrantCircle = new CmdFactionsAccessSetCircle(true);
 | 
			
		||||
	public CmdFactionsAccessSetFill cmdFactionsAccessGrantFill = new CmdFactionsAccessSetFill(true);
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessGrant()
 | 
			
		||||
	{
 | 
			
		||||
		// Requirements
 | 
			
		||||
		this.addRequirements(RequirementIsPlayer.get());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,96 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.cmd.type.TypeFaction;
 | 
			
		||||
import com.massivecraft.factions.cmd.type.TypeMPermable;
 | 
			
		||||
import com.massivecraft.factions.entity.Board;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm.MPermable;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.collections.MassiveMap;
 | 
			
		||||
import com.massivecraft.massivecore.mixin.MixinWorld;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PSFormatHumanSpace;
 | 
			
		||||
import com.massivecraft.massivecore.util.Txt;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessInspect extends FactionsCommand
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessInspect()
 | 
			
		||||
	{
 | 
			
		||||
		// Parameters
 | 
			
		||||
		this.addParameter(TypeMPermable.get(), "rank/rel/player/faction");
 | 
			
		||||
		this.addParameter(TypeFaction.get(), "faction", "your");
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void perform() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		// Parameter
 | 
			
		||||
		Faction faction = this.readArgAt(1, msenderFaction);
 | 
			
		||||
		MPermable mpermable = TypeMPermable.get(faction).read(this.argAt(0), sender);
 | 
			
		||||
 | 
			
		||||
		String factionId = faction.getId();
 | 
			
		||||
 | 
			
		||||
		// Check if they have access perms, unless they are checking for their own access
 | 
			
		||||
		if (mpermable != msender && mpermable != msenderFaction && mpermable != msender.getRank());
 | 
			
		||||
		{
 | 
			
		||||
			if ( ! MPerm.getPermAccess().has(msender, faction, true)) return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Turn into id->chunks
 | 
			
		||||
		// And filter the ones that are empty
 | 
			
		||||
		Map<String, Set<PS>> world2Chunks = new MassiveMap<>();
 | 
			
		||||
		for (Board board : BoardColl.get().getAll())
 | 
			
		||||
		{
 | 
			
		||||
			String worldId = board.getId();
 | 
			
		||||
			Set<PS> chunks = board.getMap().entrySet().stream()
 | 
			
		||||
				.filter(e -> e.getValue().getHostFactionId().equals(factionId))
 | 
			
		||||
				.filter(e -> e.getValue().isGranted(mpermable))
 | 
			
		||||
				.map(Entry::getKey)
 | 
			
		||||
				.collect(Collectors.toSet());
 | 
			
		||||
			if ( ! chunks.isEmpty()) world2Chunks.put(worldId, chunks);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (world2Chunks.isEmpty())
 | 
			
		||||
		{
 | 
			
		||||
			msg("%s <i>has no special access in <reset>%s <i>.", mpermable.getDisplayName(msender), faction.describeTo(msender));
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		msg("%s <i>has special access in <reset>%s <i> in the following chunks:", mpermable.getDisplayName(msender), faction.describeTo(msender));
 | 
			
		||||
 | 
			
		||||
		for (Entry<String, Set<PS>> entry : world2Chunks.entrySet())
 | 
			
		||||
		{
 | 
			
		||||
			String worldId = entry.getKey();
 | 
			
		||||
			Set<PS> chunks = entry.getValue();
 | 
			
		||||
 | 
			
		||||
			String worldName = MixinWorld.get().getWorldDisplayName(worldId);
 | 
			
		||||
 | 
			
		||||
			// Remove world from chunks
 | 
			
		||||
			List<String> chunkNames = chunks.stream()
 | 
			
		||||
						 .map(PS::getChunkCoords)
 | 
			
		||||
						 .map(PSFormatHumanSpace.get()::format)
 | 
			
		||||
						 .collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
			String chunkDesc = Txt.implodeCommaAnd(chunkNames, Txt.parse("<i>"));
 | 
			
		||||
 | 
			
		||||
			msg("%s<i> (%d): <reset>%s", worldName, chunks.size(), chunkDesc);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.cmd.type.TypeMPlayer;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm;
 | 
			
		||||
import com.massivecraft.factions.entity.MPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.command.type.primitive.TypeBooleanYes;
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessPlayer extends CmdFactionsAccessAbstract
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public CmdFactionsAccessPlayer()
 | 
			
		||||
	{
 | 
			
		||||
		// Parameters
 | 
			
		||||
		this.addParameter(TypeMPlayer.get(), "player");
 | 
			
		||||
		this.addParameter(TypeBooleanYes.get(), "yes/no", "toggle");
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void innerPerform() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		// Args
 | 
			
		||||
		MPlayer mplayer = this.readArg();
 | 
			
		||||
		boolean newValue = this.readArg(!ta.isGranted(mplayer));
 | 
			
		||||
		
 | 
			
		||||
		// MPerm
 | 
			
		||||
		if (!MPerm.getPermAccess().has(msender, hostFaction, true)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Apply
 | 
			
		||||
		ta = ta.withGrantedId(mplayer.getId(), newValue);
 | 
			
		||||
		BoardColl.get().setTerritoryAccessAt(chunk, ta);
 | 
			
		||||
		
 | 
			
		||||
		// Inform
 | 
			
		||||
		this.sendAccessInfo();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,45 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.util.ChunkUtil;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessSetCircle extends CmdFactionsAccessSetXRadius
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetCircle(boolean grant)
 | 
			
		||||
	{
 | 
			
		||||
		// Super
 | 
			
		||||
		super(grant);
 | 
			
		||||
		
 | 
			
		||||
		// Aliases
 | 
			
		||||
		this.addAliases("circle");
 | 
			
		||||
		
 | 
			
		||||
		// Requirements
 | 
			
		||||
		this.addRequirements(RequirementIsPlayer.get());
 | 
			
		||||
		Perm perm = grant ? Perm.ACCESS_GRANT_CIRCLE : Perm.ACCESS_DENY_CIRCLE;
 | 
			
		||||
		this.addRequirements(RequirementHasPerm.get(perm));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<PS> getChunks() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		// Common Startup
 | 
			
		||||
		final PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		return ChunkUtil.getChunksCircle(chunk, this.getRadius());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,57 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.predicate.Predicate;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.util.ChunkUtil;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessSetFill extends CmdFactionsAccessSetXSimple
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetFill(boolean claim)
 | 
			
		||||
	{
 | 
			
		||||
		// Super
 | 
			
		||||
		super(claim);
 | 
			
		||||
		
 | 
			
		||||
		// Aliases
 | 
			
		||||
		this.addAliases("fill");
 | 
			
		||||
		
 | 
			
		||||
		// Requirements
 | 
			
		||||
		this.addRequirements(RequirementIsPlayer.get());
 | 
			
		||||
		Perm perm = claim ? Perm.ACCESS_GRANT_FILL : Perm.ACCESS_DENY_FILL;
 | 
			
		||||
		this.addRequirements(RequirementHasPerm.get(perm));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<PS> getChunks() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		// Common Startup
 | 
			
		||||
		final PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		
 | 
			
		||||
		// What faction (aka color) resides there?
 | 
			
		||||
		// NOTE: Wilderness/None is valid. 
 | 
			
		||||
		final Faction color = BoardColl.get().getFactionAt(chunk);
 | 
			
		||||
		
 | 
			
		||||
		// Calculate
 | 
			
		||||
		int max = MConf.get().setFillMax;
 | 
			
		||||
		Predicate<PS> matcher = ps -> BoardColl.get().getFactionAt(ps) == color;
 | 
			
		||||
		return ChunkUtil.getChunkArea(chunk, matcher, max);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,44 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessSetOne extends CmdFactionsAccessSetXSimple
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetOne(boolean claim)
 | 
			
		||||
	{
 | 
			
		||||
		// Super
 | 
			
		||||
		super(claim);
 | 
			
		||||
		
 | 
			
		||||
		// Aliases
 | 
			
		||||
		this.addAliases("one");
 | 
			
		||||
 | 
			
		||||
		// Requirements
 | 
			
		||||
		this.addRequirements(RequirementIsPlayer.get());
 | 
			
		||||
		Perm perm = claim ? Perm.ACCESS_GRANT_ONE : Perm.ACCESS_DENY_ONE;
 | 
			
		||||
		this.addRequirements(RequirementHasPerm.get(perm));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<PS> getChunks()
 | 
			
		||||
	{
 | 
			
		||||
		final PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		final Set<PS> chunks = Collections.singleton(chunk);
 | 
			
		||||
		return chunks;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,45 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.util.ChunkUtil;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class CmdFactionsAccessSetSquare extends CmdFactionsAccessSetXRadius
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetSquare(boolean grant)
 | 
			
		||||
	{
 | 
			
		||||
		// Super
 | 
			
		||||
		super(grant);
 | 
			
		||||
		
 | 
			
		||||
		// Aliases
 | 
			
		||||
		this.addAliases("square");
 | 
			
		||||
		
 | 
			
		||||
		// Requirements
 | 
			
		||||
		this.addRequirements(RequirementIsPlayer.get());
 | 
			
		||||
		Perm perm = grant ? Perm.ACCESS_GRANT_SQUARE : Perm.ACCESS_DENY_SQUARE;
 | 
			
		||||
		this.addRequirements(RequirementHasPerm.get(perm));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public Set<PS> getChunks() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		// Common Startup
 | 
			
		||||
		final PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		return ChunkUtil.getChunksSquare(chunk, this.getRadius());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										68
									
								
								src/com/massivecraft/factions/cmd/CmdFactionsAccessSetX.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/com/massivecraft/factions/cmd/CmdFactionsAccessSetX.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.cmd.type.TypeMPermable;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MPerm.MPermable;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public abstract class CmdFactionsAccessSetX extends CmdFactionsAccessAbstract
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FIELDS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	private boolean grant = true;
 | 
			
		||||
	public boolean isGranting() { return this.grant; }
 | 
			
		||||
	public void setGranting(boolean grant) { this.grant = grant; }
 | 
			
		||||
 | 
			
		||||
	private int mpermableArgIndex = 0;
 | 
			
		||||
	public int getMPermableArgIndex() { return this.mpermableArgIndex; }
 | 
			
		||||
	public void setMPermableArgIndex(int mpermableArgIndex) { this.mpermableArgIndex = mpermableArgIndex; }
 | 
			
		||||
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetX(boolean grant)
 | 
			
		||||
	{
 | 
			
		||||
		this.setGranting(grant);
 | 
			
		||||
		this.setSetupEnabled(false);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OVERRIDE
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void perform() throws MassiveException
 | 
			
		||||
	{	
 | 
			
		||||
		// Args
 | 
			
		||||
		final MPermable mpermable = this.getMPermable(hostFaction);
 | 
			
		||||
 | 
			
		||||
		final Set<PS> chunks = this.getChunks();
 | 
			
		||||
		if (chunks == null) throw new NullPointerException("chunks");
 | 
			
		||||
 | 
			
		||||
		// Apply / Inform
 | 
			
		||||
		setAccess(chunks, mpermable, this.isGranting());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// ABSTRACT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public abstract Set<PS> getChunks() throws MassiveException;
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// EXTRAS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public MPermable getMPermable(Faction faction) throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		String arg = this.argAt(this.getMPermableArgIndex());
 | 
			
		||||
		return TypeMPermable.get(faction).read(arg, sender);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,51 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.cmd.type.TypeMPermable;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.command.type.primitive.TypeInteger;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public abstract class CmdFactionsAccessSetXRadius extends CmdFactionsAccessSetX
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetXRadius(boolean claim)
 | 
			
		||||
	{
 | 
			
		||||
		// Super
 | 
			
		||||
		super(claim);
 | 
			
		||||
		
 | 
			
		||||
		// Parameters
 | 
			
		||||
		this.addParameter(TypeInteger.get(), "radius");
 | 
			
		||||
 | 
			
		||||
		this.addParameter(TypeMPermable.get(), "rank/rel/faction/player");
 | 
			
		||||
		this.setMPermableArgIndex(1);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// EXTRAS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public Integer getRadius() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		int radius = this.readArgAt(0);
 | 
			
		||||
		
 | 
			
		||||
		// Radius Claim Min
 | 
			
		||||
		if (radius < 1)
 | 
			
		||||
		{
 | 
			
		||||
			throw new MassiveException().setMsg("<b>If you specify a radius, it must be at least 1.");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Radius Claim Max
 | 
			
		||||
		if (radius > MConf.get().setRadiusMax && ! msender.isOverriding())
 | 
			
		||||
		{
 | 
			
		||||
			throw new MassiveException().setMsg("<b>The maximum radius allowed is <h>%s<b>.", MConf.get().setRadiusMax);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return radius;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,21 @@
 | 
			
		||||
package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.cmd.type.TypeMPermable;
 | 
			
		||||
 | 
			
		||||
public abstract class CmdFactionsAccessSetXSimple extends CmdFactionsAccessSetX
 | 
			
		||||
{
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// CONSTRUCT
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
 | 
			
		||||
	public CmdFactionsAccessSetXSimple(boolean claim)
 | 
			
		||||
	{
 | 
			
		||||
		// Super
 | 
			
		||||
		super(claim);
 | 
			
		||||
		
 | 
			
		||||
		// Parameters
 | 
			
		||||
		this.addParameter(TypeMPermable.get(), "rank/rel/player/faction");
 | 
			
		||||
		this.setMPermableArgIndex(0);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
@@ -7,7 +7,7 @@ public class CmdFactionsAccessView extends CmdFactionsAccessAbstract
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void innerPerform()
 | 
			
		||||
	public void perform()
 | 
			
		||||
	{
 | 
			
		||||
		this.sendAccessInfo();
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,11 @@ package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.collections.MassiveSet;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.util.ChunkUtil;
 | 
			
		||||
 | 
			
		||||
import java.util.LinkedHashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -44,27 +43,7 @@ public class CmdFactionsSetCircle extends CmdFactionsSetXRadius
 | 
			
		||||
	{
 | 
			
		||||
		// Common Startup
 | 
			
		||||
		final PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		final Set<PS> chunks = new MassiveSet<>();
 | 
			
		||||
		
 | 
			
		||||
		chunks.add(chunk); // The center should come first for pretty messages
 | 
			
		||||
		
 | 
			
		||||
		Integer radiusZero = this.getRadiusZero();
 | 
			
		||||
		double radiusSquared = radiusZero * radiusZero;
 | 
			
		||||
		
 | 
			
		||||
		for (int dx = -radiusZero; dx <= radiusZero; dx++)
 | 
			
		||||
		{
 | 
			
		||||
			for (int dz = -radiusZero; dz <= radiusZero; dz++)
 | 
			
		||||
			{
 | 
			
		||||
				if (dx*dx + dz*dz > radiusSquared) continue;
 | 
			
		||||
				
 | 
			
		||||
				int x = chunk.getChunkX() + dx;
 | 
			
		||||
				int z = chunk.getChunkZ() + dz;
 | 
			
		||||
				
 | 
			
		||||
				chunks.add(chunk.withChunkX(x).withChunkZ(z));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return chunks;
 | 
			
		||||
		return ChunkUtil.getChunksCircle(chunk, this.getRadius());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -5,11 +5,11 @@ import com.massivecraft.factions.entity.BoardColl;
 | 
			
		||||
import com.massivecraft.factions.entity.Faction;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.collections.MassiveSet;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.predicate.Predicate;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.util.MUtil;
 | 
			
		||||
import com.massivecraft.massivecore.util.ChunkUtil;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
@@ -47,69 +47,15 @@ public class CmdFactionsSetFill extends CmdFactionsSetXSimple
 | 
			
		||||
	{
 | 
			
		||||
		// Common Startup
 | 
			
		||||
		final PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		final Set<PS> chunks = new MassiveSet<>();
 | 
			
		||||
		
 | 
			
		||||
		// What faction (aka color) resides there?
 | 
			
		||||
		// NOTE: Wilderness/None is valid. 
 | 
			
		||||
		final Faction color = BoardColl.get().getFactionAt(chunk);
 | 
			
		||||
		
 | 
			
		||||
		// We start where we are!
 | 
			
		||||
		chunks.add(chunk);
 | 
			
		||||
		
 | 
			
		||||
		// Flood!
 | 
			
		||||
		// Calculate
 | 
			
		||||
		int max = MConf.get().setFillMax;
 | 
			
		||||
		floodSearch(chunks, color, max);
 | 
			
		||||
		
 | 
			
		||||
		// Limit Reached?
 | 
			
		||||
		if (chunks.size() >= max)
 | 
			
		||||
		{
 | 
			
		||||
			throw new MassiveException().addMsg("<b>Fill limit of <h>%d <b>reached.", max);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// OK!
 | 
			
		||||
		return chunks;
 | 
			
		||||
		Predicate<PS> matcher = ps -> BoardColl.get().getFactionAt(ps) == color;
 | 
			
		||||
		return ChunkUtil.getChunkArea(chunk, matcher, max);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// FLOOD FILL
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public static void floodSearch(Set<PS> set, Faction color, int max)
 | 
			
		||||
	{
 | 
			
		||||
		// Clean
 | 
			
		||||
		if (set == null) throw new NullPointerException("set");
 | 
			
		||||
		if (color == null) throw new NullPointerException("color");
 | 
			
		||||
		
 | 
			
		||||
		// Expand
 | 
			
		||||
		Set<PS> expansion = new MassiveSet<>();
 | 
			
		||||
		for (PS chunk : set)
 | 
			
		||||
		{
 | 
			
		||||
			Set<PS> neighbours = MUtil.set(
 | 
			
		||||
				chunk.withChunkX(chunk.getChunkX() + 1),
 | 
			
		||||
				chunk.withChunkX(chunk.getChunkX() - 1),
 | 
			
		||||
				chunk.withChunkZ(chunk.getChunkZ() + 1),
 | 
			
		||||
				chunk.withChunkZ(chunk.getChunkZ() - 1)
 | 
			
		||||
			);
 | 
			
		||||
			
 | 
			
		||||
			for (PS neighbour : neighbours)
 | 
			
		||||
			{
 | 
			
		||||
				if (set.contains(neighbour)) continue;
 | 
			
		||||
				Faction faction = BoardColl.get().getFactionAt(neighbour);
 | 
			
		||||
				if (faction == null) continue;
 | 
			
		||||
				if (faction != color) continue;
 | 
			
		||||
				expansion.add(neighbour);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		set.addAll(expansion);
 | 
			
		||||
		
 | 
			
		||||
		// No Expansion?
 | 
			
		||||
		if (expansion.isEmpty()) return;
 | 
			
		||||
		
 | 
			
		||||
		// Reached Max?
 | 
			
		||||
		if (set.size() >= max) return;
 | 
			
		||||
		
 | 
			
		||||
		// Recurse
 | 
			
		||||
		floodSearch(set, color, max);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,12 +2,11 @@ package com.massivecraft.factions.cmd;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Perm;
 | 
			
		||||
import com.massivecraft.massivecore.MassiveException;
 | 
			
		||||
import com.massivecraft.massivecore.collections.MassiveSet;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
 | 
			
		||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
 | 
			
		||||
import com.massivecraft.massivecore.ps.PS;
 | 
			
		||||
import com.massivecraft.massivecore.util.ChunkUtil;
 | 
			
		||||
 | 
			
		||||
import java.util.LinkedHashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -44,24 +43,7 @@ public class CmdFactionsSetSquare extends CmdFactionsSetXRadius
 | 
			
		||||
	{
 | 
			
		||||
		// Common Startup
 | 
			
		||||
		final PS chunk = PS.valueOf(me.getLocation()).getChunk(true);
 | 
			
		||||
		final Set<PS> chunks = new MassiveSet<>();
 | 
			
		||||
		
 | 
			
		||||
		chunks.add(chunk); // The center should come first for pretty messages
 | 
			
		||||
		
 | 
			
		||||
		Integer radiusZero = this.getRadiusZero();
 | 
			
		||||
 | 
			
		||||
		for (int dx = -radiusZero; dx <= radiusZero; dx++)
 | 
			
		||||
		{
 | 
			
		||||
			for (int dz = -radiusZero; dz <= radiusZero; dz++)
 | 
			
		||||
			{
 | 
			
		||||
				int x = chunk.getChunkX() + dx;
 | 
			
		||||
				int z = chunk.getChunkZ() + dz;
 | 
			
		||||
				
 | 
			
		||||
				chunks.add(chunk.withChunkX(x).withChunkZ(z));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return chunks;
 | 
			
		||||
		return ChunkUtil.getChunksSquare(chunk, this.getRadius());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -49,10 +49,4 @@ public abstract class CmdFactionsSetXRadius extends CmdFactionsSetX
 | 
			
		||||
		return radius;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public Integer getRadiusZero() throws MassiveException
 | 
			
		||||
	{
 | 
			
		||||
		Integer ret = this.getRadius();
 | 
			
		||||
		return ret - 1;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user