Fix claim create limit checks not using type.

* Fix lava/water not forming cobblestone.
This commit is contained in:
bloodshot 2020-05-01 19:53:47 -04:00
parent 9221f7f50f
commit 823fc88a21
6 changed files with 15 additions and 12 deletions

View File

@ -913,7 +913,7 @@ public class GDClaim implements Claim {
// Check limits
final Player currentOwner = ownerData.getSubject() instanceof Player ? (Player) ownerData.getSubject() : null;
final int createClaimLimit = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), newOwnerData.getSubject(), Options.CREATE_LIMIT, this);
if (createClaimLimit > -1 && (newOwnerData.getInternalClaims().size() + 1) > createClaimLimit) {
if (createClaimLimit > -1 && (newOwnerData.getClaimTypeCount(this.getType()) + 1) > createClaimLimit) {
if (currentOwner != null) {
GriefDefenderPlugin.sendMessage(currentOwner, MessageStorage.MESSAGE_DATA.getMessage(MessageStorage.CLAIM_TRANSFER_EXCEEDS_LIMIT));
}

View File

@ -109,7 +109,7 @@ public class BlockEventHandler implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void onBlockForm(BlockFormEvent event) {
CommonBlockEventHandler.getInstance().handleBlockPlace(event, event.getBlock(), event.getNewState());
CommonBlockEventHandler.getInstance().handleBlockModify(event, event.getBlock(), event.getNewState());
}
@EventHandler(priority = EventPriority.LOWEST)

View File

@ -93,6 +93,11 @@ public class CommonBlockEventHandler {
Block fromBlock = null;
if (source instanceof Block) {
fromBlock = (Block) source;
// Air -> block should always be recorded as place
if (fromBlock.isEmpty()) {
handleBlockPlace(event, source, newState);
return;
}
}
if (!(event instanceof BlockBurnEvent) && fromBlock != null && newState != null && !fromBlock.getLocation().equals(newState.getLocation())) {
handleBlockSpread(event, fromBlock, newState);
@ -136,12 +141,10 @@ public class CommonBlockEventHandler {
return;
}
// TODO - remove this when flag definition defaults are finished
if (player == null) {
// BlockFormEvent's are triggered based on world conditions and should not be caused by a player
if (!(source instanceof Entity) && !(event instanceof BlockFormEvent)) {
final GDPermissionUser user = CauseContextHelper.getEventUser(location);
player = user != null ? user.getOnlinePlayer() : null;
}
final GDPermissionUser user = CauseContextHelper.getEventUser(location);
player = user != null ? user.getOnlinePlayer() : null;
}
GDClaim targetClaim = this.storage.getClaimAt(location);

View File

@ -1055,6 +1055,7 @@ public class PlayerEventHandler implements Listener {
return;
}
final ClaimType type = PlayerUtil.getInstance().getClaimTypeFromShovel(playerData.shovelMode);
if (!player.hasPermission(GDPermissions.BYPASS_CLAIM_LIMIT)) {
int createClaimLimit = -1;
if (playerData.shovelMode == ShovelTypes.BASIC && (claim.isAdminClaim() || claim.isTown() || claim.isWilderness())) {
@ -1065,7 +1066,7 @@ public class PlayerEventHandler implements Listener {
createClaimLimit = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.CREATE_LIMIT, claim).intValue();
}
if (createClaimLimit > 0 && createClaimLimit < (playerData.getInternalClaims().size() + 1)) {
if (createClaimLimit > 0 && createClaimLimit < (playerData.getClaimTypeCount(type) + 1)) {
GriefDefenderPlugin.sendMessage(player, GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_FAILED_CLAIM_LIMIT));
return;
}
@ -1093,7 +1094,6 @@ public class PlayerEventHandler implements Listener {
return;
}
final ClaimType type = PlayerUtil.getInstance().getClaimTypeFromShovel(playerData.shovelMode);
if ((type == ClaimTypes.BASIC || type == ClaimTypes.TOWN) && GriefDefenderPlugin.getGlobalConfig().getConfig().economy.economyMode) {
// Check current economy mode cost
final Double economyBlockCost = playerData.getInternalEconomyBlockCost();

View File

@ -923,7 +923,7 @@ public class GDClaim implements Claim {
// Check limits
final Player currentOwner = ownerData.getSubject() instanceof Player ? (Player) ownerData.getSubject() : null;
final int createClaimLimit = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), newOwnerData.getSubject(), Options.CREATE_LIMIT, this);
if (createClaimLimit > -1 && (newOwnerData.getInternalClaims().size() + 1) > createClaimLimit) {
if (createClaimLimit > -1 && (newOwnerData.getClaimTypeCount(this.getType()) + 1) > createClaimLimit) {
if (currentOwner != null) {
GriefDefenderPlugin.sendMessage(currentOwner, MessageStorage.MESSAGE_DATA.getMessage(MessageStorage.CLAIM_TRANSFER_EXCEEDS_LIMIT));
}

View File

@ -1323,6 +1323,7 @@ public class PlayerEventHandler {
}
private void createClaimStart(InteractEvent event, Player player, ItemStack itemInHand, Location<World> location, GDPlayerData playerData, GDClaim claim) {
final ClaimType type = PlayerUtil.getInstance().getClaimTypeFromShovel(playerData.shovelMode);
if (!player.hasPermission(GDPermissions.BYPASS_CLAIM_LIMIT)) {
int createClaimLimit = -1;
if (playerData.shovelMode == ShovelTypes.BASIC && (claim.isAdminClaim() || claim.isTown() || claim.isWilderness())) {
@ -1333,7 +1334,7 @@ public class PlayerEventHandler {
createClaimLimit = GDPermissionManager.getInstance().getInternalOptionValue(TypeToken.of(Integer.class), player, Options.CREATE_LIMIT, claim).intValue();
}
if (createClaimLimit > 0 && createClaimLimit < (playerData.getInternalClaims().size() + 1)) {
if (createClaimLimit > 0 && createClaimLimit < (playerData.getClaimTypeCount(type) + 1)) {
GriefDefenderPlugin.sendMessage(player, GriefDefenderPlugin.getInstance().messageData.getMessage(MessageStorage.CREATE_FAILED_CLAIM_LIMIT));
return;
}
@ -1361,7 +1362,6 @@ public class PlayerEventHandler {
return;
}
final ClaimType type = PlayerUtil.getInstance().getClaimTypeFromShovel(playerData.shovelMode);
if ((type == ClaimTypes.BASIC || type == ClaimTypes.TOWN) && GriefDefenderPlugin.getGlobalConfig().getConfig().economy.economyMode) {
// Check current economy mode cost
final Double economyBlockCost = playerData.getInternalEconomyBlockCost();