Compare commits

...

6 Commits

10 changed files with 66 additions and 56 deletions

View File

@ -261,7 +261,10 @@ public class BlockEventListener implements Listener {
final BlockFace facing = piston.getFacing(); final BlockFace facing = piston.getFacing();
location = location.add(facing.getModX(), facing.getModY(), facing.getModZ()); location = location.add(facing.getModX(), facing.getModY(), facing.getModZ());
Plot newPlot = area.getOwnedPlotAbs(location); Plot newPlot = area.getOwnedPlotAbs(location);
if (!plot.equals(newPlot)) { if (plot.equals(newPlot)) {
return;
}
if (!plot.isMerged() || !plot.getConnectedPlots().contains(newPlot)) {
event.setCancelled(true); event.setCancelled(true);
plot.debug("Prevented piston update because of invalid edge piston detection"); plot.debug("Prevented piston update because of invalid edge piston detection");
} }

View File

@ -252,7 +252,8 @@ public class PlayerEventListener implements Listener {
} }
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null) { if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) { if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) {
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
@ -260,7 +261,8 @@ public class PlayerEventListener implements Listener {
if (plot.isAdded(event.getPlayer().getUniqueId())) { if (plot.isAdded(event.getPlayer().getUniqueId())) {
return; // allow for added players return; // allow for added players
} }
if (!plot.getFlag(EditSignFlag.class)) { if (!plot.getFlag(EditSignFlag.class)
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString())) {
plot.debug(event.getPlayer().getName() + " could not color the sign because of edit-sign = false"); plot.debug(event.getPlayer().getName() + " could not color the sign because of edit-sign = false");
event.setCancelled(true); event.setCancelled(true);
} }

View File

@ -20,6 +20,7 @@ package com.plotsquared.bukkit.listener;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.core.location.Location; import com.plotsquared.core.location.Location;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.implementations.EditSignFlag; import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
@ -46,7 +47,8 @@ public class PlayerEventListener1201 implements Listener {
} }
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null) { if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)) { if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) {
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
@ -54,7 +56,8 @@ public class PlayerEventListener1201 implements Listener {
if (plot.isAdded(event.getPlayer().getUniqueId())) { if (plot.isAdded(event.getPlayer().getUniqueId())) {
return; // allow for added players return; // allow for added players
} }
if (!plot.getFlag(EditSignFlag.class)) { if (!plot.getFlag(EditSignFlag.class)
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString())) {
plot.debug(event.getPlayer().getName() + " could not edit the sign because of edit-sign = false"); plot.debug(event.getPlayer().getName() + " could not edit the sign because of edit-sign = false");
event.setCancelled(true); event.setCancelled(true);
} }

View File

@ -55,6 +55,14 @@ public class TranslationUpdateManager {
String userMove = "userMove"; String userMove = "userMove";
String userMoveReplacement = "user_move"; String userMoveReplacement = "user_move";
// tag opening / closing characters are important, as the locale keys exist as well, which should not be replaced
String listInfoUnknown = "<info.unknown>";
String listInfoUnknownReplacement = "<unknown>";
String listInfoServer = "<info.server>";
String listInfoServerReplacement = "<server>";
String listInfoEveryone = "<info.everyone>";
String listInfoEveryoneReplacement = "<everyone>";
try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) { try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) {
paths paths
.filter(Files::isRegularFile) .filter(Files::isRegularFile)
@ -68,6 +76,9 @@ public class TranslationUpdateManager {
replaceInFile(p, minimumRadius, minimumRadiusReplacement); replaceInFile(p, minimumRadius, minimumRadiusReplacement);
replaceInFile(p, maximumMoves, maximumMovesReplacement); replaceInFile(p, maximumMoves, maximumMovesReplacement);
replaceInFile(p, userMove, userMoveReplacement); replaceInFile(p, userMove, userMoveReplacement);
replaceInFile(p, listInfoUnknown, listInfoUnknownReplacement);
replaceInFile(p, listInfoServer, listInfoServerReplacement);
replaceInFile(p, listInfoEveryone, listInfoEveryoneReplacement);
}); });
} }
} }

