mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-03 06:04:43 +02:00
Compare commits
9 Commits
drop-1.17.
...
7.3.7
Author | SHA1 | Date | |
---|---|---|---|
fe324d3ea9 | |||
ff83868cbc | |||
111ea7029e | |||
9be2eedf7f | |||
82f868ae7d | |||
e46dbd826c | |||
809ddce2b3 | |||
1b40cea51f | |||
022e0fc224 |
2
.github/workflows/label-merge-conflicts.yaml
vendored
2
.github/workflows/label-merge-conflicts.yaml
vendored
@ -15,7 +15,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Label conflicting PRs
|
||||
uses: eps1lon/actions-label-merge-conflict@v2.1.0
|
||||
uses: eps1lon/actions-label-merge-conflict@v3.0.0
|
||||
with:
|
||||
dirtyLabel: "unresolved-merge-conflict"
|
||||
repoToken: "${{ secrets.GITHUB_TOKEN }}"
|
||||
|
@ -154,7 +154,7 @@ public class EntitySpawnListener implements Listener {
|
||||
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
if (type == EntityType.ENDER_CRYSTAL) {
|
||||
if (type == EntityType.ENDER_CRYSTAL || type == EntityType.ARMOR_STAND) {
|
||||
if (BukkitEntityUtil.checkEntity(entity, plot)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
@ -19,6 +19,7 @@
|
||||
package com.plotsquared.bukkit.listener;
|
||||
|
||||
import com.destroystokyo.paper.event.block.BeaconEffectEvent;
|
||||
import com.destroystokyo.paper.event.block.BlockDestroyEvent;
|
||||
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
||||
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
|
||||
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
|
||||
@ -42,6 +43,7 @@ import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.FishingFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TileDropFlag;
|
||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||
import com.plotsquared.core.util.PlotFlagUtil;
|
||||
@ -84,6 +86,19 @@ public class PaperListener implements Listener {
|
||||
this.plotAreaManager = plotAreaManager;
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||
public void onBlockDestroy(final BlockDestroyEvent event) {
|
||||
Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
return;
|
||||
}
|
||||
Plot plot = area.getPlot(location);
|
||||
if (plot != null) {
|
||||
event.setWillDrop(plot.getFlag(TileDropFlag.class));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityPathfind(EntityPathfindEvent event) {
|
||||
if (!Settings.Paper_Components.ENTITY_PATHING) {
|
||||
|
@ -61,6 +61,7 @@ import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.PlayerInteractFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.PreventCreativeCopyFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TamedInteractFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TileDropFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.UntrustedVisitFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.VehicleBreakFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.VehicleUseFlag;
|
||||
@ -107,6 +108,7 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.event.entity.EntityPlaceEvent;
|
||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
||||
@ -236,6 +238,19 @@ public class PlayerEventListener implements Listener {
|
||||
this.plotListener = plotListener;
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
||||
public void onBlockBreak(final BlockBreakEvent event) {
|
||||
Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
return;
|
||||
}
|
||||
Plot plot = area.getPlot(location);
|
||||
if (plot != null) {
|
||||
event.setDropItems(plot.getFlag(TileDropFlag.class));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPlayerDyeSign(PlayerInteractEvent event) {
|
||||
ItemStack itemStack = event.getItem();
|
||||
@ -1921,7 +1936,9 @@ public class PlayerEventListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerTakeLecternBook(PlayerTakeLecternBookEvent event) {
|
||||
Location location = BukkitUtil.adapt(event.getPlayer().getLocation());
|
||||
Player player = event.getPlayer();
|
||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||
Location location = pp.getLocation();
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
return;
|
||||
@ -1933,10 +1950,12 @@ public class PlayerEventListener implements Listener {
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!plot.isAdded(pp.getUUID())) {
|
||||
if (plot.getFlag(LecternReadBookFlag.class)) {
|
||||
plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -77,6 +77,7 @@ public class Visit extends Command {
|
||||
query.whereBasePlot();
|
||||
}
|
||||
|
||||
// without specified argument
|
||||
if (page == Integer.MIN_VALUE) {
|
||||
page = 1;
|
||||
}
|
||||
@ -94,10 +95,15 @@ public class Visit extends Command {
|
||||
|
||||
final List<Plot> plots = query.asList();
|
||||
|
||||
// Conversion of reversed page argument
|
||||
if (page < 0) {
|
||||
page = (plots.size() + 1) + page;
|
||||
}
|
||||
|
||||
if (plots.isEmpty()) {
|
||||
player.sendMessage(TranslatableCaption.of("invalid.found_no_plots"));
|
||||
return;
|
||||
} else if (plots.size() < page || page < 1) {
|
||||
} else if (page > plots.size() || page < 1) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("invalid.number_not_in_range"),
|
||||
TagResolver.builder()
|
||||
@ -188,34 +194,22 @@ public class Visit extends Command {
|
||||
int page = Integer.MIN_VALUE;
|
||||
|
||||
switch (args.length) {
|
||||
// /p v <user> <area> <page>
|
||||
// /p v <player> <area> <page>
|
||||
case 3:
|
||||
if (!MathMan.isInteger(args[2])) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("invalid.not_valid_number"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text("(1, ∞)")))
|
||||
);
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
|
||||
);
|
||||
if (isInvalidPageNr(args[2])) {
|
||||
sendInvalidPageNrMsg(player);
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
page = Integer.parseInt(args[2]);
|
||||
// /p v <name> <area> [page]
|
||||
// /p v <name> [page]
|
||||
page = getPageNr(args[2]);
|
||||
// /p v <player> <area> [page]
|
||||
// /p v <player> [page]
|
||||
case 2:
|
||||
if (page != Integer.MIN_VALUE || !MathMan.isInteger(args[1])) {
|
||||
// If "case 3" is already through or the argument is not a page number:
|
||||
// -> /p v <player> <area> [page]
|
||||
if (page != Integer.MIN_VALUE || isInvalidPageNr(args[1])) {
|
||||
sortByArea = this.plotAreaManager.getPlotAreaByString(args[1]);
|
||||
if (sortByArea == null) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("invalid.not_valid_number"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text("(1, ∞)")))
|
||||
);
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
|
||||
);
|
||||
sendInvalidPageNrMsg(player);
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
|
||||
@ -249,16 +243,13 @@ public class Visit extends Command {
|
||||
});
|
||||
break;
|
||||
}
|
||||
try {
|
||||
page = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException ignored) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("invalid.not_a_number"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
|
||||
);
|
||||
// -> /p v <player> <page>
|
||||
if (isInvalidPageNr(args[1])) {
|
||||
sendInvalidPageNrMsg(player);
|
||||
return CompletableFuture.completedFuture(false);
|
||||
}
|
||||
// /p v <name> [page]
|
||||
page = getPageNr(args[1]);
|
||||
// /p v <player> [page]
|
||||
// /p v <uuid> [page]
|
||||
// /p v <plot> [page]
|
||||
// /p v <alias>
|
||||
@ -326,6 +317,35 @@ public class Visit extends Command {
|
||||
return CompletableFuture.completedFuture(true);
|
||||
}
|
||||
|
||||
private boolean isInvalidPageNr(String arg) {
|
||||
if (MathMan.isInteger(arg)) {
|
||||
return false;
|
||||
} else if (arg.equals("last") || arg.equals("n")) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private int getPageNr(String arg) {
|
||||
if (MathMan.isInteger(arg)) {
|
||||
return Integer.parseInt(arg);
|
||||
} else if (arg.equals("last") || arg.equals("n")) {
|
||||
return -1;
|
||||
}
|
||||
return Integer.MIN_VALUE;
|
||||
}
|
||||
|
||||
private void sendInvalidPageNrMsg(PlotPlayer<?> player) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("invalid.not_valid_number"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text("(1, ∞)")))
|
||||
);
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||
final List<Command> completions = new ArrayList<>();
|
||||
@ -334,6 +354,7 @@ public class Visit extends Command {
|
||||
case 1 -> {
|
||||
completions.addAll(
|
||||
TabCompletions.completeAreas(args[1]));
|
||||
completions.addAll(TabCompletions.asCompletions("last"));
|
||||
if (args[1].isEmpty()) {
|
||||
// if no input is given, only suggest 1 - 3
|
||||
completions.addAll(
|
||||
@ -344,6 +365,7 @@ public class Visit extends Command {
|
||||
TabCompletions.completeNumbers(args[1], 10, 999));
|
||||
}
|
||||
case 2 -> {
|
||||
completions.addAll(TabCompletions.asCompletions("last"));
|
||||
if (args[2].isEmpty()) {
|
||||
// if no input is given, only suggest 1 - 3
|
||||
completions.addAll(
|
||||
|
@ -102,6 +102,7 @@ import com.plotsquared.core.plot.flag.implementations.SnowMeltFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.SoilDryFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TamedAttackFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TamedInteractFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TileDropFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TimeFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.TitlesFlag;
|
||||
import com.plotsquared.core.plot.flag.implementations.UntrustedVisitFlag;
|
||||
@ -198,6 +199,7 @@ public final class GlobalFlagContainer extends FlagContainer {
|
||||
this.addFlag(SoilDryFlag.SOIL_DRY_FALSE);
|
||||
this.addFlag(TamedAttackFlag.TAMED_ATTACK_FALSE);
|
||||
this.addFlag(TamedInteractFlag.TAMED_INTERACT_FALSE);
|
||||
this.addFlag(TileDropFlag.TILE_DROP_TRUE);
|
||||
this.addFlag(UntrustedVisitFlag.UNTRUSTED_VISIT_FLAG_TRUE);
|
||||
this.addFlag(VehicleBreakFlag.VEHICLE_BREAK_FALSE);
|
||||
this.addFlag(VehiclePlaceFlag.VEHICLE_PLACE_FALSE);
|
||||
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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.plot.flag.implementations;
|
||||
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
/**
|
||||
* @since 7.3.7
|
||||
*/
|
||||
|
||||
public class TileDropFlag extends BooleanFlag<TileDropFlag> {
|
||||
|
||||
public static final TileDropFlag TILE_DROP_TRUE = new TileDropFlag(true);
|
||||
public static final TileDropFlag TILE_DROP_FALSE = new TileDropFlag(false);
|
||||
|
||||
private TileDropFlag(boolean value) {
|
||||
super(value, TranslatableCaption.of("flags.flag_description_tile_drop"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TileDropFlag flagOf(@NonNull Boolean value) {
|
||||
return value ? TILE_DROP_TRUE : TILE_DROP_FALSE;
|
||||
}
|
||||
|
||||
}
|
@ -27,6 +27,8 @@ import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.player.MetaDataAccess;
|
||||
import com.plotsquared.core.player.PlayerMetaDataKeys;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.plot.flag.GlobalFlagContainer;
|
||||
@ -197,6 +199,11 @@ public final class PlaceholderRegistry {
|
||||
});
|
||||
this.createPlaceholder("currentplot_biome", (player, plot) -> plot.getBiomeSynchronous().toString());
|
||||
this.createPlaceholder("currentplot_size", (player, plot) -> String.valueOf(plot.getConnectedPlots().size()));
|
||||
this.createPlaceholder("total_grants", player -> {
|
||||
try (final MetaDataAccess<Integer> metaDataAccess = player.accessPersistentMetaData(PlayerMetaDataKeys.PERSISTENT_GRANTED_PLOTS)) {
|
||||
return Integer.toString(metaDataAccess.get().orElse(0));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -606,6 +606,7 @@
|
||||
"flags.flag_description_tamed_attack": "<gray>Set to `true` to allow guests to attack tamed animals in the plot.</gray>",
|
||||
"flags.flag_description_tamed_interact": "<gray>Set to `true` to allow guests to interact with tamed animals in the plot.</gray>",
|
||||
"flags.flag_description_time": "<gray>Set the time in the plot to a fixed value.</gray>",
|
||||
"flags.flag_description_tile_drop": "<gray>Set to `false` to prevent blocks from dropping items in the plot.</gray>",
|
||||
"flags.flag_description_titles": "<gray>Set to `false` to disable plot titles. Can be set to: `none` (to inherit world settings), `true`, or `false`</gray>",
|
||||
"flags.flag_description_title": "<gray>Set the pop-up title's title and subtitle. Format: /plot flag set title \"A title\" \"The subtitle\"</gray>",
|
||||
"flags.flag_description_use": "<gray>Define a list of materials players should be able to interact with in the plot.</gray>",
|
||||
|
@ -22,7 +22,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "com.intellectualsites.plotsquared"
|
||||
version = "7.3.7-SNAPSHOT"
|
||||
version = "7.3.7"
|
||||
|
||||
if (!File("$rootDir/.git").exists()) {
|
||||
logger.lifecycle("""
|
||||
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
Reference in New Issue
Block a user