Skip to content

Commit

Permalink
feat: allow for custom plot limit handling
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreSchwang committed Dec 4, 2023
1 parent 1a18adc commit c0b1179
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
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 setLimit(@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 c0b1179

Please sign in to comment.