View File

@ -465,7 +465,7 @@ public class ListCmd extends SubCommand {
TextComponent.Builder builder = Component.text(); TextComponent.Builder builder = Component.text();
if (plot.getFlag(ServerPlotFlag.class)) { if (plot.getFlag(ServerPlotFlag.class)) {
TagResolver serverResolver = TagResolver.resolver( TagResolver serverResolver = TagResolver.resolver(
"info.server", "server",
Tag.inserting(TranslatableCaption.of("info.server").toComponent(player)) Tag.inserting(TranslatableCaption.of("info.server").toComponent(player))
); );
builder.append(MINI_MESSAGE.deserialize(server, serverResolver)); builder.append(MINI_MESSAGE.deserialize(server, serverResolver));
@ -483,13 +483,13 @@ public class ListCmd extends SubCommand {
builder.append(MINI_MESSAGE.deserialize(online, resolver)); builder.append(MINI_MESSAGE.deserialize(online, resolver));
} else if (uuidMapping.username().equalsIgnoreCase("unknown")) { } else if (uuidMapping.username().equalsIgnoreCase("unknown")) {
TagResolver unknownResolver = TagResolver.resolver( TagResolver unknownResolver = TagResolver.resolver(
"info.unknown", "unknown",
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player)) Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
); );
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver)); builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
} else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) { } else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) {
TagResolver everyoneResolver = TagResolver.resolver( TagResolver everyoneResolver = TagResolver.resolver(
"info.everyone", "everyone",
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player)) Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
); );
builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver)); builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver));

View File

