mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-08-24 23:05:36 +02:00
Compare commits
1 Commits
fix/v7/com
...
fix/ci/pub
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bc35324842 |
@@ -11,7 +11,7 @@ jobs:
|
||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
DISCORD_USERNAME: PlotSquared Release
|
||||
DISCORD_AVATAR: https://raw.githubusercontent.com/IntellectualSites/Assets/main/plugins/PlotSquared/PlotSquared.png
|
||||
uses: Ilshidur/action-discord@0.4.0
|
||||
uses: Ilshidur/action-discord@0.3.2
|
||||
with:
|
||||
args: |
|
||||
"<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>"
|
||||
|
@@ -837,8 +837,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
case "HOPPER_MINECART":
|
||||
case "MINECART_MOB_SPAWNER":
|
||||
case "SPAWNER_MINECART":
|
||||
case "END_CRYSTAL":
|
||||
case "ENDER_CRYSTAL": // Backwards compatibility for 1.20.4
|
||||
case "ENDER_CRYSTAL":
|
||||
case "MINECART_TNT":
|
||||
case "TNT_MINECART":
|
||||
case "CHEST_BOAT":
|
||||
@@ -956,8 +955,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
||||
case "ENDERMITE":
|
||||
case "ENDER_DRAGON":
|
||||
case "GHAST":
|
||||
case "HAPPY_GHAST": // 1.21.6+
|
||||
case "GHASTLING": // 1.21.6+
|
||||
case "GIANT":
|
||||
case "GUARDIAN":
|
||||
case "HORSE":
|
||||
|
@@ -115,7 +115,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
this.dataByte = getOrdinal(Boat.Type.values(), boat.getBoatType());
|
||||
storeInventory(boat);
|
||||
}
|
||||
case "ARROW", "EGG", "END_CRYSTAL", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL",
|
||||
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL",
|
||||
"FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "MINECART_MOB_SPAWNER",
|
||||
"MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION",
|
||||
"THROWN_EXP_BOTTLE", "WITHER_SKULL", "UNKNOWN", "SPECTRAL_ARROW", "SHULKER_BULLET", "DRAGON_FIREBALL", "AREA_EFFECT_CLOUD",
|
||||
@@ -272,7 +272,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
this.dataByte = (byte) entity1.getPhase().ordinal();
|
||||
return;
|
||||
}
|
||||
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "HAPPY_GHAST", "GHASTLING", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN",
|
||||
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN",
|
||||
"ZOMBIFIED_PIGLIN", "PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH",
|
||||
"GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN", "SNOW_GOLEM" -> {
|
||||
storeLiving((LivingEntity) entity);
|
||||
@@ -511,7 +511,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
((Slime) entity).setSize(this.dataByte);
|
||||
return entity;
|
||||
} */
|
||||
case "ARROW", "EGG", "END_CRYSTAL", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK",
|
||||
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK",
|
||||
"FIREBALL", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND",
|
||||
"MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL",
|
||||
"SPLASH_POTION", "THROWN_EXP_BOTTLE", "SPECTRAL_ARROW", "SHULKER_BULLET", "AREA_EFFECT_CLOUD",
|
||||
@@ -676,7 +676,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
}
|
||||
case "ENDERMITE", "GHAST", "HAPPY_GHAST", "GHASTLING", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", "PIGLIN", "ZOMBIFIED_PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SNOWMAN", "SHULKER", "GUARDIAN", "ELDER_GUARDIAN", "SKELETON", "WITHER_SKELETON" -> {
|
||||
case "ENDERMITE", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", "PIGLIN", "ZOMBIFIED_PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SNOWMAN", "SHULKER", "GUARDIAN", "ELDER_GUARDIAN", "SKELETON", "WITHER_SKELETON" -> {
|
||||
restoreLiving((LivingEntity) entity);
|
||||
return entity;
|
||||
}
|
||||
|
@@ -79,7 +79,6 @@ import com.plotsquared.core.util.task.TaskManager;
|
||||
import com.plotsquared.core.util.task.TaskTime;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.util.Enums;
|
||||
import com.sk89q.worldedit.world.block.BlockType;
|
||||
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||
import io.papermc.lib.PaperLib;
|
||||
@@ -160,7 +159,6 @@ import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
@@ -185,15 +183,6 @@ public class PlayerEventListener implements Listener {
|
||||
Material.WRITABLE_BOOK,
|
||||
Material.WRITTEN_BOOK
|
||||
);
|
||||
|
||||
/**
|
||||
* The correct EntityType for End Crystal, determined once at class loading time.
|
||||
* Tries END_CRYSTAL first (1.21+), falls back to ENDER_CRYSTAL (1.20.4 and older).
|
||||
*/
|
||||
private static final EntityType END_CRYSTAL_ENTITY_TYPE = Objects.requireNonNull(
|
||||
Enums.findByValue(EntityType.class, "END_CRYSTAL", "ENDER_CRYSTAL")
|
||||
);
|
||||
|
||||
private static final Set<String> DYES;
|
||||
|
||||
static {
|
||||
@@ -1328,8 +1317,8 @@ public class PlayerEventListener implements Listener {
|
||||
// reset the player's hand item if spawning needs to be cancelled.
|
||||
if (type == Material.ARMOR_STAND || type == Material.END_CRYSTAL) {
|
||||
Plot plot = location.getOwnedPlotAbs();
|
||||
EntityType entityType = type == Material.ARMOR_STAND ? EntityType.ARMOR_STAND : END_CRYSTAL_ENTITY_TYPE;
|
||||
if (BukkitEntityUtil.checkEntity(entityType, plot)) {
|
||||
if (BukkitEntityUtil.checkEntity(type == Material.ARMOR_STAND ? EntityType.ARMOR_STAND : EntityType.ENDER_CRYSTAL,
|
||||
plot)) {
|
||||
event.setCancelled(true);
|
||||
break;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -21,6 +21,7 @@ package com.plotsquared.core.command;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -57,7 +58,8 @@ public class Alias extends SubCommand {
|
||||
return false;
|
||||
}
|
||||
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -20,7 +20,6 @@ package com.plotsquared.core.command;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.core.PlotSquared;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.events.PlayerBuyPlotEvent;
|
||||
import com.plotsquared.core.events.Result;
|
||||
@@ -85,9 +84,8 @@ public class Buy extends Command {
|
||||
checkTrue(plot.hasOwner(), TranslatableCaption.of("info.plot_unowned"));
|
||||
checkTrue(!plot.isOwner(player.getUUID()), TranslatableCaption.of("economy.cannot_buy_own"));
|
||||
Set<Plot> plots = plot.getConnectedPlots();
|
||||
int plotCount = Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(plot.getWorldName());
|
||||
checkTrue(
|
||||
plotCount + plots.size() <= player.getAllowedPlots(),
|
||||
player.getPlotCount() + plots.size() <= player.getAllowedPlots(),
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
|
||||
);
|
||||
|
@@ -26,6 +26,7 @@ import com.plotsquared.core.events.PlayerClaimPlotEvent;
|
||||
import com.plotsquared.core.events.PlotMergeEvent;
|
||||
import com.plotsquared.core.events.Result;
|
||||
import com.plotsquared.core.location.Direction;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.MetaDataAccess;
|
||||
import com.plotsquared.core.player.PlayerMetaDataKeys;
|
||||
@@ -71,7 +72,8 @@ public class Claim extends SubCommand {
|
||||
if (args.length >= 1) {
|
||||
schematic = args[0];
|
||||
}
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
@@ -88,7 +90,7 @@ public class Claim extends SubCommand {
|
||||
boolean force = event.getEventResult() == Result.FORCE;
|
||||
int currentPlots = Settings.Limit.GLOBAL ?
|
||||
player.getPlotCount() :
|
||||
player.getPlotCount(plot.getWorldName());
|
||||
player.getPlotCount(location.getWorldName());
|
||||
|
||||
final PlotArea area = plot.getArea();
|
||||
|
||||
|
@@ -68,8 +68,8 @@ public class Continue extends SubCommand {
|
||||
return false;
|
||||
}
|
||||
int size = plot.getConnectedPlots().size();
|
||||
int plotCount = Settings.Limit.GLOBAL ? player.getPlotCount() : player.getPlotCount(plot.getWorldName());
|
||||
if (!Settings.Done.COUNTS_TOWARDS_LIMIT && (player.getAllowedPlots() < plotCount + size)) {
|
||||
if (!Settings.Done.COUNTS_TOWARDS_LIMIT && (player.getAllowedPlots()
|
||||
< player.getPlotCount() + size)) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
|
||||
|
@@ -19,6 +19,7 @@
|
||||
package com.plotsquared.core.command;
|
||||
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -36,7 +37,8 @@ public class Copy extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
Plot plot1 = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot1 = location.getPlotAbs();
|
||||
if (plot1 == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -22,6 +22,7 @@ import com.google.inject.Inject;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.generator.HybridPlotWorld;
|
||||
import com.plotsquared.core.generator.HybridUtils;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@@ -46,7 +47,8 @@ public class CreateRoadSchematic extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
@@ -55,7 +57,7 @@ public class CreateRoadSchematic extends SubCommand {
|
||||
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
||||
return false;
|
||||
}
|
||||
if (!(plot.getArea() instanceof HybridPlotWorld)) {
|
||||
if (!(location.getPlotArea() instanceof HybridPlotWorld)) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||
}
|
||||
this.hybridUtils.setupRoadSchematic(plot);
|
||||
|
@@ -22,6 +22,7 @@ import com.google.inject.Inject;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.generator.HybridPlotManager;
|
||||
import com.plotsquared.core.generator.HybridUtils;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
import com.plotsquared.core.plot.PlotArea;
|
||||
@@ -56,7 +57,8 @@ public class DebugRoadRegen extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (args.length < 1) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||
@@ -90,7 +92,8 @@ public class DebugRoadRegen extends SubCommand {
|
||||
}
|
||||
|
||||
public boolean regenPlot(PlotPlayer<?> player) {
|
||||
PlotArea area = player.getCurrentPlot().getArea();
|
||||
Location location = player.getLocation();
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||
return false;
|
||||
@@ -145,7 +148,8 @@ public class DebugRoadRegen extends SubCommand {
|
||||
return false;
|
||||
}
|
||||
|
||||
PlotArea area = player.getCurrentPlot().getArea();
|
||||
Location location = player.getLocation();
|
||||
PlotArea area = location.getPlotArea();
|
||||
if (area == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.events.Result;
|
||||
import com.plotsquared.core.events.TeleportCause;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -60,7 +61,8 @@ public class Delete extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
final Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
@@ -90,7 +92,7 @@ public class Delete extends SubCommand {
|
||||
final java.util.Set<Plot> plots = plot.getConnectedPlots();
|
||||
final int currentPlots = Settings.Limit.GLOBAL ?
|
||||
player.getPlotCount() :
|
||||
player.getPlotCount(plot.getWorldName());
|
||||
player.getPlotCount(location.getWorldName());
|
||||
Runnable run = () -> {
|
||||
if (plot.getRunning() > 0) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
|
||||
|
@@ -70,7 +70,8 @@ public class Deny extends SubCommand {
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
final Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -26,6 +26,7 @@ import com.plotsquared.core.events.PlotDoneEvent;
|
||||
import com.plotsquared.core.events.PlotFlagAddEvent;
|
||||
import com.plotsquared.core.events.Result;
|
||||
import com.plotsquared.core.generator.HybridUtils;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -60,7 +61,8 @@ public class Done extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
final Plot plot = location.getPlotAbs();
|
||||
if ((plot == null) || !plot.hasOwner()) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -73,7 +73,7 @@ public class Download extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
String world = player.getCurrentPlot().getWorldName();
|
||||
String world = player.getLocation().getWorldName();
|
||||
if (!this.plotAreaManager.hasPlotArea(world)) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||
return false;
|
||||
|
@@ -27,6 +27,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.events.PlotFlagAddEvent;
|
||||
import com.plotsquared.core.events.PlotFlagRemoveEvent;
|
||||
import com.plotsquared.core.events.Result;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -178,7 +179,8 @@ public final class FlagCommand extends Command {
|
||||
* @return {@code true} if the player is allowed to modify the flags at their current location
|
||||
*/
|
||||
private static boolean checkRequirements(final @NonNull PlotPlayer<?> player) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
final Location location = player.getLocation();
|
||||
final Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
@@ -342,7 +344,7 @@ public final class FlagCommand extends Command {
|
||||
if (plotFlag == null) {
|
||||
return;
|
||||
}
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Plot plot = player.getLocation().getPlotAbs();
|
||||
PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
player.sendMessage(
|
||||
@@ -407,7 +409,7 @@ public final class FlagCommand extends Command {
|
||||
if (plotFlag == null) {
|
||||
return;
|
||||
}
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Plot plot = player.getLocation().getPlotAbs();
|
||||
PlotFlagAddEvent event = eventDispatcher.callFlagAdd(plotFlag, plot);
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
player.sendMessage(
|
||||
@@ -417,7 +419,7 @@ public final class FlagCommand extends Command {
|
||||
return;
|
||||
}
|
||||
boolean force = event.getEventResult() == Result.FORCE;
|
||||
final PlotFlag localFlag = player.getCurrentPlot().getFlagContainer()
|
||||
final PlotFlag localFlag = player.getLocation().getPlotAbs().getFlagContainer()
|
||||
.getFlag(event.getFlag().getClass());
|
||||
if (!force) {
|
||||
for (String entry : args[1].split(",")) {
|
||||
@@ -442,7 +444,7 @@ public final class FlagCommand extends Command {
|
||||
return;
|
||||
}
|
||||
boolean result =
|
||||
player.getCurrentPlot().setFlag(localFlag.merge(parsed.getValue()));
|
||||
player.getLocation().getPlotAbs().setFlag(localFlag.merge(parsed.getValue()));
|
||||
if (!result) {
|
||||
player.sendMessage(TranslatableCaption.of("flag.flag_not_added"));
|
||||
return;
|
||||
@@ -482,7 +484,7 @@ public final class FlagCommand extends Command {
|
||||
if (flag == null) {
|
||||
return;
|
||||
}
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
final Plot plot = player.getLocation().getPlotAbs();
|
||||
final PlotFlag<?, ?> flagWithOldValue = plot.getFlagContainer().getFlag(flag.getClass());
|
||||
PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(flag, plot);
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
@@ -685,7 +687,7 @@ public final class FlagCommand extends Command {
|
||||
.build()
|
||||
);
|
||||
// Default value
|
||||
final String defaultValue = player.getCurrentPlot().getArea().getFlagContainer()
|
||||
final String defaultValue = player.getLocation().getPlotArea().getFlagContainer()
|
||||
.getFlagErased(plotFlag.getClass()).toString();
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("flag.flag_info_default_value"),
|
||||
|
@@ -101,10 +101,6 @@ public class Grant extends Command {
|
||||
);
|
||||
} else {
|
||||
access.set(access.get().orElse(0) + 1);
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("grants.added"),
|
||||
TagResolver.resolver("grants", Tag.inserting(Component.text(access.get().orElse(0))))
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -177,14 +173,8 @@ public class Grant extends Command {
|
||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||
}
|
||||
return commands;
|
||||
} else if (args.length == 2) {
|
||||
final String subcommand = args[0].toLowerCase();
|
||||
if ((subcommand.equals("add") && player.hasPermission(Permission.PERMISSION_GRANT_ADD)) ||
|
||||
(subcommand.equals("check") && player.hasPermission(Permission.PERMISSION_GRANT_CHECK))) {
|
||||
return TabCompletions.completePlayers(player, args[1], Collections.emptyList());
|
||||
}
|
||||
}
|
||||
return Collections.emptyList();
|
||||
return TabCompletions.completePlayers(player, String.join(",", args).trim(), Collections.emptyList());
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -65,7 +65,8 @@ public class Kick extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlot();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
@@ -123,7 +124,7 @@ public class Kick extends SubCommand {
|
||||
);
|
||||
return;
|
||||
}
|
||||
Location spawn = this.worldUtil.getSpawn(plot.getWorldName());
|
||||
Location spawn = this.worldUtil.getSpawn(location.getWorldName());
|
||||
player2.sendMessage(TranslatableCaption.of("kick.you_got_kicked"));
|
||||
if (plot.equals(spawn.getPlot())) {
|
||||
Location newSpawn = this.worldUtil.getSpawn(this.plotAreaManager.getAllWorlds()[0]);
|
||||
@@ -147,7 +148,8 @@ public class Kick extends SubCommand {
|
||||
|
||||
@Override
|
||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
@@ -150,8 +150,8 @@ public class ListCmd extends SubCommand {
|
||||
page = 0;
|
||||
}
|
||||
|
||||
String world = player.getCurrentPlot().getWorldName();
|
||||
PlotArea area = player.getCurrentPlot().getArea();
|
||||
String world = player.getLocation().getWorldName();
|
||||
PlotArea area = player.getApplicablePlotArea();
|
||||
String arg = args[0].toLowerCase();
|
||||
final boolean[] sort = new boolean[]{true};
|
||||
|
||||
|
@@ -68,7 +68,7 @@ public class Load extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, final String[] args) {
|
||||
final String world = player.getCurrentPlot().getWorldName();
|
||||
final String world = player.getLocation().getWorldName();
|
||||
if (!this.plotAreaManager.hasPlotArea(world)) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||
return false;
|
||||
|
@@ -275,7 +275,7 @@ public class MainCommand extends Command {
|
||||
private CompletableFuture<Optional<CommandExecutionData>> prepareArguments(CommandExecutionData data) {
|
||||
if (data.args().length >= 2) {
|
||||
PlotArea area = data.player().getApplicablePlotArea();
|
||||
Plot newPlot = Plot.fromString(area, data.args()[0], data.player());
|
||||
Plot newPlot = Plot.fromString(area, data.args()[0]);
|
||||
return preparePlotArgument(newPlot, data, area)
|
||||
.thenApply(d -> d.flatMap(x -> prepareFlagArgument(x, area)));
|
||||
} else {
|
||||
@@ -283,41 +283,32 @@ public class MainCommand extends Command {
|
||||
}
|
||||
}
|
||||
|
||||
private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(
|
||||
@Nullable Plot newPlot,
|
||||
@Nonnull CommandExecutionData data,
|
||||
@Nullable PlotArea area
|
||||
) {
|
||||
if (newPlot == null) {
|
||||
return CompletableFuture.completedFuture(Optional.of(data));
|
||||
private CompletableFuture<Optional<CommandExecutionData>> preparePlotArgument(@Nullable Plot newPlot,
|
||||
@Nonnull CommandExecutionData data,
|
||||
@Nullable PlotArea area) {
|
||||
if (newPlot != null && (data.player() instanceof ConsolePlayer
|
||||
|| (area != null && area.equals(newPlot.getArea()))
|
||||
|| data.player().hasPermission(Permission.PERMISSION_ADMIN)
|
||||
|| data.player().hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO))
|
||||
&& !newPlot.isDenied(data.player().getUUID())) {
|
||||
return fetchPlotCenterLocation(newPlot)
|
||||
.thenApply(newLoc -> {
|
||||
if (!data.player().canTeleport(newLoc)) {
|
||||
data.player().sendMessage(TranslatableCaption.of("border.denied"));
|
||||
return Optional.empty();
|
||||
}
|
||||
// Save meta
|
||||
var originalCommandMeta = setCommandScope(data.player(), new TemporaryCommandMeta(newLoc, newPlot));
|
||||
return Optional.of(new CommandExecutionData(
|
||||
data.player(),
|
||||
Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command
|
||||
data.confirm(),
|
||||
data.whenDone(),
|
||||
originalCommandMeta
|
||||
));
|
||||
});
|
||||
}
|
||||
final PlotPlayer<?> player = data.player();
|
||||
final boolean isAdmin = player instanceof ConsolePlayer || player.hasPermission(Permission.PERMISSION_ADMIN);
|
||||
final boolean isDenied = newPlot.isDenied(player.getUUID());
|
||||
if (!isAdmin) {
|
||||
if (isDenied) {
|
||||
throw new CommandException(TranslatableCaption.of("deny.cannot_interact"));
|
||||
}
|
||||
if (area != null && area.equals(newPlot.getArea()) && !player.hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO)) {
|
||||
return CompletableFuture.completedFuture(Optional.of(data));
|
||||
}
|
||||
}
|
||||
return fetchPlotCenterLocation(newPlot)
|
||||
.thenApply(newLoc -> {
|
||||
if (!player.canTeleport(newLoc)) {
|
||||
player.sendMessage(TranslatableCaption.of("border.denied"));
|
||||
return Optional.empty();
|
||||
}
|
||||
// Save meta
|
||||
var originalCommandMeta = setCommandScope(player, new TemporaryCommandMeta(newLoc, newPlot));
|
||||
return Optional.of(new CommandExecutionData(
|
||||
player,
|
||||
Arrays.copyOfRange(data.args(), 1, data.args().length), // Trimmed command
|
||||
data.confirm(),
|
||||
data.whenDone(),
|
||||
originalCommandMeta
|
||||
));
|
||||
});
|
||||
return CompletableFuture.completedFuture(Optional.of(data));
|
||||
}
|
||||
|
||||
private Optional<CommandExecutionData> prepareFlagArgument(@Nonnull CommandExecutionData data, @Nonnull PlotArea area) {
|
||||
|
@@ -20,6 +20,7 @@ package com.plotsquared.core.command;
|
||||
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.events.TeleportCause;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
|
||||
@@ -35,7 +36,8 @@ public class Middle extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] arguments) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlot();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -20,6 +20,7 @@ package com.plotsquared.core.command;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -54,7 +55,8 @@ public class Move extends SubCommand {
|
||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
RunnableVal2<Command, CommandResult> whenDone
|
||||
) {
|
||||
Plot plot1 = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot1 = location.getPlotAbs();
|
||||
if (plot1 == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return CompletableFuture.completedFuture(false);
|
||||
|
@@ -23,6 +23,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.events.PlotFlagAddEvent;
|
||||
import com.plotsquared.core.events.PlotFlagRemoveEvent;
|
||||
import com.plotsquared.core.events.Result;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -73,7 +74,8 @@ public class Music extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
final Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -21,6 +21,7 @@ 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.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -55,7 +56,8 @@ public class Remove extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
@@ -130,7 +132,8 @@ public class Remove extends SubCommand {
|
||||
|
||||
@Override
|
||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
@@ -22,6 +22,7 @@ import com.google.common.collect.Lists;
|
||||
import com.google.inject.Inject;
|
||||
import com.plotsquared.core.configuration.Settings;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.ConsolePlayer;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
@@ -101,7 +102,8 @@ public class SchematicCmd extends SubCommand {
|
||||
);
|
||||
break;
|
||||
}
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
Location loc = player.getLocation();
|
||||
final Plot plot = loc.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
@@ -245,7 +247,8 @@ public class SchematicCmd extends SubCommand {
|
||||
player.sendMessage(TranslatableCaption.of("error.task_in_process"));
|
||||
return false;
|
||||
}
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -78,7 +78,7 @@ public class Set extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean set(PlotPlayer<?> player, final Plot plot, String value) {
|
||||
final PlotArea plotArea = player.getCurrentPlot().getArea();
|
||||
final PlotArea plotArea = player.getLocation().getPlotArea();
|
||||
if (plotArea == null) {
|
||||
return false;
|
||||
}
|
||||
|
@@ -19,6 +19,7 @@
|
||||
package com.plotsquared.core.command;
|
||||
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -31,7 +32,8 @@ public abstract class SetCommand extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||
Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -19,6 +19,7 @@
|
||||
package com.plotsquared.core.command;
|
||||
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -43,7 +44,8 @@ public class Swap extends SubCommand {
|
||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||
RunnableVal2<Command, CommandResult> whenDone
|
||||
) {
|
||||
Plot plot1 = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
Plot plot1 = location.getPlotAbs();
|
||||
if (plot1 == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return CompletableFuture.completedFuture(false);
|
||||
@@ -77,10 +79,8 @@ public class Swap extends SubCommand {
|
||||
String p1 = plot1.toString();
|
||||
String p2 = plot2.toString();
|
||||
|
||||
return plot1.getPlotModificationManager().move(
|
||||
plot2, player, () -> {
|
||||
}, true
|
||||
).thenApply(result -> {
|
||||
return plot1.getPlotModificationManager().move(plot2, player, () -> {
|
||||
}, true).thenApply(result -> {
|
||||
if (result) {
|
||||
player.sendMessage(
|
||||
TranslatableCaption.of("swap.swap_success"),
|
||||
|
@@ -22,6 +22,7 @@ import com.google.inject.Inject;
|
||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||
import com.plotsquared.core.events.PlotUnlinkEvent;
|
||||
import com.plotsquared.core.events.Result;
|
||||
import com.plotsquared.core.location.Location;
|
||||
import com.plotsquared.core.permissions.Permission;
|
||||
import com.plotsquared.core.player.PlotPlayer;
|
||||
import com.plotsquared.core.plot.Plot;
|
||||
@@ -50,7 +51,8 @@ public class Unlink extends SubCommand {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
|
||||
final Plot plot = player.getCurrentPlot();
|
||||
Location location = player.getLocation();
|
||||
final Plot plot = location.getPlotAbs();
|
||||
if (plot == null) {
|
||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||
return false;
|
||||
|
@@ -290,7 +290,6 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
||||
*
|
||||
* @return the plot the player is standing on or null if standing on a road or not in a {@link PlotArea}
|
||||
*/
|
||||
@Nullable
|
||||
public Plot getCurrentPlot() {
|
||||
try (final MetaDataAccess<Plot> lastPlotAccess =
|
||||
this.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
|
||||
@@ -320,7 +319,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
||||
*/
|
||||
public int getPlotCount() {
|
||||
if (!Settings.Limit.GLOBAL) {
|
||||
return getPlotCount(getCurrentPlot().getWorldName());
|
||||
return getPlotCount(getLocation().getWorldName());
|
||||
}
|
||||
final AtomicInteger count = new AtomicInteger(0);
|
||||
final UUID uuid = getUUID();
|
||||
@@ -340,7 +339,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
||||
|
||||
public int getClusterCount() {
|
||||
if (!Settings.Limit.GLOBAL) {
|
||||
return getClusterCount(getCurrentPlot().getWorldName());
|
||||
return getClusterCount(getLocation().getWorldName());
|
||||
}
|
||||
final AtomicInteger count = new AtomicInteger(0);
|
||||
this.plotAreaManager.forEachPlotArea(value -> {
|
||||
@@ -409,11 +408,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
|
||||
}
|
||||
|
||||
public PlotArea getApplicablePlotArea() {
|
||||
Plot plot = getCurrentPlot();
|
||||
if (plot == null) {
|
||||
return this.plotAreaManager.getApplicablePlotArea(getLocation());
|
||||
}
|
||||
return plot.getArea();
|
||||
return this.plotAreaManager.getApplicablePlotArea(getLocation());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -321,8 +321,7 @@ public class Plot {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plot from a string. Performs a check to ensure Plot#getBottomAbs is not outside world bounds
|
||||
* (x/z +/- 30,000,000) to prevent crashes
|
||||
* Get the plot from a string.
|
||||
*
|
||||
* @param player Provides a context for what world to search in. Prefixing the term with 'world_name;' will override this context.
|
||||
* @param arg The search term
|
||||
@@ -333,31 +332,6 @@ public class Plot {
|
||||
final @Nullable PlotPlayer<?> player,
|
||||
final @Nullable String arg,
|
||||
final boolean message
|
||||
) {
|
||||
Plot plot = getPlotFromStringUnchecked(player, arg, message);
|
||||
if (plot != null && !WorldUtil.isValidLocation(plot.getBottomAbs())) {
|
||||
if (message) {
|
||||
(player == null ? ConsolePlayer.getConsole() : player).sendMessage(TranslatableCaption.of(
|
||||
"invalid.world_location_plot"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return plot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plot from a string. Does not perform a check on world bounds.
|
||||
*
|
||||
* @param player Provides a context for what world to search in. Prefixing the term with 'world_name;' will override this context.
|
||||
* @param arg The search term
|
||||
* @param message If a message should be sent to the player if a plot cannot be found
|
||||
* @return The plot if only 1 result is found, or null
|
||||
* @since 7.5.5
|
||||
*/
|
||||
public static @Nullable Plot getPlotFromStringUnchecked(
|
||||
final @Nullable PlotPlayer<?> player,
|
||||
final @Nullable String arg,
|
||||
final boolean message
|
||||
) {
|
||||
if (arg == null) {
|
||||
if (player == null) {
|
||||
@@ -415,51 +389,13 @@ public class Plot {
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a plot from a string e.g. [area];[id]. Performs a check to ensure Plot#getBottomAbs is not outside world bounds
|
||||
* (x/z +/- 30,000,000) to prevent crashes
|
||||
* Gets a plot from a string e.g. [area];[id]
|
||||
*
|
||||
* @param defaultArea if no area is specified
|
||||
* @param string plot id/area + id
|
||||
* @return New or existing plot object
|
||||
*/
|
||||
public static @Nullable Plot fromString(final @Nullable PlotArea defaultArea, final @NonNull String string) {
|
||||
return fromString(defaultArea, string, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a plot from a string e.g. [area];[id]. Performs a check to ensure Plot#getBottomAbs is not outside world bounds
|
||||
* (x/z +/- 30,000,000) to prevent crashes
|
||||
*
|
||||
* @param defaultArea if no area is specified
|
||||
* @param string plot id/area + id
|
||||
* @param player {@link PlotPlayer} player to notify if plot is invalid (outside bounds)
|
||||
* @return New or existing plot object
|
||||
* @since 7.5.5
|
||||
*/
|
||||
public static @Nullable Plot fromString(
|
||||
final @Nullable PlotArea defaultArea,
|
||||
final @NonNull String string,
|
||||
final @Nullable PlotPlayer<?> player
|
||||
) {
|
||||
Plot plot = fromStringUnchecked(defaultArea, string);
|
||||
if (plot != null && !WorldUtil.isValidLocation(plot.getBottomAbs())) {
|
||||
if (player != null) {
|
||||
player.sendMessage(TranslatableCaption.of("invalid.world_location_plot"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return plot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a plot from a string e.g. [area];[id]. Does not perform a check on world bounds.
|
||||
*
|
||||
* @param defaultArea if no area is specified
|
||||
* @param string plot id/area + id
|
||||
* @return New or existing plot object
|
||||
* @since 7.5.5
|
||||
*/
|
||||
public static @Nullable Plot fromStringUnchecked(final @Nullable PlotArea defaultArea, final @NonNull String string) {
|
||||
final String[] split = string.split("[;,]");
|
||||
if (split.length == 2) {
|
||||
if (defaultArea != null) {
|
||||
@@ -483,8 +419,7 @@ public class Plot {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a new/cached plot object at a given location. Does not check world bounds for potential crashes, these should be
|
||||
* performed before (or after) this method is used.
|
||||
* Return a new/cached plot object at a given location.
|
||||
*
|
||||
* <p>
|
||||
* Use {@link PlotPlayer#getCurrentPlot()} if a player is expected here.
|
||||
|
@@ -371,7 +371,8 @@ public final class PlotModificationManager {
|
||||
manager.createRoadSouthEast(current, queue);
|
||||
}
|
||||
}
|
||||
} else if (current.isMerged(Direction.SOUTH)) {
|
||||
}
|
||||
if (current.isMerged(Direction.SOUTH)) {
|
||||
manager.createRoadSouth(current, queue);
|
||||
}
|
||||
}
|
||||
|
@@ -63,18 +63,4 @@ public class PlotTitle {
|
||||
return subtitle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a string representation of this plot title value (used in placeholders).
|
||||
*
|
||||
* @return the plot title representation in the format {@code "<title>" "<subtitle>"}
|
||||
* @since 7.5.5
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return "\"%s\" \"%s\"".formatted(
|
||||
this.title != null ? this.title : "",
|
||||
this.subtitle != null ? this.subtitle : ""
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -49,12 +49,10 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TimeZone;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Registry that contains {@link Placeholder placeholders}
|
||||
@@ -129,22 +127,6 @@ public final class PlaceholderRegistry {
|
||||
}
|
||||
return legacyComponent(TranslatableCaption.of("info.unknown"), player);
|
||||
});
|
||||
this.createPlaceholder("currentplot_owners", (player, plot) -> {
|
||||
if (plot.getFlag(ServerPlotFlag.class)) {
|
||||
return legacyComponent(TranslatableCaption.of("info.server"), player);
|
||||
}
|
||||
final Set<UUID> plotOwners = plot.getOwners();
|
||||
if (plotOwners.isEmpty()) {
|
||||
return legacyComponent(TranslatableCaption.of("generic.generic_unowned"), player);
|
||||
}
|
||||
return plotOwners.stream().map(PlotSquared.platform().playerManager()::getUsernameCaption).map(f -> {
|
||||
try {
|
||||
return f.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS).getComponent(player);
|
||||
} catch (final Exception ignored) {
|
||||
return legacyComponent(TranslatableCaption.of("info.unknown"), player);
|
||||
}
|
||||
}).collect(Collectors.joining(", "));
|
||||
});
|
||||
this.createPlaceholder("currentplot_members", (player, plot) -> {
|
||||
if (plot.getMembers().isEmpty() && plot.getTrusted().isEmpty()) {
|
||||
return legacyComponent(TranslatableCaption.of("info.none"), player);
|
||||
|
@@ -234,7 +234,6 @@
|
||||
"invalid.not_valid_number": "<prefix><red>That's not a valid number within the range: </red><gray><value></gray>",
|
||||
"invalid.not_valid_plot_id": "<prefix><red>That's not a valid plot ID.</red>",
|
||||
"invalid.origin_cant_be_target": "<prefix><red>The origin and target location cannot be the same.</red>",
|
||||
"invalid.world_location_plot": "<prefix><red>The target plot is invalid.</red>",
|
||||
"invalid.found_no_plots": "<prefix><red>Found no plots with your search query.</red>",
|
||||
"invalid.number_not_in_range": "<prefix><red>That's not a valid number within the range: <gray>(<min>, <max>)</gray></red>",
|
||||
"invalid.number_not_positive": "<red>That's not a positive number: <gray><value></gray></red>",
|
||||
@@ -415,7 +414,6 @@
|
||||
"deny.denied_added": "<prefix><dark_aqua>You successfully denied the player from this plot.</dark_aqua>",
|
||||
"deny.no_enter": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore not allowed to enter.</red>",
|
||||
"deny.you_got_denied": "<prefix><red>You are denied from the plot you were previously on, and got teleported to spawn.</red>",
|
||||
"deny.cannot_interact": "<prefix><red>You are denied from the plot <red><gold><plot></gold><red> and therefore cannot interact with it.</red>",
|
||||
"deny.cant_remove_owner": "<prefix><red>You can't remove the plot owner.</red>",
|
||||
"kick.player_not_in_plot": "<prefix><red>The player <gray><player></gray> is not on this plot.</red>",
|
||||
"kick.cannot_kick_player": "<prefix><red>You cannot kick the player <gray><player></gray>.</red>",
|
||||
@@ -458,7 +456,7 @@
|
||||
"category.command_category_debug": "<gray>Debug</gray>",
|
||||
"category.command_category_administration": "<gray>Admin</gray>",
|
||||
"grants.granted_plots": "<prefix><gold>Result: <gray><amount> </gray>grants left.</gold>",
|
||||
"grants.added": "<prefix><gold>1</gold> <gray>grant has been added. (<grants> total grants)</gray>",
|
||||
"grants.added": "<prefix><gold><grants></gold> <gray>grant(s) have been added.</gray>",
|
||||
"events.event_denied": "<prefix><gold><value> </gold><gray>Cancelled by external plugin.</gray>",
|
||||
"backups.backup_impossible": "<prefix><red>Backups are not enabled for this plot: <plot>.</red>",
|
||||
"backups.backup_save_success": "<prefix><gold>The backup was created successfully.</gold>",
|
||||
|
@@ -20,7 +20,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = "com.intellectualsites.plotsquared"
|
||||
version = "7.5.7-SNAPSHOT"
|
||||
version = "7.5.5-SNAPSHOT"
|
||||
|
||||
if (!File("$rootDir/.git").exists()) {
|
||||
logger.lifecycle("""
|
||||
@@ -67,8 +67,8 @@ subprojects {
|
||||
|
||||
dependencies {
|
||||
// Tests
|
||||
testImplementation("org.junit.jupiter:junit-jupiter:5.13.4")
|
||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.13.4")
|
||||
testImplementation("org.junit.jupiter:junit-jupiter:5.13.3")
|
||||
testRuntimeOnly("org.junit.platform:junit-platform-launcher:1.13.3")
|
||||
}
|
||||
|
||||
plugins.withId("java") {
|
||||
@@ -204,7 +204,7 @@ tasks.getByName<Jar>("jar") {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
val supportedVersions = listOf("1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8")
|
||||
val supportedVersions = listOf("1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5")
|
||||
tasks {
|
||||
register("cacheLatestFaweArtifact") {
|
||||
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()
|
||||
|
@@ -2,21 +2,21 @@
|
||||
# Platform expectations
|
||||
paper = "1.20.4-R0.1-SNAPSHOT"
|
||||
guice = "7.0.0"
|
||||
spotbugs = "4.9.4"
|
||||
spotbugs = "4.9.3"
|
||||
checkerqual = "3.49.5"
|
||||
gson = "2.10"
|
||||
guava = "31.1-jre"
|
||||
snakeyaml = "2.0"
|
||||
adventure = "4.24.0"
|
||||
adventure-bukkit = "4.4.1"
|
||||
adventure = "4.23.0"
|
||||
adventure-bukkit = "4.4.0"
|
||||
log4j = "2.19.0"
|
||||
|
||||
# Plugins
|
||||
worldedit = "7.2.20"
|
||||
fawe = "2.13.1"
|
||||
fawe = "2.13.0"
|
||||
placeholderapi = "2.11.6"
|
||||
luckperms = "5.5"
|
||||
essentialsx = "2.21.2"
|
||||
essentialsx = "2.21.1"
|
||||
mvdwapi = "3.1.1"
|
||||
|
||||
# Third party
|
||||
@@ -33,9 +33,9 @@ vault = "1.7.1"
|
||||
serverlib = "2.3.7"
|
||||
|
||||
# Gradle plugins
|
||||
shadow = "8.3.9"
|
||||
shadow = "8.3.8"
|
||||
grgit = "4.1.1"
|
||||
spotless = "7.2.1"
|
||||
spotless = "7.2.0"
|
||||
publish = "0.34.0"
|
||||
runPaper = "2.3.1"
|
||||
|
||||
|
Reference in New Issue
Block a user