Compare commits

...

14 Commits

Author SHA1 Message Date
d628aaba34 docs: Separate javadocs per module 2022-01-27 02:18:49 +01:00
ff5d79699d docs: Add @since annotation for v6 changes (#3471) 2022-01-24 21:46:01 +01:00
a0594c19ee docs: Address dangling @see tags (#3469) 2022-01-24 21:43:35 +01:00
da41c136fe docs: Unify true/false style in @return (#3470) 2022-01-24 21:41:54 +01:00
6a5859ee0f build: Update release-drafter/release-drafter action to v5.17.6 (#3467)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-01-24 11:06:27 +01:00
59e0b4b67a feat: unknown owner(s) for plot expiry (#3452)
* feat: unknown owner(s) for plot expiry

* Sort plugins on `/plot debugpaste` alphabetically (#3447)

* feat: Sort plugins on debugpaste alphabetically

* Put (F[A])WE at the top

* feat: Add 1.18's music disc additions to `/plot music` (#3446)

* refactor: Prepare removal of our maven repository (#3451)

* Allow restoration of road schematic height calculation behaviour from pre 6.1.4 (#3444)

* refactor: Update SquirrelID GAV

* build: Release 6.3.0

* build: Back to snapshot for development

* fix: fallback method in BukkitQueueCoordinator uses world coordinates

* mark since tags as TODO

* fix: get the lowest diff for plot age

* fix: initialize with high value and better readability

* fix: no need for multiple age checks

* fix: address exceptions in plot analysis

* chore: address requested changes

* chore: Fix introduced violations

Co-authored-by: Alex <mc.cache@web.de>
Co-authored-by: Jordan <dordsor21@gmail.com>
2022-01-23 10:44:11 +01:00
5fc153d896 fix: PlayerInteractEvent does not necessarily interact with a block (#3463) 2022-01-22 17:25:41 +01:00
a003836dbc feat: plot-title flag value should allow single values (#3410) 2022-01-22 11:02:08 +01:00
42bf413528 chore: Address more violations 2022-01-20 21:01:38 +01:00
827f46566c draft: Address false positives in code style issues (#3461)
* chore: Address false positive code style issues

* chore: More work

* More work
2022-01-20 12:39:40 +01:00
6f4d2f6d5a Fix: Missing Component returns + plot info on unknown plot owner (#3449)
* Fix: getName should return something

* Fix caption typo

* Deprecate old getName methods + add new methods for username retrieval

* Remove wildcard import

* Use @since TODO instead of hard coded version

* chore: Update `@since` tags to TODO

Co-authored-by: NotMyFault <mc.cache@web.de>
2022-01-19 15:56:31 +01:00
6073b96317 feat: add worldname to the notify flags (#3457)
* feat: add worldname to the notify flags

* fix: change default message

* refactor: extract duplicated code

* fix: use area instead of world
2022-01-18 20:42:44 +01:00
74a490f9f0 build: Update release-drafter/release-drafter action to v5.17.5 (#3460)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-01-17 11:19:28 +01:00
3a752db698 build: Switch to Fawe release 2022-01-15 16:50:03 +01:00
118 changed files with 639 additions and 315 deletions

View File

@ -13,6 +13,6 @@ jobs:
update_release_draft:
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@v5.15.0
- uses: release-drafter/release-drafter@v5.17.6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

4
.lift.toml Normal file
View File

@ -0,0 +1,4 @@
jdkVersion = "17"
build = "gradle clean build -x test"
tools = ["findsecbugs", "ErrorProne", "Semgrep", "Detekt", "Infer"]
ignoreRules = ["CatchAndPrintStackTrace", "ReferenceEquality", "FallThrough", "FutureReturnValueIgnored", "MixedMutabilityReturnType", "EmptyCatch", "MissingCasesInEnumSwitch", "OperatorPrecedence", "StaticAssignmentInConstructor", "ReferenceEquality", "EqualsHashCode", "EqualsGetClass", "TypeParameterUnusedInFormals", "StringSplitter", "InlineMeSuggester", "NULL_DEREFERENCE"]

View File

@ -95,9 +95,9 @@ tasks.named<ShadowJar>("shadowJar") {
tasks {
withType<Javadoc> {
val opt = options as StandardJavadocDocletOptions
opt.links("https://papermc.io/javadocs/paper/1.17/")
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/7.2.7/")
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/7.2.7/")
opt.links("https://papermc.io/javadocs/paper/1.18/")
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/7.2.8/")
opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/")
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/")
opt.links("https://checkerframework.org/api/")

View File

@ -218,6 +218,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
private PlatformWorldManager<World> worldManager;
private Locale serverLocale;
@SuppressWarnings("StringSplitter")
@Override
public int @NonNull [] serverVersion() {
if (this.version == null) {
@ -323,8 +324,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
// Comments
CommentManager.registerDefaultInboxes();
plotSquared.startExpiryTasks();
// Do stuff that was previously done in PlotSquared
// Kill entities
if (Settings.Enabled_Components.KILL_ROAD_MOBS || Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
@ -421,6 +420,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
}, TaskTime.ticks(1L));
}
plotSquared.startExpiryTasks();
// Once the server has loaded force updating all generators known to P2
TaskManager.runTaskLater(() -> PlotSquared.platform().setupUtils().updateGenerators(true), TaskTime.ticks(1L));
@ -970,7 +971,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
}
iterator.remove();
entity.remove();
continue;
}
}
} else {
@ -982,7 +982,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
}
iterator.remove();
entity.remove();
continue;
}
}
}
@ -1223,7 +1222,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
@Override
@NonNull
@SuppressWarnings("ALL")
@SuppressWarnings("unchecked")
public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class);
}

View File

@ -461,6 +461,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
this.tamed.tamed = tamed.isTamed();
}
@SuppressWarnings("deprecation") // Paper deprecation
@Override
public Entity spawn(World world, int xOffset, int zOffset) {
Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset);

View File

@ -36,6 +36,7 @@ import org.bukkit.World;
public class WorldManagerModule extends AbstractModule {
@SuppressWarnings("removal") // Internal use only
@Provides
@Singleton
PlatformWorldManager<World> provideWorldManager() {

View File

@ -60,7 +60,7 @@ import java.util.List;
public class EntitySpawnListener implements Listener {
private final static String KEY = "P2";
private static final String KEY = "P2";
private static boolean ignoreTP = false;
private static boolean hasPlotArea = false;
private static String areaName = null;

View File

@ -36,7 +36,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
import net.kyori.adventure.text.minimessage.Template;
import org.bukkit.block.Banner;
import org.bukkit.block.Beacon;
import org.bukkit.block.Bed;
import org.bukkit.block.BlockState;
import org.bukkit.block.CommandBlock;
import org.bukkit.block.Comparator;
@ -51,6 +50,7 @@ import org.bukkit.block.Jukebox;
import org.bukkit.block.Sign;
import org.bukkit.block.Skull;
import org.bukkit.block.Structure;
import org.bukkit.block.data.type.Bed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockPlaceEvent;
import org.checkerframework.checker.nullness.qual.NonNull;

View File

@ -154,7 +154,6 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
@ -224,6 +223,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
}
@SuppressWarnings("StringSplitter")
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void playerCommand(PlayerCommandPreprocessEvent event) {
String msg = event.getMessage().toLowerCase().replaceAll("/", "").trim();
@ -379,6 +379,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
this.eventDispatcher.doRespawnTask(pp);
}
@SuppressWarnings("deprecation") // We explicitly want #getHomeSynchronous here
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onTeleport(PlayerTeleportEvent event) {
Player player = event.getPlayer();
@ -1063,9 +1064,13 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (area == null) {
return;
}
PlayerBlockEventType eventType = null;
PlayerBlockEventType eventType;
BlockType blocktype1;
Block block = event.getClickedBlock();
if (block == null) {
// We do not care in this case, the player is likely interacting with air ("nothing").
return;
}
Location location = BukkitUtil.adapt(block.getLocation());
Action action = event.getAction();
switch (action) {
@ -1667,6 +1672,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
}
@SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility
@EventHandler
public void onLocaleChange(final PlayerLocaleChangeEvent event) {
// The event is fired before the player is deemed online upon login

View File

@ -43,7 +43,6 @@ import java.lang.reflect.Method;
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
@SuppressWarnings("unused")
public class SingleWorldListener implements Listener {
private final Method methodGetHandleChunk;

View File

@ -38,7 +38,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
* @deprecated Deprecated and scheduled for removal without replacement
* in favor of the build in setup wizard.
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.0.0")
@Singleton
public class MultiverseWorldManager extends BukkitWorldManager {

View File

@ -162,6 +162,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
}
}
@SuppressWarnings("StringSplitter")
@Override
@NonNegative
public int hasPermissionRange(
@ -319,7 +320,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
if (id == ItemTypes.AIR) {
// Let's just stop all the discs because why not?
for (final Sound sound : Arrays.stream(Sound.values())
.filter(sound -> sound.name().contains("DISC")).collect(Collectors.toList())) {
.filter(sound -> sound.name().contains("DISC")).toList()) {
player.stopSound(sound);
}
// this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR);
@ -331,6 +332,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
}
}
@SuppressWarnings("deprecation") // Needed for Spigot compatibility
@Override
public void kick(final String message) {
this.player.kickPlayer(message);

View File

@ -51,7 +51,6 @@ import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.block.Block;
import org.bukkit.block.Container;
import org.bukkit.block.data.BlockData;
@ -199,7 +198,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
}
}
if (localChunk.getTiles().size() > 0) {
localChunk.getTiles().forEach(((blockVector3, tag) -> {
localChunk.getTiles().forEach((blockVector3, tag) -> {
try {
BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag);
getWorld().setBlock(blockVector3, block, noSideEffectSet);
@ -207,7 +206,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
StateWrapper sw = new StateWrapper(tag);
sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ());
}
}));
});
}
if (localChunk.getEntities().size() > 0) {
localChunk.getEntities().forEach((location, entity) -> getWorld().createEntity(location, entity));
@ -238,6 +237,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
/**
* Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails
*/
@SuppressWarnings("unused")
private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2, boolean edge) {
try {
BlockVector3 loc = BlockVector3.at(x, y, z);
@ -266,9 +266,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
} catch (WorldEditException ignored) {
// Fallback to not so nice method
BlockData blockData = BukkitAdapter.adapt(block);
Chunk chunk = getBukkitWorld().getChunkAt(blockVector2.getX(), blockVector2.getZ());
Block existing = chunk.getBlock(x, y, z);
Block existing = getBukkitWorld().getBlockAt(x, y, z);
final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
return;

View File

@ -166,6 +166,7 @@ public class StateWrapper {
return str;
}
@SuppressWarnings("deprecation") // #setLine is needed for Spigot compatibility
public boolean restoreTag(String worldName, int x, int y, int z) {
if (this.tag == null) {
return false;

View File

@ -77,6 +77,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
return stack;
}
@SuppressWarnings("deprecation") // Paper deprecation
@Override
public void open(PlotInventory inv) {
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
@ -113,6 +114,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
bp.player.updateInventory();
}
@SuppressWarnings("deprecation") // Paper deprecation
public PlotItemStack getItem(ItemStack item) {
if (item == null) {
return null;
@ -145,6 +147,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
.toArray(PlotItemStack[]::new);
}
@SuppressWarnings("deprecation") // #getTitle is needed for Spigot compatibility
@Override
public boolean isOpen(PlotInventory plotInventory) {
if (!plotInventory.isOpen()) {

View File

@ -61,6 +61,7 @@ public class UpdateUtility implements Listener {
internalVersion = PlotSquared.get().getVersion();
}
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
public void updateChecker() {
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
try {
@ -68,7 +69,7 @@ public class UpdateUtility implements Listener {
"https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
.openConnection();
connection.setRequestMethod("GET");
JsonObject result = (new JsonParser())
JsonObject result = new JsonParser()
.parse(new JsonReader(new InputStreamReader(connection.getInputStream())))
.getAsJsonObject();
spigotVersion = result.get("current_version").getAsString();
@ -91,7 +92,7 @@ public class UpdateUtility implements Listener {
notify = false;
LOGGER.info("Congratulations! You are running the latest PlotSquared version");
}
}, 0L, Settings.UpdateChecker.POLL_RATE * 60 * 20);
}, 0L, (long) Settings.UpdateChecker.POLL_RATE * 60 * 20);
}
private void cancelTask() {

View File

@ -75,6 +75,7 @@ public class FaweSchematicHandler extends SchematicHandler {
return delegate.save(tag, path);
}
@SuppressWarnings("removal") // Just the override
@Override
public void upload(final CompoundTag tag, final UUID uuid, final String file, final RunnableVal<URL> whenDone) {
delegate.upload(tag, uuid, file, whenDone);

View File

@ -54,3 +54,13 @@ tasks.processResources {
)
}
}
tasks {
withType<Javadoc> {
val opt = options as StandardJavadocDocletOptions
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/7.2.8/")
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/")
opt.links("https://checkerframework.org/api/")
}
}

View File

@ -274,6 +274,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
* Get the {@link PlotAreaManager} implementation.
*
* @return the PlotAreaManager
* @since 6.1.4
*/
@NonNull PlotAreaManager plotAreaManager();

View File

@ -306,7 +306,7 @@ public class PlotSquared {
*
* @param version First version
* @param version2 Second version
* @return true if `version` is &gt;= `version2`
* @return {@code true} if `version` is &gt;= `version2`
*/
public boolean checkVersion(
final int[] version,
@ -338,10 +338,13 @@ public class PlotSquared {
/**
* Add a global reference to a plot world.
* <p>
* You can remove the reference by calling {@link #removePlotArea(PlotArea)}
* </p>
*
* @param plotArea the {@link PlotArea} to add.
* @see #removePlotArea(PlotArea) To remove the reference
*/
@SuppressWarnings("unchecked")
public void addPlotArea(final @NonNull PlotArea plotArea) {
HashMap<PlotId, Plot> plots;
if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) {
@ -556,6 +559,7 @@ public class PlotSquared {
*
* @param input an array of plots to sort
*/
@SuppressWarnings("unchecked")
private void sortPlotsByHash(final @NonNull Plot @NonNull [] input) {
List<Plot>[] bucket = new ArrayList[32];
Arrays.fill(bucket, new ArrayList<>());
@ -696,20 +700,12 @@ public class PlotSquared {
ArrayList<Plot> toReturn = new ArrayList<>(plots.size());
for (PlotArea area : areas) {
switch (type) {
case CREATION_DATE:
toReturn.addAll(sortPlotsByTemp(map.get(area)));
break;
case CREATION_DATE_TIMESTAMP:
toReturn.addAll(sortPlotsByTimestamp(map.get(area)));
break;
case DISTANCE_FROM_ORIGIN:
toReturn.addAll(sortPlotsByHash(map.get(area)));
break;
case LAST_MODIFIED:
toReturn.addAll(sortPlotsByModified(map.get(area)));
break;
default:
break;
case CREATION_DATE -> toReturn.addAll(sortPlotsByTemp(map.get(area)));
case CREATION_DATE_TIMESTAMP -> toReturn.addAll(sortPlotsByTimestamp(map.get(area)));
case DISTANCE_FROM_ORIGIN -> toReturn.addAll(sortPlotsByHash(map.get(area)));
case LAST_MODIFIED -> toReturn.addAll(sortPlotsByModified(map.get(area)));
default -> {
}
}
}
return toReturn;
@ -739,7 +735,7 @@ public class PlotSquared {
*
* @param plot the plot to remove
* @param callEvent If to call an event about the plot being removed
* @return true if plot existed | false if it didn't
* @return {@code true} if plot existed | {@code false} if it didn't
*/
public boolean removePlot(
final @NonNull Plot plot,
@ -1482,7 +1478,7 @@ public class PlotSquared {
*
* @param world World name
* @param chunkCoordinates Chunk coordinates
* @return True if the chunk uses non-standard generation, false if not
* @return {@code true} if the chunk uses non-standard generation, {@code false} if not
*/
public boolean isNonStandardGeneration(
final @NonNull String world,
@ -1527,10 +1523,12 @@ public class PlotSquared {
/**
* Get the caption map belonging to a namespace. If none exists, a dummy
* caption map will be returned.
* <p>
* You can register a caption map by calling {@link #registerCaptionMap(String, CaptionMap)}
* </p>
*
* @param namespace Namespace
* @return Map instance
* @see #registerCaptionMap(String, CaptionMap) To register a caption map
*/
public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) {
return this.captionMaps.computeIfAbsent(
@ -1540,7 +1538,7 @@ public class PlotSquared {
}
/**
* Register a caption map. The namespace needs be equal to the namespace used for
* Register a caption map. The namespace needs to be equal to the namespace used for
* the {@link TranslatableCaption}s inside the map.
*
* @param namespace Namespace

View File

@ -122,7 +122,7 @@ public final class PlotVersion {
* Compare a given version string with the one cached here.
*
* @param versionString the version to compare
* @return true if the given version is a "later" version
* @return {@code true} if the given version is a "later" version
*/
public boolean isLaterVersion(final @NonNull String versionString) {
int dash = versionString.indexOf('-');
@ -144,7 +144,7 @@ public final class PlotVersion {
* Compare a given version with the one cached here.
*
* @param verArray the version to compare
* @return true if the given version is a "later" version
* @return {@code true} if the given version is a "later" version
*/
public boolean isLaterVersion(int[] verArray) {
if (verArray[0] > version[0]) {

View File

@ -88,7 +88,7 @@ public interface BackupManager {
* Returns true if (potentially) destructive actions should cause
* PlotSquared to create automatic plot backups
*
* @return True if automatic backups are enabled
* @return {@code true} if automatic backups are enabled
*/
boolean shouldAutomaticallyBackup();

View File

@ -29,7 +29,8 @@ import java.util.Arrays;
public class ArrayUtil {
public static final <T> T[] concatAll(T[] first, T[]... rest) {
@SuppressWarnings("unchecked")
public static <T> T[] concatAll(T[] first, T[]... rest) {
int totalLength = first.length;
for (T[] array : rest) {
totalLength += array.length;

View File

@ -35,6 +35,7 @@ public class FlatRandomCollection<T> extends RandomCollection<T> {
private final T[] values;
@SuppressWarnings("unchecked")
public FlatRandomCollection(Map<T, Double> weights, Random random) {
super(weights, random);
int max = 0;

View File

@ -241,6 +241,7 @@ public class QuadMap<T> {
return false;
}
@SuppressWarnings("unchecked")
public void recalculateSkip() {
QuadMap<T> map = null;
for (QuadMap<T> current : new QuadMap[]{this.one, this.two, this.three, this.four}) {

View File

@ -106,7 +106,7 @@ public class Add extends Command {
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", PlayerManager.getName(uuid))
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
);
iterator.remove();
continue;
@ -114,7 +114,7 @@ public class Add extends Command {
if (plot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("player", PlayerManager.getName(uuid))
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
);
iterator.remove();
continue;
@ -122,7 +122,7 @@ public class Add extends Command {
if (plot.getMembers().contains(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("player", PlayerManager.getName(uuid))
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
);
iterator.remove();
continue;

View File

@ -34,7 +34,7 @@ import net.kyori.adventure.text.minimessage.Template;
* @deprecated In favor of "/plot toggle chat" and
* scheduled for removal within the next major release.
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.0.0")
@CommandDeclaration(command = "chat",
usage = "/plot chat",
permission = "plots.chat",

View File

@ -58,6 +58,7 @@ import java.util.concurrent.CompletableFuture;
public class Clear extends Command {
private final EventDispatcher eventDispatcher;
@SuppressWarnings({"unused", "FieldCanBeLocal"})
private final GlobalBlockQueue blockQueue;
@Inject

View File

@ -288,7 +288,7 @@ public abstract class Command {
* @param args Arguments
* @param confirm Instance, Success, Failure
* @param whenDone task to run when done
* @return CompletableFuture true if the command executed fully, false in
* @return CompletableFuture {@code true} if the command executed fully, {@code false} in
* any other case
*/
public CompletableFuture<Boolean> execute(
@ -375,7 +375,6 @@ public abstract class Command {
boolean failed = args.length < reqArgs.length;
String[] baseSplit = getCommandString().split(" ");
String[] fullSplit = getUsage().split(" ");
String base = getCommandString();
if (fullSplit.length - baseSplit.length < reqArgs.length) {
String[] tmp = new String[baseSplit.length + reqArgs.length];
System.arraycopy(fullSplit, 0, tmp, 0, fullSplit.length);

View File

@ -69,6 +69,7 @@ public class Condense extends SubCommand {
this.worldUtil = worldUtil;
}
@SuppressWarnings("unchecked")
@Override
public boolean onCommand(final PlotPlayer<?> player, String[] args) {
if (args.length != 2 && args.length != 3) {

View File

@ -255,7 +255,7 @@ public class DatabaseCommand extends SubCommand {
player.sendMessage(TranslatableCaption.of("database.failed_to_save_plots"));
player.sendMessage(TranslatableCaption.of("errors.stacktrace_begin"));
e.printStackTrace();
player.sendMessage(TranslatableCaption.of(("errors.stacktrace_end")));
player.sendMessage(TranslatableCaption.of("errors.stacktrace_end"));
player.sendMessage(TranslatableCaption.of("database.invalid_args"));
return false;
}

View File

@ -125,7 +125,7 @@ public class Deny extends SubCommand {
} else if (plot.getDenied().contains(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("player", PlayerManager.getName(uuid))
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
);
return;
} else {

View File

@ -94,12 +94,12 @@ public class Download extends SubCommand {
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
return false;
}
if ((Settings.Done.REQUIRED_FOR_DOWNLOAD && (!DoneFlag.isDone(plot))) && !Permissions
if ((Settings.Done.REQUIRED_FOR_DOWNLOAD && !DoneFlag.isDone(plot)) && !Permissions
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DOWNLOAD)) {
player.sendMessage(TranslatableCaption.of("done.done_not_done"));
return false;
}
if ((!plot.isOwner(player.getUUID())) && !Permissions
if (!plot.isOwner(player.getUUID()) && !Permissions
.hasPermission(player, Permission.PERMISSION_ADMIN.toString())) {
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
return false;

View File

@ -165,7 +165,7 @@ public final class FlagCommand extends Command {
/**
* Checks if the player is allowed to modify the flags at their current location
*
* @return true if the player is allowed to modify the flags at their current location
* @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 Location location = player.getLocation();
@ -367,6 +367,7 @@ public final class FlagCommand extends Command {
);
}
@SuppressWarnings({"unchecked", "rawtypes"})
@CommandDeclaration(command = "add",
aliases = {"a", "add"},
usage = "/plot flag add <flag> <value>",
@ -435,6 +436,7 @@ public final class FlagCommand extends Command {
);
}
@SuppressWarnings({"unchecked", "rawtypes"})
@CommandDeclaration(command = "remove",
aliases = {"r", "remove", "delete"},
usage = "/plot flag remove <flag> [values]",

View File

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

View File

@ -142,7 +142,7 @@ public class Owner extends SetCommand {
if (plot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_owner"),
Template.of("player", PlayerManager.getName(uuid, false))
Template.of("player", PlayerManager.resolveName(uuid, false).getComponent(player))
);
return;
}
@ -151,7 +151,7 @@ public class Owner extends SetCommand {
if (other == null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player_offline"),
Template.of("player", PlayerManager.getName(uuid))
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
);
return;
}

View File

@ -104,7 +104,7 @@ public class Rate extends SubCommand {
UUID uuid = player.getUUID();
for (Plot p : plots) {
if ((!Settings.Done.REQUIRED_FOR_RATINGS || DoneFlag.isDone(p)) && p
.isBasePlot() && (!p.getRatings().containsKey(uuid)) && !p
.isBasePlot() && !p.getRatings().containsKey(uuid) && !p
.isAdded(uuid)) {
p.teleportPlayer(player, TeleportCause.COMMAND_RATE, result -> {
});

View File

@ -88,7 +88,6 @@ public class RegenAllRoads extends SubCommand {
);
return false;
}
String name = args[0];
PlotManager manager = area.getPlotManager();
if (!(manager instanceof HybridPlotManager)) {
player.sendMessage(TranslatableCaption.of("errors.invalid_plot_world"));

View File

@ -50,7 +50,7 @@ import java.util.UUID;
* @deprecated In favor of "/plot download" (Arkitektonika) and scheduled
* for removal within the next major release.
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.0.9")
@CommandDeclaration(command = "save",
category = CommandCategory.SCHEMATIC,
requiredType = RequiredType.NONE,

View File

@ -181,8 +181,6 @@ public class SchematicCmd extends SubCommand {
});
}
case "saveall", "exportall" -> {
Location loc = player.getLocation();
final Plot plot = loc.getPlotAbs();
if (!(player instanceof ConsolePlayer)) {
player.sendMessage(TranslatableCaption.of("console.not_console"));
return false;

View File

@ -100,7 +100,7 @@ public class Set extends SubCommand {
if (Settings.Enabled_Components.CHUNK_PROCESSOR) {
forbiddenTypes.addAll(worldUtil.getTileEntityTypes().stream().map(
BlockType::getName).collect(Collectors.toList()));
BlockType::getName).toList());
}
if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_ALLOW_UNSAFE) &&

View File

@ -112,7 +112,7 @@ public class Trust extends Command {
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", PlayerManager.getName(uuid))
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
);
iterator.remove();
continue;
@ -120,7 +120,7 @@ public class Trust extends Command {
if (currentPlot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("value", PlayerManager.getName(uuid))
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
);
iterator.remove();
continue;
@ -128,7 +128,7 @@ public class Trust extends Command {
if (currentPlot.getTrusted().contains(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("value", PlayerManager.getName(uuid))
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
);
iterator.remove();
continue;

View File

@ -361,30 +361,4 @@ public class Visit extends Command {
return completions;
}
private void completeNumbers(final List<Command> commands, final String arg, final int start) {
for (int i = 0; i < 100; i++) {
final String command = Integer.toString(start + 1);
if (!command.toLowerCase().startsWith(arg.toLowerCase())) {
continue;
}
commands.add(new Command(this, false, command, "",
RequiredType.NONE, CommandCategory.TELEPORT
) {
});
}
}
private void completeAreas(final List<Command> commands, final String arg) {
for (final PlotArea area : this.plotAreaManager.getAllPlotAreas()) {
final String areaName = area.getWorldName() + ";" + area.getId();
if (!areaName.toLowerCase().startsWith(arg.toLowerCase())) {
continue;
}
commands.add(new Command(this, false, area.getWorldName() + ";" + area.getId(), "",
RequiredType.NONE, CommandCategory.TELEPORT
) {
});
}
}
}

View File

@ -65,6 +65,7 @@ public class ComponentPreset implements ConfigurationSerializable {
this.icon = icon;
}
@SuppressWarnings("unchecked")
public static ComponentPreset deserialize(final @NonNull Map<String, Object> map) {
final ClassicPlotManagerComponent classicPlotManagerComponent = ClassicPlotManagerComponent
.fromString(map.getOrDefault("component", "").toString()).orElseThrow(() ->

View File

@ -75,6 +75,7 @@ public class ComponentPresetManager {
private final InventoryUtil inventoryUtil;
private File componentsFile;
@SuppressWarnings("unchecked")
@Inject
public ComponentPresetManager(final @NonNull EconHandler econHandler, final @NonNull InventoryUtil inventoryUtil) throws
IOException {

View File

@ -58,6 +58,7 @@ public class Config {
* @param <T> value type
* @return value
*/
@SuppressWarnings("unchecked")
public static <T> T get(String key, Class<?> root) {
String[] split = key.split("\\.");
Object instance = getInstance(split, root);
@ -183,6 +184,7 @@ public class Config {
return value != null ? value.toString() : "null";
}
@SuppressWarnings({"unchecked", "rawtypes"})
private static void save(PrintWriter writer, Class<?> clazz, Object instance, int indent) {
try {
String lineSeparator = System.lineSeparator();
@ -258,21 +260,6 @@ public class Config {
}
}
/**
* Get the field for a specific config node.
*
* @param split the node (split by period)
* @param root
* @return
*/
private static Field getField(String[] split, Class<?> root) {
Object instance = getInstance(split, root);
if (instance == null) {
return null;
}
return getField(split, instance);
}
/**
* Get the field for a specific config node and instance<br>
* Note: As expiry can have multiple blocks there will be multiple instances
@ -305,6 +292,7 @@ public class Config {
* @param root
* @return The instance or null
*/
@SuppressWarnings({"unchecked", "rawtypes"})
private static Object getInstance(String[] split, Class<?> root) {
try {
Class<?> clazz = root == null ? MethodHandles.lookup().lookupClass() : root;

View File

@ -73,7 +73,7 @@ public interface ConfigurationSection {
* has been specified, this will return true.
*
* @param path Path to check for existence.
* @return True if this section contains the requested path, either via
* @return {@code true} if this section contains the requested path, either via
* default or being set.
* @throws IllegalArgumentException Thrown when path is {@code null}.
*/
@ -87,7 +87,7 @@ public interface ConfigurationSection {
* has been specified, this will still return false.
*
* @param path Path to check for existence.
* @return True if this section contains the requested path, regardless of
* @return {@code true} if this section contains the requested path, regardless of
* having a default.
* @throws IllegalArgumentException Thrown when path is {@code null}.
*/

View File

@ -196,6 +196,8 @@ public class Settings extends Config {
public boolean CONFIRMATION = true;
public int DAYS = 90;
public int SKIP_ACCOUNT_AGE_DAYS = -1;
@Comment("True, if a plot should be deleted if the plot owner is unknown to the server")
public boolean DELETE_IF_OWNER_IS_UNKNOWN = false;
public List<String> WORLDS = new ArrayList<>(Collections.singletonList("*"));
@ -436,7 +438,7 @@ public class Settings extends Config {
}
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.0.0")
@Comment("Schematic interface related settings")
public static class Web {

View File

@ -60,7 +60,7 @@ public interface CaptionMap {
* Check if the map supports a given locale
*
* @param locale Locale
* @return True if the map supports the locale
* @return {@code true} if the map supports the locale
*/
boolean supportsLocale(final @NonNull Locale locale);

View File

@ -103,6 +103,7 @@ public class CaptionUtility {
* @param miniMessageString the message from which the specified click events should be removed from.
* @return the string without the click events that are configured to be removed.
* @see Settings.Chat#CLICK_EVENT_ACTIONS_TO_REMOVE
* @since 6.0.10
*/
public static String stripClickEvents(final @NonNull String miniMessageString) {
// parse, transform and serialize again
@ -122,6 +123,7 @@ public class CaptionUtility {
* @return the string without the click events that are configured to be removed.
* @see Settings.Chat#CLICK_EVENT_ACTIONS_TO_REMOVE
* @see #stripClickEvents(String)
* @since 6.0.10
*/
public static String stripClickEvents(
final @NonNull PlotFlag<?, ?> flag,

View File

@ -99,7 +99,7 @@ public interface ChatFormatter {
* Whether or not the output should escape
* any formatting keys
*
* @return True if raw output is to be used
* @return {@code true} if raw output is to be used
*/
public boolean isRawOutput() {
return this.rawOutput;

View File

@ -39,6 +39,7 @@ public interface ComponentTransform {
*
* @param transform the transform to apply.
* @return a new transform which is applied on all child components and the component itself.
* @since 6.0.10
*/
static ComponentTransform nested(ComponentTransform transform) {
return new NestedComponentTransform(transform);
@ -51,6 +52,7 @@ public interface ComponentTransform {
*
* @param actionsToRemove the actions used to filter which click events should be removed.
* @return a new transform that removes click events from a component.
* @since 6.0.10
*/
static ComponentTransform stripClicks(ClickEvent.Action... actionsToRemove) {
return new ClickStripTransform(Set.of(actionsToRemove));
@ -61,6 +63,7 @@ public interface ComponentTransform {
*
* @param original the component to transform.
* @return the transformed component.
* @since 6.0.10
*/
@NonNull Component transform(@NonNull Component original);

View File

@ -36,10 +36,12 @@ import java.util.Locale;
public interface LocaleHolder {
/**
* Get the console locale holder
* Get the console locale holder.
* <p>
* You can use {@link ConsolePlayer#getConsole()} for direct access to the {@link ConsolePlayer}
* </p>
*
* @return Console locale holder
* @see ConsolePlayer#getConsole() for direct access to the {@link ConsolePlayer}
*/
@NonNull
static LocaleHolder console() {

View File

@ -70,7 +70,7 @@ public final class Templates {
* @return Generated template
*/
public static @NonNull Template of(final @NonNull String key, final @NonNull UUID uuid) {
final String username = PlayerManager.getName(uuid);
final String username = PlayerManager.resolveName(uuid).getComponent(LocaleHolder.console());
return Template.of(key, username);
}

View File

@ -371,7 +371,7 @@ public interface AbstractDB {
/**
* Don't use this method unless you want to ruin someone's server.
*
* @return true if the tables were deleted, false when an error is encountered
* @return {@code true} if the tables were deleted, {@code false} when an error is encountered
*/
boolean deleteTables();

View File

@ -52,7 +52,7 @@ public abstract class Database {
/**
* Checks if a connection is open with the database.
*
* @return true if the connection is open
* @return {@code true} if the connection is open
* @throws SQLException if the connection cannot be checked
*/
public abstract boolean checkConnection() throws SQLException;
@ -67,7 +67,7 @@ public abstract class Database {
/**
* Closes the connection with the database.
*
* @return true if successful
* @return {@code true} if successful
* @throws SQLException if the connection cannot be closed
*/
public abstract boolean closeConnection() throws SQLException;

View File

@ -101,7 +101,9 @@ public class SQLManager implements AbstractDB {
private final String prefix;
private final Database database;
private final boolean mySQL;
@SuppressWarnings({"unused", "FieldCanBeLocal"})
private final EventDispatcher eventDispatcher;
@SuppressWarnings({"unused", "FieldCanBeLocal"})
private final PlotListener plotListener;
private final YamlConfiguration worldConfiguration;
/**
@ -408,7 +410,6 @@ public class SQLManager implements AbstractDB {
while (iterator.hasNext()) {
try {
Entry<Plot, Queue<UniqueStatement>> entry = iterator.next();
Plot plot = entry.getKey();
Queue<UniqueStatement> tasks = entry.getValue();
if (tasks.isEmpty()) {
iterator.remove();
@ -2295,8 +2296,6 @@ public class SQLManager implements AbstractDB {
int size = uniqueIdsList.size();
int packet = 990;
int amount = size / packet;
int count = 0;
int last = -1;
for (int j = 0; j <= amount; j++) {
List<Integer> subList =
uniqueIdsList.subList(j * packet, Math.min(size, (j + 1) * packet));
@ -3200,6 +3199,7 @@ public class SQLManager implements AbstractDB {
return true;
}
@SuppressWarnings({"unchecked", "unused"})
@Override
public void validateAllPlots(Set<Plot> toValidate) {
if (!isValid()) {
@ -3455,15 +3455,7 @@ public class SQLManager implements AbstractDB {
}
private static class UUIDPair {
public final int id;
public final UUID uuid;
public UUIDPair(int id, UUID uuid) {
this.id = id;
this.uuid = uuid;
}
private record UUIDPair(int id, UUID uuid) {
}

View File

@ -115,7 +115,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeX()}
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.0")
public int getSize_x() {
return getSizeX();
}
@ -123,7 +123,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeX(int)} )}
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.0")
public void setSize_x(int sizeX) {
setSizeX(sizeX);
}
@ -131,7 +131,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#getSizeZ()}
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.0")
public int getSize_z() {
return getSizeZ();
}
@ -139,7 +139,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
/**
* @deprecated for removal. Use {@link PlayerAutoPlotEvent#setSizeZ(int)} )}
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.0")
public void setSize_z(int sizeZ) {
setSizeZ(sizeZ);
}
@ -148,6 +148,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
* Get the x size of the auto-area
*
* @return x size
* @since 6.1.0
*/
public int getSizeX() {
return this.sizeX;
@ -157,6 +158,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
* Set the x size of the auto-area
*
* @param sizeX x size
* @since 6.1.0
*/
public void setSizeX(int sizeX) {
this.sizeX = sizeX;
@ -166,6 +168,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
* Get the z size of the auto-area
*
* @return z size
* @since 6.1.0
*/
public int getSizeZ() {
return this.sizeZ;
@ -175,6 +178,7 @@ public class PlayerAutoPlotEvent extends PlotEvent implements CancellablePlotEve
* Set the z size of the auto-area
*
* @param sizeZ z size
* @since 6.1.0
*/
public void setSizeZ(int sizeZ) {
this.sizeZ = sizeZ;

View File

@ -40,8 +40,6 @@ import java.util.List;
*/
public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent {
private Result eventResult;
private List<Plot> plots;
/**
@ -49,6 +47,7 @@ public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent {
*
* @param player Player that executed the auto
* @param plots Plots that have been chosen to be set to the player
* @since 6.1.0
*/
public PlayerAutoPlotsChosenEvent(PlotPlayer<?> player, List<Plot> plots) {
super(player, plots.size() > 0 ? plots.get(0) : null);
@ -69,6 +68,7 @@ public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent {
* Get the immutable list of plots selected to be claimed by the player. May be of length 0.
*
* @return immutable list.
* @since 6.1.0
*/
public @NonNull List<Plot> getPlots() {
return plots;
@ -78,6 +78,7 @@ public class PlayerAutoPlotsChosenEvent extends PlotPlayerEvent {
* Set the plots to be claimed by the player.
*
* @param plots list of plots.
* @since 6.1.0
*/
public void setPlots(final @NonNull List<Plot> plots) {
this.plots = List.copyOf(plots);

View File

@ -42,7 +42,7 @@ public class PlayerPlotDeniedEvent extends PlotEvent {
* @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 true of add to deny list, false if removed
* @param added {@code true} of add to deny list, {@code false} if removed
*/
public PlayerPlotDeniedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) {
super(plot);

View File

@ -45,7 +45,7 @@ public class PlayerPlotHelperEvent extends PlotEvent {
* @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 true of the player was added, false if the player was removed
* @param added {@code true} if the player was added, {@code false} if the player was removed
*/
public PlayerPlotHelperEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) {
super(plot);

View File

@ -42,7 +42,7 @@ public class PlayerPlotTrustedEvent extends PlotEvent {
* @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 true of the player was added, false if the player was removed
* @param added {@code true} if the player was added, {@code false} if the player was removed
*/
public PlayerPlotTrustedEvent(PlotPlayer<?> initiator, Plot plot, UUID player, boolean added) {
super(plot);

View File

@ -42,7 +42,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
* @deprecated use {@link PlayerTeleportToPlotEvent#PlayerTeleportToPlotEvent(PlotPlayer, Location, Plot, TeleportCause)}.
* You should not be creating events in the first place.
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.0")
public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot) {
this(player, from, plot, TeleportCause.UNKNOWN);
}
@ -54,6 +54,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
* @param from Start location
* @param plot Plot to which the player was teleported
* @param cause Why the teleport is being completed
* @since 6.1.0
*/
public PlayerTeleportToPlotEvent(PlotPlayer<?> player, Location from, Plot plot, TeleportCause cause) {
super(player, plot);
@ -65,6 +66,7 @@ public class PlayerTeleportToPlotEvent extends PlotPlayerEvent implements Cancel
* Get the teleport cause
*
* @return TeleportCause
* @since 6.1.0
*/
public TeleportCause getCause() {
return cause;

View File

@ -39,6 +39,7 @@ public class PlotClaimedNotifyEvent extends PlotEvent {
*
* @param plot Plot that was claimed
* @param auto If the plot was claimed using /plot auto
* @since 6.1.0
*/
public PlotClaimedNotifyEvent(Plot plot, boolean auto) {
super(plot);
@ -49,7 +50,9 @@ public class PlotClaimedNotifyEvent extends PlotEvent {
* If the plot was claimed using /plot auto
*
* @return if claimed with auto
* @since 6.1.0
*/
@SuppressWarnings("unused")
public boolean wasAuto() {
return auto;
}

View File

@ -57,12 +57,16 @@ public enum TeleportCause {
PLUGIN,
UNKNOWN;
/**
* @since 6.1.0
*/
public static final class CauseSets {
public static final Set<TeleportCause> COMMAND = Sets.immutableEnumSet(EnumSet.range(
TeleportCause.COMMAND,
TeleportCause.COMMAND_VISIT
));
@SuppressWarnings("unused")
public static final Set<TeleportCause> PLUGIN = Sets.immutableEnumSet(EnumSet.range(
TeleportCause.DEATH,
TeleportCause.PLUGIN

View File

@ -97,8 +97,8 @@ public class HybridGen extends IndependentPlotGenerator {
}
// Coords
Location min = result.getMin();
int bx = (min.getX()) - hybridPlotWorld.ROAD_OFFSET_X;
int bz = (min.getZ()) - hybridPlotWorld.ROAD_OFFSET_Z;
int bx = min.getX() - hybridPlotWorld.ROAD_OFFSET_X;
int bz = min.getZ() - hybridPlotWorld.ROAD_OFFSET_Z;
// The relative X-coordinate (within the plot) of the minimum X coordinate
// contained in the scoped queue
short relativeOffsetX;

View File

@ -148,12 +148,22 @@ public class HybridUtils {
return;
}
ChunkQueueCoordinator chunk = new ChunkQueueCoordinator(bot, top, false);
ChunkQueueCoordinator chunk = new ChunkQueueCoordinator(worldUtil.getWeWorld(world), bot, top, false);
hpw.getGenerator().generateChunk(chunk, hpw);
final BlockState airBlock = BlockTypes.AIR.getDefaultState();
final BlockState[][][] oldBlocks = chunk.getBlocks();
final BlockState[][][] newBlocks = new BlockState[256][width][length];
final BlockState airBlock = BlockTypes.AIR.getDefaultState();
for (final BlockState[][] newBlock : newBlocks) {
for (final BlockState[] blockStates : newBlock) {
Arrays.fill(blockStates, airBlock);
}
}
for (final BlockState[][] oldBlock : oldBlocks) {
for (final BlockState[] blockStates : oldBlock) {
Arrays.fill(blockStates, airBlock);
}
}
System.gc();
System.gc();
@ -221,9 +231,6 @@ public class HybridUtils {
for (int y = 0; y < 256; y++) {
BlockState old = oldBlocks[y][x][z];
try {
if (old == null) {
old = airBlock;
}
BlockState now = newBlocks[y][x][z];
if (!old.equals(now)) {
changes[i]++;

View File

@ -95,6 +95,7 @@ public abstract class IndependentPlotGenerator {
* @param world ChunkGenerator Implementation
* @return Chunk generator
*/
@SuppressWarnings("unchecked")
public <T> GeneratorWrapper<T> specify(final @NonNull String world) {
return (GeneratorWrapper<T>) PlotSquared.platform().wrapPlotGenerator(world, this);
}

View File

@ -198,13 +198,7 @@ public class PlotListener {
final PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(uuid);
if (owner != null && !owner.getUUID().equals(player.getUUID()) && owner.canSee(player)) {
Caption caption = TranslatableCaption.of("notification.notify_enter");
Template playerTemplate = Template.of("player", player.getName());
Template plotTemplate = Template.of("plot", plot.getId().toString());
if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
owner.sendMessage(caption, playerTemplate, plotTemplate);
} else {
owner.sendActionBar(caption, playerTemplate, plotTemplate);
}
notifyPlotOwner(player, plot, owner, caption);
}
}
}
@ -327,7 +321,7 @@ public class PlotListener {
}
if ((lastPlot != null) && plot.getId().equals(lastPlot.getId()) && plot.hasOwner()) {
final UUID plotOwner = plot.getOwnerAbs();
String owner = PlayerManager.getName(plotOwner, false);
String owner = PlayerManager.resolveName(plotOwner, false).getComponent(player);
Caption header = fromFlag ? StaticCaption.of(title) : TranslatableCaption.of("titles" +
".title_entered_plot");
Caption subHeader = fromFlag ? StaticCaption.of(subtitle) : TranslatableCaption.of("titles" +
@ -443,13 +437,7 @@ public class PlotListener {
final PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(uuid);
if ((owner != null) && !owner.getUUID().equals(player.getUUID()) && owner.canSee(player)) {
Caption caption = TranslatableCaption.of("notification.notify_leave");
Template playerTemplate = Template.of("player", player.getName());
Template plotTemplate = Template.of("plot", plot.getId().toString());
if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
owner.sendMessage(caption, playerTemplate, plotTemplate);
} else {
owner.sendActionBar(caption, playerTemplate, plotTemplate);
}
notifyPlotOwner(player, plot, owner, caption);
}
}
}
@ -497,6 +485,17 @@ public class PlotListener {
return true;
}
private void notifyPlotOwner(final PlotPlayer<?> player, final Plot plot, final PlotPlayer<?> owner, final Caption caption) {
Template playerTemplate = Template.of("player", player.getName());
Template plotTemplate = Template.of("plot", plot.getId().toString());
Template areaTemplate = Template.of("area", plot.getArea().toString());
if (!Settings.Chat.NOTIFICATION_AS_ACTIONBAR) {
owner.sendMessage(caption, playerTemplate, plotTemplate, areaTemplate);
} else {
owner.sendActionBar(caption, playerTemplate, plotTemplate, areaTemplate);
}
}
public void logout(UUID uuid) {
feedRunnable.remove(uuid);
healRunnable.remove(uuid);

View File

@ -42,8 +42,6 @@ import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.lang.reflect.Field;
@ -53,8 +51,6 @@ import java.util.Set;
public class ProcessedWEExtent extends AbstractDelegateExtent {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ProcessedWEExtent.class.getSimpleName());
private final Set<CuboidRegion> mask;
private final String world;
private final int max;
@ -162,6 +158,7 @@ public class ProcessedWEExtent extends AbstractDelegateExtent {
return null;
}
@SuppressWarnings("deprecation")
@Override
public boolean setBiome(BlockVector2 position, BiomeType biome) {
return WEManager.maskContains(this.mask, position.getX(), position.getZ()) && super

View File

@ -54,6 +54,7 @@ public class WEExtent extends AbstractDelegateExtent {
this.mask = mask;
}
@SuppressWarnings("unchecked")
@Override
public boolean setBlock(BlockVector3 location, BlockStateHolder block)
throws WorldEditException {

View File

@ -52,6 +52,7 @@ public interface PermissionHolder {
* @param permission Permission
* @param key Permission "key"
* @return {@code true} if the owner has the given permission, else {@code false}
* @since 6.0.10
*/
default boolean hasKeyedPermission(
final @NonNull String permission,
@ -115,6 +116,7 @@ public interface PermissionHolder {
* @param permission Permission
* @param key Permission "key"
* @return {@code true} if the owner has the given permission, else {@code false}
* @since 6.0.10
*/
boolean hasKeyedPermission(@Nullable String world, @NonNull String permission, @NonNull String key);

View File

@ -59,7 +59,9 @@ public interface PermissionProfile {
* @param permission Permission
* @param key Permission "key"
* @return {@code true} if the owner has the given permission, else {@code false}
* @since 6.0.10
*/
@SuppressWarnings("unused")
default boolean hasKeyedPermission(
final @NonNull String permission,
final @NonNull String key
@ -75,6 +77,7 @@ public interface PermissionProfile {
* @param permission Permission
* @param key Permission "key"
* @return {@code true} if the owner has the given permission, else {@code false}
* @since 6.0.10
*/
boolean hasKeyedPermission(
@Nullable String world, final @NonNull String permission,

View File

@ -53,7 +53,7 @@ public abstract class MetaDataAccess<T> implements AutoCloseable {
this.lockAccess = lockAccess;
}
@SuppressWarnings("ALL")
@SuppressWarnings("unchecked")
private static <E extends Throwable> void sneakyThrow(final Throwable e) throws E {
throw (E) e;
}

View File

@ -62,6 +62,7 @@ public final class MetaDataKey<T> {
* @param <T> Type
* @return MetaData key instance
*/
@SuppressWarnings("unchecked")
public static @NonNull <T> MetaDataKey<T> of(final @NonNull String key, final @NonNull TypeLiteral<T> type) {
synchronized (keyMetaData) {
return (MetaDataKey<T>)

View File

@ -47,6 +47,7 @@ final class PersistentMetaDataAccess<T> extends MetaDataAccess<T> {
return this.getPlayer().hasPersistentMeta(getMetaDataKey().toString());
}
@SuppressWarnings("unchecked")
@Override
public @Nullable T remove() {
this.checkClosed();

View File

@ -104,7 +104,8 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
private static final Set<PlotPlayer<?>> debugModeEnabled =
Collections.synchronizedSet(new HashSet<>());
private static final Map<Class, PlotPlayerConverter> converters = new HashMap<>();
@SuppressWarnings("rawtypes")
private static final Map<Class<?>, PlotPlayerConverter> converters = new HashMap<>();
private final LockRepository lockRepository = new LockRepository();
private final PlotAreaManager plotAreaManager;
private final EventDispatcher eventDispatcher;
@ -128,6 +129,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
this.permissionHandler = permissionHandler;
}
@SuppressWarnings({"rawtypes", "unchecked"})
public static <T> PlotPlayer<T> from(final @NonNull T object) {
// fast path
if (converters.containsKey(object.getClass())) {
@ -234,6 +236,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
* @param <T> the object type to return
* @return the value assigned to the key or null if it does not exist
*/
@SuppressWarnings("unchecked")
<T> T getMeta(String key) {
if (this.meta != null) {
return (T) this.meta.get(key);
@ -361,7 +364,6 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
}
public int getClusterCount(String world) {
UUID uuid = getUUID();
int count = 0;
for (PlotArea area : this.plotAreaManager.getPlotAreasSet(world)) {
for (PlotCluster cluster : area.getClusters()) {
@ -376,9 +378,12 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
/**
* Get a {@link Set} of plots owned by this player.
*
* <p>
* Take a look at {@link PlotSquared} for more searching functions.
* See {@link #getPlotCount()} for the number of plots.
* </p>
*
* @return a {@link Set} of plots owned by the player
* @see PlotSquared for more searching functions
* @see #getPlotCount() for the number of plots
*/
public Set<Plot> getPlots() {
return PlotQuery.newQuery().ownedBy(this).asSet();
@ -499,7 +504,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
* Retrieves the attribute of this player.
*
* @param key metadata key
* @return the attribute will be either true or false
* @return the attribute will be either {@code true} or {@code false}
*/
public boolean getAttribute(String key) {
if (!hasPersistentMeta("attrib_" + key)) {
@ -570,7 +575,7 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
/**
* Check if this player is banned.
*
* @return true if the player is banned, false otherwise.
* @return {@code true} if the player is banned, {@code false} otherwise.
*/
public abstract boolean isBanned();
@ -795,16 +800,16 @@ public abstract class PlotPlayer<P> implements CommandCaller, OfflinePlotPlayer,
final @NonNull MetaDataKey<T> key,
final @NonNull T value
) {
final Object rawValue = value;
if (key.getType().getRawType().equals(Integer.class)) {
this.setPersistentMeta(key.toString(), Ints.toByteArray((int) rawValue));
this.setPersistentMeta(key.toString(), Ints.toByteArray((int) (Object) value));
} else if (key.getType().getRawType().equals(Boolean.class)) {
this.setPersistentMeta(key.toString(), ByteArrayUtilities.booleanToBytes((boolean) rawValue));
this.setPersistentMeta(key.toString(), ByteArrayUtilities.booleanToBytes((boolean) (Object) value));
} else {
throw new IllegalArgumentException(String.format("Unknown meta data type '%s'", key.getType()));
}
}
@SuppressWarnings("unchecked")
@Nullable <T> T getPersistentMeta(final @NonNull MetaDataKey<T> key) {
final byte[] value = this.getPersistentMeta(key.toString());
if (value == null) {

View File

@ -47,6 +47,7 @@ final class TemporaryMetaDataAccess<T> extends MetaDataAccess<T> {
return this.getPlayer().getMeta(this.getMetaDataKey().toString()) != null;
}
@SuppressWarnings("unchecked")
@Override
public @Nullable T remove() {
this.checkClosed();

View File

@ -219,10 +219,13 @@ public class Plot {
* Constructor for a new plot.
* (Only changes after plot.create() will be properly set in the database)
*
* <p>
* See {@link Plot#getPlot(Location)} for existing plots
* </p>
*
* @param area the PlotArea where the plot is located
* @param id the plot id
* @param owner the plot owner
* @see Plot#getPlot(Location) for existing plots
*/
public Plot(final PlotArea area, final @NonNull PlotId id, final UUID owner) {
this(area, id, owner, 0);
@ -232,9 +235,12 @@ public class Plot {
* Constructor for an unowned plot.
* (Only changes after plot.create() will be properly set in the database)
*
* <p>
* See {@link Plot#getPlot(Location)} for existing plots
* </p>
*
* @param area the PlotArea where the plot is located
* @param id the plot id
* @see Plot#getPlot(Location) for existing plots
*/
public Plot(final @NonNull PlotArea area, final @NonNull PlotId id) {
this(area, id, null, 0);
@ -245,11 +251,14 @@ public class Plot {
* The database will ignore any queries regarding temporary plots.
* Please note that some bulk plot management functions may still affect temporary plots (TODO: fix this)
*
* <p>
* See {@link Plot#getPlot(Location)} for existing plots
* </p>
*
* @param area the PlotArea where the plot is located
* @param id the plot id
* @param owner the owner of the plot
* @param temp Represents whatever the database manager needs it to
* @see Plot#getPlot(Location) for existing plots
*/
public Plot(final PlotArea area, final @NonNull PlotId id, final UUID owner, final int temp) {
this.area = area;
@ -266,6 +275,10 @@ public class Plot {
/**
* Constructor for a saved plots (Used by the database manager when plots are fetched)
*
* <p>
* See {@link Plot#getPlot(Location)} for existing plots
* </p>
*
* @param id the plot id
* @param owner the plot owner
* @param trusted the plot trusted players
@ -278,7 +291,6 @@ public class Plot {
* @param merged an array giving merged plots
* @param timestamp when the plot was created
* @param temp value representing whatever DBManager needs to to. Do not touch tbh.
* @see Plot#getPlot(Location) for existing plots
*/
public Plot(
@NonNull PlotId id,
@ -418,9 +430,12 @@ public class Plot {
/**
* Return a new/cached plot object at a given location.
*
* <p>
* Use {@link PlotPlayer#getCurrentPlot()} if a player is expected here.
* </p>
*
* @param location the location of the plot
* @return plot at location or null
* @see PlotPlayer#getCurrentPlot() if a player is expected here.
*/
public static @Nullable Plot getPlot(final @NonNull Location location) {
final PlotArea pa = location.getPlotArea();
@ -588,10 +603,13 @@ public class Plot {
/**
* Get the plot owner of this particular sub-plot.
* (Merged plots can have multiple owners)
* Direct access is discouraged: use getOwners()
* Direct access is discouraged: use {@link #getOwners()}
*
* <p>
* Use {@link #getOwnerAbs()} to get the owner as stored in the database
* </p>
*
* @return Server if ServerPlot flag set, else {@link #getOwnerAbs()}
* @see #getOwnerAbs() getOwnerAbs() to get the owner as stored in the database
*/
public @Nullable UUID getOwner() {
if (this.getFlag(ServerPlotFlag.class)) {
@ -1201,12 +1219,6 @@ public class Plot {
*
* @return array of entity counts
* @see RegionManager#countEntities(Plot)
* 0 = Entity
* 1 = Animal
* 2 = Monster
* 3 = Mob
* 4 = Boat
* 5 = Misc
*/
public int[] countEntities() {
int[] count = new int[6];
@ -1225,7 +1237,7 @@ public class Plot {
/**
* Returns true if a previous task was running
*
* @return true if a previous task is running
* @return {@code true} if a previous task is running
*/
public int addRunning() {
int value = this.getRunning();
@ -1269,7 +1281,7 @@ public class Plot {
/**
* Unclaim the plot (does not modify terrain). Changes made to this plot will not be reflected in unclaimed plot objects.
*
* @return false if the Plot has no owner, otherwise true.
* @return {@code false} if the Plot has no owner, otherwise {@code true}.
*/
public boolean unclaim() {
if (!this.hasOwner()) {
@ -1686,7 +1698,7 @@ public class Plot {
return base.settings != null && base.settings.getRatings() != null;
}
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.0")
public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic) {
if (!canClaim(player)) {
return false;
@ -1694,7 +1706,7 @@ public class Plot {
return claim(player, teleport, schematic, true);
}
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.0")
public boolean claim(final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB) {
return claim(player, teleport, schematic, updateDB, false);
}
@ -1708,6 +1720,7 @@ public class Plot {
* @param updateDB If the database should be updated
* @param auto If the plot is being claimed by a /plot auto
* @return success
* @since 6.1.0
*/
public boolean claim(
final @NonNull PlotPlayer<?> player, boolean teleport, String schematic, boolean updateDB,
@ -2669,7 +2682,7 @@ public class Plot {
/**
* Checks if the owner of this Plot is online.
*
* @return true if the owner of the Plot is online
* @return {@code true} if the owner of the Plot is online
*/
public boolean isOnline() {
if (!this.hasOwner()) {
@ -2834,11 +2847,11 @@ public class Plot {
if (this.isOnline()) {
seen = TranslatableCaption.of("info.now").getComponent(player);
} else {
int time = (int) (ExpireManager.IMP.getAge(this) / 1000);
int time = (int) (ExpireManager.IMP.getAge(this, false) / 1000);
if (time != 0) {
seen = TimeUtil.secToTime(time);
} else {
seen = TranslatableCaption.of("info.known").getComponent(player);
seen = TranslatableCaption.of("info.unknown").getComponent(player);
}
}
} else {
@ -3031,8 +3044,11 @@ public class Plot {
* If rating categories are enabled, get the average rating by category.<br>
* - The index corresponds to the index of the category in the config
*
* <p>
* See {@link Settings.Ratings#CATEGORIES} for rating categories
* </p>
*
* @return Average ratings in each category
* @see Settings.Ratings#CATEGORIES Rating categories
*/
public @NonNull double[] getAverageRatings() {
Map<UUID, Integer> rating;

View File

@ -295,7 +295,7 @@ public abstract class PlotArea {
* Check if a PlotArea is compatible (move/copy etc.).
*
* @param plotArea the {@link PlotArea} to compare
* @return true if both areas are compatible
* @return {@code true} if both areas are compatible
*/
public boolean isCompatible(final @NonNull PlotArea plotArea) {
final ConfigurationSection section = this.worldConfiguration.getConfigurationSection("worlds");
@ -439,38 +439,6 @@ public abstract class PlotArea {
loadConfiguration(config);
}
private Component getFlagsComponent(Component flagsComponent, Collection<PlotFlag<?, ?>> flagCollection) {
if (flagCollection.isEmpty()) {
flagsComponent = MINI_MESSAGE.parse(TranslatableCaption.of("flag.no_flags").getComponent(LocaleHolder.console()));
} else {
String prefix = " ";
for (final PlotFlag<?, ?> flag : flagCollection) {
Object value;
if (flag instanceof DoubleFlag && !Settings.General.SCIENTIFIC) {
value = FLAG_DECIMAL_FORMAT.format(flag.getValue());
} else {
value = flag.toString();
}
Component snip = MINI_MESSAGE.parse(
prefix + CaptionUtility
.format(
ConsolePlayer.getConsole(),
TranslatableCaption.of("info.plot_flag_list").getComponent(LocaleHolder.console())
),
Template.of("flag", flag.getName()),
Template.of("value", CaptionUtility.formatRaw(ConsolePlayer.getConsole(), value.toString()))
);
if (flagsComponent != null) {
flagsComponent.append(snip);
} else {
flagsComponent = snip;
}
prefix = ", ";
}
}
return flagsComponent;
}
public abstract void loadConfiguration(ConfigurationSection config);
/**
@ -1133,7 +1101,7 @@ public abstract class PlotArea {
* If a schematic is available, it can be used for plot claiming.
*
* @param schematic the schematic to look for.
* @return true if the schematic exists, false otherwise.
* @return {@code true} if the schematic exists, {@code false} otherwise.
*/
public boolean hasSchematic(@NonNull String schematic) {
return getSchematics().contains(schematic.toLowerCase());
@ -1142,7 +1110,7 @@ public abstract class PlotArea {
/**
* Get whether economy is enabled and used on this plot area or not.
*
* @return true if this plot area uses economy, false otherwise.
* @return {@code true} if this plot area uses economy, {@code false} otherwise.
*/
public boolean useEconomy() {
return useEconomy;
@ -1151,7 +1119,7 @@ public abstract class PlotArea {
/**
* Get whether the plot area is limited by a world border or not.
*
* @return true if the plot area has a world border, false otherwise.
* @return {@code true} if the plot area has a world border, {@code false} otherwise.
*/
public boolean hasWorldBorder() {
return worldBorder;
@ -1160,7 +1128,7 @@ public abstract class PlotArea {
/**
* Get whether plot signs are allowed or not.
*
* @return true if plot signs are allow, false otherwise.
* @return {@code true} if plot signs are allowed, {@code false} otherwise.
*/
public boolean allowSigns() {
return allowSigns;
@ -1308,8 +1276,9 @@ public abstract class PlotArea {
* @deprecated Use {@link #signMaterial()}. This method is used for 1.13 only and
* will be removed without replacement in favor of {@link #signMaterial()}
* once we remove the support for 1.13.
* @since 6.0.3
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.0.3")
public String getLegacySignMaterial() {
return this.legacySignMaterial;
}
@ -1355,14 +1324,18 @@ public abstract class PlotArea {
/**
* Get the location for non-members to be teleported to.
*
* @since 6.1.4
*/
public BlockLoc nonmemberHome() {
return this.nonmemberHome;
}
/**
* Get the default location for players to be teleported to. May be overriden by {@link #nonmemberHome} if the player is
* Get the default location for players to be teleported to. May be overridden by {@link #nonmemberHome} if the player is
* not a member of the plot.
*
* @since 6.1.4
*/
public BlockLoc defaultHome() {
return this.defaultHome;
@ -1371,7 +1344,7 @@ public abstract class PlotArea {
/**
* @deprecated Use {@link #nonmemberHome}
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.4")
public PlotLoc getNonmemberHome() {
return new PlotLoc(this.defaultHome.getX(), this.defaultHome.getY(), this.defaultHome.getZ());
}
@ -1379,7 +1352,7 @@ public abstract class PlotArea {
/**
* @deprecated Use {@link #defaultHome}
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.1.4")
public PlotLoc getDefaultHome() {
return new PlotLoc(this.defaultHome.getX(), this.defaultHome.getY(), this.defaultHome.getZ());
}

View File

@ -187,7 +187,7 @@ public abstract class PlotManager {
* @param plotIds list of PlotIds to finish the merge for
* @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
* otherwise writes to the queue but does not enqueue.
* @return false if part if the merge failed, otherwise true if successful.
* @return {@code false} if part if the merge failed, otherwise {@code true} if successful.
*/
public abstract boolean finishPlotMerge(@NonNull List<PlotId> plotIds, @Nullable QueueCoordinator queue);
@ -214,7 +214,7 @@ public abstract class PlotManager {
* @return the world height
* @deprecated In favor of custom world heights within 1.17 and therefore scheduled for removal without replacement
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.0.0")
public int getWorldHeight() {
return 255;
}
@ -224,7 +224,7 @@ public abstract class PlotManager {
*
* @param queue Nullable {@link QueueCoordinator}. If null, creates own queue and enqueues,
* otherwise writes to the queue but does not enqueue.
* @return true if the wall blocks were successfully set
* @return {@code true} if the wall blocks were successfully set
*/
public boolean regenerateAllPlotWalls(@Nullable QueueCoordinator queue) {
boolean success = true;

View File

@ -30,6 +30,7 @@ import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.ConfigurationUtil;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.Caption;
import com.plotsquared.core.configuration.caption.LocaleHolder;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.events.PlotComponentSetEvent;
@ -189,9 +190,12 @@ public final class PlotModificationManager {
/**
* Clear the plot
*
* <p>
* Use {@link #deletePlot(PlotPlayer, Runnable)} to clear and delete a plot
* </p>
*
* @param whenDone A runnable to execute when clearing finishes, or null
* @see #clear(boolean, boolean, PlotPlayer, Runnable)
* @see #deletePlot(PlotPlayer, Runnable) to clear and delete a plot
*/
public void clear(final @Nullable Runnable whenDone) {
this.clear(false, false, null, whenDone);
@ -200,11 +204,14 @@ public final class PlotModificationManager {
/**
* Clear the plot
*
* <p>
* Use {@link #deletePlot(PlotPlayer, Runnable)} to clear and delete a plot
* </p>
*
* @param checkRunning Whether or not already executing tasks should be checked
* @param isDelete Whether or not the plot is being deleted
* @param actor The actor clearing the plot
* @param whenDone A runnable to execute when clearing finishes, or null
* @see #deletePlot(PlotPlayer, Runnable) to clear and delete a plot
*/
public boolean clear(
final boolean checkRunning,
@ -358,7 +365,8 @@ public final class PlotModificationManager {
if (createSign) {
queue.setCompleteTask(() -> TaskManager.runTaskAsync(() -> {
for (Plot current : plots) {
current.getPlotModificationManager().setSign(PlayerManager.getName(current.getOwnerAbs()));
current.getPlotModificationManager().setSign(PlayerManager.resolveName(current.getOwnerAbs()).getComponent(
LocaleHolder.console()));
}
}));
}
@ -446,7 +454,7 @@ public final class PlotModificationManager {
* - Any setting from before plot creation will not be saved until the server is stopped properly. i.e. Set any values/options after plot
* creation.
*
* @return true if plot was created successfully
* @return {@code true} if plot was created successfully
*/
public boolean create() {
return this.create(this.plot.getOwnerAbs(), true);
@ -790,7 +798,7 @@ public final class PlotModificationManager {
/**
* Unlink a plot and remove the roads
*
* @return true if plot was linked
* @return {@code true} if plot was linked
* @see #unlinkPlot(boolean, boolean)
*/
public boolean unlink() {
@ -856,11 +864,14 @@ public final class PlotModificationManager {
/**
* Delete a plot (use null for the runnable if you don't need to be notified on completion)
*
* <p>
* Use {@link PlotModificationManager#clear(boolean, boolean, PlotPlayer, Runnable)} to simply clear a plot
* </p>
*
* @param actor The actor executing the task
* @param whenDone task to run when plot has been deleted. Nullable
* @return {@code true} if the deletion was successful, {@code false} if not
* @see PlotSquared#removePlot(Plot, boolean)
* @see PlotModificationManager#clear(boolean, boolean, PlotPlayer, Runnable) to simply clear a plot
*/
public boolean deletePlot(@Nullable PlotPlayer<?> actor, final Runnable whenDone) {
if (!this.plot.hasOwner()) {

View File

@ -30,6 +30,9 @@ import java.util.Objects;
public class PlotTitle {
/**
* @since 6.1.0
*/
public static final PlotTitle CONFIGURED = new PlotTitle();
private final String title;
@ -40,6 +43,9 @@ public class PlotTitle {
subtitle = null;
}
/**
* @since 6.0.10
*/
public PlotTitle(String title, String subtitle) {
Objects.requireNonNull(title);
Objects.requireNonNull(subtitle);
@ -47,11 +53,17 @@ public class PlotTitle {
this.subtitle = subtitle;
}
/**
* @since 6.0.10
*/
@Nullable
public String title() {
return title;
}
/**
* @since 6.0.10
*/
@Nullable
public String subtitle() {
return subtitle;

View File

@ -54,7 +54,7 @@ public abstract class CommentInbox {
/**
* @param plot the plot's inbox to write to
* @param player the player trying to write the comment
* @return true if the player can write a comment on the plot
* @return {@code true} if the player can write a comment on the plot
*/
public boolean canWrite(Plot plot, PlotPlayer<?> player) {
if (plot == null) {
@ -68,7 +68,7 @@ public abstract class CommentInbox {
/**
* @param plot the plot's inbox to write to
* @param player the player trying to modify the inbox
* @return true if the player can write a comment on the plot
* @return {@code true} if the player can write a comment on the plot
*/
@SuppressWarnings({"BooleanMethodIsAlwaysInverted"})
public boolean canModify(Plot plot, PlotPlayer<?> player) {

View File

@ -216,24 +216,20 @@ public class ExpireManager {
applicable.add(et);
}
}
if (applicable.isEmpty()) {
return new ArrayList<>();
}
// Don't delete server plots
if (plot.getFlag(ServerPlotFlag.class)) {
return new ArrayList<>();
}
long diff = getAge(plot);
if (diff == 0) {
return new ArrayList<>();
}
// Filter out non old plots
boolean shouldCheckAccountAge = false;
for (int i = 0; i < applicable.size(); i++) {
ExpiryTask et = applicable.poll();
if (et.applies(diff)) {
if (et.applies(getAge(plot, et.shouldDeleteForUnknownOwner()))) {
applicable.add(et);
shouldCheckAccountAge |= et.getSettings().SKIP_ACCOUNT_AGE_DAYS != -1;
}
@ -243,9 +239,9 @@ public class ExpireManager {
}
// Check account age
if (shouldCheckAccountAge) {
long accountAge = getAge(plot);
for (int i = 0; i < applicable.size(); i++) {
ExpiryTask et = applicable.poll();
long accountAge = getAge(plot, et.shouldDeleteForUnknownOwner());
if (et.appliesAccountAge(accountAge)) {
applicable.add(et);
}
@ -309,9 +305,8 @@ public class ExpireManager {
return false;
}
this.running = 2;
final ConcurrentLinkedDeque<Plot> plots =
new ConcurrentLinkedDeque<>(PlotQuery.newQuery().allPlots().asList());
TaskManager.runTaskAsync(new Runnable() {
private ConcurrentLinkedDeque<Plot> plots = null;
@Override
public void run() {
final Runnable task = this;
@ -319,7 +314,9 @@ public class ExpireManager {
ExpireManager.this.running = 0;
return;
}
long start = System.currentTimeMillis();
if (plots == null) {
plots = new ConcurrentLinkedDeque<>(PlotQuery.newQuery().allPlots().asList());
}
while (!plots.isEmpty()) {
if (ExpireManager.this.running != 2) {
ExpireManager.this.running = 0;
@ -454,7 +451,20 @@ public class ExpireManager {
plot.getPlotModificationManager().deletePlot(null, whenDone);
}
@Deprecated(forRemoval = true, since = "TODO")
public long getAge(UUID uuid) {
return getAge(uuid, false);
}
/**
* Get the age (last play time) of the passed player
*
* @param uuid the uuid of the owner to check against
* @param shouldDeleteUnknownOwner {@code true} if an unknown player should be counted as never online
* @return the millis since the player was last online, or {@link Long#MAX_VALUE} if player was never online
* @since TODO
*/
public long getAge(UUID uuid, final boolean shouldDeleteUnknownOwner) {
if (PlotSquared.platform().playerManager().getPlayerIfExists(uuid) != null) {
return 0;
}
@ -464,7 +474,7 @@ public class ExpireManager {
if (opp != null && (last = opp.getLastPlayed()) != 0) {
this.dates_cache.put(uuid, last);
} else {
return 0;
return shouldDeleteUnknownOwner ? Long.MAX_VALUE : 0;
}
}
if (last == 0) {
@ -473,7 +483,7 @@ public class ExpireManager {
return System.currentTimeMillis() - last;
}
public long getAge(Plot plot) {
public long getAge(Plot plot, final boolean shouldDeleteUnknownOwner) {
if (!plot.hasOwner() || Objects.equals(DBFunc.EVERYONE, plot.getOwner())
|| PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwner()) != null || plot.getRunning() > 0) {
return 0;
@ -495,7 +505,7 @@ public class ExpireManager {
}
long min = Long.MAX_VALUE;
for (UUID owner : plot.getOwners()) {
long age = getAge(owner);
long age = getAge(owner, shouldDeleteUnknownOwner);
if (age < min) {
min = age;
}

View File

@ -80,7 +80,7 @@ public class ExpiryTask {
diff = settings.REQUIRED_PLOTS - plots.size();
}
List<Long> entireList =
plots.stream().map(plot -> ExpireManager.IMP.getAge(plot))
plots.stream().map(plot -> ExpireManager.IMP.getAge(plot, settings.DELETE_IF_OWNER_IS_UNKNOWN))
.collect(Collectors.toList());
List<Long> top = new ArrayList<>(diff + 1);
if (diff > 1000) {
@ -157,5 +157,13 @@ public class ExpiryTask {
return settings.CONFIRMATION;
}
/**
* Returns {@code true} if this task respects unknown owners
* @return {@code true} if unknown owners should be counted as never online
* @since TODO
*/
public boolean shouldDeleteForUnknownOwner() {
return settings.DELETE_IF_OWNER_IS_UNKNOWN;
}
}

View File

@ -558,6 +558,7 @@ public class PlotAnalysis {
return ranks;
}
@SuppressWarnings("unchecked")
public static void sort(int[] input) {
int SIZE = 10;
List<Integer>[] bucket = new ArrayList[SIZE];

View File

@ -96,7 +96,7 @@ public class FlagContainer {
}
/**
* Cast a plot flag with wildcard parameters into a parametrisized
* Cast a plot flag with wildcard parameters into a parametrized
* PlotFlag. This is an unsafe operation, and should only be performed
* if the generic parameters are known beforehand.
*
@ -105,7 +105,7 @@ public class FlagContainer {
* @param <T> Flag type
* @return Casted flag
*/
@SuppressWarnings("ALL")
@SuppressWarnings("unchecked")
public static <V, T extends PlotFlag<V, ?>> T castUnsafe(
final PlotFlag<?, ?> flag
) {
@ -142,10 +142,13 @@ public class FlagContainer {
/**
* Add a flag to the container
*
* <p>
* Use {@link #addAll(Collection)} to add multiple flags.
* </p>
*
* @param flag Flag to add
* @param <T> flag type
* @param <V> flag value type
* @see #addAll(Collection) to add multiple flags
*/
public <V, T extends PlotFlag<V, ?>> void addFlag(final T flag) {
try {
@ -181,6 +184,7 @@ public class FlagContainer {
* @param <V> flag value type
* @return value of flag removed
*/
@SuppressWarnings("unchecked")
public <V, T extends PlotFlag<V, ?>> V removeFlag(final T flag) {
final Object value = this.flagMap.remove(flag.getClass());
if (this.plotFlagUpdateHandler != null) {
@ -198,8 +202,11 @@ public class FlagContainer {
/**
* Add all flags to the container
*
* <p>
* Use {@link #addFlag(PlotFlag)} to add a single flag.
* </p>
*
* @param flags Flags to add
* @see #addFlag(PlotFlag) to add a single flagg
*/
public void addAll(final Collection<PlotFlag<?, ?>> flags) {
for (final PlotFlag<?, ?> flag : flags) {
@ -304,8 +311,11 @@ public class FlagContainer {
* Updates are: a flag being removed, a flag being added or a flag
* being updated.
*
* <p>
* Use {@link PlotFlagUpdateType} to see the update types available.
* </p>
*
* @param plotFlagUpdateHandler The update handler which will react to changes.
* @see PlotFlagUpdateType Plot flag update types
*/
public void subscribe(final @NonNull PlotFlagUpdateHandler plotFlagUpdateHandler) {
this.updateSubscribers.add(plotFlagUpdateHandler);
@ -348,6 +358,7 @@ public class FlagContainer {
* This is to prevent memory leaks. This method is not part of the API.
*
* @return a new Runnable that cleans up once the FlagContainer isn't needed anymore.
* @since 6.0.10
*/
@AnnotationHelper.ApiDescription(info = "This method should not be considered as public or API.")
public Runnable createCleanupHook() {

View File

@ -163,6 +163,7 @@ public abstract class PlotFlag<T, F extends PlotFlag<T, F>> {
* Get if the flag's permission should check for values. E.g. plots.flag.set.music.VALUE
*
* @return if valued permission
* @since 6.0.10
*/
public boolean isValuedPermission() {
return true;

View File

@ -29,6 +29,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.plot.PlotTitle;
import com.plotsquared.core.plot.flag.FlagParseException;
import com.plotsquared.core.plot.flag.PlotFlag;
import com.plotsquared.core.util.StringMan;
import org.checkerframework.checker.nullness.qual.NonNull;
public class PlotTitleFlag extends PlotFlag<PlotTitle, PlotTitleFlag> {
@ -56,17 +57,18 @@ public class PlotTitleFlag extends PlotFlag<PlotTitle, PlotTitleFlag> {
if (!input.contains("\"")) {
return new PlotTitleFlag(new PlotTitle(input, ""));
}
input = input.substring(input.indexOf("\""));
input = input.substring(0, input.lastIndexOf("\"") + 1);
String[] inputs = input.split("\"");
PlotTitle value;
if (inputs.length == 2) {
value = new PlotTitle(inputs[1], "");
} else if (inputs.length > 3) {
value = new PlotTitle(inputs[1], inputs[3]);
} else {
var split = StringMan.splitMessage(input);
if (split.isEmpty() || split.size() > 2) {
throw new FlagParseException(this, input, TranslatableCaption.of("flags.flag_error_title"));
}
PlotTitle value;
if (split.size() == 1) {
value = new PlotTitle(split.get(0), "");
} else {
value = new PlotTitle(split.get(0), split.get(1));
}
return new PlotTitleFlag(value);
}

View File

@ -196,9 +196,12 @@ public interface PlotAreaManager {
/**
* Check if a plot world.
*
* <p>
* Use {@link #getPlotAreaByString(String)} to get the PlotArea object
* </p>
*
* @param world the world
* @return if a plot world is registered
* @see #getPlotAreaByString(String) to get the PlotArea object
*/
default boolean hasPlotArea(final @NonNull String world) {
return this.getPlotAreas(world, null).length != 0;

View File

@ -57,7 +57,9 @@ import java.nio.file.Files;
public class SinglePlotArea extends GridPlotWorld {
@SuppressWarnings({"unused", "FieldCanBeLocal"})
private final EventDispatcher eventDispatcher;
@SuppressWarnings({"unused", "FieldCanBeLocal"})
private final PlotListener plotListener;
public boolean VOID = false;
@ -81,6 +83,7 @@ public class SinglePlotArea extends GridPlotWorld {
* Returns true if the given string matches the naming system used to identify single plot worlds
* e.g. -1_5 represents plot id *;-1;5. "*" being the plot area name given to single plot world
* {@link com.plotsquared.core.plot.PlotArea}.
* @since 6.1.4
*/
public static boolean isSinglePlotWorld(String worldName) {
int len = worldName.length();
@ -273,6 +276,7 @@ public class SinglePlotArea extends GridPlotWorld {
return false; // do not create signs for single plots
}
@SuppressWarnings("deprecation")
protected Plot adapt(Plot p) {
if (p instanceof SinglePlot) {
return p;

View File

@ -57,7 +57,6 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator {
private final ConcurrentHashMap<BlockVector2, LocalChunk> blockChunks = new ConcurrentHashMap<>();
private final List<BlockVector2> readRegion = new ArrayList<>();
private final List<ProgressSubscriber> progressSubscribers = new ArrayList<>();
private long modified;
private LocalChunk lastWrappedChunk;
private int lastX = Integer.MIN_VALUE;
private int lastZ = Integer.MIN_VALUE;
@ -76,7 +75,6 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator {
public BasicQueueCoordinator(@NonNull World world) {
super(world);
this.world = world;
this.modified = System.currentTimeMillis();
}
@Override
@ -94,7 +92,6 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator {
@Override
public final void setModified(long modified) {
this.modified = modified;
}
@Override
@ -120,6 +117,7 @@ public abstract class BasicQueueCoordinator extends QueueCoordinator {
return setBlock(x, y, z, id.toBaseBlock());
}
@SuppressWarnings("removal")
@Override
public boolean setBiome(int x, int z, @NonNull BiomeType biomeType) {
LocalChunk chunk = getChunk(x >> 4, z >> 4);

View File

@ -36,6 +36,7 @@ public abstract class ChunkCoordinator implements Runnable {
/**
* Cancel the chunk coordinator.
* @since 6.0.10
*/
public abstract void cancel();

View File

@ -46,13 +46,20 @@ public class ChunkQueueCoordinator extends ScopedQueueCoordinator {
private final int length;
private final BlockVector3 bot;
private final BlockVector3 top;
private final World weWorld;
public ChunkQueueCoordinator(@NonNull BlockVector3 bot, @NonNull BlockVector3 top, boolean biomes) {
public ChunkQueueCoordinator(
final @NonNull World weWorld,
@NonNull BlockVector3 bot,
@NonNull BlockVector3 top,
boolean biomes
) {
super(null, Location.at("", 0, 0, 0), Location.at("", 15, 255, 15));
this.weWorld = weWorld;
this.width = top.getX() - bot.getX() + 1;
this.length = top.getZ() - bot.getZ() + 1;
this.result = new BlockState[256][][];
this.biomeResult = biomes ? new BiomeType[256][][] : null;
this.result = new BlockState[256][width][length];
this.biomeResult = biomes ? new BiomeType[256][width][length] : null;
this.bot = bot;
this.top = top;
}
@ -137,7 +144,7 @@ public class ChunkQueueCoordinator extends ScopedQueueCoordinator {
@Override
public @Nullable World getWorld() {
return super.getWorld();
return weWorld;
}
@Override

View File

@ -56,6 +56,7 @@ public abstract class QueueCoordinator {
private Object chunkObject;
private final AtomicBoolean enqueued = new AtomicBoolean();
@SuppressWarnings({"unused", "FieldCanBeLocal"})
@Inject
private GlobalBlockQueue blockQueue;
@ -208,7 +209,7 @@ public abstract class QueueCoordinator {
* <br>
* Scheduled for removal once we drop the support for versions not supporting 3D biomes.
*/
@Deprecated(forRemoval = true)
@Deprecated(forRemoval = true, since = "6.0.0")
public abstract boolean setBiome(int x, int z, @NonNull BiomeType biome);
/**
@ -326,6 +327,7 @@ public abstract class QueueCoordinator {
* Enqueue the queue to start it
*
* @return success or not
* @since 6.0.10
*/
public boolean enqueue() {
boolean success = false;

View File

@ -34,6 +34,7 @@ import java.util.function.Consumer;
/**
* A repository for keyed {@link java.util.concurrent.locks.Lock locks}
*/
@SuppressWarnings("UnstableApiUsage")
public final class LockRepository {
private final Striped<Lock> striped;

View File

@ -90,7 +90,7 @@ public final class BlockUtil {
if (id.length() == 1 && id.charAt(0) == '*') {
return FuzzyBlockState.builder().type(BlockTypes.AIR).build();
}
String mutableId = id;
String mutableId;
mutableId = id.toLowerCase();
BlockType type = BlockTypes.get(mutableId);
if (type != null) {

View File

@ -123,7 +123,7 @@ public class ChunkUtil {
* @param pos1 Region minimum point
* @param pos2 Region maximum point
* @param chunk BlockVector2 of chunk coordinates
* @return true if the region pos1-pos2 contains the chunk
* @return {@code true} if the region pos1-pos2 contains the chunk
*/
public static boolean isWholeChunk(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockVector2 chunk) {
int x1 = pos1.getX();

View File

@ -73,6 +73,7 @@ public class EntityUtil {
return i;
}
@SuppressWarnings("unchecked")
public static boolean checkEntity(Plot plot, PlotFlag<Integer, ?>... flags) {
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
return true;

Some files were not shown because too many files have changed in this diff Show More