@ -364,7 +364,6 @@ public class PlotListener {
public boolean plotExit(final PlotPlayer<?> player, Plot plot) { public boolean plotExit(final PlotPlayer<?> player, Plot plot) {
try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) { try (final MetaDataAccess<Plot> lastPlot = player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
final Plot previous = lastPlot.remove(); final Plot previous = lastPlot.remove();
this.eventDispatcher.callLeave(player, plot);
List<StatusEffect> effects = playerEffects.remove(player.getUUID()); List<StatusEffect> effects = playerEffects.remove(player.getUUID());
if (effects != null) { if (effects != null) {
@ -467,6 +466,8 @@ public class PlotListener {
feedRunnable.remove(player.getUUID()); feedRunnable.remove(player.getUUID());
healRunnable.remove(player.getUUID()); healRunnable.remove(player.getUUID());
} }
} finally {
this.eventDispatcher.callLeave(player, plot);
} }
return true; return true;
} }

View File

@ -59,6 +59,9 @@ public enum Permission implements ComponentLike {
PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED("plots.admin.vehicle.break.unowned"), PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED("plots.admin.vehicle.break.unowned"),
PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER("plots.admin.vehicle.break.other"), PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER("plots.admin.vehicle.break.other"),
PERMISSION_ADMIN_PVE("plots.admin.pve"), PERMISSION_ADMIN_PVE("plots.admin.pve"),
PERMISSION_ADMIN_PLACE_VEHICLE_ROAD("plots.admin.vehicle.place.road"),
PERMISSION_ADMIN_PLACE_VEHICLE_UNOWNED("plots.admin.vehicle.place.unowned"),
PERMISSION_ADMIN_PLACE_VEHICLE_OTHER("plots.admin.vehicle.place.other"),
PERMISSION_ADMIN_PVP("plots.admin.pvp"), PERMISSION_ADMIN_PVP("plots.admin.pvp"),
PERMISSION_ADMIN_BUILD_ROAD("plots.admin.build.road"), PERMISSION_ADMIN_BUILD_ROAD("plots.admin.build.road"),
PERMISSION_ADMIN_PROJECTILE_ROAD("plots.admin.projectile.road"), PERMISSION_ADMIN_PROJECTILE_ROAD("plots.admin.projectile.road"),

View File

@ -382,14 +382,10 @@ public class EventDispatcher {
return true; return true;
} }
} }
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
);
} }
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms
);
} }
final List<BlockTypeWrapper> use = plot.getFlag(UseFlag.class); final List<BlockTypeWrapper> use = plot.getFlag(UseFlag.class);
for (final BlockTypeWrapper blockTypeWrapper : use) { for (final BlockTypeWrapper blockTypeWrapper : use) {
@ -398,7 +394,7 @@ public class EventDispatcher {
return true; return true;
} }
} }
if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(), false)) { if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) {
return true; return true;
} }
// we check for the EditSignFlag in the PlayerSignOpenEvent again, but we must not cancel the interact event // we check for the EditSignFlag in the PlayerSignOpenEvent again, but we must not cancel the interact event
@ -423,14 +419,10 @@ public class EventDispatcher {
return true; return true;
} }
} }
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, false);
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), false
);
} }
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, false);
Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), false
);
} }
if (plot.getFlag(DeviceInteractFlag.class)) { if (plot.getFlag(DeviceInteractFlag.class)) {
return true; return true;
@ -442,21 +434,14 @@ public class EventDispatcher {
return true; return true;
} }
} }
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false);
Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(),
false
);
} }
case SPAWN_MOB -> { case SPAWN_MOB -> {
if (plot == null) { if (plot == null) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
);
} }
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms
);
} }
if (plot.getFlag(MobPlaceFlag.class)) { if (plot.getFlag(MobPlaceFlag.class)) {
return true; return true;
@ -468,10 +453,7 @@ public class EventDispatcher {
return true; return true;
} }
} }
if (player.hasPermission( if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) {
Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(),
false
)) {
return true; return true;
} }
if (notifyPerms) { if (notifyPerms) {
@ -491,14 +473,10 @@ public class EventDispatcher {
} }
case PLACE_MISC -> { case PLACE_MISC -> {
if (plot == null) { if (plot == null) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
);
} }
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms
);
} }
if (plot.getFlag(MiscPlaceFlag.class)) { if (plot.getFlag(MiscPlaceFlag.class)) {
return true; return true;
@ -510,10 +488,7 @@ public class EventDispatcher {
return true; return true;
} }
} }
if (player.hasPermission( if (player.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER, false)) {
Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString(),
false
)) {
return true; return true;
} }
if (notifyPerms) { if (notifyPerms) {
@ -533,16 +508,28 @@ public class EventDispatcher {
} }
case PLACE_VEHICLE -> { case PLACE_VEHICLE -> {
if (plot == null) { if (plot == null) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_PLACE_VEHICLE_ROAD, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString(), notifyPerms
);
} }
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
return player.hasPermission( return player.hasPermission(Permission.PERMISSION_ADMIN_PLACE_VEHICLE_UNOWNED, notifyPerms);
Permission.PERMISSION_ADMIN_INTERACT_UNOWNED.toString(), notifyPerms }
if (plot.getFlag(VehiclePlaceFlag.class)) {
return true;
}
if (player.hasPermission(Permission.PERMISSION_ADMIN_PLACE_VEHICLE_OTHER, false)) {
return true;
}
if (notifyPerms) {
player.sendMessage(
TranslatableCaption.of("commandconfig.flag_tutorial_usage"),
TagResolver.resolver(
"flag",
Tag.inserting(
PlotFlag.getFlagNameComponent(VehiclePlaceFlag.class)
)
)
); );
} }
return plot.getFlag(VehiclePlaceFlag.class);
} }
default -> { default -> {
} }

View File

