Skip to content

Commit

Permalink
feat: allow for custom plot limit handling (#4261)
Browse files Browse the repository at this point in the history
* feat: allow for custom plot limit handling

* feat: allow for custom plot limit handling

* chore: use fluent setter
  • Loading branch information
PierreSchwang authored Dec 18, 2023
1 parent c8b4a2f commit dbfc43e
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* PlotSquared, a land and world management plugin for Minecraft.
* Copyright (C) IntellectualSites <https://intellectualsites.com>
* Copyright (C) IntellectualSites team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.plotsquared.core.events;

import com.plotsquared.core.player.PlotPlayer;
import org.checkerframework.checker.index.qual.NonNegative;
import org.checkerframework.checker.nullness.qual.NonNull;

/**
* Called every time after PlotSquared calculated a players plot limit based on their permission.
* <p>
* May be used to grant a player more plots based on another rank or bought feature.
*
* @since TODO
*/
public class PlayerPlotLimitEvent {

private final PlotPlayer<?> player;

private int limit;

public PlayerPlotLimitEvent(@NonNull final PlotPlayer<?> player, @NonNegative final int limit) {
this.player = player;
this.limit = limit;
}

/**
* Overrides the previously calculated or set plot limit for {@link #player()}.
*
* @param limit The amount of plots a player may claim. Must be {@code 0} or greater.
* @since TODO
*/
public void limit(@NonNegative final int limit) {
if (limit < 0) {
throw new IllegalArgumentException("Player plot limit must be greater or equal 0");
}
this.limit = limit;
}

/**
* Returns the previous set limit, if none was overridden before this event handler the default limit based on the players
* permissions node is returned.
*
* @return The currently defined plot limit of this player.
* @since TODO
*/
public @NonNegative int limit() {
return limit;
}

/**
* The player for which the limit is queried.
*
* @return the player.
* @since TODO
*/
public @NonNull PlotPlayer<?> player() {
return player;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,8 @@ public Plot getCurrentPlot() {
* @return number of allowed plots within the scope (globally, or in the player's current world as defined in the settings.yml)
*/
public int getAllowedPlots() {
return hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS);
final int calculatedLimit = hasPermissionRange("plots.plot", Settings.Limit.MAX_PLOTS);
return this.eventDispatcher.callPlayerPlotLimit(this, calculatedLimit).limit();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.plotsquared.core.events.PlayerLeavePlotEvent;
import com.plotsquared.core.events.PlayerPlotDeniedEvent;
import com.plotsquared.core.events.PlayerPlotHelperEvent;
import com.plotsquared.core.events.PlayerPlotLimitEvent;
import com.plotsquared.core.events.PlayerPlotTrustedEvent;
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
import com.plotsquared.core.events.PlotAutoMergeEvent;
Expand Down Expand Up @@ -308,6 +309,12 @@ public RemoveRoadEntityEvent callRemoveRoadEntity(Entity entity) {
return event;
}

public PlayerPlotLimitEvent callPlayerPlotLimit(PlotPlayer<?> player, int calculatedLimit) {
PlayerPlotLimitEvent event = new PlayerPlotLimitEvent(player, calculatedLimit);
eventBus.post(event);
return event;
}

public void doJoinTask(final PlotPlayer<?> player) {
if (player == null) {
return; //possible future warning message to figure out where we are retrieving null
Expand Down

0 comments on commit dbfc43e

Please sign in to comment.