mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-04 14:44:43 +02:00
Compare commits
3 Commits
7.2.1
...
feat/plotL
Author | SHA1 | Date | |
---|---|---|---|
fb3da2f97c | |||
a0ee0caba9 | |||
c0b1179d22 |
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -27,7 +27,7 @@ body:
|
|||||||
description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
|
description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
|
||||||
multiple: false
|
multiple: false
|
||||||
options:
|
options:
|
||||||
- '1.20.4'
|
- '1.20.2'
|
||||||
- '1.20'
|
- '1.20'
|
||||||
- '1.19.4'
|
- '1.19.4'
|
||||||
- '1.19.3'
|
- '1.19.3'
|
||||||
|
@ -105,7 +105,7 @@ tasks {
|
|||||||
opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
|
opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
|
||||||
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
||||||
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
// opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
opt.isLinkSource = true
|
opt.isLinkSource = true
|
||||||
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
||||||
opt.isUse = true
|
opt.isUse = true
|
||||||
|
@ -50,7 +50,6 @@ import com.plotsquared.core.plot.flag.implementations.DenyPortalsFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.DenyTeleportFlag;
|
import com.plotsquared.core.plot.flag.implementations.DenyTeleportFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag;
|
import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.HangingBreakFlag;
|
import com.plotsquared.core.plot.flag.implementations.HangingBreakFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.HangingPlaceFlag;
|
import com.plotsquared.core.plot.flag.implementations.HangingPlaceFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.HostileInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.HostileInteractFlag;
|
||||||
@ -88,7 +87,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.Sign;
|
|
||||||
import org.bukkit.block.data.Waterlogged;
|
import org.bukkit.block.data.Waterlogged;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
@ -177,33 +175,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
Material.WRITABLE_BOOK,
|
Material.WRITABLE_BOOK,
|
||||||
Material.WRITTEN_BOOK
|
Material.WRITTEN_BOOK
|
||||||
);
|
);
|
||||||
private static final Set<String> DYES;
|
|
||||||
static {
|
|
||||||
Set<String> mutableDyes = new HashSet<>(Set.of(
|
|
||||||
"WHITE_DYE",
|
|
||||||
"LIGHT_GRAY_DYE",
|
|
||||||
"GRAY_DYE",
|
|
||||||
"BLACK_DYE",
|
|
||||||
"BROWN_DYE",
|
|
||||||
"RED_DYE",
|
|
||||||
"ORANGE_DYE",
|
|
||||||
"YELLOW_DYE",
|
|
||||||
"LIME_DYE",
|
|
||||||
"GREEN_DYE",
|
|
||||||
"CYAN_DYE",
|
|
||||||
"LIGHT_BLUE_DYE",
|
|
||||||
"BLUE_DYE",
|
|
||||||
"PURPLE_DYE",
|
|
||||||
"MAGENTA_DYE",
|
|
||||||
"PINK_DYE",
|
|
||||||
"GLOW_INK_SAC"
|
|
||||||
));
|
|
||||||
int[] version = PlotSquared.platform().serverVersion();
|
|
||||||
if (version[1] >= 20 && version[2] >= 1) {
|
|
||||||
mutableDyes.add("HONEYCOMB");
|
|
||||||
}
|
|
||||||
DYES = Set.copyOf(mutableDyes);
|
|
||||||
}
|
|
||||||
private final EventDispatcher eventDispatcher;
|
private final EventDispatcher eventDispatcher;
|
||||||
private final WorldEdit worldEdit;
|
private final WorldEdit worldEdit;
|
||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
@ -236,38 +207,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
this.plotListener = plotListener;
|
this.plotListener = plotListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onPlayerDyeSign(PlayerInteractEvent event) {
|
|
||||||
ItemStack itemStack = event.getItem();
|
|
||||||
if (itemStack == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Block block = event.getClickedBlock();
|
|
||||||
if (block != null && block.getState() instanceof Sign) {
|
|
||||||
if (DYES.contains(itemStack.getType().toString())) {
|
|
||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = location.getOwnedPlot();
|
|
||||||
if (plot == null) {
|
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (plot.isAdded(event.getPlayer().getUniqueId())) {
|
|
||||||
return; // allow for added players
|
|
||||||
}
|
|
||||||
if (!plot.getFlag(EditSignFlag.class)) {
|
|
||||||
plot.debug(event.getPlayer().getName() + " could not color the sign because of edit-sign = false");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
||||||
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
|
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
|
||||||
|
@ -31,7 +31,7 @@ import org.bukkit.event.player.PlayerSignOpenEvent;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* For events since 1.20.1
|
* For events since 1.20.1
|
||||||
* @since 7.2.1
|
* @since TODO
|
||||||
*/
|
*/
|
||||||
public class PlayerEventListener1201 implements Listener {
|
public class PlayerEventListener1201 implements Listener {
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ tasks {
|
|||||||
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
||||||
opt.links("https://jd.advntr.dev/text-minimessage/4.14.0/")
|
opt.links("https://jd.advntr.dev/text-minimessage/4.14.0/")
|
||||||
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
// opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
opt.isLinkSource = true
|
opt.isLinkSource = true
|
||||||
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
||||||
opt.isUse = true
|
opt.isUse = true
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -75,7 +75,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
|
|||||||
* Gets the currently applied {@link UnaryOperator<Location> transformer} or null, if none was set
|
* Gets the currently applied {@link UnaryOperator<Location> transformer} or null, if none was set
|
||||||
*
|
*
|
||||||
* @return LocationTransformer
|
* @return LocationTransformer
|
||||||
* @since 7.2.1
|
* @since TODO
|
||||||
*/
|
*/
|
||||||
public @Nullable UnaryOperator<Location> getLocationTransformer() {
|
public @Nullable UnaryOperator<Location> getLocationTransformer() {
|
||||||
return this.locationTransformer;
|
return this.locationTransformer;
|
||||||
@ -86,7 +86,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
|
|||||||
* May be {@code null}, if any previous set transformations should be discarded.
|
* May be {@code null}, if any previous set transformations should be discarded.
|
||||||
*
|
*
|
||||||
* @param locationTransformer The new transformer
|
* @param locationTransformer The new transformer
|
||||||
* @since 7.2.1
|
* @since TODO
|
||||||
*/
|
*/
|
||||||
public void setLocationTransformer(@Nullable UnaryOperator<Location> locationTransformer) {
|
public void setLocationTransformer(@Nullable UnaryOperator<Location> locationTransformer) {
|
||||||
this.locationTransformer = locationTransformer;
|
this.locationTransformer = locationTransformer;
|
||||||
|
@ -306,7 +306,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
|||||||
* @return number of allowed plots within the scope (globally, or in the player's current world as defined in the settings.yml)
|
* @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() {
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,7 +23,7 @@ import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
|||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 7.2.1
|
* @since TODO
|
||||||
*/
|
*/
|
||||||
public class EditSignFlag extends BooleanFlag<EditSignFlag> {
|
public class EditSignFlag extends BooleanFlag<EditSignFlag> {
|
||||||
public static final EditSignFlag EDIT_SIGN_TRUE = new EditSignFlag(true);
|
public static final EditSignFlag EDIT_SIGN_TRUE = new EditSignFlag(true);
|
||||||
|
@ -30,6 +30,7 @@ import com.plotsquared.core.events.PlayerEnterPlotEvent;
|
|||||||
import com.plotsquared.core.events.PlayerLeavePlotEvent;
|
import com.plotsquared.core.events.PlayerLeavePlotEvent;
|
||||||
import com.plotsquared.core.events.PlayerPlotDeniedEvent;
|
import com.plotsquared.core.events.PlayerPlotDeniedEvent;
|
||||||
import com.plotsquared.core.events.PlayerPlotHelperEvent;
|
import com.plotsquared.core.events.PlayerPlotHelperEvent;
|
||||||
|
import com.plotsquared.core.events.PlayerPlotLimitEvent;
|
||||||
import com.plotsquared.core.events.PlayerPlotTrustedEvent;
|
import com.plotsquared.core.events.PlayerPlotTrustedEvent;
|
||||||
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
|
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
|
||||||
import com.plotsquared.core.events.PlotAutoMergeEvent;
|
import com.plotsquared.core.events.PlotAutoMergeEvent;
|
||||||
@ -308,6 +309,12 @@ public class EventDispatcher {
|
|||||||
return event;
|
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) {
|
public void doJoinTask(final PlotPlayer<?> player) {
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
return; //possible future warning message to figure out where we are retrieving null
|
return; //possible future warning message to figure out where we are retrieving null
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.util.query;
|
|
||||||
|
|
||||||
import com.plotsquared.core.plot.Plot;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
||||||
|
|
||||||
class HasOwnerFilter implements PlotFilter {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean accepts(final @NonNull Plot plot) {
|
|
||||||
return plot.hasOwner();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -219,16 +219,6 @@ public final class PlotQuery implements Iterable<Plot> {
|
|||||||
return this.addFilter(new OwnersIncludeFilter(owner.getUUID()));
|
return this.addFilter(new OwnersIncludeFilter(owner.getUUID()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Query only for plots that have an owner
|
|
||||||
*
|
|
||||||
* @return The query instance
|
|
||||||
* @since 7.2.1
|
|
||||||
*/
|
|
||||||
|
|
||||||
public @NonNull PlotQuery hasOwner() {
|
|
||||||
return this.addFilter(new HasOwnerFilter());
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Query for plots with a specific alias
|
* Query for plots with a specific alias
|
||||||
*
|
*
|
||||||
|
@ -22,7 +22,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group = "com.intellectualsites.plotsquared"
|
group = "com.intellectualsites.plotsquared"
|
||||||
version = "7.2.1"
|
version = "7.2.1-SNAPSHOT"
|
||||||
|
|
||||||
if (!File("$rootDir/.git").exists()) {
|
if (!File("$rootDir/.git").exists()) {
|
||||||
logger.lifecycle("""
|
logger.lifecycle("""
|
||||||
@ -225,7 +225,7 @@ tasks.getByName<Jar>("jar") {
|
|||||||
enabled = false
|
enabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
val supportedVersions = listOf("1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.1", "1.20.4")
|
val supportedVersions = listOf("1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.1", "1.20.2")
|
||||||
tasks {
|
tasks {
|
||||||
register("cacheLatestFaweArtifact") {
|
register("cacheLatestFaweArtifact") {
|
||||||
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()
|
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()
|
||||||
|
Reference in New Issue
Block a user