Compare commits

..

2 Commits

Author SHA1 Message Date
Pierre Maurice Schwang
5ed4dee99e fix: block nbt population 2025-08-24 02:07:16 +02:00
Pierre Maurice Schwang
c592a2ecc8 chore: 1.17 is not supported anymore 2025-08-24 02:06:51 +02:00
25 changed files with 266 additions and 925 deletions

View File

@@ -90,12 +90,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
this.plotGenerator = generator;
this.platformGenerator = this;
this.populators = new ArrayList<>();
int minecraftMinorVersion = PlotSquared.platform().serverVersion()[1];
if (minecraftMinorVersion >= 17) {
this.populators.add(new BlockStatePopulator(this.plotGenerator));
} else {
this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator));
}
this.populators.add(new BlockStatePopulator(this.plotGenerator));
this.full = true;
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
this.biomeProvider = new BukkitPlotBiomeProvider();

View File

@@ -36,6 +36,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Random;
@Deprecated(since = "TODO")
final class LegacyBlockStatePopulator extends BlockPopulator {
private final IndependentPlotGenerator plotGenerator;

View File

@@ -47,7 +47,6 @@ import org.bukkit.event.entity.LingeringPotionSplashEvent;
import org.bukkit.event.entity.PotionSplashEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.player.PlayerEggThrowEvent;
import org.bukkit.projectiles.BlockProjectileSource;
import org.bukkit.projectiles.ProjectileSource;
import org.checkerframework.checker.nullness.qual.NonNull;
@@ -158,26 +157,14 @@ public class ProjectileEventListener implements Listener {
@EventHandler
public void onProjectileHit(ProjectileHitEvent event) {
if (cancelProjectileHit(event.getEntity())) {
event.setCancelled(true);
}
}
@EventHandler
public void onPlayerEggThrow(PlayerEggThrowEvent event) {
if (cancelProjectileHit(event.getEgg())) {
event.setHatching(false);
}
}
private boolean cancelProjectileHit(Projectile entity) {
Projectile entity = event.getEntity();
Location location = BukkitUtil.adapt(entity.getLocation());
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
return false;
return;
}
PlotArea area = location.getPlotArea();
if (area == null) {
return false;
return;
}
Plot plot = area.getPlot(location);
ProjectileSource shooter = entity.getShooter();
@@ -185,14 +172,15 @@ public class ProjectileEventListener implements Listener {
if (!((Player) shooter).isOnline()) {
if (plot != null) {
if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) {
return false;
return;
}
} else if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true)) {
return false;
return;
}
entity.remove();
return true;
event.setCancelled(true);
return;
}
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
@@ -201,36 +189,38 @@ public class ProjectileEventListener implements Listener {
Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED
)) {
entity.remove();
return true;
event.setCancelled(true);
}
return false;
return;
}
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(
ProjectilesFlag.class) || (entity instanceof FishHook && plot.getFlag(
FishingFlag.class))) {
return false;
return;
}
entity.remove();
return true;
event.setCancelled(true);
return;
}
if (!(shooter instanceof Entity) && shooter != null) {
if (plot == null) {
entity.remove();
return true;
event.setCancelled(true);
return;
}
Location sLoc =
BukkitUtil.adapt(((BlockProjectileSource) shooter).getBlock().getLocation());
if (!area.contains(sLoc.getX(), sLoc.getZ())) {
entity.remove();
return true;
event.setCancelled(true);
return;
}
Plot sPlot = area.getOwnedPlotAbs(sLoc);
if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) {
entity.remove();
return true;
event.setCancelled(true);
}
}
return false;
}
}

View File

