Add option to enforce a minimum claim size for automatically-generated claims (#1037)

This commit is contained in:
Adam 2020-10-02 12:02:37 -04:00 committed by GitHub
parent 6e055c90c3
commit 74700dc3de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 9 deletions

View File

@ -334,7 +334,7 @@ public class BlockEventHandler implements Listener
else else
{ {
//if failure due to insufficient claim blocks available //if failure due to insufficient claim blocks available
if (playerData.getRemainingClaimBlocks() < 1) if (playerData.getRemainingClaimBlocks() < Math.pow(1 + 2 * GriefPrevention.instance.config_claims_automaticClaimsForNewPlayersRadiusMin, 2))
{ {
GriefPrevention.sendMessage(player, TextMode.Warn, Messages.NoEnoughBlocksForChestClaim); GriefPrevention.sendMessage(player, TextMode.Warn, Messages.NoEnoughBlocksForChestClaim);
return; return;
@ -343,7 +343,7 @@ public class BlockEventHandler implements Listener
//as long as the automatic claim overlaps another existing claim, shrink it //as long as the automatic claim overlaps another existing claim, shrink it
//note that since the player had permission to place the chest, at the very least, the automatic claim will include the chest //note that since the player had permission to place the chest, at the very least, the automatic claim will include the chest
CreateClaimResult result = null; CreateClaimResult result = null;
while (radius >= 0) while (radius >= GriefPrevention.instance.config_claims_automaticClaimsForNewPlayersRadiusMin)
{ {
int area = (radius * 2 + 1) * (radius * 2 + 1); int area = (radius * 2 + 1) * (radius * 2 + 1);
if (playerData.getRemainingClaimBlocks() >= area) if (playerData.getRemainingClaimBlocks() >= area)
@ -363,14 +363,26 @@ public class BlockEventHandler implements Listener
radius--; radius--;
} }
if (result != null && result.succeeded) if (result != null && result.claim != null)
{ {
//notify and explain to player if (result.succeeded)
GriefPrevention.sendMessage(player, TextMode.Success, Messages.AutomaticClaimNotification); {
//notify and explain to player
GriefPrevention.sendMessage(player, TextMode.Success, Messages.AutomaticClaimNotification);
//show the player the protected area //show the player the protected area
Visualization visualization = Visualization.FromClaim(result.claim, block.getY(), VisualizationType.Claim, player.getLocation()); Visualization visualization = Visualization.FromClaim(result.claim, block.getY(), VisualizationType.Claim, player.getLocation());
Visualization.Apply(player, visualization); Visualization.Apply(player, visualization);
}
else
{
//notify and explain to player
GriefPrevention.sendMessage(player, TextMode.Err, Messages.AutomaticClaimOtherClaimTooClose);
//show the player the protected area
Visualization visualization = Visualization.FromClaim(result.claim, block.getY(), VisualizationType.ErrorClaim, player.getLocation());
Visualization.Apply(player, visualization);
}
} }
} }

View File

@ -1574,6 +1574,7 @@ public abstract class DataStore
this.addDefault(defaults, Messages.TooDeepToClaim, "This chest can't be protected because it's too deep underground. Consider moving it.", null); this.addDefault(defaults, Messages.TooDeepToClaim, "This chest can't be protected because it's too deep underground. Consider moving it.", null);
this.addDefault(defaults, Messages.ChestClaimConfirmation, "This chest is protected.", null); this.addDefault(defaults, Messages.ChestClaimConfirmation, "This chest is protected.", null);
this.addDefault(defaults, Messages.AutomaticClaimNotification, "This chest and nearby blocks are protected from breakage and theft.", null); this.addDefault(defaults, Messages.AutomaticClaimNotification, "This chest and nearby blocks are protected from breakage and theft.", null);
this.addDefault(defaults, Messages.AutomaticClaimOtherClaimTooClose, "Cannot create a claim for your chest, there is another claim too close!", null);
this.addDefault(defaults, Messages.UnprotectedChestWarning, "This chest is NOT protected. Consider using a golden shovel to expand an existing claim or to create a new one.", null); this.addDefault(defaults, Messages.UnprotectedChestWarning, "This chest is NOT protected. Consider using a golden shovel to expand an existing claim or to create a new one.", null);
this.addDefault(defaults, Messages.ThatPlayerPvPImmune, "You can't injure defenseless players.", null); this.addDefault(defaults, Messages.ThatPlayerPvPImmune, "You can't injure defenseless players.", null);
this.addDefault(defaults, Messages.CantFightWhileImmune, "You can't fight someone while you're protected from PvP.", null); this.addDefault(defaults, Messages.CantFightWhileImmune, "You can't fight someone while you're protected from PvP.", null);

View File

@ -118,7 +118,8 @@ public class GriefPrevention extends JavaPlugin
public int config_claims_expirationExemptionTotalBlocks; //total claim blocks amount which will exempt a player from claim expiration public int config_claims_expirationExemptionTotalBlocks; //total claim blocks amount which will exempt a player from claim expiration
public int config_claims_expirationExemptionBonusBlocks; //bonus claim blocks amount which will exempt a player from claim expiration public int config_claims_expirationExemptionBonusBlocks; //bonus claim blocks amount which will exempt a player from claim expiration
public int config_claims_automaticClaimsForNewPlayersRadius; //how big automatic new player claims (when they place a chest) should be. 0 to disable public int config_claims_automaticClaimsForNewPlayersRadius; //how big automatic new player claims (when they place a chest) should be. -1 to disable
public int config_claims_automaticClaimsForNewPlayersRadiusMin; //how big automatic new player claims must be. 0 to disable
public int config_claims_claimsExtendIntoGroundDistance; //how far below the shoveled block a new claim will reach public int config_claims_claimsExtendIntoGroundDistance; //how far below the shoveled block a new claim will reach
public int config_claims_minWidth; //minimum width for non-admin claims public int config_claims_minWidth; //minimum width for non-admin claims
public int config_claims_minArea; //minimum area for non-admin claims public int config_claims_minArea; //minimum area for non-admin claims
@ -570,6 +571,7 @@ public class GriefPrevention extends JavaPlugin
this.config_claims_accruedIdlePercent = config.getInt("GriefPrevention.Claims.AccruedIdlePercent", 0); this.config_claims_accruedIdlePercent = config.getInt("GriefPrevention.Claims.AccruedIdlePercent", 0);
this.config_claims_abandonReturnRatio = config.getDouble("GriefPrevention.Claims.AbandonReturnRatio", 1.0D); this.config_claims_abandonReturnRatio = config.getDouble("GriefPrevention.Claims.AbandonReturnRatio", 1.0D);
this.config_claims_automaticClaimsForNewPlayersRadius = config.getInt("GriefPrevention.Claims.AutomaticNewPlayerClaimsRadius", 4); this.config_claims_automaticClaimsForNewPlayersRadius = config.getInt("GriefPrevention.Claims.AutomaticNewPlayerClaimsRadius", 4);
this.config_claims_automaticClaimsForNewPlayersRadiusMin = Math.max(0, config.getInt("GriefPrevention.Claims.AutomaticNewPlayerClaimsRadiusMinimum", 0));
this.config_claims_claimsExtendIntoGroundDistance = Math.abs(config.getInt("GriefPrevention.Claims.ExtendIntoGroundDistance", 5)); this.config_claims_claimsExtendIntoGroundDistance = Math.abs(config.getInt("GriefPrevention.Claims.ExtendIntoGroundDistance", 5));
this.config_claims_minWidth = config.getInt("GriefPrevention.Claims.MinimumWidth", 5); this.config_claims_minWidth = config.getInt("GriefPrevention.Claims.MinimumWidth", 5);
this.config_claims_minArea = config.getInt("GriefPrevention.Claims.MinimumArea", 100); this.config_claims_minArea = config.getInt("GriefPrevention.Claims.MinimumArea", 100);

View File

@ -101,6 +101,7 @@ public enum Messages
TooDeepToClaim, TooDeepToClaim,
ChestClaimConfirmation, ChestClaimConfirmation,
AutomaticClaimNotification, AutomaticClaimNotification,
AutomaticClaimOtherClaimTooClose,
UnprotectedChestWarning, UnprotectedChestWarning,
ThatPlayerPvPImmune, ThatPlayerPvPImmune,
CantFightWhileImmune, CantFightWhileImmune,