@ -381,9 +381,9 @@
"info.plot_list_default": "<gold><plot></gold>", "info.plot_list_default": "<gold><plot></gold>",
"info.plot_list_player_online": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_aqua>Online</dark_aqua>'><gold><player></gold></hover>", "info.plot_list_player_online": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_aqua>Online</dark_aqua>'><gold><player></gold></hover>",
"info.plot_list_player_offline": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_gray>Offline</dark_gray>'><gold><player></gold></hover>", "info.plot_list_player_offline": "<dark_aqua><prefix></dark_aqua><hover:show_text:'<dark_gray>Offline</dark_gray>'><gold><player></gold></hover>",
"info.plot_list_player_unknown": "<hover:show_text:'<red>The owner of this plot is unknown</red>'><white><info.unknown></white></hover>", "info.plot_list_player_unknown": "<hover:show_text:'<red>The owner of this plot is unknown</red>'><white><unknown></white></hover>",
"info.plot_list_player_server": "<hover:show_text:'<red>The plot is owned by the server</red>'><white><info.server></white></hover>", "info.plot_list_player_server": "<hover:show_text:'<red>The plot is owned by the server</red>'><white><server></white></hover>",
"info.plot_list_player_everyone": "<hover:show_text:'<blue>The plot is owned by everyone</blue>'><white><info.everyone></white></hover>", "info.plot_list_player_everyone": "<hover:show_text:'<blue>The plot is owned by everyone</blue>'><white><everyone></white></hover>",
"info.area_info_format": "<header>\n<reset><gold>Name: </gold><gray><name></gray>\n<gold>Type: </gold><gray><type></gray>\n<gold>Terrain: </gold><gray><terrain></gray>\n<gold>Usage: </gold><gray><usage>%</gray>\n<gold>Claimed: </gold><gray><claimed></gray>\n<gold>Clusters: </gold><gray><clusters></gray>\n<gold>Region: </gold><gray><region></gray>\n<gold>Generator: </gold><gray><generator></gray>\n<footer>", "info.area_info_format": "<header>\n<reset><gold>Name: </gold><gray><name></gray>\n<gold>Type: </gold><gray><type></gray>\n<gold>Terrain: </gold><gray><terrain></gray>\n<gold>Usage: </gold><gray><usage>%</gray>\n<gold>Claimed: </gold><gray><claimed></gray>\n<gold>Clusters: </gold><gray><clusters></gray>\n<gold>Region: </gold><gray><region></gray>\n<gold>Generator: </gold><gray><generator></gray>\n<footer>",
"info.area_list_tooltip": "<gold>Claimed=</gold><gray><claimed></gray>\n<gold>Usage=</gold><gray><usage></gray>\n<gold>Clusters=</gold><gray><clusters></gray>\n<gold>Region=</gold><gray><region></gray>\n<gold>Generator=</gold><gray><generator></gray>", "info.area_list_tooltip": "<gold>Claimed=</gold><gray><claimed></gray>\n<gold>Usage=</gold><gray><usage></gray>\n<gold>Clusters=</gold><gray><clusters></gray>\n<gold>Region=</gold><gray><region></gray>\n<gold>Generator=</gold><gray><generator></gray>",
"info.area_list_item": "<click:run_command:'<command_tp>'><hover:show_text:'<command_tp>'><dark_gray>[</dark_gray><gold><number></gold><dark_gray>]</dark_gray></hover></click> <click:run_command:'<command_info>'><hover:show_text:'<hover_info>'><gold><area_name></gold></hover></click><gray> - </gray><gray><area_type>:<area_terrain></gray>", "info.area_list_item": "<click:run_command:'<command_tp>'><hover:show_text:'<command_tp>'><dark_gray>[</dark_gray><gold><number></gold><dark_gray>]</dark_gray></hover></click> <click:run_command:'<command_info>'><hover:show_text:'<hover_info>'><gold><area_name></gold></hover></click><gray> - </gray><gray><area_type>:<area_terrain></gray>",

View File

@ -22,7 +22,7 @@ plugins {
} }
group = "com.intellectualsites.plotsquared" group = "com.intellectualsites.plotsquared"
version = "7.3.1" version = "7.3.2-SNAPSHOT"
if (!File("$rootDir/.git").exists()) { if (!File("$rootDir/.git").exists()) {
logger.lifecycle(""" logger.lifecycle("""