Some improvements to events (#3238)

#3222 #3072
This commit is contained in:
dordsor21 2021-09-09 20:37:44 +01:00 committed by GitHub
parent 27a8fcd739
commit d77a8c8fa4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 398 additions and 83 deletions

View File

@ -362,12 +362,19 @@ public class BukkitPlayer extends PlotPlayer<Player> {
}
}
/**
* Convert from PlotSquared's {@link TeleportCause} to Bukkit's {@link PlayerTeleportEvent.TeleportCause}
*
* @param cause PlotSquared teleport cause to convert
* @return Bukkit's equivalent teleport cause
*/
public PlayerTeleportEvent.TeleportCause getTeleportCause(final @NonNull TeleportCause cause) {
return switch (cause) {
case COMMAND -> PlayerTeleportEvent.TeleportCause.COMMAND;
case PLUGIN -> PlayerTeleportEvent.TeleportCause.PLUGIN;
default -> PlayerTeleportEvent.TeleportCause.UNKNOWN;
};
if (TeleportCause.CauseSets.COMMAND.contains(cause)) {
return PlayerTeleportEvent.TeleportCause.COMMAND;
} else if (cause == TeleportCause.UNKNOWN) {
return PlayerTeleportEvent.TeleportCause.UNKNOWN;
}
return PlayerTeleportEvent.TeleportCause.PLUGIN;
}
}

View File