@@ -21,6 +21,7 @@ package com.plotsquared.bukkit.schematic;
import com.destroystokyo.paper.profile.PlayerProfile;
import com.destroystokyo.paper.profile.ProfileProperty;
import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.core.PlotSquared;
import com.sk89q.jnbt.ByteTag;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.jnbt.ListTag;
@@ -36,6 +37,8 @@ import org.apache.logging.log4j.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.World;
import org.bukkit.block.Banner;
import org.bukkit.block.Block;
@@ -44,25 +47,35 @@ import org.bukkit.block.Sign;
import org.bukkit.block.Skull;
import org.bukkit.block.banner.Pattern;
import org.bukkit.block.banner.PatternType;
import org.bukkit.block.sign.Side;
import org.bukkit.block.sign.SignSide;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.jetbrains.annotations.ApiStatus;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.UUID;
import java.util.function.BiConsumer;
// TODO: somehow unbreak this class so it doesn't fuck up the whole schematic population system due to MC updates
@ApiStatus.Internal
public class StateWrapper {
public CompoundTag tag;
private boolean paperErrorTextureSent = false;
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + StateWrapper.class.getSimpleName());
private static final boolean MODERN_SIGNS = PlotSquared.platform().serverVersion()[1] > 19;
private final Registry<PatternType> PATTERN_TYPE_REGISTRY = Objects.requireNonNull(Bukkit.getRegistry(PatternType.class));
private static boolean paperErrorTextureSent = false;
public CompoundTag tag;
public StateWrapper(CompoundTag tag) {
this.tag = tag;
@@ -212,9 +225,9 @@ public class StateWrapper {
if (type == null) {
continue;
}
int count = itemComp.getByte("Count");
int count = itemComp.containsKey("count") ? itemComp.getInt("count") : itemComp.getByte("Count");
int slot = itemComp.getByte("Slot");
CompoundTag tag = (CompoundTag) itemComp.getValue().get("tag");
CompoundTag tag = (CompoundTag) itemComp.getValue().get(itemComp.containsKey("tag") ? "tag" : "components");
BaseItemStack baseItemStack = new BaseItemStack(type, tag, count);
ItemStack itemStack = BukkitAdapter.adapt(baseItemStack);
inv.setItem(slot, itemStack);
@@ -223,82 +236,62 @@ public class StateWrapper {
return true;
}
case "sign" -> {
if (state instanceof Sign sign) {
sign.setLine(0, jsonToColourCode(tag.getString("Text1")));
sign.setLine(1, jsonToColourCode(tag.getString("Text2")));
sign.setLine(2, jsonToColourCode(tag.getString("Text3")));
sign.setLine(3, jsonToColourCode(tag.getString("Text4")));
state.update(true);
if (state instanceof Sign sign && this.restoreSign(sign)) {
state.update(true, false);
return true;
}
return false;
}
case "skull" -> {
if (state instanceof Skull skull) {
CompoundTag skullOwner = ((CompoundTag) this.tag.getValue().get("SkullOwner"));
if (skullOwner == null) {
return true;
}
String player = skullOwner.getString("Name");
if (player != null && !player.isEmpty()) {
try {
skull.setOwningPlayer(Bukkit.getOfflinePlayer(player));
skull.update(true);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
final CompoundTag properties = (CompoundTag) skullOwner.getValue().get("Properties");
if (properties == null) {
return false;
}
final ListTag textures = properties.getListTag("textures");
if (textures.getValue().isEmpty()) {
return false;
}
final CompoundTag textureCompound = (CompoundTag) textures.getValue().get(0);
if (textureCompound == null) {
return false;
}
String textureValue = textureCompound.getString("Value");
if (textureValue == null) {
return false;
}
if (!PaperLib.isPaper()) {
if (!paperErrorTextureSent) {
paperErrorTextureSent = true;
LOGGER.error("Failed to populate skull data in your road schematic - This is a Spigot limitation.");
}
return false;
}
final PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID());
profile.setProperty(new ProfileProperty("textures", textureValue));
skull.setPlayerProfile(profile);
skull.update(true);
if (state instanceof Skull skull && this.restoreSkull(skull)) {
skull.update(true, false);
return true;
}
return false;
}
case "banner" -> {
if (state instanceof Banner banner) {
List<Tag> patterns = this.tag.getListTag("Patterns").getValue();
if (patterns == null || patterns.isEmpty()) {
return false;
List<CompoundTag> patterns;
// "old" format
if ((patterns = this.tag.getList("Patterns", CompoundTag.class)) != null && !patterns.isEmpty()) {
banner.setPatterns(patterns.stream().map(compoundTag -> {
DyeColor color = DyeColor.getByWoolData((byte) compoundTag.getInt("Color"));
final PatternType patternType = PATTERN_TYPE_REGISTRY.get(Objects.requireNonNull(
NamespacedKey.fromString(compoundTag.getString("Pattern"))
));
if (color == null || patternType == null) {
return null;
}
return new Pattern(color, patternType);
}).filter(Objects::nonNull).toList());
banner.update(true, false);
return true;
}
banner.setPatterns(patterns.stream().map(t -> (CompoundTag) t).map(compoundTag -> {
DyeColor color = DyeColor.getByWoolData((byte) compoundTag.getInt("Color"));
PatternType patternType = PatternType.getByIdentifier(compoundTag.getString("Pattern"));
if (color == null || patternType == null) {
return null;
// "new" format - since 1.21.3-ish
if ((patterns = this.tag.getList("patterns", CompoundTag.class)) != null && !patterns.isEmpty()) {
for (final CompoundTag patternTag : patterns) {
final String color = patternTag.getString("color");
if (color.isEmpty()) {
continue;
}
final Tag pattern = patternTag.getValue().get("pattern");
if (pattern instanceof StringTag patternString && !patternString.getValue().isEmpty()) {
final PatternType patternType = PATTERN_TYPE_REGISTRY.get(Objects.requireNonNull(
NamespacedKey.fromString(patternString.getValue())
));
if (patternType == null) {
continue;
}
banner.addPattern(new Pattern(
DyeColor.legacyValueOf(color.toUpperCase(Locale.ROOT)),
patternType
));
}
// not supporting banner pattern definitions (no API available)
}
return new Pattern(color, patternType);
}).filter(Objects::nonNull).toList());
banner.update(true);
return true;
banner.update(true, false);
}
}
return false;
}
@@ -346,4 +339,150 @@ public class StateWrapper {
return data;
}
private boolean restoreSkull(Skull skull) {
boolean updated = false;
// can't support custom_name - Spigot does not provide any API for that
if (this.tag.containsKey("note_block_sound")) {
skull.setNoteBlockSound(NamespacedKey.fromString(this.tag.getString("note_block_sound")));
updated = true;
}
// modern format - MC 1.21.3-ish
if (this.tag.containsKey("profile")) {
final Tag profile = this.tag.getValue().get("profile");
if (profile instanceof StringTag stringTag) {
final String name = stringTag.getValue();
if (name != null && !name.isEmpty()) {
skull.setOwningPlayer(Bukkit.getOfflinePlayer(name));
return true;
}
return updated;
}
if (profile instanceof CompoundTag compoundTag) {
final List<Tag> properties = compoundTag.getList("properties");
if (properties != null && !properties.isEmpty()) {
if (!PaperLib.isPaper()) {
if (!paperErrorTextureSent) {
paperErrorTextureSent = true;
LOGGER.error("Failed to populate schematic skull data - this is a Spigot limitation.");
}
return updated;
}
for (final Tag propertyTag : properties) {
if (!(propertyTag instanceof CompoundTag property)) {
continue;
}
if (!property.getString("name").equals("textures")) {
continue;
}
final String value = property.getString("value");
final String signature = property.containsKey("signature") ? property.getString("signature") : null;
final PlayerProfile playerProfile = Bukkit.createProfile(UUID.randomUUID());
playerProfile.setProperty(new ProfileProperty("textures", value, signature));
skull.setPlayerProfile(playerProfile);
return true;
}
return updated;
}
final int[] id = compoundTag.getIntArray("id");
if (id != null && id.length == 4) {
skull.setOwningPlayer(Bukkit.getOfflinePlayer(new UUID(
(long) id[0] << 32 | (id[1] & 0xFFFFFFFFL),
(long) id[2] << 32 | (id[3] & 0xFFFFFFFFL)
)));
return true;
}
final String name = compoundTag.getString("name");
if (name != null && !name.isEmpty()) {
skull.setOwningPlayer(Bukkit.getOfflinePlayer(name));
return true;
}
}
}
// "Old" MC format (idk when it got updated)
if (this.tag.getValue().get("SkullOwner") instanceof CompoundTag skullOwner) {
if (skullOwner.getValue().get("Name") instanceof StringTag ownerName && !ownerName.getValue().isEmpty()) {
skull.setOwningPlayer(Bukkit.getOfflinePlayer(ownerName.getValue()));
skull.update(true);
return true;
}
if (skullOwner.getValue().get("Properties") instanceof CompoundTag properties) {
if (!paperErrorTextureSent) {
paperErrorTextureSent = true;
LOGGER.error("Failed to populate schematic skull data - this is a Spigot limitation.");
return updated;
}
final List<CompoundTag> textures = properties.getList("textures", CompoundTag.class);
if (textures.isEmpty()) {
return updated;
}
final String value = textures.get(0).getString("Value");
if (!value.isEmpty()) {
final PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID());
profile.setProperty(new ProfileProperty("textures", value));
skull.setPlayerProfile(profile);
return true;
}
}
}
return updated;
}
private boolean restoreSign(Sign sign) {
// "old" format (pre 1.20)
if (this.tag.containsKey("Text1") || this.tag.containsKey("Text2")
|| this.tag.containsKey("Text3") || this.tag.containsKey("Text4")) {
if (!MODERN_SIGNS) {
sign.setLine(0, jsonToColourCode(tag.getString("Text1")));
sign.setLine(1, jsonToColourCode(tag.getString("Text2")));
sign.setLine(2, jsonToColourCode(tag.getString("Text3")));
sign.setLine(3, jsonToColourCode(tag.getString("Text4")));
sign.setGlowingText(tag.getByte("GlowingText") == 1);
if (tag.getValue().get("Color") instanceof StringTag colorTag && !colorTag.getValue().isEmpty()) {
sign.setColor(DyeColor.legacyValueOf(colorTag.getValue()));
}
return true;
}
SignSide front = sign.getSide(Side.FRONT);
front.setLine(0, jsonToColourCode(tag.getString("Text1")));
front.setLine(1, jsonToColourCode(tag.getString("Text2")));
front.setLine(2, jsonToColourCode(tag.getString("Text3")));
front.setLine(3, jsonToColourCode(tag.getString("Text4")));
front.setGlowingText(tag.getByte("GlowingText") == 1);
if (tag.getValue().get("Color") instanceof StringTag colorTag && !colorTag.getValue().isEmpty()) {
front.setColor(DyeColor.legacyValueOf(colorTag.getValue()));
}
return true;
}
// "modern" format
if (this.tag.containsKey("front_text") || this.tag.containsKey("back_text") || this.tag.containsKey("is_waxed")) {
// the new format on older servers shouldn't be possible, I hope?
sign.setWaxed(this.tag.getByte("is_waxed") == 1);
BiConsumer<SignSide, CompoundTag> sideSetter = (signSide, compoundTag) -> {
signSide.setGlowingText(compoundTag.getByte("has_glowing_text") == 1);
if (tag.getValue().get("color") instanceof StringTag colorTag && !colorTag.getValue().isEmpty()) {
signSide.setColor(DyeColor.legacyValueOf(colorTag.getValue()));
}
final List<Tag> lines = compoundTag.getList("messages");
for (int i = 0; i < Math.min(lines.size(), 4); i++) {
final Tag line = lines.get(i);
if (line instanceof StringTag stringLine) {
signSide.setLine(i, jsonToColourCode(stringLine.getValue()));
continue;
}
// TODO: how tf support list of components + components - utilize paper + adventure?
}
};
if (this.tag.getValue().get("front_text") instanceof CompoundTag frontText) {
sideSetter.accept(sign.getSide(Side.FRONT), frontText);
}
if (this.tag.getValue().get("back_text") instanceof CompoundTag backText) {
sideSetter.accept(sign.getSide(Side.BACK), backText);
}
return true;
}
return false;
}
}

View File

@@ -23,8 +23,6 @@ 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.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
@@ -153,41 +151,20 @@ public class Add extends Command {
return;
}
// Success
confirm.run(
this, () -> {
for (UUID uuid : uuids) {
if (this.eventDispatcher.callPlayerAdd(
player,
plot,
uuid,
PlayerPlotAddRemoveEvent.Reason.COMMAND
).getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
TagResolver.resolver("value", Tag.inserting(Component.text("Add")))
);
continue;
confirm.run(this, () -> {
for (UUID uuid : uuids) {
if (uuid != DBFunc.EVERYONE) {
if (!plot.removeTrusted(uuid)) {
if (plot.getDenied().contains(uuid)) {
plot.removeDenied(uuid);
}
if (uuid != DBFunc.EVERYONE) {
if (!plot.removeTrusted(uuid)) {
if (plot.getDenied().contains(uuid)) {
plot.removeDenied(uuid);
}
}
}
plot.addMember(uuid);
this.eventDispatcher.callMember(player, plot, uuid, true);
this.eventDispatcher.callPostAdded(
player,
plot,
uuid,
false,
PlayerPlotAddRemoveEvent.Reason.COMMAND
);
player.sendMessage(TranslatableCaption.of("member.member_added"));
}
}, null
);
}
plot.addMember(uuid);
this.eventDispatcher.callMember(player, plot, uuid, true);
player.sendMessage(TranslatableCaption.of("member.member_added"));
}
}, null);
} catch (final Throwable exception) {
future.completeExceptionally(exception);
return;

View File

@@ -23,8 +23,6 @@ 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.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.events.TeleportCause;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.permissions.Permission;
@@ -127,29 +125,21 @@ public class Deny extends SubCommand {
);
return;
} else {
if (this.eventDispatcher
.callPlayerDeny(player, plot, uuid, PlayerPlotAddRemoveEvent.Reason.COMMAND)
.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
TagResolver.resolver("value", Tag.inserting(Component.text("Deny")))
);
continue;
}
if (uuid != DBFunc.EVERYONE) {
plot.removeMember(uuid);
plot.removeTrusted(uuid);
}
plot.addDenied(uuid);
this.eventDispatcher.callDenied(player, plot, uuid, true);
this.eventDispatcher.callPostDenied(player, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.COMMAND);
if (!uuid.equals(DBFunc.EVERYONE)) {
handleKick(PlotSquared.platform().playerManager().getPlayerIfExists(uuid), plot);
} else {
for (PlotPlayer<?> plotPlayer : plot.getPlayersInPlot()) {
if (plot.isDenied(plotPlayer.getUUID())) {
handleKick(plotPlayer, plot);
// Ignore plot-owners
if (plot.isAdded(plotPlayer.getUUID())) {
continue;
}
handleKick(plotPlayer, plot);
}
}
}

View File

@@ -20,8 +20,6 @@ package com.plotsquared.core.command;
import com.google.inject.Inject;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.events.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.EventDispatcher;
@@ -63,22 +61,11 @@ public class Leave extends Command {
} else {
UUID uuid = player.getUUID();
if (plot.isAdded(uuid)) {
if (this.eventDispatcher
.callPlayerRemove(player, plot, uuid, PlayerPlotAddRemoveEvent.Reason.COMMAND)
.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
TagResolver.resolver("value", Tag.inserting(Component.text("Leave")))
);
return CompletableFuture.completedFuture(true);
}
if (plot.removeTrusted(uuid)) {
this.eventDispatcher.callTrusted(player, plot, uuid, false);
this.eventDispatcher.callPostTrusted(player, plot, uuid, false, PlayerPlotAddRemoveEvent.Reason.COMMAND);
}
if (plot.removeMember(uuid)) {
this.eventDispatcher.callMember(player, plot, uuid, false);
this.eventDispatcher.callPostAdded(player, plot, uuid, false, PlayerPlotAddRemoveEvent.Reason.COMMAND);
}
player.sendMessage(
TranslatableCaption.of("member.plot_left"),

View File

@@ -21,8 +21,6 @@ package com.plotsquared.core.command;
import com.google.inject.Inject;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.events.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
@@ -86,48 +84,33 @@ public class Remove extends SubCommand {
return;
} else if (!uuids.isEmpty()) {
for (UUID uuid : uuids) {
if (this.eventDispatcher
.callPlayerRemove(player, plot, uuid, PlayerPlotAddRemoveEvent.Reason.COMMAND)
.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
TagResolver.resolver("value", Tag.inserting(Component.text("Remove")))
);
continue;
}
if (plot.getTrusted().contains(uuid)) {
if (plot.removeTrusted(uuid)) {
this.eventDispatcher.callTrusted(player, plot, uuid, false);
this.eventDispatcher.callPostTrusted(player, plot, uuid, false, PlayerPlotAddRemoveEvent.Reason.COMMAND);
count++;
}
} else if (plot.getMembers().contains(uuid)) {
if (plot.removeMember(uuid)) {
this.eventDispatcher.callMember(player, plot, uuid, false);
this.eventDispatcher.callPostAdded(player, plot, uuid, false, PlayerPlotAddRemoveEvent.Reason.COMMAND);
count++;
}
} else if (plot.getDenied().contains(uuid)) {
if (plot.removeDenied(uuid)) {
this.eventDispatcher.callDenied(player, plot, uuid, false);
this.eventDispatcher.callPostDenied(player, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.COMMAND);
count++;
}
} else if (uuid == DBFunc.EVERYONE) {
count += plot.getTrusted().size();
if (plot.removeTrusted(uuid)) {
this.eventDispatcher.callTrusted(player, plot, uuid, false);
this.eventDispatcher.callPostTrusted(player, plot, uuid, false, PlayerPlotAddRemoveEvent.Reason.COMMAND);
}
count += plot.getMembers().size();
if (plot.removeMember(uuid)) {
this.eventDispatcher.callMember(player, plot, uuid, false);
this.eventDispatcher.callPostAdded(player, plot, uuid, false, PlayerPlotAddRemoveEvent.Reason.COMMAND);
}
count += plot.getDenied().size();
if (plot.removeDenied(uuid)) {
this.eventDispatcher.callDenied(player, plot, uuid, false);
this.eventDispatcher.callPostDenied(player, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.COMMAND);
}
}
}

View File

@@ -23,8 +23,6 @@ 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.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
@@ -152,43 +150,23 @@ public class Trust extends Command {
return;
}
// Success
confirm.run(
this, () -> {
for (UUID uuid : uuids) {
if (this.eventDispatcher
.callPlayerTrust(player, currentPlot, uuid, PlayerPlotAddRemoveEvent.Reason.COMMAND)
.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
TagResolver.resolver("value", Tag.inserting(Component.text("Trust")))
);
return;
confirm.run(this, () -> {
for (UUID uuid : uuids) {
if (uuid != DBFunc.EVERYONE) {
if (!currentPlot.removeMember(uuid)) {
if (currentPlot.getDenied().contains(uuid)) {
currentPlot.removeDenied(uuid);
}
if (uuid != DBFunc.EVERYONE) {
if (!currentPlot.removeMember(uuid)) {
if (currentPlot.getDenied().contains(uuid)) {
currentPlot.removeDenied(uuid);
}
}
}
currentPlot.addTrusted(uuid);
this.eventDispatcher.callTrusted(player, currentPlot, uuid, true);
this.eventDispatcher.callPostTrusted(
player,
currentPlot,
uuid,
false,
PlayerPlotAddRemoveEvent.Reason.COMMAND
);
player.sendMessage(TranslatableCaption.of("trusted.trusted_added"));
}
}, null
);
}
currentPlot.addTrusted(uuid);
this.eventDispatcher.callTrusted(player, currentPlot, uuid, true);
player.sendMessage(TranslatableCaption.of("trusted.trusted_added"));
}
}, null);
}
future.complete(true);
}
);
future.complete(true);
});
return CompletableFuture.completedFuture(true);
}

View File

@@ -1,45 +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.events;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Called when a player is going to be added to a plot
*
* @since TODO
*/
public class PlayerPlotAddEvent extends PlayerPlotAddRemoveCancellableEvent {
/**
* Called when a player will be added to a plot
*
* @param initiator Player that initiated the event
* @param plot Plot in which the event occurred
* @param player Player that will be added
* @param reason The reason for the add
*/
public PlayerPlotAddEvent(PlotPlayer<?> initiator, Plot plot, UUID player, Reason reason) {
super(initiator, plot, player, reason);
}
}

View File

@@ -1,55 +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.events;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.UUID;
/**
* Parent class for the varies events regarding a player being added/removed/denied/trusted
*
* @since TODO
*/
public class PlayerPlotAddRemoveCancellableEvent extends PlayerPlotAddRemoveEvent implements CancellablePlotEvent {
private Result eventResult;
protected PlayerPlotAddRemoveCancellableEvent(
final PlotPlayer<?> initiator,
Plot plot,
final UUID player,
final Reason reason
) {
super(initiator, plot, player, reason);
}
@Override
public @Nullable Result getEventResult() {
return eventResult;
}
@Override
public void setEventResult(@Nullable final Result eventResult) {
this.eventResult = eventResult;
}
}

View File

@@ -1,88 +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.events;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.UUID;
/**
* Parent class for the varies events regarding a player being added/removed/denied/trusted
*
* @since TODO
*/
public class PlayerPlotAddRemoveEvent extends PlotEvent {
private final Reason reason;
private final PlotPlayer<?> initiator;
private final UUID player;
protected PlayerPlotAddRemoveEvent(final PlotPlayer<?> initiator, Plot plot, final UUID player, final Reason reason) {
super(plot);
this.initiator = initiator;
this.player = player;
this.reason = reason;
}
/**
* The player to be added/denied/removed/trusted.
*
* @return UUID
*/
public UUID getPlayer() {
return this.player;
}
/**
* The player initiating the action. May be null (if a player, or a {@link com.plotsquared.core.player.ConsolePlayer}.
*
* @return PlotPlayer
*/
@Nullable
public PlotPlayer<?> getInitiator() {
return this.initiator;
}
/**
* Get the reason the player is being added/removed/denied/trusted
*
* @return Reason
*/
public Reason getReason() {
return this.reason;
}
public enum Reason {
/**
* If a plot merge caused the player to be added/removed/denied/trusted
*/
MERGE,
/**
* If a command caused the player to be added/removed/denied/trusted
*/
COMMAND,
/**
* If something unknown caused the player to be added/removed/denied/trusted
*/
UNKNOWN
}
}

View File

@@ -23,10 +23,6 @@ import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotDeniedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public class PlayerPlotDeniedEvent extends PlotEvent {
private final PlotPlayer<?> initiator;
@@ -40,9 +36,7 @@ public class PlayerPlotDeniedEvent extends PlotEvent {
* @param plot Plot in which the event occurred
* @param player Player that was denied/un-denied
* @param added {@code true} of add to deny list, {@code false} if removed
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotDeniedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public PlayerPlotDeniedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) {
super(plot);
this.initiator = initiator;
@@ -54,9 +48,7 @@ public class PlayerPlotDeniedEvent extends PlotEvent {
* If a user was added.
*
* @return boolean
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotDeniedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public boolean wasAdded() {
return this.added;
}
@@ -65,9 +57,7 @@ public class PlayerPlotDeniedEvent extends PlotEvent {
* The player added/removed.
*
* @return UUID
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotDeniedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public UUID getPlayer() {
return this.player;
}
@@ -76,9 +66,7 @@ public class PlayerPlotDeniedEvent extends PlotEvent {
* The player initiating the action.
*
* @return PlotPlayer
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotDeniedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public PlotPlayer<?> getInitiator() {
return this.initiator;
}

View File

@@ -1,45 +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.events;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Called when a player is going to be denied from a plot
*
* @since TODO
*/
public class PlayerPlotDenyEvent extends PlayerPlotAddRemoveCancellableEvent {
/**
* Called when a player will be denied from a plot
*
* @param initiator Player that initiated the event
* @param plot Plot in which the event occurred
* @param player Player that will be denied
* @param reason The reason for the deny
*/
public PlayerPlotDenyEvent(PlotPlayer<?> initiator, Plot plot, UUID player, Reason reason) {
super(initiator, plot, player, reason);
}
}

View File

@@ -24,9 +24,8 @@ import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotAddedEvent}
*
*/
@Deprecated(forRemoval = true, since = "TODO")
public class PlayerPlotHelperEvent extends PlotEvent {
private final PlotPlayer<?> initiator;
@@ -40,9 +39,7 @@ public class PlayerPlotHelperEvent extends PlotEvent {
* @param plot Plot in which the event occurred
* @param player Player that was added/removed from the helper list
* @param added {@code true} if the player was added, {@code false} if the player was removed
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotAddedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public PlayerPlotHelperEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) {
super(plot);
this.initiator = initiator;
@@ -54,9 +51,7 @@ public class PlayerPlotHelperEvent extends PlotEvent {
* If a player was added
*
* @return boolean
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotAddedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public boolean wasAdded() {
return this.added;
}
@@ -65,9 +60,7 @@ public class PlayerPlotHelperEvent extends PlotEvent {
* The UUID added/removed
*
* @return UUID
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotAddedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public UUID getPlayer() {
return this.player;
}
@@ -76,9 +69,7 @@ public class PlayerPlotHelperEvent extends PlotEvent {
* The player initiating the action
*
* @return PlotPlayer
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotAddedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public PlotPlayer<?> getInitiator() {
return this.initiator;
}

View File

@@ -1,45 +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.events;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Called when a player is going to be removed from a plot (could be removed from added, trusted, or denied)
*
* @since TODO
*/
public class PlayerPlotRemoveEvent extends PlayerPlotAddRemoveCancellableEvent {
/**
* Called when a player is going to be removed from a plot (could be removed from added, trusted, or denied)
*
* @param initiator Player that initiated the event
* @param plot Plot in which the event occurred
* @param player Player that will be removed
* @param reason The reason for the remove
*/
public PlayerPlotRemoveEvent(PlotPlayer<?> initiator, Plot plot, UUID player, Reason reason) {
super(initiator, plot, player, reason);
}
}

View File

@@ -1,45 +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.events;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Called when a player is going to be trusted to a plot
*
* @since TODO
*/
public class PlayerPlotTrustEvent extends PlayerPlotAddRemoveCancellableEvent {
/**
* Called when a player will be trusted to a plot
*
* @param initiator Player that initiated the event
* @param plot Plot in which the event occurred
* @param player Player that will be trusted
* @param reason The reason for the trust
*/
public PlayerPlotTrustEvent(PlotPlayer<?> initiator, Plot plot, UUID player, Reason reason) {
super(initiator, plot, player, reason);
}
}

View File

@@ -23,10 +23,6 @@ import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotTrustedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public class PlayerPlotTrustedEvent extends PlotEvent {
private final PlotPlayer<?> initiator;
@@ -40,9 +36,7 @@ public class PlayerPlotTrustedEvent extends PlotEvent {
* @param plot Plot in which the event occurred
* @param player Player that was added/removed from the trusted list
* @param added {@code true} if the player was added, {@code false} if the player was removed
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotTrustedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public PlayerPlotTrustedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) {
super(plot);
this.initiator = initiator;
@@ -54,9 +48,7 @@ public class PlayerPlotTrustedEvent extends PlotEvent {
* If a player was added
*
* @return boolean
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotTrustedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public boolean wasAdded() {
return this.added;
}
@@ -65,9 +57,7 @@ public class PlayerPlotTrustedEvent extends PlotEvent {
* The UUID added/removed
*
* @return UUID
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotTrustedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public UUID getPlayer() {
return this.player;
}
@@ -76,9 +66,7 @@ public class PlayerPlotTrustedEvent extends PlotEvent {
* The player initiating the action
*
* @return PlotPlayer
* @deprecated Use {@link com.plotsquared.core.events.post.PostPlayerPlotTrustedEvent}
*/
@Deprecated(forRemoval = true, since = "TODO")
public PlotPlayer<?> getInitiator() {
return this.initiator;
}

View File

@@ -1,56 +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.events.post;
import com.plotsquared.core.events.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Parent class for events covering players being added/removed to added/trusted/denied lists.
*
* @since TODO
*/
public sealed class PostPlayerPlotAddRemoveEvent extends PlayerPlotAddRemoveEvent permits PostPlayerPlotAddedEvent,
PostPlayerPlotDeniedEvent, PostPlayerPlotTrustedEvent {
private final boolean added;
protected PostPlayerPlotAddRemoveEvent(
final PlotPlayer<?> initiator,
final Plot plot,
final UUID player,
final Reason reason,
boolean added
) {
super(initiator, plot, player, reason);
this.added = added;
}
/**
* Get if the player was added to a list, or removed.
*/
public boolean added() {
return added;
}
}

View File

@@ -1,46 +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.events.post;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Called when a player is added to a plot
*
* @since TODO
*/
public final class PostPlayerPlotAddedEvent extends PostPlayerPlotAddRemoveEvent {
/**
* PlayerPlotHelperEvent: Called when a player is added to a plot
*
* @param initiator Player that initiated the event
* @param plot Plot in which the event occurred
* @param player Player that was added/removed from the helper list
* @param added {@code true} if the player was added, {@code false} if the player was removed
* @param reason The reason for the add/remove
*/
public PostPlayerPlotAddedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added, Reason reason) {
super(initiator, plot, player, reason, added);
}
}

View File

@@ -1,46 +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.events.post;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Called when a player is denied from a plot
*
* @since TODO
*/
public final class PostPlayerPlotDeniedEvent extends PostPlayerPlotAddRemoveEvent {
/**
* PlayerPlotDeniedEvent: Called when the denied UUID list is modified for a plot.
*
* @param initiator Player that initiated the event
* @param plot Plot in which the event occurred
* @param player Player that was denied/un-denied
* @param added {@code true} of add to deny list, {@code false} if removed
* @param reason The reason for the deny/remove
*/
public PostPlayerPlotDeniedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added, Reason reason) {
super(initiator, plot, player, reason, added);
}
}

View File

@@ -1,46 +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.events.post;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import java.util.UUID;
/**
* Called when a plot trusted user is added/removed
*
* @since TODO
*/
public final class PostPlayerPlotTrustedEvent extends PostPlayerPlotAddRemoveEvent {
/**
* PlayerPlotTrustedEvent: Called when a plot trusted user is added/removed
*
* @param initiator Player that initiated the event
* @param plot Plot in which the event occurred
* @param player Player that was added/removed from the trusted list
* @param added {@code true} if the player was added, {@code false} if the player was removed
* @param reason The reason for the trust/remove
*/
public PostPlayerPlotTrustedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added, Reason reason) {
super(initiator, plot, player, reason, added);
}
}

View File

@@ -29,7 +29,6 @@ import com.plotsquared.core.configuration.caption.CaptionUtility;
import com.plotsquared.core.configuration.caption.StaticCaption;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.events.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.events.TeleportCause;
@@ -975,10 +974,7 @@ public class Plot {
* Sets the denied users for this plot.
*
* @param uuids uuids to deny
* @deprecated Use {@link Plot#addDenied(UUID)} (UUID)} calling
* {@link EventDispatcher#callPlayerDeny(PlotPlayer, Plot, UUID, PlayerPlotAddRemoveEvent.Reason)} for each.
*/
@Deprecated
public void setDenied(final @NonNull Set<UUID> uuids) {
boolean larger = uuids.size() > getDenied().size();
HashSet<UUID> intersection;
@@ -1019,10 +1015,7 @@ public class Plot {
* Sets the trusted users for this plot.
*
* @param uuids uuids to trust
* @deprecated Use {@link Plot#addTrusted(UUID)} calling
* {@link EventDispatcher#callPlayerTrust(PlotPlayer, Plot, UUID, PlayerPlotAddRemoveEvent.Reason)} for each.
*/
@Deprecated
public void setTrusted(final @NonNull Set<UUID> uuids) {
boolean larger = uuids.size() > getTrusted().size();
HashSet<UUID> intersection = new HashSet<>(larger ? getTrusted() : uuids);
@@ -1054,10 +1047,7 @@ public class Plot {
* Sets the members for this plot.
*
* @param uuids uuids to set member status for
* @deprecated Use {@link Plot#addMember(UUID)} (UUID)} (UUID)} calling
* {@link EventDispatcher#callPlayerAdd(PlotPlayer, Plot, UUID, PlayerPlotAddRemoveEvent.Reason)} for each.
*/
@Deprecated
public void setMembers(final @NonNull Set<UUID> uuids) {
boolean larger = uuids.size() > getMembers().size();
HashSet<UUID> intersection = new HashSet<>(larger ? getMembers() : uuids);
@@ -2312,53 +2302,23 @@ public class Plot {
this.setAlias(plot.getAlias());
}
for (UUID uuid : this.getTrusted()) {
if (eventDispatcher
.callPlayerTrust(null, plot, uuid, PlayerPlotAddRemoveEvent.Reason.MERGE)
.getEventResult() != Result.DENY) {
plot.addTrusted(uuid);
eventDispatcher.callPostTrusted(null, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
plot.addTrusted(uuid);
}
for (UUID uuid : plot.getTrusted()) {
if (eventDispatcher
.callPlayerTrust(null, this, uuid, PlayerPlotAddRemoveEvent.Reason.MERGE)
.getEventResult() != Result.DENY) {
this.addTrusted(uuid);
eventDispatcher.callPostTrusted(null, this, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
this.addTrusted(uuid);
}
for (UUID uuid : this.getMembers()) {
if (eventDispatcher
.callPlayerAdd(null, plot, uuid, PlayerPlotAddRemoveEvent.Reason.MERGE)
.getEventResult() != Result.DENY) {
plot.addMember(uuid);
eventDispatcher.callPostAdded(null, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
plot.addMember(uuid);
}
for (UUID uuid : plot.getMembers()) {
if (eventDispatcher
.callPlayerAdd(null, this, uuid, PlayerPlotAddRemoveEvent.Reason.MERGE)
.getEventResult() != Result.DENY) {
this.addMember(uuid);
eventDispatcher.callPostAdded(null, this, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
this.addMember(uuid);
}
for (UUID uuid : this.getDenied()) {
if (eventDispatcher
.callPlayerDeny(null, plot, uuid, PlayerPlotAddRemoveEvent.Reason.MERGE)
.getEventResult() != Result.DENY) {
plot.addDenied(uuid);
eventDispatcher.callPostDenied(null, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
plot.addDenied(uuid);
}
for (UUID uuid : plot.getDenied()) {
if (eventDispatcher
.callPlayerDeny(null, this, uuid, PlayerPlotAddRemoveEvent.Reason.MERGE)
.getEventResult() != Result.DENY) {
this.addDenied(uuid);
eventDispatcher.callPostDenied(null, this, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
this.addDenied(uuid);
}
}

View File

@@ -21,7 +21,6 @@ package com.plotsquared.core.plot;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.collection.QuadMap;
import com.plotsquared.core.configuration.ConfigurationNode;
@@ -30,8 +29,6 @@ import com.plotsquared.core.configuration.ConfigurationUtil;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.configuration.file.YamlConfiguration;
import com.plotsquared.core.events.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.Result;
import com.plotsquared.core.generator.GridPlotWorld;
import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.inject.annotations.WorldConfig;
@@ -50,7 +47,6 @@ import com.plotsquared.core.plot.flag.PlotFlag;
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.queue.GlobalBlockQueue;
import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.RegionUtil;
@@ -159,9 +155,6 @@ public abstract class PlotArea implements ComponentLike {
private QuadMap<PlotCluster> clusters;
private String signMaterial = "OAK_WALL_SIGN";
private String legacySignMaterial = "WALL_SIGN";
// These will be injected
@Inject
private EventDispatcher eventDispatcher;
public PlotArea(
final @NonNull String worldName, final @Nullable String id,
@@ -1111,44 +1104,9 @@ public abstract class PlotArea implements ComponentLike {
final PlotId id = PlotId.of(x, y);
final Plot plot = getPlotAbs(id);
Set<UUID> currentlyTrusted = plot.getTrusted();
trusted.forEach(uuid -> {
if (!currentlyTrusted.contains(uuid) && eventDispatcher.callPlayerTrust(
null,
plot,
uuid,
PlayerPlotAddRemoveEvent.Reason.MERGE
).getEventResult() != Result.DENY) {
plot.addTrusted(uuid);
eventDispatcher.callPostTrusted(null, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
});
Set<UUID> currentlyAdded = plot.getMembers();
members.forEach(uuid -> {
if (!currentlyAdded.contains(uuid) && eventDispatcher.callPlayerAdd(
null,
plot,
uuid,
PlayerPlotAddRemoveEvent.Reason.MERGE
).getEventResult() != Result.DENY) {
plot.addMember(uuid);
eventDispatcher.callPostAdded(null, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
});
Set<UUID> currentlyDenied = plot.getDenied();
denied.forEach(uuid -> {
if (!currentlyDenied.contains(uuid) && eventDispatcher.callPlayerDeny(
null,
plot,
uuid,
PlayerPlotAddRemoveEvent.Reason.MERGE
).getEventResult() != Result.DENY) {
plot.addDenied(uuid);
eventDispatcher.callPostDenied(null, plot, uuid, true, PlayerPlotAddRemoveEvent.Reason.MERGE);
}
});
plot.setTrusted(trusted);
plot.setMembers(members);
plot.setDenied(denied);
Plot plot2;
if (lx) {

View File

@@ -29,14 +29,9 @@ import com.plotsquared.core.events.PlayerBuyPlotEvent;
import com.plotsquared.core.events.PlayerClaimPlotEvent;
import com.plotsquared.core.events.PlayerEnterPlotEvent;
import com.plotsquared.core.events.PlayerLeavePlotEvent;
import com.plotsquared.core.events.PlayerPlotAddEvent;
import com.plotsquared.core.events.PlayerPlotAddRemoveEvent;
import com.plotsquared.core.events.PlayerPlotDeniedEvent;
import com.plotsquared.core.events.PlayerPlotDenyEvent;
import com.plotsquared.core.events.PlayerPlotHelperEvent;
import com.plotsquared.core.events.PlayerPlotLimitEvent;
import com.plotsquared.core.events.PlayerPlotRemoveEvent;
import com.plotsquared.core.events.PlayerPlotTrustEvent;
import com.plotsquared.core.events.PlayerPlotTrustedEvent;
import com.plotsquared.core.events.PlayerTeleportToPlotEvent;
import com.plotsquared.core.events.PlotAutoMergeEvent;
@@ -56,9 +51,6 @@ import com.plotsquared.core.events.RemoveRoadEntityEvent;
import com.plotsquared.core.events.TeleportCause;
import com.plotsquared.core.events.post.PostPlayerAutoPlotEvent;
import com.plotsquared.core.events.post.PostPlayerBuyPlotEvent;
import com.plotsquared.core.events.post.PostPlayerPlotAddedEvent;
import com.plotsquared.core.events.post.PostPlayerPlotDeniedEvent;
import com.plotsquared.core.events.post.PostPlayerPlotTrustedEvent;
import com.plotsquared.core.events.post.PostPlotChangeOwnerEvent;
import com.plotsquared.core.events.post.PostPlotClearEvent;
import com.plotsquared.core.events.post.PostPlotDeleteEvent;
@@ -266,7 +258,6 @@ public class EventDispatcher {
return event;
}
@Deprecated(forRemoval = true, since = "TODO")
public PlayerPlotDeniedEvent callDenied(
PlotPlayer<?> initiator, Plot plot, UUID player,
boolean added
@@ -276,7 +267,6 @@ public class EventDispatcher {
return event;
}
@Deprecated(forRemoval = true, since = "TODO")
public PlayerPlotTrustedEvent callTrusted(
PlotPlayer<?> initiator, Plot plot, UUID player,
boolean added
@@ -286,7 +276,6 @@ public class EventDispatcher {
return event;
}
@Deprecated(forRemoval = true, since = "TODO")
public PlayerPlotHelperEvent callMember(
PlotPlayer<?> initiator, Plot plot, UUID player,
boolean added
@@ -296,62 +285,6 @@ public class EventDispatcher {
return event;
}
public PostPlayerPlotDeniedEvent callPostDenied(
PlotPlayer<?> initiator, Plot plot, UUID player, boolean added, PlayerPlotAddRemoveEvent.Reason reason
) {
PostPlayerPlotDeniedEvent event = new PostPlayerPlotDeniedEvent(initiator, plot, player, added, reason);
callEvent(event);
return event;
}
public PostPlayerPlotTrustedEvent callPostTrusted(
PlotPlayer<?> initiator, Plot plot, UUID player, boolean added, PlayerPlotAddRemoveEvent.Reason reason
) {
PostPlayerPlotTrustedEvent event = new PostPlayerPlotTrustedEvent(initiator, plot, player, added, reason);
callEvent(event);
return event;
}
public PostPlayerPlotAddedEvent callPostAdded(
PlotPlayer<?> initiator, Plot plot, UUID player, boolean added, PlayerPlotAddRemoveEvent.Reason reason
) {
PostPlayerPlotAddedEvent event = new PostPlayerPlotAddedEvent(initiator, plot, player, added, reason);
callEvent(event);
return event;
}
public PlayerPlotDenyEvent callPlayerDeny(
PlotPlayer<?> initiator, Plot plot, UUID player, PlayerPlotAddRemoveEvent.Reason reason
) {
PlayerPlotDenyEvent event = new PlayerPlotDenyEvent(initiator, plot, player, reason);
callEvent(event);
return event;
}
public PlayerPlotTrustEvent callPlayerTrust(
PlotPlayer<?> initiator, Plot plot, UUID player, PlayerPlotAddRemoveEvent.Reason reason
) {
PlayerPlotTrustEvent event = new PlayerPlotTrustEvent(initiator, plot, player, reason);
callEvent(event);
return event;
}
public PlayerPlotAddEvent callPlayerAdd(
PlotPlayer<?> initiator, Plot plot, UUID player, PlayerPlotAddRemoveEvent.Reason reason
) {
PlayerPlotAddEvent event = new PlayerPlotAddEvent(initiator, plot, player, reason);
callEvent(event);
return event;
}
public PlayerPlotRemoveEvent callPlayerRemove(
PlotPlayer<?> initiator, Plot plot, UUID player, PlayerPlotAddRemoveEvent.Reason reason
) {
PlayerPlotRemoveEvent event = new PlayerPlotRemoveEvent(initiator, plot, player, reason);
callEvent(event);
return event;
}
public PlotChangeOwnerEvent callOwnerChange(
PlotPlayer<?> initiator, Plot plot, UUID oldOwner,
UUID newOwner, boolean hasOldOwner