@ -395,7 +395,7 @@ public class Area extends SubCommand {
final String world = this.setupUtils.setupWorld(builder);
if (this.worldUtil.isWorld(world)) {
PlotSquared.get().loadWorld(world, null);
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND);
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND_AREA_CREATE);
player.sendMessage(TranslatableCaption.of("setup.setup_finished"));
if (area.getTerrain() != PlotAreaTerrainType.ALL) {
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(world));
@ -525,7 +525,7 @@ public class Area extends SubCommand {
builder.generatorName(PlotSquared.platform().pluginName());
String world = this.setupUtils.setupWorld(builder);
if (this.worldUtil.isWorld(world)) {
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND);
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND_AREA_CREATE);
player.sendMessage(TranslatableCaption.of("setup.setup_finished"));
} else {
player.sendMessage(
@ -560,13 +560,13 @@ public class Area extends SubCommand {
}
if (this.worldUtil.isWorld(pa.getWorldName())) {
if (!player.getLocation().getWorldName().equals(pa.getWorldName())) {
player.teleport(this.worldUtil.getSpawn(pa.getWorldName()), TeleportCause.COMMAND);
player.teleport(this.worldUtil.getSpawn(pa.getWorldName()), TeleportCause.COMMAND_AREA_CREATE);
}
} else {
builder.terrainType(PlotAreaTerrainType.NONE);
builder.plotAreaType(PlotAreaType.NORMAL);
this.setupUtils.setupWorld(builder);
player.teleport(this.worldUtil.getSpawn(pa.getWorldName()), TeleportCause.COMMAND);
player.teleport(this.worldUtil.getSpawn(pa.getWorldName()), TeleportCause.COMMAND_AREA_CREATE);
}
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put("area_create_area", pa);
player.sendMessage(
@ -795,10 +795,10 @@ public class Area extends SubCommand {
if (area instanceof SinglePlotArea) {
((SinglePlotArea) area).loadWorld(PlotId.of(0, 0));
center = this.worldUtil.getSpawn(PlotId.of(0, 0).toUnderscoreSeparatedString());
player.teleport(center, TeleportCause.COMMAND);
player.teleport(center, TeleportCause.COMMAND_AREA_TELEPORT);
} else if (area.getType() != PlotAreaType.PARTIAL) {
center = this.worldUtil.getSpawn(area.getWorldName());
player.teleport(center, TeleportCause.COMMAND);
player.teleport(center, TeleportCause.COMMAND_AREA_TELEPORT);
} else {
CuboidRegion region = area.getRegion();
center = Location.at(area.getWorldName(),
@ -810,7 +810,7 @@ public class Area extends SubCommand {
.getZ()) / 2
);
this.worldUtil.getHighestBlock(area.getWorldName(), center.getX(), center.getZ(),
y -> player.teleport(center.withY(1 + y), TeleportCause.COMMAND)
y -> player.teleport(center.withY(1 + y), TeleportCause.COMMAND_AREA_TELEPORT)
);
}
return true;

View File

@ -209,31 +209,24 @@ public class Auto extends SubCommand {
return false;
}
}
int size_x = 1;
int size_z = 1;
int sizeX = 1;
int sizeZ = 1;
String schematic = null;
boolean mega = false;
if (args.length > 0) {
try {
String[] split = args[0].split(",|;");
switch (split.length) {
case 1 -> {
size_x = 1;
size_z = 1;
}
case 2 -> {
size_x = Integer.parseInt(split[0]);
size_z = Integer.parseInt(split[1]);
}
default -> {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", getUsage())
);
return true;
}
String[] split = args[0].split("[,;]");
if (split.length == 2) {
sizeX = Integer.parseInt(split[0]);
sizeZ = Integer.parseInt(split[1]);
} else {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", getUsage())
);
return true;
}
if (size_x < 1 || size_z < 1) {
if (sizeX < 1 || sizeZ < 1) {
player.sendMessage(TranslatableCaption.of("error.plot_size_negative"));
return true;
}
@ -242,13 +235,13 @@ public class Auto extends SubCommand {
}
mega = true;
} catch (NumberFormatException ignored) {
size_x = 1;
size_z = 1;
sizeX = 1;
sizeZ = 1;
schematic = args[0];
}
}
PlayerAutoPlotEvent event = this.eventDispatcher
.callAuto(player, plotarea, schematic, size_x, size_z);
.callAuto(player, plotarea, schematic, sizeX, sizeZ);
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
@ -257,8 +250,8 @@ public class Auto extends SubCommand {
return true;
}
boolean force = event.getEventResult() == Result.FORCE;
size_x = event.getSize_x();
size_z = event.getSize_z();
sizeX = event.getSizeX();
sizeZ = event.getSizeZ();
schematic = event.getSchematic();
if (!force && mega && !Permissions.hasPermission(player, Permission.PERMISSION_AUTO_MEGA)) {
player.sendMessage(
@ -266,7 +259,7 @@ public class Auto extends SubCommand {
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA))
);
}
if (!force && size_x * size_z > Settings.Claim.MAX_AUTO_AREA) {
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots_num"),
Template.of("amount", String.valueOf(Settings.Claim.MAX_AUTO_AREA))
@ -277,7 +270,7 @@ public class Auto extends SubCommand {
try (final MetaDataAccess<Boolean> metaDataAccess =
player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_AUTO)) {
if (!force && (metaDataAccess.get().orElse(false) || !checkAllowedPlots(player,
plotarea, allowed_plots, size_x, size_z
plotarea, allowed_plots, sizeX, sizeZ
))) {
return false;
}
@ -309,7 +302,7 @@ public class Auto extends SubCommand {
double cost = costExp.evaluate(Settings.Limit.GLOBAL ?
player.getPlotCount() :
player.getPlotCount(plotarea.getWorldName()));
cost = (size_x * size_z) * cost;
cost = (sizeX * sizeZ) * cost;
if (cost > 0d) {
if (!this.econHandler.isSupported()) {
player.sendMessage(TranslatableCaption.of("economy.vault_or_consumer_null"));
@ -331,11 +324,13 @@ public class Auto extends SubCommand {
}
}
final List<Plot> plots = this.servicePipeline
.pump(new AutoService.AutoQuery(player, null, size_x, size_z, plotarea))
List<Plot> plots = this.servicePipeline
.pump(new AutoService.AutoQuery(player, null, sizeX, sizeZ, plotarea))
.through(AutoService.class)
.getResult();
plots = this.eventDispatcher.callAutoPlotsChosen(player, plots).getPlots();
if (plots.isEmpty()) {
player.sendMessage(TranslatableCaption.of("errors.no_free_plots"));
return false;
@ -344,7 +339,11 @@ public class Auto extends SubCommand {
} else {
final Iterator<Plot> plotIterator = plots.iterator();
while (plotIterator.hasNext()) {
plotIterator.next().claim(player, !plotIterator.hasNext(), null);
Plot plot = plotIterator.next();
if (!plot.canClaim(player)) {
continue;
}
plot.claim(player, !plotIterator.hasNext(), null, true, true);
}
final PlotAutoMergeEvent mergeEvent = this.eventDispatcher.callAutoMerge(
plots.get(0),

View File

@ -193,7 +193,7 @@ public class Claim extends SubCommand {
DBFunc.createPlotSafe(plot, () -> {
try {
TaskManager.getPlatformImplementation().sync(() -> {
if (!plot.claim(player, true, finalSchematic, false)) {
if (!plot.claim(player, true, finalSchematic, false, false)) {
LOGGER.info("Failed to claim plot {}", plot.getId().toCommaSeparatedString());
player.sendMessage(TranslatableCaption.of("working.plot_not_claimed"));
plot.setOwnerAbs(null);

View File

@ -104,7 +104,7 @@ public class Clear extends Command {
.hasPermission(player, "plots.continue"), TranslatableCaption.of("done.done_already_done"));
confirm.run(this, () -> {
if (Settings.Teleport.ON_CLEAR) {
plot.getPlayersInPlot().forEach(playerInPlot -> plot.teleportPlayer(playerInPlot, TeleportCause.COMMAND,
plot.getPlayersInPlot().forEach(playerInPlot -> plot.teleportPlayer(playerInPlot, TeleportCause.COMMAND_CLEAR,
result -> {
}
));

View File

@ -730,7 +730,7 @@ public class Cluster extends SubCommand {
return false;
}
}
cluster.getHome(home -> player.teleport(home, TeleportCause.COMMAND));
cluster.getHome(home -> player.teleport(home, TeleportCause.COMMAND_CLUSTER_TELEPORT));
player.sendMessage(TranslatableCaption.of("cluster.cluster_teleporting"));
return true;
}

View File

@ -107,7 +107,7 @@ public class Delete extends SubCommand {
}
final long start = System.currentTimeMillis();
if (Settings.Teleport.ON_DELETE) {
plot.getPlayersInPlot().forEach(playerInPlot -> plot.teleportPlayer(playerInPlot, TeleportCause.COMMAND,
plot.getPlayersInPlot().forEach(playerInPlot -> plot.teleportPlayer(playerInPlot, TeleportCause.COMMAND_DELETE,
result -> {
}
));

View File

@ -30,6 +30,7 @@ import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.events.TeleportCause;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
@ -183,10 +184,10 @@ public class Deny extends SubCommand {
player.kick("You got kicked from the plot! This server did not set up a loaded spawn, so you got " +
"kicked from the server.");
} else {
player.teleport(newSpawn);
player.teleport(newSpawn, TeleportCause.DENIED);
}
} else {
player.teleport(spawn);
player.teleport(spawn, TeleportCause.DENIED);
}
}

View File

@ -85,7 +85,7 @@ public class HomeCommand extends Command {
return;
}
Plot plot = plots.get(page - 1);
confirm.run(this, () -> plot.teleportPlayer(player, TeleportCause.COMMAND, result -> {
confirm.run(this, () -> plot.teleportPlayer(player, TeleportCause.COMMAND_HOME, result -> {
if (result) {
whenDone.run(this, CommandResult.SUCCESS);
} else {

View File

@ -113,7 +113,7 @@ public class Like extends SubCommand {
for (final Plot plot : plots) {
if ((!Settings.Done.REQUIRED_FOR_RATINGS || DoneFlag.isDone(plot)) && plot
.isBasePlot() && (!plot.getLikes().containsKey(uuid))) {
plot.teleportPlayer(player, TeleportCause.COMMAND, result -> {
plot.teleportPlayer(player, TeleportCause.COMMAND_LIKE, result -> {
});
player.sendMessage(TranslatableCaption.of("tutorial.rate_this"));
return true;

View File

@ -49,7 +49,7 @@ public class Middle extends SubCommand {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
return false;
}
plot.getCenter(center -> player.teleport(center, TeleportCause.COMMAND));
plot.getCenter(center -> player.teleport(center, TeleportCause.COMMAND_MIDDLE));
player.sendMessage(TranslatableCaption.of("teleport.teleported_to_plot"));
return true;
}

View File

@ -106,7 +106,7 @@ public class Rate extends SubCommand {
if ((!Settings.Done.REQUIRED_FOR_RATINGS || DoneFlag.isDone(p)) && p
.isBasePlot() && (!p.getRatings().containsKey(uuid)) && !p
.isAdded(uuid)) {
p.teleportPlayer(player, TeleportCause.COMMAND, result -> {
p.teleportPlayer(player, TeleportCause.COMMAND_RATE, result -> {
});
player.sendMessage(TranslatableCaption.of("tutorial.rate_this"));
return true;

View File

@ -240,7 +240,7 @@ public class Template extends SubCommand {
this.setupUtils.setupWorld(builder);
TaskManager.runTask(() -> {
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND);
player.teleport(this.worldUtil.getSpawn(world), TeleportCause.COMMAND_TEMPLATE);
player.sendMessage(TranslatableCaption.of("setup.setup_finished"));
});
return true;

View File

@ -166,7 +166,7 @@ public class Visit extends Command {
}
}
confirm.run(this, () -> plot.teleportPlayer(player, TeleportCause.COMMAND, result -> {
confirm.run(this, () -> plot.teleportPlayer(player, TeleportCause.COMMAND_VISIT, result -> {
if (result) {
whenDone.run(Visit.this, CommandResult.SUCCESS);
} else {

View File

@ -27,6 +27,7 @@ package com.plotsquared.core.events;
import com.plotsquared.core.command.Claim;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -39,8 +40,8 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
private final PlotArea plotArea;
private Result eventResult;
private String schematic;
private int size_x;
private int size_z;
private int sizeX;
private int sizeZ;
/**
* PlayerAutoPlotEvent: called when a player attempts to auto claim a plot.
@ -48,19 +49,31 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
* @param player The player attempting to auto claim
* @param plotArea The applicable plot area
* @param schematic The schematic defined or null
* @param size_x The size of the auto area
* @param size_z The size of the auto area
* @param sizeX The size of the auto area
* @param sizeZ The size of the auto area
*/
public PlayerAutoPlotEvent(
PlotPlayer<?> player, PlotArea plotArea, @Nullable String schematic,
int size_x, int size_z
int sizeX, int sizeZ
) {
super(null);
this.player = player;
this.plotArea = plotArea;
this.schematic = schematic;
this.size_x = size_x;
this.size_z = size_z;
this.sizeX = sizeX;
this.sizeZ = sizeZ;
}
/**
* Returns null as the plots to be claimed haven't been chosen yet. This will depend on the size of the auto
* ({@link PlayerAutoPlotEvent#setSizeX(int)} and {@link PlayerAutoPlotEvent#setSizeZ(int)}). To see which plots have been
* chosen, see {@link PlayerAutoPlotsChosenEvent}.
*
* @return null
*/
@Override
public @Nullable Plot getPlot() {
return null;
}
/**
@ -99,20 +112,72 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
return this.plotArea;
}
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeX()}
*/
@Deprecated(forRemoval = true)
public int getSize_x() {
return this.size_x;
return getSizeX();
}
public void setSize_x(int size_x) {
this.size_x = size_x;
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeX(int)} )}
*/
@Deprecated(forRemoval = true)
public void setSize_x(int sizeX) {
setSizeX(sizeX);
}
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeZ()}
*/
@Deprecated(forRemoval = true)
public int getSize_z() {
return this.size_z;
return getSizeZ();
}
public void setSize_z(int size_z) {
this.size_z = size_z;
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeZ(int)} )}
*/
@Deprecated(forRemoval = true)
public void setSize_z(int sizeZ) {
setSizeZ(sizeZ);
}
/**
* Get the x size of the auto-area
*
* @return x size
*/
public int getSizeX() {
return this.sizeX;
}
/**
* Set the x size of the auto-area
*
* @param sizeX x size
*/
public void setSizeX(int sizeX) {
this.sizeX = sizeX;
}
/**
* Get the z size of the auto-area
*
* @return z size
*/
public int getSizeZ() {
return this.sizeZ;
}
/**
* Set the z size of the auto-area
*
* @param sizeZ z size
*/
public void setSizeZ(int sizeZ) {
this.sizeZ = sizeZ;
}
}

View File

@ -0,0 +1,86 @@
/*
* _____ _ _ _____ _
* | __ \| | | | / ____| | |
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| |
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2021 IntellectualSites
*
* 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 com.plotsquared.core.plot.Plot;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Collections;
import java.util.List;
/**
* Event fired when the plots that are to be claimed by a player executing a /plot auto have been chosen. It contains an
* unmodifiable list of the plots selected. This may be of length 0. This event is effectively cancellable by setting the list
* of plots to an empty list.
*/
public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent {
private Result eventResult;
private List<Plot> plots;
/**
* PlayerAutoPlotsChosenEvent: Called when one or more plots are chosen for a /plot auto
*
* @param player Player that executed the auto
* @param plots Plots that have been chosen to be set to the player
*/
public PlayerAutoPlotsChosenEvent(PlotPlayer<?> player, List<Plot> plots) {
super(player, plots.size() > 0 ? plots.get(0) : null);
this.plots = Collections.unmodifiableList(plots);
}
/**
* Returns the plot at index 0 in the list of plots selected. May be null if the list was of length 0.
*
* @return plot at index 0 or null.
*/
@Override
public @Nullable Plot getPlot() {
return super.getPlot();
}
/**
* Get the immutable list of plots selected to be claimed by the player. May be of length 0.
*
* @return immutable list.
*/
public @NonNull List<Plot> getPlots() {
return plots;
}
/**
* Set the plots to be claimed by the player.
*
* @param plots list of plots.
*/
public void setPlots(final @NonNull List<Plot> plots) {
this.plots = List.copyOf(plots);
}
}

View File

@ -35,18 +35,39 @@ import com.plotsquared.core.plot.Plot;
public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements CancellablePlotEvent {
private final Location from;
private final TeleportCause cause;
private Result eventResult;
/**
* @deprecated use {@link PlayerTeleportToPlotEvent#PlayerTeleportToPlotEvent(PlotPlayer, Location, Plot, TeleportCause)}.
* You should not be creating events in the first place.
*/
@Deprecated(forRemoval = true)
public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot) {
this(player, from, plot, TeleportCause.UNKNOWN);
}
/**
* PlayerTeleportToPlotEvent: Called when a player teleports to a plot
*
* @param player That was teleported
* @param from Start location
* @param plot Plot to which the player was teleported
* @param cause Why the teleport is being completed
*/
public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot) {
public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) {
super(player, plot);
this.from = from;
this.cause = cause;
}
/**
* Get the teleport cause
*
* @return TeleportCause
*/
public TeleportCause getCause() {
return cause;
}
/**

View File

@ -0,0 +1,57 @@
/*
* _____ _ _ _____ _
* | __ \| | | | / ____| | |
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| |
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2021 IntellectualSites
*
* 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.plot.Plot;
/**
* To be used as a notification that a plot has been claimed. For cancelling events, see {@link PlayerClaimPlotEvent}
*/
public class PlotClaimedNotifyEvent extends PlotEvent {
private final boolean auto;
/**
* New event instance.
*
* @param plot Plot that was claimed
* @param auto If the plot was claimed using /plot auto
*/
public PlotClaimedNotifyEvent(Plot plot, boolean auto) {
super(plot);
this.auto = auto;
}
/**
* If the plot was claimed using /plot auto
*
* @return if claimed with auto
*/
public boolean wasAuto() {
return auto;
}
}

View File

@ -42,7 +42,7 @@ public abstract class PlotEvent {
*
* @return Plot
*/
public final Plot getPlot() {
public Plot getPlot() {
return this.plot;
}

View File

@ -25,8 +25,48 @@
*/
package com.plotsquared.core.events;
import com.google.common.collect.Sets;
import java.util.EnumSet;
import java.util.Set;
/**
* The reason for an internal player teleport.
*/
public enum TeleportCause {
COMMAND,
COMMAND_AREA_CREATE,
COMMAND_AREA_TELEPORT,
COMMAND_AUTO,
COMMAND_CLAIM,
COMMAND_CLEAR,
COMMAND_CLUSTER_TELEPORT,
COMMAND_DELETE,
COMMAND_HOME,
COMMAND_LIKE,
COMMAND_MIDDLE,
COMMAND_RATE,
COMMAND_SETUP,
COMMAND_TEMPLATE,
COMMAND_VISIT,
DEATH,
DENIED,
KICK,
LOGIN,
PLUGIN,
UNKNOWN
UNKNOWN;
public static final class CauseSets {
public static final Set<TeleportCause> COMMAND = Sets.immutableEnumSet(EnumSet.range(
TeleportCause.COMMAND,
TeleportCause.COMMAND_VISIT
));
public static final Set<TeleportCause> PLUGIN = Sets.immutableEnumSet(EnumSet.range(
TeleportCause.DEATH,
TeleportCause.PLUGIN
));
}
}

View File

@ -473,7 +473,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
*/
public void plotkick(Location location) {
setMeta("kick", true);
teleport(location);
teleport(location, TeleportCause.KICK);
deleteMeta("kick");
}
@ -712,7 +712,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
if (plot.isLoaded()) {
TaskManager.runTask(() -> {
if (getMeta("teleportOnLogin", true)) {
teleport(location);
teleport(location, TeleportCause.LOGIN);
sendMessage(
TranslatableCaption.of("teleport.teleported_to_plot"));
}
@ -724,7 +724,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
result -> TaskManager.runTask(() -> {
if (getMeta("teleportOnLogin", true)) {
if (plot.isLoaded()) {
teleport(location);
teleport(location, TeleportCause.LOGIN);
sendMessage(TranslatableCaption
.of("teleport.teleported_to_plot"));
}

View File

@ -1666,6 +1666,7 @@ public class Plot {
return base.settings != null && base.settings.getRatings() != null;
}
@Deprecated(forRemoval = true)
public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic) {
if (!canClaim(player)) {
return false;
@ -1673,8 +1674,26 @@ public class Plot {
return claim(player, teleport, schematic, true);
}
@Deprecated(forRemoval = true)
public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB) {
return claim(player, teleport, schematic, updateDB, false);
}
/**
* Claim the plot
*
* @param player The player to set the owner to
* @param teleport If the player should be teleported
* @param schematic The schematic name to paste on the plot
* @param updateDB If the database should be updated
* @param auto If the plot is being claimed by a /plot auto
* @return success
*/
public boolean claim(
final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB,
boolean auto
) {
this.eventDispatcher.callPlotClaimedNotify(this, auto);
if (updateDB) {
if (!this.getPlotModificationManager().create(player.getUUID(), true)) {
LOGGER.error("Player {} attempted to claim plot {}, but the database failed to update", player.getName(),
@ -1689,7 +1708,7 @@ public class Plot {
this.getPlotModificationManager().setSign(player.getName());
player.sendMessage(TranslatableCaption.of("working.claimed"), Template.of("plot", this.getId().toString()));
if (teleport && Settings.Teleport.ON_CLAIM) {
teleportPlayer(player, TeleportCause.COMMAND, result -> {
teleportPlayer(player, auto ? TeleportCause.COMMAND_AUTO : TeleportCause.COMMAND_CLAIM, result -> {
});
}
PlotArea plotworld = getArea();
@ -2570,7 +2589,7 @@ public class Plot {
*/
public void teleportPlayer(final PlotPlayer<?> player, TeleportCause cause, Consumer<Boolean> resultConsumer) {
Plot plot = this.getBasePlot(false);
Result result = this.eventDispatcher.callTeleport(player, player.getLocation(), plot).getEventResult();
Result result = this.eventDispatcher.callTeleport(player, player.getLocation(), plot, cause).getEventResult();
if (result == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),

View File

@ -230,7 +230,7 @@ public enum CommonSetupSteps implements SetupStep {
world = builder.setupManager().setupWorld(builder);
}
try {
plotPlayer.teleport(PlotSquared.platform().worldUtil().getSpawn(world), TeleportCause.COMMAND);
plotPlayer.teleport(PlotSquared.platform().worldUtil().getSpawn(world), TeleportCause.COMMAND_SETUP);
} catch (Exception e) {
plotPlayer.sendMessage(TranslatableCaption.of("errors.error_console"));
e.printStackTrace();

View File

@ -29,6 +29,7 @@ import com.google.common.eventbus.EventBus;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.events.PlayerAutoPlotEvent;
import com.plotsquared.core.events.PlayerAutoPlotsChosenEvent;
import com.plotsquared.core.events.PlayerClaimPlotEvent;
import com.plotsquared.core.events.PlayerEnterPlotEvent;
import com.plotsquared.core.events.PlayerLeavePlotEvent;
@ -38,6 +39,7 @@ import com.plotsquared.core.events.PlayerPlotTrustedEvent;
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
import com.plotsquared.core.events.PlotAutoMergeEvent;
import com.plotsquared.core.events.PlotChangeOwnerEvent;
import com.plotsquared.core.events.PlotClaimedNotifyEvent;
import com.plotsquared.core.events.PlotClearEvent;
import com.plotsquared.core.events.PlotComponentSetEvent;
import com.plotsquared.core.events.PlotDeleteEvent;
@ -48,6 +50,7 @@ import com.plotsquared.core.events.PlotFlagRemoveEvent;
import com.plotsquared.core.events.PlotMergeEvent;
import com.plotsquared.core.events.PlotRateEvent;
import com.plotsquared.core.events.PlotUnlinkEvent;
import com.plotsquared.core.events.TeleportCause;
import com.plotsquared.core.listener.PlayerBlockEventType;
import com.plotsquared.core.location.Direction;
import com.plotsquared.core.location.Location;
@ -75,11 +78,13 @@ import com.sk89q.worldedit.world.block.BlockTypes;
import net.kyori.adventure.text.minimessage.Template;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.jetbrains.annotations.ApiStatus;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@ApiStatus.Internal
public class EventDispatcher {
private final EventBus eventBus = new EventBus("PlotSquaredEvents");
@ -130,8 +135,23 @@ public class EventDispatcher {
return event;
}
public PlayerTeleportToPlotEvent callTeleport(PlotPlayer<?> player, Location from, Plot plot) {
PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, plot);
public PlayerAutoPlotsChosenEvent callAutoPlotsChosen(
PlotPlayer<?> player, List<Plot> plots
) {
PlayerAutoPlotsChosenEvent event =
new PlayerAutoPlotsChosenEvent(player, plots);
callEvent(event);
return event;
}
public PlotClaimedNotifyEvent callPlotClaimedNotify(Plot plot, boolean auto) {
PlotClaimedNotifyEvent event = new PlotClaimedNotifyEvent(plot, auto);
callEvent(event);
return event;
}
public PlayerTeleportToPlotEvent callTeleport(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) {
PlayerTeleportToPlotEvent event = new PlayerTeleportToPlotEvent(player, from, plot, cause);
callEvent(event);
return event;
}
@ -263,7 +283,7 @@ public class EventDispatcher {
final Plot plot = player.getCurrentPlot();
if (Settings.Teleport.ON_LOGIN && plot != null && !(plot
.getArea() instanceof SinglePlotArea)) {
TaskManager.runTask(() -> plot.teleportPlayer(player, result -> {
TaskManager.runTask(() -> plot.teleportPlayer(player, TeleportCause.LOGIN, result -> {
}));
player.sendMessage(TranslatableCaption.of("teleport.teleported_to_road"));
}
@ -272,7 +292,7 @@ public class EventDispatcher {
public void doRespawnTask(final PlotPlayer<?> player) {
final Plot plot = player.getCurrentPlot();
if (Settings.Teleport.ON_DEATH && plot != null) {
TaskManager.runTask(() -> plot.teleportPlayer(player, result -> {
TaskManager.runTask(() -> plot.teleportPlayer(player, TeleportCause.DEATH, result -> {
}));
player.sendMessage(TranslatableCaption.of("teleport.teleported_to_road"));
}

View File

@ -68,7 +68,7 @@ public final class AutoClaimFinishTask implements Callable<Boolean> {
player.sendMessage(TranslatableCaption.of("errors.no_free_plots"));
return false;
}
plot.claim(player, true, schematic, false);
plot.claim(player, true, schematic, false, true);
if (area.isAutoMerge()) {
PlotMergeEvent event = this.eventDispatcher.callMerge(plot, Direction.ALL, Integer.MAX_VALUE, player);
if (event.getEventResult() == Result.DENY) {

View File

@ -16,7 +16,7 @@ plugins {
idea
}
var ver by extra("6.0.10")
var ver by extra("6.1.0")
var versuffix by extra("-SNAPSHOT")
val versionsuffix: String? by project
if (versionsuffix != null) {