Compare commits

..

22 Commits

Author SHA1 Message Date
512ccd4bbf simplify timeout logic 2022-08-04 19:15:18 +02:00
c0bfa297bb Ensure use of new generation methods only on 1.19 and above 2022-06-27 17:40:46 +01:00
75fd9b2631 Update to new Spigot generation API (#3659)
* Address deprecations in queue/generation code

* Move to new generation API
 - Currently not working due to lack of biome-setting capability via BiomeProvider for flat worlds

* Any fixes to flat world biome setting will target 1.19

* Ensure compiled is actually set to true in BlockBucket

* Delegate to platformGenerator in deprecated generation method if applicable when using new generation methods (1.19)

* Re-add wrongly removed method

* Handle exceptions using logger

* We can simplify getting relative offset using floormod

* Replace many booleans with EnumSet

* Address comments, remove needless boolean return for populateChunk
2022-06-22 14:57:39 +02:00
6b680fb2c0 Merge v6/v7 2022-06-21 11:00:53 +02:00
27ffe4fcdc Address deprecations in queue/generation code (#3658) 2022-06-16 15:41:03 +01:00
8afcaccb8a Merge branch 'v6' into v7 2022-06-16 15:26:03 +01:00
c83b13e374 Merge branch 'v6' into v7
# Conflicts:
#	Core/src/main/java/com/plotsquared/core/command/Chat.java
#	Core/src/main/java/com/plotsquared/core/command/Save.java
#	Core/src/main/java/com/plotsquared/core/configuration/caption/Templates.java
#	Core/src/main/java/com/plotsquared/core/plot/PlotArea.java
#	Core/src/main/java/com/plotsquared/core/util/MainUtil.java
#	Core/src/main/java/com/plotsquared/core/util/RegExUtil.java
#	build.gradle.kts
#	gradle/libs.versions.toml
2022-06-16 15:25:33 +01:00
23360057b9 Chore: General deprecations (#3660)
Address deprecations for removal throughout the plugin
2022-06-13 23:45:27 +02:00
60f7113105 build: Update bom 2022-06-11 14:53:39 +02:00
26c0c1b7cd Merge branch 'v6' into v7 2022-06-11 14:11:25 +02:00
764c94c9cc Merge branch 'v6' into v7 2022-06-10 01:14:09 +02:00
3d87ee41b3 v7 is 7.0.0-SNAPSHOT 2022-06-08 14:42:14 +01:00
fd8832ac98 Merge branch 'v6' into v7 2022-06-01 20:13:07 +02:00
228acc196c Merge branch 'v7' of https://github.com/IntellectualSites/PlotSquared into v7 2022-05-29 22:05:37 +02:00
62197f3deb Merge branch 'v6' into v7 2022-05-29 22:05:17 +02:00
daa9348993 chore: Change maven group and artifact ID (#3632)
chore: Change maven group and artifact ID
2022-05-21 11:58:30 +02:00
7e4499e092 Merge branch 'v7' of https://github.com/IntellectualSites/PlotSquared into v7 2022-05-18 22:14:35 +02:00
396a1575d2 Merge branch 'v6' into v7 2022-05-18 22:13:29 +02:00
953d57d1b5 Replace legacy color codes in flag examples (#3520) 2022-05-16 13:28:03 +01:00
b53d2d03a4 Merge branch 'v6' into v7 2022-05-15 15:41:17 +02:00
c1431c0971 build: Update to Paper 1.18.2 (#3622)
build: Align MM and Adventure version
2022-05-15 12:31:40 +02:00
62ee60a76c Update MiniMessage to 4.10.1 (#3617)
* chore!: bump MiniMessage to 4.10.1

BREAKING CHANGE: bumping MiniMessage and Adventure removes the adventure Template class and breaks the whole messaging system api wise

* chore: fix minimessage messages, fix circular method reference
2022-05-14 17:05:28 +02:00
193 changed files with 3636 additions and 3289 deletions

View File

@ -27,11 +27,10 @@ body:
description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
multiple: false
options:
- '1.19.2'
- '1.19.1'
- '1.19'
- '1.18.2'
- '1.18.1'
- '1.18'
- '1.17.1'
- '1.16.5'
validations:

View File

@ -1,25 +0,0 @@
name: Announce release on discord
on:
release:
types: [published]
jobs:
send_announcement:
runs-on: ubuntu-latest
steps:
- name: send custom message with args
env:
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.3.2
with:
args: |
"<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>"
""
"<:plotsquared:730750385886593039> **PlotSquared ${{ github.event.release.tag_name }} has been released!**"
""
"Click here to view changelog: https://github.com/IntellectualSites/PlotSquared/releases/tag/${{ github.event.release.tag_name }}"
""
"The download is available at:"
"- Spigot: <https://www.spigotmc.org/resources/77506/>"

View File

@ -18,13 +18,13 @@ repositories {
}
dependencies {
api(projects.plotSquaredCore)
api(projects.plotsquaredCore)
// Metrics
implementation("org.bstats:bstats-bukkit")
// Paper
compileOnly("io.papermc.paper:paper-api")
compileOnly(libs.paper)
implementation("io.papermc:paperlib")
// Plugins
@ -50,7 +50,6 @@ dependencies {
implementation(libs.arkitektonika)
implementation(libs.http4j)
implementation("com.intellectualsites.paster:Paster")
implementation("com.intellectualsites.informative-annotations:informative-annotations")
// Adventure
implementation("net.kyori:adventure-platform-bukkit")
@ -88,7 +87,6 @@ tasks.named<ShadowJar>("shadowJar") {
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
relocate("com.intellectualsites.informative-annotations", "com.plotsquared.core.annotation.informative")
// Get rid of all the libs which are 100% unused.
minimize()
@ -105,6 +103,5 @@ tasks {
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
opt.links("https://checkerframework.org/api/")
opt.encoding("UTF-8")
}
}

View File

@ -41,7 +41,6 @@ import com.plotsquared.bukkit.listener.PlayerEventListener;
import com.plotsquared.bukkit.listener.ProjectileEventListener;
import com.plotsquared.bukkit.listener.ServerListener;
import com.plotsquared.bukkit.listener.SingleWorldListener;
import com.plotsquared.bukkit.listener.SpigotListener;
import com.plotsquared.bukkit.listener.WorldEvents;
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
@ -361,8 +360,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
} else {
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
}
} else {
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
}
this.plotListener.startRunnable();
}
@ -659,15 +656,20 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
final @NonNull SQLiteUUIDService sqLiteUUIDService,
final @NonNull CacheUUIDService cacheUUIDService
) {
// Record all unique UUID's and put them into a queue
final Set<UUID> uuidSet = new HashSet<>();
// Load all uuids into a big chunky boi queue
final Queue<UUID> uuidQueue = new LinkedBlockingQueue<>();
PlotSquared.get().forEachPlotRaw(plot -> {
uuidSet.add(plot.getOwnerAbs());
uuidSet.addAll(plot.getMembers());
uuidSet.addAll(plot.getTrusted());
uuidSet.addAll(plot.getDenied());
final Set<UUID> uuids = new HashSet<>();
uuids.add(plot.getOwnerAbs());
uuids.addAll(plot.getMembers());
uuids.addAll(plot.getTrusted());
uuids.addAll(plot.getDenied());
for (final UUID uuid : uuids) {
if (!uuidQueue.contains(uuid)) {
uuidQueue.add(uuid);
}
}
});
final Queue<UUID> uuidQueue = new LinkedBlockingQueue<>(uuidSet);
LOGGER.info("(UUID) {} UUIDs will be cached", uuidQueue.size());
@ -730,11 +732,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.getServer().getPluginManager().disablePlugin(this);
}
@Override
public void shutdownServer() {
getServer().shutdown();
}
private void registerCommands() {
final BukkitCommand bukkitCommand = new BukkitCommand();
final PluginCommand plotCommand = getCommand("plots");
@ -849,11 +846,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
// managed elsewhere
continue;
case "SHULKER":
if (Settings.Enabled_Components.KILL_ROAD_MOBS && (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS || entity.getCustomName() == null)) {
if (Settings.Enabled_Components.KILL_ROAD_MOBS) {
LivingEntity livingEntity = (LivingEntity) entity;
List<MetadataValue> meta = entity.getMetadata("shulkerPlot");
if (!meta.isEmpty()) {
if (livingEntity.isLeashed() && !Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS) {
if (livingEntity.isLeashed()) {
continue;
}
List<MetadataValue> keep = entity.getMetadata("keep");
@ -866,8 +863,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation());
PlotArea area = pLoc.getPlotArea();
if (area != null) {
Plot currentPlot = area.getPlotAbs(pLoc);
if (currentPlot == null || !originalPlotId.equals(currentPlot.getId())) {
PlotId currentPlotId = area.getPlotAbs(pLoc).getId();
if (!originalPlotId.equals(currentPlotId) && (currentPlotId == null || !area.getPlot(
originalPlotId)
.equals(area.getPlot(currentPlotId)))) {
if (entity.hasMetadata("ps-tmp-teleport")) {
continue;
}
@ -881,11 +880,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation());
PlotArea area = pLoc.getPlotArea();
if (area != null) {
Plot currentPlot = area.getPlotAbs(pLoc);
if (currentPlot != null) {
PlotId currentPlotId = area.getPlotAbs(pLoc).getId();
if (currentPlotId != null) {
entity.setMetadata(
"shulkerPlot",
new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlot.getId())
new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlotId)
);
}
}
@ -971,9 +970,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|| !entity.hasMetadata("keep")) {
Entity passenger = entity.getPassenger();
if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS
|| !((passenger instanceof Player) || livingEntity.isLeashed()))
&& (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS || entity.getCustomName() == null)
&& entity.getMetadata("keep").isEmpty()) {
|| !(passenger instanceof Player)) && entity.getMetadata("keep").isEmpty()) {
if (entity.hasMetadata("ps-tmp-teleport")) {
continue;
}
@ -983,9 +980,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
}
} else {
Entity passenger = entity.getPassenger();
if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS || !(passenger instanceof Player))
&& (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS && entity.getCustomName() != null)
&& entity.getMetadata("keep").isEmpty()) {
if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS
|| !(passenger instanceof Player)) && entity.getMetadata("keep").isEmpty()) {
if (entity.hasMetadata("ps-tmp-teleport")) {
continue;
}

View File

@ -26,7 +26,7 @@ import com.plotsquared.core.location.UncheckedWorldLocation;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.LimitedRegion;
import org.bukkit.generator.WorldInfo;
@ -80,7 +80,7 @@ final class BlockStatePopulator extends BlockPopulator {
worldInfo.getMaxHeight(),
(chunkZ << 4) + 15
);
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(wrapped, min, max);
ZeroedDelegateScopedQueueCoordinator offsetChunkQueue = new ZeroedDelegateScopedQueueCoordinator(wrapped, min, max);
this.plotGenerator.populateChunk(offsetChunkQueue, area);
}

View File

@ -22,20 +22,30 @@ import com.plotsquared.bukkit.queue.GenChunk;
import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.BukkitWorld;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.generator.ClassicPlotWorld;
import com.plotsquared.core.generator.GeneratorWrapper;
import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.generator.SingleWorldGenerator;
import com.plotsquared.core.location.ChunkWrapper;
import com.plotsquared.core.location.UncheckedWorldLocation;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
import com.plotsquared.core.util.ChunkManager;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector2;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bukkit.HeightMap;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.generator.BiomeProvider;
import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.generator.WorldInfo;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
@ -44,6 +54,8 @@ import java.util.Set;
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
@SuppressWarnings("unused")
public final boolean PAPER_ASYNC_SAFE = true;
@ -52,9 +64,15 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
private final ChunkGenerator platformGenerator;
private final boolean full;
private final String levelName;
private final boolean useNewGenerationMethods;
private final BiomeProvider biomeProvider;
private List<BlockPopulator> populators;
private boolean loaded = false;
private PlotArea lastPlotArea;
private int lastChunkX = Integer.MIN_VALUE;
private int lastChunkZ = Integer.MIN_VALUE;
public BukkitPlotGenerator(
final @NonNull String name,
final @NonNull IndependentPlotGenerator generator,
@ -72,18 +90,23 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator));
}
this.full = true;
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
this.biomeProvider = new BukkitPlotBiomeProvider();
}
public BukkitPlotGenerator(final String world, final ChunkGenerator cg, final @NonNull PlotAreaManager plotAreaManager) {
if (cg instanceof BukkitPlotGenerator) {
throw new IllegalArgumentException("ChunkGenerator: " + cg.getClass().getName()
+ " is already a BukkitPlotGenerator!");
throw new IllegalArgumentException("ChunkGenerator: " + cg
.getClass()
.getName() + " is already a BukkitPlotGenerator!");
}
this.plotAreaManager = plotAreaManager;
this.levelName = world;
this.full = false;
this.platformGenerator = cg;
this.plotGenerator = new DelegatePlotGenerator(cg, world);
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
this.biomeProvider = null;
}
@Override
@ -111,7 +134,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
try {
checkLoaded(world);
} catch (Exception e) {
e.printStackTrace();
LOGGER.error("Error attempting to load world into PlotSquared.", e);
}
ArrayList<BlockPopulator> toAdd = new ArrayList<>();
List<BlockPopulator> existing = world.getPopulators();
@ -128,6 +151,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
return toAdd;
}
// Extracted to synchronized method for thread-safety, preventing multiple internal world load calls
private synchronized void checkLoaded(@NonNull World world) {
// Do not attempt to load configurations until WorldEdit has a platform ready.
if (!PlotSquared.get().isWeInitialised()) {
@ -153,7 +177,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
}
}
@SuppressWarnings("deprecation")
@SuppressWarnings("deprecation") // Kept for compatibility with <=1.17.1
private void setSpawnLimits(@NonNull World world, int limit) {
world.setAmbientSpawnLimit(limit);
world.setAnimalSpawnLimit(limit);
@ -162,10 +186,112 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
}
@Override
public @NonNull ChunkData generateChunkData(
@NonNull World world, @NonNull Random random, int x, int z,
@NonNull BiomeGrid biome
public void generateNoise(
@NotNull final WorldInfo worldInfo,
@NotNull final Random random,
final int chunkX,
final int chunkZ,
@NotNull final ChunkData chunkData
) {
if (this.platformGenerator != this) {
this.platformGenerator.generateNoise(worldInfo, random, chunkX, chunkZ, chunkData);
return;
}
int minY = chunkData.getMinHeight();
int maxY = chunkData.getMaxHeight();
GenChunk result = new GenChunk(minY, maxY);
// Set the chunk location
result.setChunk(new ChunkWrapper(worldInfo.getName(), chunkX, chunkZ));
// Set the result data
result.setChunkData(chunkData);
result.result = null;
// Catch any exceptions (as exceptions usually thrown)
try {
generate(BlockVector2.at(chunkX, chunkZ), worldInfo.getName(), result, false);
} catch (Throwable e) {
LOGGER.error("Error attempting to generate chunk.", e);
}
}
@Override
public void generateSurface(
@NotNull final WorldInfo worldInfo,
@NotNull final Random random,
final int chunkX,
final int chunkZ,
@NotNull final ChunkData chunkData
) {
if (platformGenerator != this) {
platformGenerator.generateSurface(worldInfo, random, chunkX, chunkZ, chunkData);
}
}
@Override
public void generateBedrock(
@NotNull final WorldInfo worldInfo,
@NotNull final Random random,
final int chunkX,
final int chunkZ,
@NotNull final ChunkData chunkData
) {
if (platformGenerator != this) {
platformGenerator.generateBedrock(worldInfo, random, chunkX, chunkZ, chunkData);
}
}
@Override
public void generateCaves(
@NotNull final WorldInfo worldInfo,
@NotNull final Random random,
final int chunkX,
final int chunkZ,
@NotNull final ChunkData chunkData
) {
if (platformGenerator != this) {
platformGenerator.generateCaves(worldInfo, random, chunkX, chunkZ, chunkData);
}
}
@Override
public @Nullable BiomeProvider getDefaultBiomeProvider(@NotNull final WorldInfo worldInfo) {
if (platformGenerator != this) {
return platformGenerator.getDefaultBiomeProvider(worldInfo);
}
return biomeProvider;
}
@Override
public int getBaseHeight(
@NotNull final WorldInfo worldInfo,
@NotNull final Random random,
final int x,
final int z,
@NotNull final HeightMap heightMap
) {
PlotArea area = getPlotArea(worldInfo.getName(), x, z);
if (area instanceof ClassicPlotWorld cpw) {
// Default to plot height being the heighest point before decoration (i.e. roads, walls etc.)
return cpw.PLOT_HEIGHT;
}
return super.getBaseHeight(worldInfo, random, x, z, heightMap);
}
@SuppressWarnings("deprecation") // The entire method is deprecated, but kept for compatibility with <=1.16.2
@Override
@Deprecated(since = "TODO")
public @NonNull ChunkData generateChunkData(
@NonNull World world, @NonNull Random random, int x, int z, @NonNull BiomeGrid biome
) {
if (useNewGenerationMethods) {
if (this.platformGenerator != this) {
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
} else {
// Return super as it will throw an exception caught by the server that will mean this method is no longer used.
return super.generateChunkData(world, random, x, z, biome);
}
}
int minY = BukkitWorld.getMinWorldHeight(world);
int maxY = BukkitWorld.getMaxWorldHeight(world);
GenChunk result = new GenChunk(minY, maxY);
@ -175,7 +301,6 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
for (int y = minY; y < maxY; y++) {
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
}
}
}
@ -195,35 +320,32 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
if (this.platformGenerator != this) {
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
} else {
generate(BlockVector2.at(x, z), world, result);
generate(BlockVector2.at(x, z), world.getName(), result, true);
}
} catch (Throwable e) {
e.printStackTrace();
LOGGER.error("Error attempting to load world into PlotSquared.", e);
}
// Return the result data
return result.getChunkData();
}
private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) {
private void generate(BlockVector2 loc, String world, ZeroedDelegateScopedQueueCoordinator result, boolean biomes) {
// Load if improperly loaded
if (!this.loaded) {
checkLoaded(world);
synchronized (this) {
PlotSquared.get().loadWorld(world, this);
}
}
// Process the chunk
if (ChunkManager.preProcessChunk(loc, result)) {
return;
}
PlotArea area = this.plotAreaManager.getPlotArea(world.getName(), null);
if (area == null && (area = this.plotAreaManager.getPlotArea(this.levelName, null)) == null) {
throw new IllegalStateException(
"Cannot regenerate chunk that does not belong to a plot area." + " Location: " + loc
+ ", world: " + world);
}
PlotArea area = getPlotArea(world, loc.getX(), loc.getZ());
try {
this.plotGenerator.generateChunk(result, area);
this.plotGenerator.generateChunk(result, area, biomes);
} catch (Throwable e) {
// Recover from generator error
e.printStackTrace();
LOGGER.error("Error attempting to generate chunk.", e);
}
ChunkManager.postProcessChunk(loc, result);
}
@ -277,4 +399,51 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
return this.levelName;
}
private synchronized PlotArea getPlotArea(String name, int chunkX, int chunkZ) {
// Load if improperly loaded
if (!this.loaded) {
PlotSquared.get().loadWorld(name, this);
// Do not set loaded to true as we want to ensure spawn limits are set when "loading" is actually able to be
// completed properly.
}
if (lastPlotArea != null && name.equals(this.levelName) && chunkX == lastChunkX && chunkZ == lastChunkZ) {
return lastPlotArea;
}
PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea();
if (area == null) {
throw new IllegalStateException(String.format("Cannot generate chunk that does not belong to a plot area. World: %s",
name
));
}
this.lastChunkX = chunkX;
this.lastChunkZ = chunkZ;
return this.lastPlotArea = area;
}
/**
* Biome provider should never need to be accessed outside of this class.
*/
private final class BukkitPlotBiomeProvider extends BiomeProvider {
private static final List<Biome> BIOMES;
static {
ArrayList<Biome> biomes = new ArrayList<>(List.of(Biome.values()));
biomes.remove(Biome.CUSTOM);
BIOMES = List.copyOf(biomes);
}
@Override
public @NotNull Biome getBiome(@NotNull final WorldInfo worldInfo, final int x, final int y, final int z) {
PlotArea area = getPlotArea(worldInfo.getName(), x >> 4, z >> 4);
return BukkitAdapter.adapt(plotGenerator.getBiome(area, x, y, z));
}
@Override
public @NotNull List<Biome> getBiomes(@NotNull final WorldInfo worldInfo) {
return BIOMES; // Allow all biomes
}
}
}

View File

@ -24,9 +24,10 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
import com.plotsquared.core.util.MathMan;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.biome.BiomeType;
import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.generator.BlockPopulator;
@ -49,6 +50,11 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
public void initialize(PlotArea area) {
}
@Override
public BiomeType getBiome(final PlotArea settings, final int x, final int y, final int z) {
return null;
}
@Override
public String getName() {
return this.chunkGenerator.getClass().getName();
@ -60,7 +66,7 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
}
@Override
public void generateChunk(final ScopedQueueCoordinator result, PlotArea settings) {
public void generateChunk(final ZeroedDelegateScopedQueueCoordinator result, PlotArea settings, boolean biomes) {
World world = BukkitUtil.getWorld(this.world);
Location min = result.getMin();
int chunkX = min.getX() >> 4;

View File

@ -26,7 +26,7 @@ import com.plotsquared.core.location.UncheckedWorldLocation;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.util.SideEffectSet;
import org.bukkit.Chunk;
@ -66,7 +66,7 @@ final class LegacyBlockStatePopulator extends BlockPopulator {
queue.setChunkObject(source);
Location min = UncheckedWorldLocation.at(world.getName(), chunkMinX, world.getMinHeight(), chunkMinZ);
Location max = UncheckedWorldLocation.at(world.getName(), chunkMinX + 15, world.getMaxHeight(), chunkMinZ + 15);
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(queue, min, max);
ZeroedDelegateScopedQueueCoordinator offsetChunkQueue = new ZeroedDelegateScopedQueueCoordinator(queue, min, max);
this.plotGenerator.populateChunk(offsetChunkQueue, area);
queue.enqueue();
}

View File

@ -56,17 +56,17 @@ import com.plotsquared.core.plot.flag.types.BlockTypeWrapper;
import com.plotsquared.core.plot.flag.types.BooleanFlag;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotFlagUtil;
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.world.block.BlockType;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
@ -110,8 +110,6 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@SuppressWarnings("unused")
public class BlockEventListener implements Listener {
@ -124,11 +122,6 @@ public class BlockEventListener implements Listener {
Material.TURTLE_EGG,
Material.TURTLE_SPAWN_EGG
);
private static final Set<Material> SNOW = Stream.of(Material.values()) // needed as Tag.SNOW isn't present in 1.16.5
.filter(material -> material.name().contains("SNOW"))
.filter(Material::isBlock)
.collect(Collectors.toUnmodifiableSet());
private final PlotAreaManager plotAreaManager;
private final WorldEdit worldEdit;
@ -167,7 +160,7 @@ public class BlockEventListener implements Listener {
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, RedstoneFlag.class, false)) {
if (area.isRoadFlags() && !area.getRoadFlag(RedstoneFlag.class)) {
event.setNewCurrent(0);
}
return;
@ -273,15 +266,26 @@ public class BlockEventListener implements Listener {
BukkitPlayer pp = BukkitUtil.adapt(player);
Plot plot = area.getPlot(location);
if (plot != null) {
if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
.getMinBuildHeight()) && !Permissions
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
event.setCancelled(true);
return;
pp.sendMessage(
TranslatableCaption.of("height.height_limit"),
TagResolver.builder()
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
.build()
);
}
if (!plot.hasOwner()) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
return;
@ -298,7 +302,10 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
plot.debug(player.getName() + " could not place " + event.getBlock().getType()
@ -325,7 +332,10 @@ public class BlockEventListener implements Listener {
} else if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
);
event.setCancelled(true);
}
@ -348,14 +358,25 @@ public class BlockEventListener implements Listener {
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)
)
);
event.setCancelled(true);
return;
}
} else if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
} else if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
.getMinBuildHeight()) && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
event.setCancelled(true);
return;
plotPlayer.sendMessage(
TranslatableCaption.of("height.height_limit"),
TagResolver.builder()
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
.build()
);
}
if (!plot.hasOwner()) {
if (!Permissions
@ -379,7 +400,10 @@ public class BlockEventListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
)
);
event.setCancelled(true);
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
@ -405,7 +429,10 @@ public class BlockEventListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
)
);
event.setCancelled(true);
}
@ -443,7 +470,6 @@ public class BlockEventListener implements Listener {
case "TWISTING_VINES":
case "CAVE_VINES":
case "VINE":
case "GLOW_BERRIES":
if (!plot.getFlag(VineGrowFlag.class)) {
plot.debug("Vine could not grow because vine-grow = false");
event.setCancelled(true);
@ -534,18 +560,18 @@ public class BlockEventListener implements Listener {
if (plot == null) {
return;
}
if (!area.buildRangeContainsY(location.getY())) {
if (location.getY() >= area.getMaxBuildHeight() || location.getY() < area.getMinBuildHeight()) {
event.setCancelled(true);
return;
}
if (SNOW.contains(event.getNewState().getType())) {
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) {
if (!plot.getFlag(SnowFormFlag.class)) {
plot.debug("Snow could not form because snow-form = false");
event.setCancelled(true);
}
return;
}
if (Tag.ICE.isTagged(event.getNewState().getType())) {
if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) {
if (!plot.getFlag(IceFormFlag.class)) {
plot.debug("Ice could not form because ice-form = false");
event.setCancelled(true);
@ -570,9 +596,9 @@ public class BlockEventListener implements Listener {
return;
}
Class<? extends BooleanFlag<?>> flag;
if (SNOW.contains(event.getNewState().getType())) {
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) {
flag = SnowFormFlag.class;
} else if (Tag.ICE.isTagged(event.getNewState().getType())) {
} else if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) {
flag = IceFormFlag.class;
} else {
return;
@ -680,14 +706,14 @@ public class BlockEventListener implements Listener {
return;
}
Material blockType = block.getType();
if (Tag.ICE.isTagged(blockType)) {
if (org.bukkit.Tag.ICE.isTagged(blockType)) {
if (!plot.getFlag(IceMeltFlag.class)) {
plot.debug("Ice could not melt because ice-melt = false");
event.setCancelled(true);
}
return;
}
if (SNOW.contains(blockType)) {
if (org.bukkit.Tag.SNOW.isTagged(blockType)) {
if (!plot.getFlag(SnowMeltFlag.class)) {
plot.debug("Snow could not melt because snow-melt = false");
event.setCancelled(true);
@ -701,7 +727,7 @@ public class BlockEventListener implements Listener {
}
return;
}
if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType) || Tag.WALL_CORALS.isTagged(blockType)) {
if (org.bukkit.Tag.CORAL_BLOCKS.isTagged(blockType) || org.bukkit.Tag.CORALS.isTagged(blockType)) {
if (!plot.getFlag(CoralDryFlag.class)) {
plot.debug("Coral could not dry because coral-dry = false");
event.setCancelled(true);
@ -736,7 +762,7 @@ public class BlockEventListener implements Listener {
}
return;
}
if (!toArea.buildRangeContainsY(toLocation.getY())) {
if (toLocation.getY() >= toArea.getMaxBuildHeight() || toLocation.getY() < toArea.getMinBuildHeight()) {
event.setCancelled(true);
return;
}
@ -810,11 +836,6 @@ public class BlockEventListener implements Listener {
return;
}
if (!area.buildRangeContainsY(location.getY())) {
event.setCancelled(true);
return;
}
Plot plot = location.getOwnedPlot();
if (plot == null || !plot.getFlag(CropGrowFlag.class)) {
if (plot != null) {
@ -858,16 +879,15 @@ public class BlockEventListener implements Listener {
}
for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation());
Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(
bloc.getX() + relative.getBlockX(),
bloc.getZ() + relative.getBlockZ()
)) {
event.setCancelled(true);
return;
}
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
event.setCancelled(true);
return;
}
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) {
event.setCancelled(true);
return;
}
@ -893,8 +913,9 @@ public class BlockEventListener implements Listener {
}
for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation());
Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
if (bloc.isPlotArea() || newLoc.isPlotArea()) {
if (bloc.isPlotArea() || bloc
.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())
.isPlotArea()) {
event.setCancelled(true);
return;
}
@ -908,16 +929,15 @@ public class BlockEventListener implements Listener {
}
for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation());
Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(
bloc.getX() + relative.getBlockX(),
bloc.getZ() + relative.getBlockZ()
)) {
event.setCancelled(true);
return;
}
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
event.setCancelled(true);
return;
}
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) {
event.setCancelled(true);
return;
}
@ -941,11 +961,6 @@ public class BlockEventListener implements Listener {
Location location = BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation());
if (location.isPlotRoad()) {
event.setCancelled(true);
return;
}
PlotArea area = location.getPlotArea();
if (area != null && !area.buildRangeContainsY(location.getY())) {
event.setCancelled(true);
}
}
}
@ -985,10 +1000,6 @@ public class BlockEventListener implements Listener {
Plot plot = area.getOwnedPlot(location);
if (!Objects.equals(plot, origin)) {
event.getBlocks().remove(i);
continue;
}
if (!area.buildRangeContainsY(location.getY())) {
event.getBlocks().remove(i);
}
}
}
@ -1080,29 +1091,25 @@ public class BlockEventListener implements Listener {
Plot plot = area.getOwnedPlot(location1);
if (player != null) {
BukkitPlayer pp = BukkitUtil.adapt(player);
if (area.notifyIfOutsideBuildArea(pp, location1.getY())) {
event.setCancelled(true);
return;
}
if (plot == null) {
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_BUILD_ROAD
)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
);
event.setCancelled(true);
}
} else if (!plot.hasOwner()) {
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_BUILD_UNOWNED
)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1110,7 +1117,10 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
}
@ -1197,10 +1207,7 @@ public class BlockEventListener implements Listener {
return true;
}
Plot plot = area.getOwnedPlot(blockLocation);
if (!Objects.equals(plot, origin)) {
return true;
}
return !area.buildRangeContainsY(location.getY());
return !Objects.equals(plot, origin);
});
}
if (blocks.isEmpty()) {
@ -1237,12 +1244,22 @@ public class BlockEventListener implements Listener {
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
);
event.setCancelled(true);
break;
}
if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
continue;
}
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
pp.sendMessage(
TranslatableCaption.of("height.height_limit"),
TagResolver.builder()
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
.build()
);
event.setCancelled(true);
break;
}

View File

@ -26,7 +26,6 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
import com.plotsquared.core.util.PlotFlagUtil;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
@ -81,20 +80,10 @@ public class BlockEventListener117 implements Listener {
return;
}
BukkitPlayer plotPlayer = null;
if (entity instanceof Player player) {
plotPlayer = BukkitUtil.adapt(player);
if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
event.setCancelled(true);
return;
}
}
Plot plot = location.getOwnedPlot();
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) || plot != null && !plot.getFlag(
MiscInteractFlag.class)) {
if (plotPlayer != null) {
if (plot == null || !plot.getFlag(MiscInteractFlag.class)) {
if (entity instanceof Player player) {
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
if (plot != null) {
if (!plot.isAdded(plotPlayer.getUUID())) {
plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because misc-interact = false");
@ -106,12 +95,6 @@ public class BlockEventListener117 implements Listener {
if (entity instanceof Item item) {
UUID itemThrower = item.getThrower();
if (plot != null) {
if (itemThrower == null && (itemThrower = item.getOwner()) == null) {
plot.debug(
"A thrown item couldn't trigger sculk sensors because misc-interact = false and the item's owner could not be resolved.");
event.setCancelled(true);
return;
}
if (!plot.isAdded(itemThrower)) {
if (!plot.isAdded(itemThrower)) {
plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false");
@ -132,12 +115,12 @@ public class BlockEventListener117 implements Listener {
PlotArea area = location.getPlotArea();
if (area == null) {
for (int i = blocks.size() - 1; i >= 0; i--) {
Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
if (blockLocation.isPlotArea()) {
location = BukkitUtil.adapt(blocks.get(i).getLocation());
if (location.isPlotArea()) {
blocks.remove(i);
}
}
return;
} else {
Plot origin = area.getOwnedPlot(location);
if (origin == null) {
@ -145,21 +128,29 @@ public class BlockEventListener117 implements Listener {
return;
}
for (int i = blocks.size() - 1; i >= 0; i--) {
Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
if (!area.contains(blockLocation.getX(), blockLocation.getZ())) {
location = BukkitUtil.adapt(blocks.get(i).getLocation());
if (!area.contains(location.getX(), location.getZ())) {
blocks.remove(i);
continue;
}
Plot plot = area.getOwnedPlot(blockLocation);
Plot plot = area.getOwnedPlot(location);
if (!Objects.equals(plot, origin)) {
event.getBlocks().remove(i);
continue;
}
if (!area.buildRangeContainsY(location.getY())) {
event.getBlocks().remove(i);
}
}
}
Plot origin = area.getPlot(location);
if (origin == null) {
event.setCancelled(true);
return;
}
for (int i = blocks.size() - 1; i >= 0; i--) {
location = BukkitUtil.adapt(blocks.get(i).getLocation());
Plot plot = area.getOwnedPlot(location);
if (!Objects.equals(plot, origin) && (!plot.isMerged() && !origin.isMerged())) {
event.getBlocks().remove(i);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)

View File

@ -38,7 +38,6 @@ import com.plotsquared.core.plot.flag.implementations.InvincibleFlag;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotFlagUtil;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.block.BlockType;
import org.bukkit.Material;
@ -262,7 +261,7 @@ public class EntityEventListener implements Listener {
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, InvincibleFlag.class, true)) {
if (area.isRoadFlags() && area.getRoadFlag(InvincibleFlag.class)) {
event.setCancelled(true);
}
return;

View File

@ -126,16 +126,16 @@ public class EntitySpawnListener implements Listener {
Plot plot = location.getOwnedPlotAbs();
EntityType type = entity.getType();
if (plot == null) {
if (type == EntityType.DROPPED_ITEM) {
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setCancelled(true);
}
return;
}
if (!area.isMobSpawning()) {
if (type == EntityType.PLAYER) {
return;
}
if (type == EntityType.DROPPED_ITEM) {
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setCancelled(true);
}
return;
}
if (type.isAlive()) {
event.setCancelled(true);
}

View File

@ -18,6 +18,7 @@
*/
package com.plotsquared.bukkit.listener;
import com.google.common.collect.Iterables;
import com.plotsquared.bukkit.player.BukkitPlayer;
import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.core.location.Location;
@ -38,11 +39,8 @@ public class ForceFieldListener {
private static Set<PlotPlayer<?>> getNearbyPlayers(Player player, Plot plot) {
Set<PlotPlayer<?>> players = new HashSet<>();
for (Player nearPlayer : player.getNearbyEntities(5d, 5d, 5d).stream()
.filter(entity -> entity instanceof Player)
.map(entity -> (Player) entity)
.toList()
) {
for (Player nearPlayer : Iterables
.filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) {
PlotPlayer<?> plotPlayer;
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
.equals(plotPlayer.getCurrentPlot())) {
@ -56,11 +54,8 @@ public class ForceFieldListener {
}
private static PlotPlayer<?> hasNearbyPermitted(Player player, Plot plot) {
for (Player nearPlayer : player.getNearbyEntities(5d, 5d, 5d).stream()
.filter(entity -> entity instanceof Player)
.map(entity -> (Player) entity)
.toList()
) {
for (Player nearPlayer : Iterables
.filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) {
PlotPlayer<?> plotPlayer;
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
.equals(plotPlayer.getCurrentPlot())) {

View File

@ -18,7 +18,6 @@
*/
package com.plotsquared.bukkit.listener;
import com.destroystokyo.paper.event.block.BeaconEffectEvent;
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
@ -37,15 +36,13 @@ import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.FlagContainer;
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
import com.plotsquared.core.plot.flag.types.BooleanFlag;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotFlagUtil;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Chunk;
import org.bukkit.block.Block;
import org.bukkit.block.TileState;
@ -234,17 +231,17 @@ public class PaperListener implements Listener {
Plot plot = location.getOwnedPlotAbs();
if (plot == null) {
EntityType type = event.getType();
// PreCreatureSpawnEvent **should** not be called for DROPPED_ITEM, just for the sake of consistency
if (type == EntityType.DROPPED_ITEM) {
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setCancelled(true);
}
return;
}
if (!area.isMobSpawning()) {
if (type == EntityType.PLAYER) {
return;
}
if (type == EntityType.DROPPED_ITEM) {
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setShouldAbortSpawn(true);
event.setCancelled(true);
}
return;
}
if (type.isAlive()) {
event.setShouldAbortSpawn(true);
event.setCancelled(true);
@ -303,7 +300,7 @@ public class PaperListener implements Listener {
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
plotPlayer.sendMessage(
TranslatableCaption.of("errors.tile_entity_cap_reached"),
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
);
event.setCancelled(true);
event.setBuild(false);
@ -327,21 +324,20 @@ public class PaperListener implements Listener {
return;
}
Location location = BukkitUtil.adapt(entity.getLocation());
PlotArea area = location.getPlotArea();
if (area == null) {
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
return;
}
PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter);
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_PROJECTILE_ROAD
)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
)
);
entity.remove();
event.setCancelled(true);
@ -350,7 +346,10 @@ public class PaperListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
)
);
entity.remove();
event.setCancelled(true);
@ -360,7 +359,10 @@ public class PaperListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
)
);
entity.remove();
event.setCancelled(true);
@ -409,50 +411,4 @@ public class PaperListener implements Listener {
}
}
@EventHandler(ignoreCancelled = true)
public void onBeaconEffect(final BeaconEffectEvent event) {
Block block = event.getBlock();
Location beaconLocation = BukkitUtil.adapt(block.getLocation());
Plot beaconPlot = beaconLocation.getPlot();
PlotArea area = beaconLocation.getPlotArea();
if (area == null) {
return;
}
Player player = event.getPlayer();
Location playerLocation = BukkitUtil.adapt(player.getLocation());
PlotPlayer<Player> plotPlayer = BukkitUtil.adapt(player);
Plot playerStandingPlot = playerLocation.getPlot();
if (playerStandingPlot == null) {
FlagContainer container = area.getRoadFlagContainer();
if (!getBooleanFlagValue(container, BeaconEffectsFlag.class, true) ||
(beaconPlot != null && Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW)) {
event.setCancelled(true);
}
return;
}
FlagContainer container = playerStandingPlot.getFlagContainer();
boolean plotBeaconEffects = getBooleanFlagValue(container, BeaconEffectsFlag.class, true);
if (playerStandingPlot.equals(beaconPlot)) {
if (!plotBeaconEffects) {
event.setCancelled(true);
}
return;
}
if (!plotBeaconEffects || Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW) {
event.setCancelled(true);
}
}
private boolean getBooleanFlagValue(@NonNull FlagContainer container,
@NonNull Class<? extends BooleanFlag<?>> flagClass,
boolean defaultValue) {
BooleanFlag<?> flag = container.getFlag(flagClass);
return flag == null ? defaultValue : flag.getValue();
}
}

View File

@ -26,7 +26,9 @@ import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.block.Banner;
import org.bukkit.block.Beacon;
import org.bukkit.block.BlockState;
@ -48,10 +50,6 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockPlaceEvent;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
* @deprecated P2 effectively no longer supports 1.13
*/
@Deprecated(forRemoval = true, since = "6.10.4")
public class PaperListener113 extends PaperListener {
@Inject
@ -81,7 +79,7 @@ public class PaperListener113 extends PaperListener {
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
plotPlayer.sendMessage(
TranslatableCaption.of("errors.tile_entity_cap_reached"),
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
);
event.setCancelled(true);
event.setBuild(false);

View File

@ -68,7 +68,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotFlagUtil;
import com.plotsquared.core.util.PremiumVerification;
import com.plotsquared.core.util.entity.EntityCategories;
import com.plotsquared.core.util.task.TaskManager;
@ -78,12 +77,13 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.block.BlockType;
import io.papermc.lib.PaperLib;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.FluidCollisionMode;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
@ -107,7 +107,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.EntityPlaceEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
@ -144,7 +143,6 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.util.Vector;
import org.checkerframework.checker.nullness.qual.NonNull;
@ -159,7 +157,7 @@ import java.util.UUID;
* Player Events involving plots.
*/
@SuppressWarnings("unused")
public class PlayerEventListener implements Listener {
public class PlayerEventListener extends PlotListener implements Listener {
private static final Set<Material> MINECARTS = Set.of(
Material.MINECART,
@ -178,7 +176,6 @@ public class PlayerEventListener implements Listener {
private final EventDispatcher eventDispatcher;
private final WorldEdit worldEdit;
private final PlotAreaManager plotAreaManager;
private final PlotListener plotListener;
// To prevent recursion
private boolean tmpTeleport = true;
private Field fieldPlayer;
@ -198,36 +195,12 @@ public class PlayerEventListener implements Listener {
public PlayerEventListener(
final @NonNull PlotAreaManager plotAreaManager,
final @NonNull EventDispatcher eventDispatcher,
final @NonNull WorldEdit worldEdit,
final @NonNull PlotListener plotListener
final @NonNull WorldEdit worldEdit
) {
super(eventDispatcher);
this.eventDispatcher = eventDispatcher;
this.worldEdit = worldEdit;
this.plotAreaManager = plotAreaManager;
this.plotListener = plotListener;
}
@EventHandler(ignoreCancelled = true)
public void onEffect(@NonNull EntityPotionEffectEvent event) {
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
event.getCause() != EntityPotionEffectEvent.Cause.BEACON ||
!(event.getEntity() instanceof Player player)) {
return;
}
UUID uuid = player.getUniqueId();
PotionEffect effect = event.getNewEffect();
if (effect == null) {
PotionEffect oldEffect = event.getOldEffect();
if (oldEffect != null) {
String name = oldEffect.getType().getName();
plotListener.addEffect(uuid, name, -1);
}
} else {
long expiresAt = System.currentTimeMillis() + effect.getDuration() * 50L; //Convert ticks to milliseconds
String name = effect.getType().getName();
plotListener.addEffect(uuid, name, expiresAt);
}
}
@EventHandler
@ -380,7 +353,7 @@ public class PlayerEventListener implements Listener {
if (area != null) {
Plot plot = area.getPlot(location);
if (plot != null) {
plotListener.plotEntry(pp, plot);
plotEntry(pp, plot);
}
}
// Delayed
@ -397,11 +370,15 @@ public class PlayerEventListener implements Listener {
&& PremiumVerification.isPremium() && UpdateUtility.hasUpdate) {
Caption boundary = TranslatableCaption.of("update.update_boundary");
Caption updateNotification = TranslatableCaption.of("update.update_notification");
Template internalVersion = Template.of("p2version", UpdateUtility.internalVersion.versionString());
Template spigotVersion = Template.of("spigotversion", UpdateUtility.spigotVersion);
Template downloadUrl = Template.of("downloadurl", "https://www.spigotmc.org/resources/77506/updates");
pp.sendMessage(boundary);
pp.sendMessage(updateNotification, internalVersion, spigotVersion, downloadUrl);
pp.sendMessage(
updateNotification,
TagResolver.builder()
.tag("p2version", Tag.inserting(Component.text(UpdateUtility.internalVersion.versionString())))
.tag("spigotversion", Tag.inserting(Component.text(UpdateUtility.spigotVersion)))
.tag("downloadurl", Tag.preProcessParsed("https://www.spigotmc.org/resources/77506/updates"))
.build()
);
pp.sendMessage(boundary);
}
}
@ -432,7 +409,7 @@ public class PlayerEventListener implements Listener {
PlotArea area = location.getPlotArea();
if (area == null) {
if (lastPlot != null) {
plotListener.plotExit(pp, lastPlot);
plotExit(pp, lastPlot);
lastPlotAccess.remove();
}
try (final MetaDataAccess<Location> lastLocationAccess =
@ -453,7 +430,7 @@ public class PlayerEventListener implements Listener {
.equals(BukkitUtil.adaptComplete(to)))) {
pp.sendMessage(
TranslatableCaption.of("deny.no_enter"),
Template.of("plot", plot.toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
);
event.setCancelled(true);
}
@ -566,10 +543,13 @@ public class PlayerEventListener implements Listener {
if (now == null) {
try (final MetaDataAccess<Boolean> kickAccess =
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
)
);
this.tmpTeleport = false;
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
@ -584,10 +564,10 @@ public class PlayerEventListener implements Listener {
}
} else if (now.equals(lastPlot)) {
ForceFieldListener.handleForcefield(player, pp, now);
} else if (!plotListener.plotEntry(pp, now) && this.tmpTeleport) {
} else if (!plotEntry(pp, now) && this.tmpTeleport) {
pp.sendMessage(
TranslatableCaption.of("deny.no_enter"),
Template.of("plot", now.toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(now.toString())))
);
this.tmpTeleport = false;
to.setX(from.getBlockX());
@ -656,10 +636,13 @@ public class PlayerEventListener implements Listener {
if (plot == null) {
try (final MetaDataAccess<Boolean> kickAccess =
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
)
);
this.tmpTeleport = false;
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
@ -674,10 +657,10 @@ public class PlayerEventListener implements Listener {
}
} else if (plot.equals(lastPlot)) {
ForceFieldListener.handleForcefield(player, pp, plot);
} else if (!plotListener.plotEntry(pp, plot) && this.tmpTeleport) {
} else if (!plotEntry(pp, plot) && this.tmpTeleport) {
pp.sendMessage(
TranslatableCaption.of("deny.no_enter"),
Template.of("plot", plot.toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
);
this.tmpTeleport = false;
player.teleport(from);
@ -762,46 +745,34 @@ public class PlayerEventListener implements Listener {
PlotId id = plot.getId();
String worldName = plot.getWorldName();
Caption msg = TranslatableCaption.of("chat.plot_chat_format");
Template msgTemplate;
Template worldNameTemplate = Template.of("world", worldName);
Template plotTemplate = Template.of("plot_id", id.toString());
Template senderTemplate = Template.of("sender", sender);
// If we do/don't want colour, we need to be careful about how to go about it, as players could attempt either <gold></gold> or &6 etc.
// In both cases, we want to use a Component Template to ensure that the player cannot use any placeholders in their message on purpose
// or accidentally, as component templates are done at the end. We also need to deserialize from legacy color codes to a Component if
// allowing colour.
TagResolver.Builder builder = TagResolver.builder();
builder.tag("world", Tag.inserting(Component.text(worldName)));
builder.tag("plot_id", Tag.inserting(Component.text(id.toString())));
builder.tag("sender", Tag.inserting(Component.text(sender)));
if (plotPlayer.hasPermission("plots.chat.color")) {
msgTemplate = Template
.of(
"msg",
BukkitUtil.LEGACY_COMPONENT_SERIALIZER.deserialize(ChatColor.translateAlternateColorCodes(
'&',
message
))
);
builder.tag("msg", Tag.inserting(MiniMessage.miniMessage().deserialize(
message,
TagResolver.resolver(StandardTags.color(), StandardTags.gradient(),
StandardTags.rainbow(), StandardTags.decorations()
)
)));
} else {
msgTemplate = Template.of("msg", BukkitUtil.MINI_MESSAGE.deserialize(
ChatColor.stripColor(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(Component.text(message)))));
builder.tag("msg", Tag.inserting(Component.text(message)));
}
for (PlotPlayer<?> receiver : plotRecipients) {
receiver.sendMessage(msg, worldNameTemplate, msgTemplate, plotTemplate, senderTemplate);
receiver.sendMessage(msg, builder.build());
}
if (!spies.isEmpty()) {
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
Template spysenderTemplate = Template.of("sender", sender);
Template spymessageTemplate = Template.of("msg", Component.text(message));
for (PlotPlayer<?> player : spies) {
player.sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate, spymessageTemplate);
player.sendMessage(spymsg, builder.tag("message", Tag.inserting(Component.text(message))).build());
}
}
if (Settings.Chat.LOG_PLOTCHAT_TO_CONSOLE) {
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
Template spysenderTemplate = Template.of("sender", sender);
Template spymessageTemplate = Template.of("msg", Component.text(message));
ConsolePlayer.getConsole().sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate,
spymessageTemplate
ConsolePlayer.getConsole().sendMessage(
spymsg,
builder.tag("message", Tag.inserting(Component.text(message))).build()
);
}
}
@ -821,7 +792,7 @@ public class PlayerEventListener implements Listener {
lastLocationAccess.remove();
}
if (plot != null) {
plotListener.plotExit(pp, plot);
plotExit(pp, plot);
}
if (this.worldEdit != null) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_WORLDEDIT_BYPASS)) {
@ -835,7 +806,7 @@ public class PlayerEventListener implements Listener {
if (location.isPlotArea()) {
plot = location.getPlot();
if (plot != null) {
plotListener.plotEntry(pp, plot);
plotEntry(pp, plot);
}
}
}
@ -890,7 +861,8 @@ public class PlayerEventListener implements Listener {
}
} else {
PlotArea area = pp.getPlotAreaAbs();
if (area != null && PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, PreventCreativeCopyFlag.class, true)) {
if (area != null && area.isRoadFlags() && area
.getRoadFlag(PreventCreativeCopyFlag.class)) {
final ItemStack newStack =
new ItemStack(newItem.getType(), newItem.getAmount());
event.setCursor(newStack);
@ -946,7 +918,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
)
);
cancelled = true;
}
@ -954,7 +929,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
)
);
cancelled = true;
}
@ -964,7 +942,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
)
);
cancelled = true;
}
@ -998,20 +979,23 @@ public class PlayerEventListener implements Listener {
Plot plot = location.getPlotAbs();
BukkitPlayer pp = BukkitUtil.adapt(e.getPlayer());
if (plot == null) {
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_INTERACT_ROAD
)) {
if (!area.isRoadFlags() && !area.getRoadFlag(MiscInteractFlag.class) && !Permissions
.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
)
);
e.setCancelled(true);
}
} else {
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage(TranslatableCaption.of("done.building_restricted"));
pp.sendMessage(
TranslatableCaption.of("done.building_restricted")
);
e.setCancelled(true);
return;
}
@ -1020,7 +1004,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, "plots.admin.interact.unowned")) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
)
);
e.setCancelled(true);
}
@ -1035,7 +1022,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
)
);
e.setCancelled(true);
plot.debug(pp.getName() + " could not interact with " + entity.getType()
@ -1162,7 +1152,7 @@ public class PlayerEventListener implements Listener {
location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation());
eventType = PlayerBlockEventType.PLACE_MISC;
}
if (Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
if (org.bukkit.Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
eventType = PlayerBlockEventType.PLACE_VEHICLE;
break;
}
@ -1262,7 +1252,7 @@ public class PlayerEventListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
);
event.setCancelled(true);
} else if (!plot.hasOwner()) {
@ -1271,7 +1261,10 @@ public class PlayerEventListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
} else if (!plot.isAdded(pp.getUUID())) {
@ -1280,7 +1273,10 @@ public class PlayerEventListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
@ -1307,7 +1303,7 @@ public class PlayerEventListener implements Listener {
TaskManager.removeFromTeleportQueue(event.getPlayer().getName());
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
pp.unregister();
plotListener.logout(pp.getUUID());
this.logout(pp.getUUID());
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@ -1327,7 +1323,7 @@ public class PlayerEventListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
);
event.setCancelled(true);
} else if (!plot.hasOwner()) {
@ -1336,7 +1332,10 @@ public class PlayerEventListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
} else if (!plot.isAdded(plotPlayer.getUUID())) {
@ -1345,7 +1344,10 @@ public class PlayerEventListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
@ -1377,7 +1379,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
);
event.setCancelled(true);
}
@ -1386,7 +1391,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1397,7 +1405,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
}
@ -1426,7 +1437,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
)
);
event.setCancelled(true);
}
@ -1434,7 +1448,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1445,7 +1462,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
)
);
event.setCancelled(true);
plot.debug(p.getName()
@ -1467,7 +1487,10 @@ public class PlayerEventListener implements Listener {
.hasPermission(player, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1477,7 +1500,10 @@ public class PlayerEventListener implements Listener {
.hasPermission(player, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
)
);
event.setCancelled(true);
plot.debug(player.getName()
@ -1509,7 +1535,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
)
);
event.setCancelled(true);
}
@ -1517,7 +1546,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1575,7 +1607,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
)
);
event.setCancelled(true);
}
@ -1594,13 +1629,13 @@ public class PlayerEventListener implements Listener {
BukkitPlayer pp = BukkitUtil.adapt(p);
Plot plot = area.getPlot(location);
if (plot == null) {
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, VehicleBreakFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD
)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)
)
);
event.setCancelled(true);
}
@ -1609,7 +1644,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)
)
);
event.setCancelled(true);
return;
@ -1623,7 +1661,10 @@ public class PlayerEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)
)
);
event.setCancelled(true);
plot.debug(pp.getName()
@ -1645,7 +1686,7 @@ public class PlayerEventListener implements Listener {
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ItemDropFlag.class, false)) {
if (area.isRoadFlags() && !area.getRoadFlag(ItemDropFlag.class)) {
event.setCancelled(true);
}
return;
@ -1671,7 +1712,7 @@ public class PlayerEventListener implements Listener {
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DropProtectionFlag.class, true)) {
if (area.isRoadFlags() && area.getRoadFlag(DropProtectionFlag.class)) {
event.setCancelled(true);
}
return;
@ -1693,15 +1734,17 @@ public class PlayerEventListener implements Listener {
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, KeepInventoryFlag.class, true)) {
if (area.isRoadFlags() && area.getRoadFlag(KeepInventoryFlag.class)) {
event.setCancelled(true);
}
return;
}
if (plot.getFlag(KeepInventoryFlag.class)) {
plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true");
event.getDrops().clear();
event.setKeepInventory(true);
if (plot.getFlag(KeepInventoryFlag.class)) {
plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true");
event.getDrops().clear();
event.setKeepInventory(true);
}
}
}
@ -1726,14 +1769,16 @@ public class PlayerEventListener implements Listener {
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalTravelFlag.class, true)) {
if (area.isRoadFlags() && area.getRoadFlag(DenyPortalTravelFlag.class)) {
event.setCancelled(true);
}
return;
}
if (plot.getFlag(DenyPortalTravelFlag.class)) {
plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true");
event.setCancelled(true);
if (plot.getFlag(DenyPortalTravelFlag.class)) {
plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true");
event.setCancelled(true);
}
}
}
@ -1743,7 +1788,6 @@ public class PlayerEventListener implements Listener {
if (PlotSquared.get().getPlotAreaManager().getPlotAreasSet(world).size() == 0) {
return;
}
BukkitPlayer pp = (event.getEntity() instanceof Player player) ? BukkitUtil.adapt(player) : null;
int minX = Integer.MAX_VALUE;
int maxX = Integer.MIN_VALUE;
int minZ = Integer.MAX_VALUE;
@ -1755,23 +1799,19 @@ public class PlayerEventListener implements Listener {
maxZ = Math.max(state.getZ(), maxZ);
}
int y = event.getBlocks().get(0).getY(); // Don't need to worry about this too much
for (Location location : List.of( // We don't care about duplicate locations
Location.at(world, minX, y, minZ),
for (Location location : Set.of( // Use Set to lazily avoid duplicate locations
Location.at(world, minX, y, maxX),
Location.at(world, minZ, y, maxZ),
Location.at(world, minX, y, maxZ),
Location.at(world, maxX, y, minZ),
Location.at(world, maxX, y, maxZ)
Location.at(world, minZ, y, maxX)
)) {
PlotArea area = location.getPlotArea();
if (area == null) {
continue;
}
if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
event.setCancelled(true);
return;
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalsFlag.class, true)) {
if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) {
event.setCancelled(true);
return;
}
@ -1800,14 +1840,16 @@ public class PlayerEventListener implements Listener {
}
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, LecternReadBookFlag.class, true)) {
if (area.isRoadFlags() && area.getRoadFlag(LecternReadBookFlag.class)) {
event.setCancelled(true);
}
return;
}
if (plot.getFlag(LecternReadBookFlag.class)) {
plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true");
event.setCancelled(true);
if (plot.getFlag(LecternReadBookFlag.class)) {
plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true");
event.setCancelled(true);
}
}
}

View File

@ -31,8 +31,9 @@ import com.plotsquared.core.plot.PlotHandler;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotFlagUtil;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@ -90,7 +91,7 @@ public class ProjectileEventListener implements Listener {
}
}
@EventHandler(ignoreCancelled = true)
@EventHandler
public void onProjectileLaunch(ProjectileLaunchEvent event) {
Projectile entity = event.getEntity();
ProjectileSource shooter = entity.getShooter();
@ -98,21 +99,20 @@ public class ProjectileEventListener implements Listener {
return;
}
Location location = BukkitUtil.adapt(entity.getLocation());
PlotArea area = location.getPlotArea();
if (area == null) {
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
return;
}
PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter);
Plot plot = location.getOwnedPlot();
if (plot == null) {
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_PROJECTILE_ROAD
)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
)
);
entity.remove();
event.setCancelled(true);
@ -121,7 +121,10 @@ public class ProjectileEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
)
);
entity.remove();
event.setCancelled(true);
@ -131,7 +134,10 @@ public class ProjectileEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
)
);
entity.remove();
event.setCancelled(true);
@ -154,26 +160,9 @@ public class ProjectileEventListener implements Listener {
Plot plot = area.getPlot(location);
ProjectileSource shooter = entity.getShooter();
if (shooter instanceof Player) {
if (!((Player) shooter).isOnline()) {
if (plot != null) {
if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) {
return;
}
} else if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true)) {
return;
}
entity.remove();
event.setCancelled(true);
return;
}
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
if (plot == null) {
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED
)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
entity.remove();
event.setCancelled(true);
}
@ -204,6 +193,7 @@ public class ProjectileEventListener implements Listener {
if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) {
entity.remove();
event.setCancelled(true);
return;
}
}
}

View File

@ -1,57 +0,0 @@
/*
* PlotSquared, a land and world management plugin for Minecraft.
* Copyright (C) IntellectualSites <https://intellectualsites.com>
* Copyright (C) IntellectualSites team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.plotsquared.bukkit.listener;
import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.flag.FlagContainer;
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
* Fallback listener for paper events on spigot
*/
public class SpigotListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onEffect(@NonNull EntityPotionEffectEvent event) {
if (event.getCause() != EntityPotionEffectEvent.Cause.BEACON) {
return;
}
Entity entity = event.getEntity();
Location location = BukkitUtil.adapt(entity.getLocation());
Plot plot = location.getPlot();
if (plot == null) {
return;
}
FlagContainer container = plot.getFlagContainer();
BeaconEffectsFlag effectsEnabled = container.getFlag(BeaconEffectsFlag.class);
if (effectsEnabled != null && !effectsEnabled.getValue()) {
event.setCancelled(true);
}
}
}

View File

@ -47,13 +47,13 @@ import org.bukkit.event.EventException;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.RegisteredListener;
import org.bukkit.potion.PotionEffectType;
import org.checkerframework.checker.index.qual.NonNegative;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Arrays;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
import static com.sk89q.worldedit.world.gamemode.GameModes.ADVENTURE;
import static com.sk89q.worldedit.world.gamemode.GameModes.CREATIVE;
@ -348,14 +348,6 @@ public class BukkitPlayer extends PlotPlayer<Player> {
return BukkitUtil.BUKKIT_AUDIENCES.player(this.player);
}
@Override
public void removeEffect(@NonNull String name) {
PotionEffectType type = PotionEffectType.getByName(name);
if (type != null) {
player.removePotionEffect(type);
}
}
@Override
public boolean canSee(final PlotPlayer<?> other) {
if (other instanceof ConsolePlayer) {

View File

@ -19,12 +19,12 @@
package com.plotsquared.bukkit.queue;
import com.google.common.base.Preconditions;
import com.intellectualsites.annotations.DoNotUse;
import com.plotsquared.bukkit.util.BukkitBlockUtil;
import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.core.location.ChunkWrapper;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
import com.plotsquared.core.util.AnnotationHelper;
import com.plotsquared.core.util.ChunkUtil;
import com.plotsquared.core.util.PatternUtil;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
@ -44,8 +44,8 @@ import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Arrays;
@DoNotUse
public class GenChunk extends ScopedQueueCoordinator {
@AnnotationHelper.ApiDescription(info = "Internal use only. Subject to changes at any time.")
public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
public final Biome[] biomes;
public BlockState[][] result;
@ -183,11 +183,7 @@ public class GenChunk extends ScopedQueueCoordinator {
@Override
public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) {
final BaseBlock block = PatternUtil.apply(Preconditions.checkNotNull(
pattern,
"Pattern may not be null"
), x + (chunkX << 4), y, z + (chunkZ << 4));
return setBlock(x, y, z, block);
return setBlock(x, y, z, PatternUtil.apply(Preconditions.checkNotNull(pattern, "Pattern may not be null"), x, y, z));
}
@Override

View File

@ -44,7 +44,6 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName());
private final LimitedRegion limitedRegion;
private boolean useOtherRestoreTagMethod = false;
/**
* @since 6.9.0
@ -66,18 +65,10 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator {
CompoundTag tag = id.getNbtData();
StateWrapper sw = new StateWrapper(tag);
try {
if (useOtherRestoreTagMethod && getWorld() != null) {
sw.restoreTag(getWorld().getName(), x, y, z);
} else {
sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock());
}
sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock());
} catch (IllegalArgumentException e) {
LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e);
return false;
} catch (IllegalStateException e) {
useOtherRestoreTagMethod = true;
LOGGER.warn("IllegalStateException attempting to populate tile entity into the world at location {},{},{}. " +
"Possibly on <=1.17.1, switching to secondary method.", x, y, z, e);
}
}
return result;

View File

@ -43,7 +43,9 @@ import com.plotsquared.core.util.EntityUtil;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.entity.EntityCategories;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity;
@ -181,7 +183,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
)
);
return false;
}
@ -193,7 +198,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName()
@ -214,7 +222,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType
@ -235,7 +246,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType
@ -249,7 +263,10 @@ public class BukkitEntityUtil {
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
)
);
plot.debug(player.getName() + " could not attack " + entityType
+ " because pve = false");
@ -263,7 +280,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
)
);
return false;
}
@ -280,7 +300,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType
@ -302,7 +325,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType

View File

@ -56,7 +56,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
ItemMeta meta = null;
if (item.getName() != null) {
meta = stack.getItemMeta();
Component nameComponent = BukkitUtil.MINI_MESSAGE.parse(item.getName());
Component nameComponent = BukkitUtil.MINI_MESSAGE.deserialize(item.getName());
meta.setDisplayName(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(nameComponent));
}
if (item.getLore() != null) {

View File

@ -30,7 +30,7 @@ import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotManager;
import com.plotsquared.core.queue.GlobalBlockQueue;
import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.RegionManager;
import com.plotsquared.core.util.WorldUtil;
@ -257,9 +257,9 @@ public class BukkitRegionManager extends RegionManager {
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
AugmentedUtils.bypass(
ignoreAugment,
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ScopedQueueCoordinator>() {
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ZeroedDelegateScopedQueueCoordinator>() {
@Override
public void run(ScopedQueueCoordinator value) {
public void run(ZeroedDelegateScopedQueueCoordinator value) {
Location min = value.getMin();
int bx = min.getX();
int bz = min.getZ();

View File

@ -45,7 +45,7 @@ import com.sk89q.worldedit.world.block.BlockTypes;
import io.papermc.lib.PaperLib;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -58,7 +58,6 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
import org.bukkit.block.data.Directional;
import org.bukkit.block.data.type.WallSign;
import org.bukkit.entity.Allay;
import org.bukkit.entity.Ambient;
import org.bukkit.entity.Animals;
import org.bukkit.entity.AreaEffectCloud;
@ -333,7 +332,7 @@ public class BukkitUtil extends WorldUtil {
@SuppressWarnings("deprecation")
public void setSign(
final @NonNull Location location, final @NonNull Caption[] lines,
final @NonNull Template... replacements
final @NonNull TagResolver... replacements
) {
ensureLoaded(location.getWorldName(), location.getX(), location.getZ(), chunk -> {
PlotArea area = location.getPlotArea();
@ -366,8 +365,9 @@ public class BukkitUtil extends WorldUtil {
final org.bukkit.block.BlockState blockstate = block.getState();
if (blockstate instanceof final Sign sign) {
for (int i = 0; i < lines.length; i++) {
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER
.serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements)));
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER.serialize(
MINI_MESSAGE.deserialize(lines[i].getComponent(LocaleHolder.console()), replacements)
));
}
sign.update(true, false);
}
@ -438,9 +438,6 @@ public class BukkitUtil extends WorldUtil {
allowedInterfaces.add(Animals.class);
allowedInterfaces.add(WaterMob.class);
allowedInterfaces.add(Ambient.class);
if (PlotSquared.platform().serverVersion()[1] >= 19) {
allowedInterfaces.add(Allay.class);
}
}
case "tameable" -> allowedInterfaces.add(Tameable.class);
case "vehicle" -> allowedInterfaces.add(Vehicle.class);

View File

@ -24,7 +24,6 @@ import org.bukkit.Bukkit;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Map;
import java.util.Objects;
public class BukkitWorld implements World<org.bukkit.World> {
@ -133,14 +132,6 @@ public class BukkitWorld implements World<org.bukkit.World> {
return world.hashCode();
}
/**
* @deprecated This method is not meant to be invoked or overridden, with no replacement.
*/
@Deprecated(forRemoval = true, since = "6.6.0")
protected boolean canEqual(final Object other) {
return other instanceof BukkitWorld;
}
public String toString() {
return "BukkitWorld(world=" + this.world + ")";
}

View File

@ -98,11 +98,6 @@ public class FaweRegionManager extends BukkitRegionManager {
delegate.swap(pos1, pos2, swapPos, whenDone);
}
@Override
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, String world, Runnable whenDone) {
delegate.setBiome(region, extendBiome, biome, world, whenDone);
}
@Override
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) {
delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone);

View File

@ -43,7 +43,6 @@ dependencies {
api(libs.cloudServices)
api(libs.arkitektonika)
api("com.intellectualsites.paster:Paster")
api("com.intellectualsites.informative-annotations:informative-annotations")
}
tasks.processResources {
@ -54,13 +53,6 @@ tasks.processResources {
"date" to rootProject.grgit.head().dateTime.format(DateTimeFormatter.ofPattern("yy.MM.dd"))
)
}
doLast {
copy {
from(File("$rootDir/LICENSE"))
into("$buildDir/resources/main/")
}
}
}
tasks {
@ -70,7 +62,5 @@ tasks {
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
opt.links("https://checkerframework.org/api/")
opt.links("https://javadoc.io/doc/com.intellectualsites.informative-annotations/informative-annotations/latest/")
opt.encoding("UTF-8")
}
}

View File

@ -30,7 +30,7 @@ import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.query.PlotQuery;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -145,7 +145,7 @@ public class PlotAPI {
*/
public void sendConsoleMessage(
final @NonNull String message,
final @NonNull Template @NonNull ... replacements
final @NonNull TagResolver @NonNull ... replacements
) {
ConsolePlayer.getConsole().sendMessage(StaticCaption.of(message), replacements);
}
@ -158,7 +158,7 @@ public class PlotAPI {
*/
public void sendConsoleMessage(
final @NonNull Caption caption,
final @NonNull Template @NonNull ... replacements
final @NonNull TagResolver @NonNull ... replacements
) {
ConsolePlayer.getConsole().sendMessage(caption, replacements);
}

View File

@ -22,7 +22,6 @@ import cloud.commandframework.services.ServicePipeline;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
import com.intellectualsites.annotations.DoNotUse;
import com.plotsquared.core.backup.BackupManager;
import com.plotsquared.core.configuration.caption.LocaleHolder;
import com.plotsquared.core.generator.GeneratorWrapper;
@ -32,9 +31,9 @@ import com.plotsquared.core.inject.annotations.DefaultGenerator;
import com.plotsquared.core.location.World;
import com.plotsquared.core.permissions.PermissionHandler;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.expiration.ExpireManager;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.queue.GlobalBlockQueue;
import com.plotsquared.core.util.AnnotationHelper;
import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.EconHandler;
import com.plotsquared.core.util.PlatformWorldManager;
@ -76,11 +75,6 @@ public interface PlotPlatform<P> extends LocaleHolder {
*/
void shutdown();
/**
* Completely shuts down the server.
*/
void shutdownServer();
/**
* Get the name of the plugin
*
@ -285,16 +279,6 @@ public interface PlotPlatform<P> extends LocaleHolder {
return injector().getInstance(ChunkManager.class);
}
/**
* Get the {@link ExpireManager} implementation for the platform
*
* @return Expire manager
* @since 6.10.2
*/
default @NonNull ExpireManager expireManager() {
return injector().getInstance(ExpireManager.class);
}
/**
* Get the {@link PlotAreaManager} implementation.
*
@ -324,7 +308,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
* @return worldedit implementations
* @since 6.3.0
*/
@DoNotUse
@AnnotationHelper.ApiDescription(info = "Internal use only")
@NonNull String worldEditImplementations();
/**

View File

@ -197,9 +197,6 @@ public class PlotSquared {
this.loadCaptionMap();
} catch (final Exception e) {
LOGGER.error("Failed to load caption map", e);
LOGGER.error("Shutting down server to prevent further issues");
this.platform.shutdownServer();
throw new RuntimeException("Abort loading PlotSquared");
}
// Setup the global flag container
@ -270,7 +267,7 @@ public class PlotSquared {
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
} else {
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
captionMap = this.captionLoader.loadOrCreateSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName));
captionMap = this.captionLoader.loadSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName));
}
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
LOGGER.info(
@ -290,11 +287,11 @@ public class PlotSquared {
public void startExpiryTasks() {
if (Settings.Enabled_Components.PLOT_EXPIRY) {
ExpireManager expireManager = PlotSquared.platform().expireManager();
expireManager.runAutomatedTask();
ExpireManager.IMP = new ExpireManager(this.eventDispatcher);
ExpireManager.IMP.runAutomatedTask();
for (Settings.Auto_Clear settings : Settings.AUTO_CLEAR.getInstances()) {
ExpiryTask task = new ExpiryTask(settings, this.getPlotAreaManager());
expireManager.addTask(task);
ExpireManager.IMP.addTask(task);
}
}
}
@ -645,8 +642,7 @@ public class PlotSquared {
} else {
list = new ArrayList<>(input);
}
ExpireManager expireManager = PlotSquared.platform().expireManager();
list.sort(Comparator.comparingLong(a -> expireManager.getTimestamp(a.getOwnerAbs())));
list.sort(Comparator.comparingLong(a -> ExpireManager.IMP.getTimestamp(a.getOwnerAbs())));
return list;
}
@ -790,7 +786,9 @@ public class PlotSquared {
if (world.equals("CheckingPlotSquaredGenerator")) {
return;
}
this.getPlotAreaManager().addWorld(world);
if (!this.getPlotAreaManager().addWorld(world)) {
return;
}
Set<String> worlds;
if (this.worldConfiguration.contains("worlds")) {
worlds = this.worldConfiguration.getConfigurationSection("worlds").getKeys(false);

View File

@ -200,7 +200,7 @@ public class PlayerBackupProfile implements BackupProfile {
if (value) {
future.complete(null);
} else {
future.completeExceptionally(new RuntimeException(MINI_MESSAGE.stripTokens(
future.completeExceptionally(new RuntimeException(MINI_MESSAGE.escapeTags(
TranslatableCaption
.of("schematics.schematic_paste_failed")
.getComponent(ConsolePlayer.getConsole()))));

View File

@ -24,13 +24,14 @@ import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.inject.factory.PlayerBackupProfileFactory;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -100,7 +101,7 @@ public class SimpleBackupManager implements BackupManager {
if (player != null) {
player.sendMessage(
TranslatableCaption.of("backups.backup_automatic_started"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
}
profile.createBackup().whenComplete((backup, throwable) -> {
@ -108,7 +109,7 @@ public class SimpleBackupManager implements BackupManager {
if (player != null) {
player.sendMessage(
TranslatableCaption.of("backups.backup_automatic_failure"),
Templates.of("reason", throwable.getMessage())
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
);
}
throwable.printStackTrace();

View File

@ -31,7 +31,9 @@ import com.plotsquared.core.util.PlayerManager;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -70,7 +72,7 @@ public class Add extends Command {
TranslatableCaption.of("permission.no_plot_perms")
);
checkTrue(args.length == 1, TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot add <player | *>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>")))
);
final CompletableFuture<Boolean> future = new CompletableFuture<>();
PlayerManager.getUUIDsFromString(args[0], (uuids, throwable) -> {
@ -80,7 +82,7 @@ public class Add extends Command {
} else {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
}
future.completeExceptionally(throwable);
@ -88,7 +90,7 @@ public class Add extends Command {
} else {
try {
checkTrue(!uuids.isEmpty(), TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
Iterator<UUID> iterator = uuids.iterator();
int size = plot.getTrusted().size() + plot.getMembers().size();
@ -99,7 +101,9 @@ public class Add extends Command {
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver("value", Tag.inserting(
PlayerManager.resolveName(uuid).toComponent(player)
))
);
iterator.remove();
continue;
@ -107,7 +111,9 @@ public class Add extends Command {
if (plot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver("player", Tag.inserting(
PlayerManager.resolveName(uuid).toComponent(player)
))
);
iterator.remove();
continue;
@ -115,7 +121,9 @@ public class Add extends Command {
if (plot.getMembers().contains(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver("player", Tag.inserting(
PlayerManager.resolveName(uuid).toComponent(player)
))
);
iterator.remove();
continue;
@ -128,7 +136,7 @@ public class Add extends Command {
if (localAddSize >= maxAddSize) {
player.sendMessage(
TranslatableCaption.of("members.plot_max_members_added"),
Template.of("amount", String.valueOf(localAddSize))
TagResolver.resolver("amount", Tag.inserting(Component.text(localAddSize)))
);
return;
}

View File

@ -28,7 +28,9 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.query.PlotQuery;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.ArrayList;
import java.util.Collection;
@ -92,7 +94,10 @@ public class Alias extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_SET))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ALIAS_SET)
)
);
}
}
@ -108,7 +113,10 @@ public class Alias extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_REMOVE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ALIAS_REMOVE)
)
);
}
}
@ -149,13 +157,16 @@ public class Alias extends SubCommand {
.anyMatch()) {
player.sendMessage(
TranslatableCaption.of("alias.alias_is_taken"),
Template.of("alias", alias)
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
);
return;
}
if (Settings.UUID.OFFLINE) {
plot.setAlias(alias);
player.sendMessage(TranslatableCaption.of("alias.alias_set_to"), Template.of("alias", alias));
player.sendMessage(
TranslatableCaption.of("alias.alias_set_to"),
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
);
return;
}
PlotSquared.get().getImpromptuUUIDPipeline().getSingle(alias, ((uuid, throwable) -> {
@ -164,13 +175,13 @@ public class Alias extends SubCommand {
} else if (uuid != null) {
player.sendMessage(
TranslatableCaption.of("alias.alias_is_taken"),
Template.of("alias", alias)
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
);
} else {
plot.setAlias(alias);
player.sendMessage(
TranslatableCaption.of("alias.alias_set_to"),
Template.of("alias", alias)
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
);
}
}));
@ -182,7 +193,7 @@ public class Alias extends SubCommand {
if (!plot.getAlias().isEmpty()) {
player.sendMessage(
TranslatableCaption.of("alias.alias_removed"),
Template.of("alias", alias)
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
);
} else {
player.sendMessage(

View File

@ -24,7 +24,6 @@ import com.plotsquared.core.configuration.ConfigurationSection;
import com.plotsquared.core.configuration.ConfigurationUtil;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.CaptionHolder;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.configuration.file.YamlConfiguration;
import com.plotsquared.core.events.TeleportCause;
@ -69,7 +68,9 @@ import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.world.World;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.File;
@ -141,14 +142,17 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_CREATE)
)
);
return false;
}
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("single.single_area_needs_name"),
Template.of("command", "/plot area single <name>")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot area single <name>")))
);
return false;
}
@ -280,7 +284,7 @@ public class Area extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("errors.error_create"),
Template.of("world", hybridPlotWorld.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(hybridPlotWorld.getWorldName())))
);
}
};
@ -291,7 +295,10 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_CREATE)
)
);
return false;
}
@ -299,7 +306,10 @@ public class Area extends SubCommand {
case 1:
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot area create [world[:id]] [<modifier>=<value>]..."))
)
);
return false;
case 2:
@ -313,7 +323,11 @@ public class Area extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
TagResolver.resolver(
"value",
Tag.inserting(Component.text(
"/plot area create [world[:id]] [<modifier>=<value>]..."))
)
);
return false;
}
@ -324,12 +338,18 @@ public class Area extends SubCommand {
);
player.sendMessage(
TranslatableCaption.of("set.set_attribute"),
Template.of("attribute", "area_pos1"),
Template.of("value", location.getX() + "," + location.getZ())
TagResolver.builder()
.tag("attribute", Tag.inserting(Component.text("area_pos1")))
.tag("value", Tag.inserting(
Component.text(location.getX())
.append(Component.text(","))
.append(Component.text(location.getZ()))
))
.build()
);
player.sendMessage(
TranslatableCaption.of("area.set_pos2"),
Template.of("command", "/plot area create pos2")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot area create pos2")))
);
return true;
}
@ -343,7 +363,11 @@ public class Area extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
TagResolver.resolver(
"value",
Tag.inserting(Component.text(
"/plot area create [world[:id]] [<modifier>=<value>]..."))
)
);
return false;
}
@ -370,7 +394,10 @@ public class Area extends SubCommand {
if (!areas.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_intersection"),
Template.of("cluster", areas.iterator().next().toString())
TagResolver.resolver(
"cluster",
Tag.inserting(areas.iterator().next())
)
);
return false;
}
@ -396,8 +423,7 @@ public class Area extends SubCommand {
player.sendMessage(TranslatableCaption.of("setup.setup_finished"));
if (area.getTerrain() != PlotAreaTerrainType.ALL) {
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(world));
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(
null,
queue.setChunkConsumer(chunk -> AugmentedUtils.generateChunk(
world,
chunk.getX(),
chunk.getZ(),
@ -409,7 +435,7 @@ public class Area extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("errors.error_create"),
Template.of("world", area.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(area.getWorldName())))
);
}
};
@ -443,7 +469,7 @@ public class Area extends SubCommand {
if (other != null && Objects.equals(pa.getId(), other.getId())) {
player.sendMessage(
TranslatableCaption.of("setup.setup_world_taken"),
Template.of("value", pa.toString())
TagResolver.resolver("value", Tag.inserting(Component.text(pa.getId())))
);
return false;
}
@ -458,8 +484,13 @@ public class Area extends SubCommand {
if (pair.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1,", getCommandString()),
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag(
"value2",
Tag.inserting(Component.text("create [world[:id]] [<modifier>=<value>]..."))
)
.build()
);
return false;
}
@ -495,8 +526,14 @@ public class Area extends SubCommand {
default -> {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag(
"value2",
Tag.inserting(Component.text(
" create [world[:id]] [<modifier>=<value>]..."))
)
.build()
);
return false;
}
@ -506,7 +543,7 @@ public class Area extends SubCommand {
if (this.worldUtil.isWorld(pa.getWorldName())) {
player.sendMessage(
TranslatableCaption.of("setup.setup_world_taken"),
Template.of("value", pa.getWorldName())
TagResolver.resolver("value", Tag.inserting(Component.text(pa.getWorldName())))
);
return false;
}
@ -527,7 +564,7 @@ public class Area extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("errors.error_create"),
Template.of("world", pa.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(pa.getWorldName())))
);
}
try {
@ -546,12 +583,18 @@ public class Area extends SubCommand {
if (pa.getId() == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag(
"value2",
Tag.inserting(Component.text(
" create [world[:id]] [<modifier>=<value>]..."))
)
.build()
);
return false;
}
@ -568,7 +611,7 @@ public class Area extends SubCommand {
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put("area_create_area", pa);
player.sendMessage(
TranslatableCaption.of("single.get_position"),
Template.of("command", getCommandString())
TagResolver.resolver("command", Tag.inserting(Component.text(getCommandString())))
);
break;
}
@ -578,7 +621,10 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_INFO)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_INFO))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_INFO)
)
);
return false;
}
@ -589,15 +635,20 @@ public class Area extends SubCommand {
default -> {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " info [area]")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag("value2", Tag.inserting(Component.text(" info [area]")))
.build()
);
return false;
}
}
if (area == null) {
if (args.length == 2) {
player.sendMessage(TranslatableCaption.of("errors.not_valid_plot_world"), Template.of("value", args[1]));
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
} else {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
}
@ -621,42 +672,35 @@ public class Area extends SubCommand {
percent = claimed == 0 ? 0 : 100d * claimed / Integer.MAX_VALUE;
region = "N/A";
}
Template headerTemplate = Template.of(
"header",
TranslatableCaption.of("info.plot_info_header").getComponent(player)
);
Template nameTemplate = Template.of("name", name);
Template typeTemplate = Template.of("type", area.getType().name());
Template terrainTemplate = Template.of("terrain", area.getTerrain().name());
Template usageTemplate = Template.of("usage", String.format("%.2f", percent));
Template claimedTemplate = Template.of("claimed", String.valueOf(claimed));
Template clustersTemplate = Template.of("clusters", String.valueOf(clusters));
Template regionTemplate = Template.of("region", region);
Template generatorTemplate = Template.of("generator", generator);
Template footerTemplate = Template.of(
"footer",
TranslatableCaption.of("info.plot_info_footer").getComponent(player)
);
player.sendMessage(
TranslatableCaption.of("info.area_info_format"),
headerTemplate,
nameTemplate,
typeTemplate,
terrainTemplate,
usageTemplate,
claimedTemplate,
clustersTemplate,
regionTemplate,
generatorTemplate,
footerTemplate
);
TagResolver resolver = TagResolver.builder()
.tag(
"header",
Tag.inserting(TranslatableCaption.of("info.plot_info_header").toComponent(player))
)
.tag("name", Tag.inserting(Component.text(name)))
.tag("type", Tag.inserting(Component.text(area.getType().name())))
.tag("terrain", Tag.inserting(Component.text(area.getTerrain().name())))
.tag("usage", Tag.inserting(Component.text(String.format("%.2f", percent))))
.tag("claimed", Tag.inserting(Component.text(claimed)))
.tag("clusters", Tag.inserting(Component.text(clusters)))
.tag("region", Tag.inserting(Component.text(region)))
.tag("generator", Tag.inserting(Component.text(generator)))
.tag(
"footer",
Tag.inserting(TranslatableCaption.of("info.plot_info_footer").toComponent(player))
)
.build();
player.sendMessage(TranslatableCaption.of("info.area_info_format"), resolver);
return true;
}
case "l", "list" -> {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_LIST)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_LIST))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_LIST)
)
);
return false;
}
@ -673,8 +717,10 @@ public class Area extends SubCommand {
default:
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " list [#]")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag("value2", Tag.inserting(Component.text(" list [#]")))
.build()
);
return false;
}
@ -700,37 +746,27 @@ public class Area extends SubCommand {
percent = claimed == 0 ? 0 : (double) claimed / Short.MAX_VALUE * Short.MAX_VALUE;
region = "N/A";
}
Template claimedTemplate = Template.of("claimed", String.valueOf(claimed));
Template usageTemplate = Template.of("usage", String.format("%.2f", percent) + "%");
Template clustersTemplate = Template.of("clusters", String.valueOf(clusters));
Template regionTemplate = Template.of("region", region);
Template generatorTemplate = Template.of("generator", generator);
String tooltip = MINI_MESSAGE.serialize(MINI_MESSAGE
.parse(
TranslatableCaption.of("info.area_list_tooltip").getComponent(player),
claimedTemplate,
usageTemplate,
clustersTemplate,
regionTemplate,
generatorTemplate
));
Template tooltipTemplate = Template.of("hover_info", tooltip);
Template visitcmdTemplate = Template.of("command_tp", "/plot area tp " + area);
Template infocmdTemplate = Template.of("command_info", "/plot area info " + area);
Template numberTemplate = Template.of("number", String.valueOf(i));
Template nameTemplate = Template.of("area_name", name);
Template typeTemplate = Template.of("area_type", area.getType().name());
Template terrainTemplate = Template.of("area_terrain", area.getTerrain().name());
caption.set(TranslatableCaption.of("info.area_list_item"));
caption.setTemplates(
tooltipTemplate,
visitcmdTemplate,
numberTemplate,
nameTemplate,
typeTemplate,
terrainTemplate,
infocmdTemplate
Component tooltip = MINI_MESSAGE.deserialize(
TranslatableCaption.of("info.area_list_tooltip").getComponent(player),
TagResolver.builder()
.tag("claimed", Tag.inserting(Component.text(claimed)))
.tag("usage", Tag.inserting(Component.text(String.format("%.2f", percent) + "%")))
.tag("clusters", Tag.inserting(Component.text(clusters)))
.tag("region", Tag.inserting(Component.text(region)))
.tag("generator", Tag.inserting(Component.text(generator)))
.build()
);
TagResolver resolver = TagResolver.builder()
.tag("hover_info", Tag.inserting(tooltip))
.tag("command_tp", Tag.preProcessParsed("/plot area tp " + name))
.tag("command_info", Tag.preProcessParsed("/plot area info " + name))
.tag("number", Tag.inserting(Component.text(i)))
.tag("area_name", Tag.inserting(Component.text(name)))
.tag("area_type", Tag.inserting(Component.text(area.getType().name())))
.tag("area_terrain", Tag.inserting(Component.text(area.getTerrain().name())))
.build();
caption.set(TranslatableCaption.of("info.area_list_item"));
caption.setTagResolvers(resolver);
}
}, "/plot area list", TranslatableCaption.of("list.area_list_header_paged"));
return true;
@ -739,7 +775,10 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_REGEN)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_REGEN))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_REGEN)
)
);
return false;
}
@ -751,13 +790,12 @@ public class Area extends SubCommand {
if (area.getType() != PlotAreaType.PARTIAL) {
player.sendMessage(
TranslatableCaption.of("single.delete_world_region"),
Template.of("world", area.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(area.getWorldName())))
);
return false;
}
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName()));
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(
null,
queue.setChunkConsumer(chunk -> AugmentedUtils.generateChunk(
area.getWorldName(),
chunk.getX(),
chunk.getZ(),
@ -772,20 +810,23 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_TP)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_TP))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AREA_TP))
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot area tp [area]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot area tp [area]")))
);
return false;
}
PlotArea area = this.plotAreaManager.getPlotAreaByString(args[1]);
if (area == null) {
player.sendMessage(TranslatableCaption.of("errors.not_valid_plot_world"), Template.of("value", args[1]));
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}
Location center;

View File

@ -44,7 +44,9 @@ import com.plotsquared.core.util.task.AutoClaimFinishTask;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import io.leangen.geantyref.TypeToken;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -110,13 +112,13 @@ public class Auto extends SubCommand {
if (diff < 0 && grantedPlots < sizeX * sizeZ) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(diff + grantedPlots))
TagResolver.resolver("amount", Tag.inserting(Component.text(diff + grantedPlots)))
);
return false;
} else if (diff >= 0 && grantedPlots + diff < sizeX * sizeZ) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(diff + grantedPlots))
TagResolver.resolver("amount", Tag.inserting(Component.text(diff + grantedPlots)))
);
return false;
} else {
@ -128,28 +130,21 @@ public class Auto extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("economy.removed_granted_plot"),
Template.of("usedGrants", String.valueOf(grantedPlots - left)),
Template.of("remainingGrants", String.valueOf(left))
TagResolver.builder()
.tag("usedGrants", Tag.inserting(Component.text(grantedPlots - left)))
.tag("remainingGrants", Tag.inserting(Component.text(left)))
.build()
);
}
} else {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(player.getAllowedPlots())
)
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
);
return false;
}
}
}
int maxMerge = Permissions.hasPermissionRange(player, Permission.PERMISSION_MERGE, Settings.Limit.MAX_PLOTS);
if (sizeX * sizeZ > maxMerge) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_MERGE + "." + (sizeX * sizeZ))
);
return false;
}
return true;
}
@ -223,7 +218,7 @@ public class Auto extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return true;
}
@ -246,7 +241,7 @@ public class Auto extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Auto claim")
TagResolver.resolver("value", Tag.inserting(Component.text("Auto claim")))
);
return true;
}
@ -257,14 +252,13 @@ public class Auto extends SubCommand {
if (!force && mega && !Permissions.hasPermission(player, Permission.PERMISSION_AUTO_MEGA)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AUTO_MEGA))
);
return false;
}
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots_num"),
Template.of("amount", String.valueOf(Settings.Claim.MAX_AUTO_AREA))
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Claim.MAX_AUTO_AREA)))
);
return false;
}
@ -282,8 +276,10 @@ public class Auto extends SubCommand {
if (!plotarea.hasSchematic(schematic)) {
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid_named"),
Template.of("schemname", schematic),
Template.of("reason", "non-existent")
TagResolver.builder()
.tag("schemname", Tag.inserting(Component.text(schematic)))
.tag("reason", Tag.inserting(Component.text("non-existent")))
.build()
);
return true;
}
@ -294,7 +290,7 @@ public class Auto extends SubCommand {
.hasPermission(player, "plots.admin.command.schematic")) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", "plots.claim.%s0")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.claim.%s0")))
);
return true;
}
@ -313,15 +309,20 @@ public class Auto extends SubCommand {
if (!force && this.econHandler.getMoney(player) < cost) {
player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_plot"),
Template.of("money", this.econHandler.format(cost)),
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
TagResolver.builder()
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
.tag(
"balance",
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player))))
)
.build()
);
return false;
}
this.econHandler.withdrawMoney(player, cost);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(cost))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
);
}
}
@ -355,7 +356,7 @@ public class Auto extends SubCommand {
if (!force && mergeEvent.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Auto merge")
TagResolver.resolver("value", Tag.inserting(Component.text("Auto merge")))
);
return false;
}

View File

@ -30,7 +30,9 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.nio.file.Files;
@ -67,7 +69,7 @@ public final class Backup extends Command {
private static boolean sendMessage(PlotPlayer<?> player) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot backup <save | list | load>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot backup <save | list | load>")))
);
return true;
}
@ -135,34 +137,45 @@ public final class Backup extends Command {
} else if (!plot.hasOwner()) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_unowned").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_unowned").toComponent(player)
))
);
} else if (plot.getVolume() > Integer.MAX_VALUE) {
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
} else if (plot.isMerged()) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_merged").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_merged").toComponent(player)
))
);
} else if (!plot.isOwner(player.getUUID()) && !Permissions
.hasPermission(player, Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BACKUP_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BACKUP_OTHER)
)
);
} else {
final BackupProfile backupProfile = Objects.requireNonNull(this.backupManager.getProfile(plot));
if (backupProfile instanceof NullBackupProfile) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_other").getComponent(player))
TagResolver.resolver(
"plot", Tag.inserting(TranslatableCaption
.of("generic.generic_other")
.toComponent(player))
)
);
} else {
backupProfile.createBackup().whenComplete((backup, throwable) -> {
if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("backups.backup_save_failed"),
Template.of("reason", throwable.getMessage())
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
);
throwable.printStackTrace();
} else {
@ -189,12 +202,16 @@ public final class Backup extends Command {
} else if (!plot.hasOwner()) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_unowned").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_unowned").toComponent(player)
))
);
} else if (plot.isMerged()) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_merged").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_merged").toComponent(player)
))
);
} else if (plot.getVolume() > Integer.MAX_VALUE) {
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
@ -202,37 +219,48 @@ public final class Backup extends Command {
.hasPermission(player, Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BACKUP_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BACKUP_OTHER)
)
);
} else {
final BackupProfile backupProfile = Objects.requireNonNull(this.backupManager.getProfile(plot));
if (backupProfile instanceof NullBackupProfile) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_other").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_other").toComponent(player)
))
);
} else {
backupProfile.listBackups().whenComplete((backups, throwable) -> {
if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("backups.backup_list_failed"),
Template.of("reason", throwable.getMessage())
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
);
throwable.printStackTrace();
} else {
player.sendMessage(
TranslatableCaption.of("backups.backup_list_header"),
Template.of("plot", plot.getId().toCommaSeparatedString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toCommaSeparatedString())))
);
try {
for (int i = 0; i < backups.size(); i++) {
player.sendMessage(
TranslatableCaption.of("backups.backup_list_entry"),
Template.of("number", Integer.toString(i + 1)),
Template.of("value", DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.ofInstant(
Instant.ofEpochMilli(backups.get(i).getCreationTime()),
ZoneId.systemDefault()
)))
TagResolver.builder()
.tag("number", Tag.inserting(Component.text(i + 1)))
.tag(
"value",
Tag.inserting(Component.text(DateTimeFormatter.RFC_1123_DATE_TIME.format(
ZonedDateTime.ofInstant(
Instant.ofEpochMilli(backups.get(i).getCreationTime()),
ZoneId.systemDefault()
))))
)
.build()
);
}
} catch (final Exception e) {
@ -260,12 +288,16 @@ public final class Backup extends Command {
} else if (!plot.hasOwner()) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_unowned").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_unowned").toComponent(player)
))
);
} else if (plot.isMerged()) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_merged").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_merged").toComponent(player)
))
);
} else if (plot.getVolume() > Integer.MAX_VALUE) {
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
@ -273,12 +305,15 @@ public final class Backup extends Command {
.hasPermission(player, Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BACKUP_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BACKUP_OTHER)
)
);
} else if (args.length == 0) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Usage: /plot backup save/list/load")
TagResolver.resolver("value", Tag.inserting(Component.text("Usage: /plot backup save/list/load")))
);
} else {
final int number;
@ -287,7 +322,7 @@ public final class Backup extends Command {
} catch (final Exception e) {
player.sendMessage(
TranslatableCaption.of("invalid.not_a_number"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
return;
}
@ -295,23 +330,27 @@ public final class Backup extends Command {
if (backupProfile instanceof NullBackupProfile) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of("plot", TranslatableCaption.of("generic.generic_other").getComponent(player))
TagResolver.resolver("plot", Tag.inserting(
TranslatableCaption.of("generic.generic_other").toComponent(player)
))
);
} else {
backupProfile.listBackups().whenComplete((backups, throwable) -> {
if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("backups.backup_load_failure"),
Template.of("reason", throwable.getMessage())
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
);
throwable.printStackTrace();
} else {
if (number < 1 || number > backups.size()) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of(
TagResolver.resolver(
"plot",
TranslatableCaption.of("generic.generic_invalid_choice").getComponent(player)
Tag.inserting(TranslatableCaption
.of("generic.generic_invalid_choice")
.toComponent(player))
)
);
} else {
@ -321,9 +360,11 @@ public final class Backup extends Command {
.exists(backup.getFile())) {
player.sendMessage(
TranslatableCaption.of("backups.backup_impossible"),
Template.of(
TagResolver.resolver(
"plot",
TranslatableCaption.of("generic.generic_invalid_choice").getComponent(player)
Tag.inserting(TranslatableCaption
.of("generic.generic_invalid_choice")
.toComponent(player))
)
);
} else {
@ -333,7 +374,10 @@ public final class Backup extends Command {
if (error != null) {
player.sendMessage(
TranslatableCaption.of("backups.backup_load_failure"),
Template.of("reason", error.getMessage())
TagResolver.resolver(
"reason",
Tag.inserting(Component.text(error.getMessage()))
)
);
} else {
player.sendMessage(TranslatableCaption.of("backups.backup_load_success"));

View File

@ -18,6 +18,7 @@
*/
package com.plotsquared.core.command;
import com.plotsquared.core.configuration.caption.StaticCaption;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
@ -25,7 +26,10 @@ import com.plotsquared.core.util.StringMan;
import com.sk89q.worldedit.command.util.SuggestionHelper;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.biome.BiomeTypes;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Collection;
import java.util.Locale;
@ -47,16 +51,13 @@ public class Biome extends SetCommand {
} catch (final Exception ignore) {
}
if (biome == null) {
String biomes = StringMan.join(
BiomeType.REGISTRY.values(),
MINI_MESSAGE.serialize(MINI_MESSAGE.parse(TranslatableCaption
.of("blocklist.block_list_separator")
.getComponent(player)))
);
String separator = TranslatableCaption.of("blocklist.block_list_separator").getComponent(player);
player.sendMessage(TranslatableCaption.of("biome.need_biome"));
player.sendMessage(
TranslatableCaption.of("commandconfig.subcommand_set_options_header"),
Template.of("values", biomes)
StaticCaption.of(
TranslatableCaption.of("commandconfig.subcommand_set_options_header_only").getComponent(player)
+ StringMan.join(BiomeType.REGISTRY.values(), separator)
)
);
return false;
}
@ -73,7 +74,7 @@ public class Biome extends SetCommand {
plot.removeRunning();
player.sendMessage(
TranslatableCaption.of("biome.biome_set_to"),
Template.of("value", value.toLowerCase())
TagResolver.resolver("value", Tag.inserting(Component.text(value.toLowerCase())))
);
});
return true;

View File

@ -32,7 +32,9 @@ import com.plotsquared.core.util.EconHandler;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Set;
@ -84,7 +86,7 @@ public class Buy extends Command {
checkTrue(
player.getPlotCount() + plots.size() <= player.getAllowedPlots(),
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(player.getAllowedPlots()))
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
);
double price = plot.getFlag(PriceFlag.class);
if (price <= 0) {
@ -97,8 +99,10 @@ public class Buy extends Command {
checkTrue(
this.econHandler.getMoney(player) >= price,
TranslatableCaption.of("economy.cannot_afford_plot"),
Template.of("money", this.econHandler.format(price)),
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
TagResolver.builder()
.tag("money", Tag.inserting(Component.text(this.econHandler.format(price))))
.tag("balance", Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player)))))
.build()
);
this.econHandler.withdrawMoney(player, price);
// Failure
@ -106,7 +110,7 @@ public class Buy extends Command {
confirm.run(this, () -> {
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
this.econHandler.depositMoney(PlotSquared.platform().playerManager().getOfflinePlayer(plot.getOwnerAbs()), price);
@ -115,9 +119,11 @@ public class Buy extends Command {
if (owner != null) {
owner.sendMessage(
TranslatableCaption.of("economy.plot_sold"),
Template.of("plot", plot.getId().toString()),
Template.of("player", player.getName()),
Template.of("price", this.econHandler.format(price))
TagResolver.builder()
.tag("plot", Tag.inserting(Component.text(plot.getId().toString())))
.tag("player", Tag.inserting(Component.text(player.getName())))
.tag("price", Tag.inserting(Component.text(this.econHandler.format(price))))
.build()
);
}
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(PriceFlag.class);
@ -126,10 +132,9 @@ public class Buy extends Command {
plot.removeFlag(event.getFlag());
}
plot.setOwner(player.getUUID());
plot.getPlotModificationManager().setSign(player.getName());
player.sendMessage(
TranslatableCaption.of("working.claimed"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
whenDone.run(Buy.this, CommandResult.SUCCESS);
}, () -> {

View File

@ -30,7 +30,10 @@ import com.plotsquared.core.plot.flag.implementations.MiscCapFlag;
import com.plotsquared.core.plot.flag.implementations.MobCapFlag;
import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import static com.plotsquared.core.util.entity.EntityCategories.CAP_ANIMAL;
import static com.plotsquared.core.util.entity.EntityCategories.CAP_ENTITY;
@ -55,7 +58,7 @@ public class Caps extends SubCommand {
.hasPermission(player, Permission.PERMISSION_ADMIN_CAPS_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_CAPS_OTHER))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_CAPS_OTHER))
);
return false;
}
@ -82,15 +85,17 @@ public class Caps extends SubCommand {
final int current = countedEntities[type];
final int max = plot.getFlag(capFlag);
final String percentage = String.format("%.1f", 100 * ((float) current / max));
String maxBeautified = max >= Integer.MAX_VALUE
? TranslatableCaption.of("info.infinite").getComponent(player)
: String.valueOf(max);
ComponentLike maxBeautified = max >= Integer.MAX_VALUE
? TranslatableCaption.of("info.infinite").toComponent(player)
: Component.text(max);
player.sendMessage(
TranslatableCaption.of("info.plot_caps_format"),
Template.of("cap", name),
Template.of("current", String.valueOf(current)),
Template.of("limit", maxBeautified),
Template.of("percentage", percentage)
TagResolver.builder()
.tag("cap", Tag.inserting(Component.text(name)))
.tag("current", Tag.inserting(Component.text(current)))
.tag("limit", Tag.inserting(maxBeautified))
.tag("percentage", Tag.inserting(Component.text(percentage)))
.build()
);
}

View File

@ -1,54 +0,0 @@
/*
* PlotSquared, a land and world management plugin for Minecraft.
* Copyright (C) IntellectualSites <https://intellectualsites.com>
* Copyright (C) IntellectualSites team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.plotsquared.core.command;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.PlotArea;
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, since = "6.0.0")
@CommandDeclaration(command = "chat",
usage = "/plot chat",
permission = "plots.chat",
category = CommandCategory.CHAT,
requiredType = RequiredType.PLAYER)
public class Chat extends SubCommand {
@Override
public boolean onCommand(PlotPlayer<?> player, String[] args) {
PlotArea area = player.getPlotAreaAbs();
check(area, TranslatableCaption.of("errors.not_in_plot_world"));
player.sendMessage(
TranslatableCaption.of("errors.deprecated_commands"),
Template.of("replacement", "/plot toggle chat")
);
if (player.getPlotAreaAbs().isForcingPlotChat()) {
player.sendMessage(TranslatableCaption.of("chat.plot_chat_forced"));
return true;
}
MainCommand.getInstance().toggle.chat(this, player, args, null, null);
return true;
}
}

View File

@ -38,7 +38,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.NonNull;
@ -82,7 +84,7 @@ public class Claim extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Claim")
TagResolver.resolver("value", Tag.inserting(Component.text("Claim")))
);
return true;
}
@ -101,14 +103,14 @@ public class Claim extends SubCommand {
if (grants <= 0) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(grants))
TagResolver.resolver("amount", Tag.inserting(Component.text(grants)))
);
metaDataAccess.remove();
}
} else {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(player.getAllowedPlots()))
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
);
return false;
}
@ -123,8 +125,10 @@ public class Claim extends SubCommand {
if (!area.hasSchematic(schematic)) {
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid_named"),
Template.of("schemname", schematic),
Template.of("reason", "non-existent")
TagResolver.builder()
.tag("schemname", Tag.inserting(Component.text(schematic)))
.tag("reason", Tag.inserting(Component.text("non-existent")))
.build()
);
}
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLAIM_SCHEMATIC
@ -134,7 +138,7 @@ public class Claim extends SubCommand {
) && !force) {
player.sendMessage(
TranslatableCaption.of("permission.no_schematic_permission"),
Template.of("value", schematic)
TagResolver.resolver("value", Tag.inserting(Component.text(schematic)))
);
}
}
@ -150,16 +154,28 @@ public class Claim extends SubCommand {
if (this.econHandler.getMoney(player) < cost) {
player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_plot"),
Template.of("money", this.econHandler.format(cost)),
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
TagResolver.builder()
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
.tag(
"balance",
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(
player))))
)
.build()
);
return false;
}
this.econHandler.withdrawMoney(player, cost);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(cost)),
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
TagResolver.builder()
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
.tag(
"balance",
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(
player))))
)
.build()
);
}
}
@ -171,8 +187,10 @@ public class Claim extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("economy.removed_granted_plot"),
Template.of("usedGrants", String.valueOf((grants - 1))),
Template.of("remainingGrants", String.valueOf(grants))
TagResolver.builder()
.tag("usedGrants", Tag.inserting(Component.text(grants - 1)))
.tag("remainingGrants", Tag.inserting(Component.text(grants)))
.build()
);
}
}
@ -198,7 +216,7 @@ public class Claim extends SubCommand {
if (mergeEvent.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Auto merge on claim")
TagResolver.resolver("value", Tag.inserting(Component.text("Auto merge on claim")))
);
} else {
if (plot.getPlotModificationManager().autoMerge(

View File

@ -36,7 +36,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.concurrent.CompletableFuture;
@ -79,7 +81,7 @@ public class Clear extends Command {
if (eventResult == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Clear")
TagResolver.resolver("value", Tag.inserting(Component.text("Clear")))
);
return CompletableFuture.completedFuture(true);
}
@ -130,8 +132,10 @@ public class Clear extends Command {
}
player.sendMessage(
TranslatableCaption.of("working.clearing_done"),
Template.of("amount", String.valueOf(System.currentTimeMillis() - start)),
Template.of("plot", plot.getId().toString())
TagResolver.builder()
.tag("amount", Tag.inserting(Component.text(System.currentTimeMillis() - start)))
.tag("plot", Tag.inserting(Component.text(plot.getId().toString())))
.build()
);
});
});

View File

@ -32,10 +32,15 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotCluster;
import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.util.ComponentHelper;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.query.PlotQuery;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.Style;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Collection;
import java.util.Collections;
@ -46,6 +51,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@CommandDeclaration(command = "cluster",
aliases = "clusters",
@ -54,18 +60,19 @@ import java.util.stream.Collectors;
permission = "plots.cluster")
public class Cluster extends SubCommand {
private static final Component[] AVAILABLE_ARGS = Stream.of(
"list", "create", "delete", "resize", "invite", "kick", "leave", "helpers", "tp", "sethome"
).map(s -> Component.text(s).style(Style.style(NamedTextColor.DARK_AQUA))).toArray(Component[]::new);
private static final Component SEPARATOR = Component.text(", ").style(Style.style(NamedTextColor.GRAY));
// list, create, delete, resize, invite, kick, leave, helpers, tp, sethome
@Override
public boolean onCommand(PlotPlayer<?> player, String[] args) {
// list, create, delete, resize, invite, kick, leave, helpers, tp, sethome
if (args.length == 0) {
// return arguments
player.sendMessage(
TranslatableCaption.of("cluster.cluster_available_args"),
Template.of(
"list",
"<dark_aqua>list</dark_aqua><gray>, </gray><dark_aqua>create</dark_aqua><gray>, </gray><dark_aqua>delete</dark_aqua><gray>, </gray><dark_aqua>resize</dark_aqua><gray>, </gray><dark_aqua>invite</dark_aqua><gray>, </gray><dark_aqua>kick</dark_aqua><gray>, </gray><dark_aqua>leave</dark_aqua><gray>, </gray><dark_aqua>members</dark_aqua><gray>, </gray><dark_aqua>info</dark_aqua><gray>, </gray><dark_aqua>tp</dark_aqua><gray>, </gray><dark_aqua>sethome</dark_aqua>"
)
TagResolver.resolver("list", Tag.inserting(ComponentHelper.join(AVAILABLE_ARGS, SEPARATOR)))
);
return false;
}
@ -76,14 +83,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_LIST)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_LIST))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_LIST)
)
);
return false;
}
if (args.length != 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster list")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster list")))
);
return false;
}
@ -95,7 +105,7 @@ public class Cluster extends SubCommand {
Set<PlotCluster> clusters = area.getClusters();
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_heading"),
Template.of("amount", clusters.size() + "")
TagResolver.resolver("amount", Tag.inserting(Component.text(clusters.size())))
);
for (PlotCluster cluster : clusters) {
// Ignore unmanaged clusters
@ -103,22 +113,22 @@ public class Cluster extends SubCommand {
if (player.getUUID().equals(cluster.owner)) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element_owner"),
Template.of("cluster", name)
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
);
} else if (cluster.helpers.contains(player.getUUID())) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element_helpers"),
Template.of("cluster", name)
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
);
} else if (cluster.invited.contains(player.getUUID())) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element_invited"),
Template.of("cluster", name)
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
);
} else {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element"),
Template.of("cluster", cluster.toString())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.toString())))
);
}
}
@ -129,7 +139,10 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_CREATE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_CREATE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_CREATE)
)
);
return false;
}
@ -141,7 +154,10 @@ public class Cluster extends SubCommand {
if (args.length != 4) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster create <name> <id-bot> <id-top>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot cluster create <name> <id-bot> <id-top>"))
)
);
return false;
}
@ -151,7 +167,7 @@ public class Cluster extends SubCommand {
if (currentClusters >= player.getAllowedPlots()) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_clusters"),
Template.of("amount", String.valueOf(player.getAllowedPlots()))
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
);
}
PlotId pos1;
@ -169,7 +185,7 @@ public class Cluster extends SubCommand {
if (area.getCluster(name) != null) {
player.sendMessage(
TranslatableCaption.of("alias.alias_is_taken"),
Template.of("alias", name)
TagResolver.resolver("alias", Tag.inserting(Component.text(name)))
);
return false;
}
@ -183,7 +199,7 @@ public class Cluster extends SubCommand {
if (cluster != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_intersection"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
return false;
}
@ -191,7 +207,7 @@ public class Cluster extends SubCommand {
if (!area.contains(pos1) || !area.contains(pos2)) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_outside"),
Template.of("area", String.valueOf(area))
TagResolver.resolver("area", Tag.inserting(Component.text(area.toString())))
);
return false;
}
@ -204,7 +220,10 @@ public class Cluster extends SubCommand {
if (!plot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_CREATE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_CREATE_OTHER)
)
);
return false;
}
@ -226,7 +245,10 @@ public class Cluster extends SubCommand {
if (current + cluster.getArea() > allowed) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_SIZE + "." + (current + cluster.getArea()))
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_CLUSTER_SIZE + "." + (current + cluster.getArea())))
)
);
return false;
}
@ -245,7 +267,7 @@ public class Cluster extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("cluster.cluster_created"),
Template.of("name", name)
TagResolver.resolver("name", Tag.inserting(Component.text(name)))
);
return true;
}
@ -255,14 +277,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_DELETE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_DELETE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_DELETE)
)
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster delete [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster delete [name]")))
);
return false;
}
@ -277,7 +302,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -293,15 +318,18 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_DELETE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_DELETE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_DELETE_OTHER)
)
);
return false;
}
}
DBFunc.delete(cluster);
player.sendMessage(TranslatableCaption.of("cluster.cluster_deleted"), Template.of(
player.sendMessage(TranslatableCaption.of("cluster.cluster_deleted"), TagResolver.resolver(
"cluster",
String.valueOf(cluster)
Tag.inserting(Component.text(cluster.toString()))
));
return true;
}
@ -310,14 +338,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE)
)
);
return false;
}
if (args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster resize [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster resize [name]")))
);
return false;
}
@ -351,7 +382,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_OTHER)
)
);
return false;
}
@ -361,13 +395,12 @@ public class Cluster extends SubCommand {
if (intersect != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_intersection"),
Template.of("cluster", intersect.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(intersect.getName())))
);
return false;
}
Set<Plot> existing = area.getPlotSelectionOwned(cluster.getP1(), cluster.getP2());
Set<Plot> newPlots = area.getPlotSelectionOwned(pos1, pos2);
// Set<Plot> removed = (HashSet<Plot>) existing.clone();
Set<Plot> removed = new HashSet<>(existing);
removed.removeAll(newPlots);
@ -377,7 +410,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)
)
);
return false;
}
@ -388,7 +424,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)
)
);
return false;
}
@ -407,7 +446,9 @@ public class Cluster extends SubCommand {
if (current + cluster.getArea() > allowed) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER + "." + (current + cluster.getArea()))
TagResolver.resolver("node", Tag.inserting(Component.text(
Permission.PERMISSION_CLUSTER + "." + (current + cluster.getArea())
)))
);
return false;
}
@ -422,14 +463,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INVITE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_INVITE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_INVITE)
)
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster invite <player>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster invite <player>")))
);
return false;
}
@ -448,7 +492,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_INVITE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_INVITE_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_INVITE_OTHER)
)
);
return false;
}
@ -461,7 +508,7 @@ public class Cluster extends SubCommand {
} else if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
} else {
if (!cluster.isAdded(uuid)) {
@ -473,7 +520,7 @@ public class Cluster extends SubCommand {
if (otherPlayer != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_invited"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
}
}
@ -488,14 +535,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_KICK.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_KICK)
)
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster kick <player>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster kick <player>")))
);
return false;
}
@ -513,7 +563,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_KICK_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_KICK_OTHER)
)
);
return false;
}
@ -526,7 +579,7 @@ public class Cluster extends SubCommand {
} else if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
} else {
// Can't kick if the player is yourself, the owner, or not added to the cluster
@ -534,7 +587,7 @@ public class Cluster extends SubCommand {
|| !cluster.isAdded(uuid)) {
player.sendMessage(
TranslatableCaption.of("cluster.cannot_kick_player"),
Template.of("value", cluster.getName())
TagResolver.resolver("value", Tag.inserting(Component.text(cluster.getName())))
);
} else {
if (cluster.helpers.contains(uuid)) {
@ -549,7 +602,7 @@ public class Cluster extends SubCommand {
if (player2 != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_removed"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
}
removePlayerPlots(cluster, uuid, player2.getLocation().getWorldName());
@ -564,14 +617,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_LEAVE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_LEAVE.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_LEAVE)
)
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster leave [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster leave [name]")))
);
return false;
}
@ -585,7 +641,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -613,7 +669,7 @@ public class Cluster extends SubCommand {
DBFunc.removeInvited(cluster, uuid);
player.sendMessage(
TranslatableCaption.of("cluster.cluster_removed"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
return true;
@ -622,14 +678,20 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_HELPERS)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_HELPERS.toString())
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_CLUSTER_HELPERS.toString()))
)
);
return false;
}
if (args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster members <add | remove> <player>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot cluster members <add | remove> <player>"))
)
);
return false;
}
@ -650,7 +712,7 @@ public class Cluster extends SubCommand {
} else if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[2])
TagResolver.resolver("value", Tag.inserting(Component.text(args[2])))
);
} else {
if (args[1].equalsIgnoreCase("add")) {
@ -664,7 +726,9 @@ public class Cluster extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster members <add | remove> <player>")
TagResolver.resolver("value", Tag.inserting(Component.text(
"/plot cluster members <add | remove> <player>"
)))
);
}
}
@ -677,14 +741,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_TP)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_TP.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_TP)
)
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster tp <name>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster tp <name>")))
);
return false;
}
@ -697,7 +764,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -706,7 +773,10 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_TP_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_TP_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_TP_OTHER)
)
);
return false;
}
@ -722,14 +792,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INFO)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_TP.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_TP)
)
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster info [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster info [name]")))
);
}
PlotArea area = player.getApplicablePlotArea();
@ -743,7 +816,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -772,19 +845,14 @@ public class Cluster extends SubCommand {
cluster.getP2().getY() - cluster.getP1().getY() + 1);
String rights = cluster.isAdded(player.getUUID()) + "";
Caption message = TranslatableCaption.of("cluster.cluster_info");
Template idTemplate = Template.of("id", id);
Template ownerTemplate = Template.of("owner", owner);
Template nameTemplate = Template.of("name", name);
Template sizeTemplate = Template.of("size", size);
Template rightsTemplate = Template.of("rights", rights);
player.sendMessage(
message,
idTemplate,
ownerTemplate,
nameTemplate,
sizeTemplate,
rightsTemplate
);
TagResolver resolver = TagResolver.builder()
.tag("id", Tag.inserting(Component.text(id)))
.tag("owner", Tag.inserting(Component.text(owner)))
.tag("name", Tag.inserting(Component.text(name)))
.tag("size", Tag.inserting(Component.text(size)))
.tag("rights", Tag.inserting(Component.text(rights)))
.build();
player.sendMessage(message, resolver);
}
});
return true;
@ -795,14 +863,14 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_SETHOME)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_SETHOME.toString())
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME))
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster sethome")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster sethome")))
);
return false;
}
@ -820,7 +888,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_SETHOME_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_SETHOME_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME_OTHER)
)
);
return false;
}
@ -839,10 +910,7 @@ public class Cluster extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("cluster.cluster_available_args"),
Template.of(
"list",
"<dark_aqua>list</dark_aqua><gray>, </gray><dark_aqua>create</dark_aqua><gray>, </gray><dark_aqua>delete</dark_aqua><gray>, </gray><dark_aqua>resize</dark_aqua><gray>, </gray><dark_aqua>invite</dark_aqua><gray>, </gray><dark_aqua>kick</dark_aqua><gray>, </gray><dark_aqua>leave</dark_aqua><gray>, </gray><dark_aqua>members</dark_aqua><gray>, </gray><dark_aqua>info</dark_aqua><gray>, </gray><dark_aqua>tp</dark_aqua><gray>, </gray><dark_aqua>sethome</dark_aqua>"
)
TagResolver.resolver("list", Tag.inserting(ComponentHelper.join(AVAILABLE_ARGS, SEPARATOR)))
);
return false;
}

View File

@ -25,7 +25,9 @@ import com.plotsquared.core.player.PlayerMetaDataKeys;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.util.task.TaskTime;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.Nullable;
public class CmdConfirm {
@ -52,9 +54,11 @@ public class CmdConfirm {
if (commandStr != null) {
player.sendMessage(
TranslatableCaption.of("confirm.requires_confirm"),
Template.of("command", commandStr),
Template.of("timeout", String.valueOf(Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS)),
Template.of("value", "/plot confirm")
TagResolver.builder()
.tag("command", Tag.inserting(Component.text(commandStr)))
.tag("timeout", Tag.inserting(Component.text(Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS)))
.tag("value", Tag.inserting(Component.text("/plot confirm")))
.build()
);
}
TaskManager.runTaskLater(() -> {

View File

@ -30,8 +30,10 @@ import com.plotsquared.core.util.StringComparison;
import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.lang.reflect.InvocationTargetException;
@ -256,10 +258,14 @@ public abstract class Command {
max = c.size();
}
// Send the header
Template curTemplate = Template.of("cur", String.valueOf(page + 1));
Template maxTemplate = Template.of("max", String.valueOf(totalPages + 1));
Template amountTemplate = Template.of("amount", String.valueOf(c.size()));
player.sendMessage(header, curTemplate, maxTemplate, amountTemplate);
player.sendMessage(
header,
TagResolver.builder()
.tag("cur", Tag.inserting(Component.text(page + 1)))
.tag("max", Tag.inserting(Component.text(totalPages + 1)))
.tag("amount", Tag.inserting(Component.text(c.size())))
.build()
);
// Send the page content
List<T> subList = c.subList(page * size, max);
int i = page * size;
@ -267,13 +273,24 @@ public abstract class Command {
i++;
final CaptionHolder msg = new CaptionHolder();
add.run(i, obj, msg);
player.sendMessage(msg.get(), msg.getTemplates());
player.sendMessage(msg.get(), msg.getTagResolvers());
}
// Send the footer
Template command1 = Template.of("command1", baseCommand + " " + page);
Template command2 = Template.of("command2", baseCommand + " " + (page + 2));
Template clickable = Template.of("clickable", TranslatableCaption.of("list.clickable").getComponent(player));
player.sendMessage(TranslatableCaption.of("list.page_turn"), command1, command2, clickable);
player.sendMessage(
TranslatableCaption.of("list.page_turn"),
TagResolver.builder()
.tag("cur", Tag.inserting(Component.text(page + 1)))
.tag(
"command1",
Tag.preProcessParsed(baseCommand + " " + page)
)
.tag("command2", Tag.preProcessParsed(baseCommand + " " + (page + 2)))
.tag(
"clickable",
Tag.inserting(TranslatableCaption.of("list.clickable").toComponent(player))
)
.build()
);
}
/**
@ -325,7 +342,7 @@ public abstract class Command {
if (commands.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("commandconfig.did_you_mean"),
Template.of("value", MainCommand.getInstance().help.getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(MainCommand.getInstance().help.getUsage())))
);
return CompletableFuture.completedFuture(false);
}
@ -346,7 +363,7 @@ public abstract class Command {
}
player.sendMessage(
TranslatableCaption.of("commandconfig.did_you_mean"),
Template.of("value", cmd.getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(cmd.getUsage())))
);
return CompletableFuture.completedFuture(false);
}
@ -381,7 +398,7 @@ public abstract class Command {
// TODO improve or remove the Argument system
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", StringMan.join(fullSplit, " "))
TagResolver.resolver("value", Tag.inserting(Component.text(StringMan.join(fullSplit, " "))))
);
return false;
}
@ -470,7 +487,7 @@ public abstract class Command {
if (message) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", getPermission())
TagResolver.resolver("node", Tag.inserting(Component.text(getPermission())))
);
}
} else {
@ -495,7 +512,7 @@ public abstract class Command {
public void sendUsage(PlotPlayer<?> player) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
}
@ -599,13 +616,13 @@ public abstract class Command {
return this.getFullId().hashCode();
}
public void checkTrue(boolean mustBeTrue, Caption message, Template... args) {
public void checkTrue(boolean mustBeTrue, Caption message, TagResolver... args) {
if (!mustBeTrue) {
throw new CommandException(message, args);
}
}
public <T> T check(T object, Caption message, Template... args) {
public <T> T check(T object, Caption message, TagResolver... args) {
if (object == null) {
throw new CommandException(message, args);
}
@ -621,10 +638,10 @@ public abstract class Command {
public static class CommandException extends RuntimeException {
private final Template[] args;
private final Caption message;
private final TagResolver[] args;
public CommandException(final @Nullable Caption message, final Template... args) {
public CommandException(final @Nullable Caption message, final TagResolver... args) {
this.message = message;
this.args = args;
}

View File

@ -19,7 +19,7 @@
package com.plotsquared.core.command;
import com.plotsquared.core.configuration.caption.Caption;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
@ -34,7 +34,7 @@ public interface CommandCaller {
* @param caption Caption to send
* @param replacements Variable replacements
*/
void sendMessage(@NonNull Caption caption, @NonNull Template... replacements);
void sendMessage(@NonNull Caption caption, @NonNull TagResolver... replacements);
/**
* Check the player's permissions. <i>Will be cached if permission caching is enabled.</i>

View File

@ -22,6 +22,9 @@ 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.player.PlotPlayer;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
@ -90,6 +93,11 @@ public enum CommandCategory implements Caption {
return this.caption.getComponent(localeHolder);
}
@Override
public @NonNull Component toComponent(@NonNull final LocaleHolder localeHolder) {
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
}
/**
* Checks if a player has access to this command category
*

View File

@ -27,7 +27,9 @@ import com.plotsquared.core.plot.comment.CommentInbox;
import com.plotsquared.core.plot.comment.CommentManager;
import com.plotsquared.core.plot.comment.PlotComment;
import com.plotsquared.core.util.StringMan;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Arrays;
import java.util.Locale;
@ -44,8 +46,10 @@ public class Comment extends SubCommand {
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("comment.comment_syntax"),
Template.of("command", "/plot comment [X;Z]"),
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
TagResolver.builder()
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
.build()
);
return false;
}
@ -64,8 +68,10 @@ public class Comment extends SubCommand {
if (args.length < 3) {
player.sendMessage(
TranslatableCaption.of("comment.comment_syntax"),
Template.of("command", "/plot comment [X;Z]"),
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
TagResolver.builder()
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
.build()
);
return false;
}
@ -76,8 +82,10 @@ public class Comment extends SubCommand {
if (inbox == null) {
player.sendMessage(
TranslatableCaption.of("comment.comment_syntax"),
Template.of("command", "/plot comment [X;Z]"),
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
TagResolver.builder()
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
.build()
);
return false;
}
@ -97,8 +105,10 @@ public class Comment extends SubCommand {
player.sendMessage(TranslatableCaption.of("comment.no_plot_inbox"));
player.sendMessage(
TranslatableCaption.of("comment.comment_syntax"),
Template.of("command", "/plot comment [X;Z]"),
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
TagResolver.builder()
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
.build()
);
return false;
}

View File

@ -29,7 +29,9 @@ import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.util.task.TaskTime;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -68,7 +70,9 @@ public class Condense extends SubCommand {
if (args.length != 2 && args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot condense <area> <start | stop | info> [radius]")
TagResolver.resolver("value", Tag.inserting(Component.text(
"/plot condense <area> <start | stop | info> [radius]"
)))
);
return false;
}
@ -82,7 +86,10 @@ public class Condense extends SubCommand {
if (args.length == 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot condense" + area + " start <radius>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot condense" + area + " start " + "<radius>"))
)
);
return false;
}
@ -181,8 +188,10 @@ public class Condense extends SubCommand {
if (result.get()) {
player.sendMessage(
TranslatableCaption.of("condense.moving"),
Template.of("origin", String.valueOf(origin)),
Template.of("possible", String.valueOf(possible))
TagResolver.builder()
.tag("origin", Tag.inserting(Component.text(origin.toString())))
.tag("possible", Tag.inserting(Component.text(possible.toString())))
.build()
);
TaskManager.runTaskLater(task, TaskTime.ticks(1L));
}
@ -202,7 +211,7 @@ public class Condense extends SubCommand {
if (i >= free.size()) {
player.sendMessage(
TranslatableCaption.of("condense.skipping"),
Template.of("plot", String.valueOf(origin))
TagResolver.resolver("plot", Tag.inserting(Component.text(origin.toString())))
);
}
}
@ -223,7 +232,10 @@ public class Condense extends SubCommand {
if (args.length == 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot condense " + area + " info <radius>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot condense " + area + " info <radius>"))
)
);
return false;
}
@ -244,20 +256,20 @@ public class Condense extends SubCommand {
player.sendMessage(TranslatableCaption.of("condense.default_eval"));
player.sendMessage(
TranslatableCaption.of("condense.minimum_radius"),
Template.of("minimumRadius", String.valueOf(minimumRadius))
TagResolver.resolver("minimumRadius", Tag.inserting(Component.text(minimumRadius)))
);
player.sendMessage(
TranslatableCaption.of("condense.minimum_radius"),
Template.of("maxMove", String.valueOf(maxMove))
TranslatableCaption.of("condense.maximum_moved"),
TagResolver.resolver("maxMove", Tag.inserting(Component.text(maxMove)))
);
player.sendMessage(TranslatableCaption.of("condense.input_eval"));
player.sendMessage(
TranslatableCaption.of("condense.input_radius"),
Template.of("radius", String.valueOf(radius))
TagResolver.resolver("radius", Tag.inserting(Component.text(radius)))
);
player.sendMessage(
TranslatableCaption.of("condense.estimated_moves"),
Template.of("userMove", String.valueOf(userMove))
TagResolver.resolver("userMove", Tag.inserting(Component.text(userMove)))
);
player.sendMessage(TranslatableCaption.of("condense.eta"));
player.sendMessage(TranslatableCaption.of("condense.radius_measured"));
@ -266,7 +278,10 @@ public class Condense extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot condense " + area.getWorldName() + " <start | stop | info> [radius]")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot condense " + area.getWorldName() + " <start | stop | info> [radius]"))
)
);
return false;
}

View File

@ -30,7 +30,9 @@ import com.plotsquared.core.plot.flag.PlotFlag;
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@CommandDeclaration(command = "continue",
@ -57,7 +59,9 @@ public class Continue extends SubCommand {
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_CONTINUE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", TranslatableCaption.of("permission.no_plot_perms").getComponent(player))
TagResolver.resolver("node", Tag.inserting(
TranslatableCaption.of("permission.no_plot_perms").toComponent(player)
))
);
return false;
}
@ -70,7 +74,7 @@ public class Continue extends SubCommand {
< player.getPlotCount() + size)) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(player.getAllowedPlots()))
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
);
return false;
}
@ -84,7 +88,7 @@ public class Continue extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Done flag removal")
TagResolver.resolver("value", Tag.inserting(Component.text("Done flag removal")))
);
return true;
}

View File

@ -24,7 +24,9 @@ import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@CommandDeclaration(command = "copy",
permission = "plots.copy",
@ -50,7 +52,7 @@ public class Copy extends SubCommand {
if (args.length != 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot copy <X;Z>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot copy <X;Z>")))
);
return false;
}
@ -69,8 +71,11 @@ public class Copy extends SubCommand {
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
if (result) {
player.sendMessage(TranslatableCaption.of("move.copy_success"), Template.of("origin", String.valueOf(plot1)),
Template.of("target", String.valueOf(plot2))
player.sendMessage(TranslatableCaption.of("move.copy_success"),
TagResolver.builder()
.tag("origin", Tag.inserting(Component.text(plot1.toString())))
.tag("target", Tag.inserting(Component.text(plot2.toString())))
.build()
);
} else {
player.sendMessage(TranslatableCaption.of("move.requires_unowned"));

View File

@ -25,7 +25,9 @@ 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.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@CommandDeclaration(command = "createroadschematic",
@ -61,7 +63,7 @@ public class CreateRoadSchematic extends SubCommand {
this.hybridUtils.setupRoadSchematic(plot);
player.sendMessage(
TranslatableCaption.of("schematics.schematic_road_created"),
Template.of("command", "/plot debugroadregen")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot debugroadregen")))
);
return true;
}

View File

@ -40,7 +40,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.FileUtils;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.File;
@ -101,7 +103,10 @@ public class DatabaseCommand extends SubCommand {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot database [area] <sqlite | mysql | import>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot database [area] <sqlite | mysql | import>"))
)
);
return false;
}
@ -116,7 +121,7 @@ public class DatabaseCommand extends SubCommand {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot database [area] <sqlite|mysql|import>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot database [area] <sqlite|mysql|import>")))
);
player.sendMessage(TranslatableCaption.of("database.arg"));
return false;
@ -129,7 +134,10 @@ public class DatabaseCommand extends SubCommand {
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot database import <sqlite file> [prefix]")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot database import <sqlite file> [prefix]"))
)
);
return false;
}
@ -140,7 +148,7 @@ public class DatabaseCommand extends SubCommand {
if (!file.exists()) {
player.sendMessage(
TranslatableCaption.of("database.does_not_exist"),
Template.of("value", String.valueOf(file))
TagResolver.resolver("value", Tag.inserting(Component.text(file.toString())))
);
return false;
}
@ -176,7 +184,7 @@ public class DatabaseCommand extends SubCommand {
);
worldFile.renameTo(newFile);
}
plot.setId(newId);
plot.setId(newId.copy());
plot.setArea(pa);
plots.add(plot);
continue;
@ -184,8 +192,10 @@ public class DatabaseCommand extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("database.skipping_duplicated_plot"),
Template.of("plot", String.valueOf(plot)),
Template.of("id", String.valueOf(plot.temp))
TagResolver.builder()
.tag("plot", Tag.inserting(Component.text(plot.toString())))
.tag("id", Tag.inserting(Component.text(plot.temp)))
.build()
);
continue;
}

View File

@ -34,7 +34,10 @@ import com.plotsquared.core.uuid.UUIDMapping;
import com.sk89q.worldedit.world.entity.EntityType;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextColor;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -68,7 +71,10 @@ public class Debug extends SubCommand {
if (args.length == 0) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot debug <loadedchunks | player | debug-players | entitytypes | msg>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot debug <loadedchunks | player | debug-players | entitytypes | msg>"))
)
);
}
if (args.length > 0) {
@ -95,7 +101,7 @@ public class Debug extends SubCommand {
final Collection<UUIDMapping> mappings = PlotSquared.get().getImpromptuUUIDPipeline().getAllImmediately();
player.sendMessage(
TranslatableCaption.of("debug.cached_uuids"),
Template.of("value", String.valueOf(mappings.size()))
TagResolver.resolver("value", Tag.inserting(Component.text(mappings.size())))
);
return true;
}
@ -104,7 +110,7 @@ public class Debug extends SubCommand {
for (final PlotPlayer<?> pp : PlotPlayer.getDebugModePlayers()) {
player.sendMessage(
TranslatableCaption.of("debug.player_in_debugmode_list"),
Template.of("value", pp.getName())
TagResolver.resolver("value", Tag.inserting(Component.text(pp.getName())))
);
}
return true;
@ -114,10 +120,11 @@ public class Debug extends SubCommand {
player.sendMessage(TranslatableCaption.of("debug.entity_categories"));
EntityCategory.REGISTRY.forEach(category -> {
final StringBuilder builder =
new StringBuilder("§7- §6").append(category.getId()).append("§7: §6");
new StringBuilder("<gray>-</gray> <gold>").append(category.getId()).append("</gold><gray>: <gold>");
for (final EntityType entityType : category.getAll()) {
builder.append(entityType.getId()).append(" ");
}
builder.append("</gold>");
player.sendMessage(StaticCaption.of("<prefix>" + builder));
});
EntityType.REGISTRY.values().stream().sorted(Comparator.comparing(EntityType::getId))
@ -137,28 +144,53 @@ public class Debug extends SubCommand {
.getCaptionMap(TranslatableCaption.DEFAULT_NAMESPACE)
.getCaptions();
TextComponent.Builder information = Component.text();
Component header = MINI_MESSAGE.parse(TranslatableCaption.of("debug.debug_header").getComponent(player) + "\n");
Component header = TranslatableCaption.of("debug.debug_header").toComponent(player)
.append(Component.newline());
String line = TranslatableCaption.of("debug.debug_line").getComponent(player) + "\n";
String section = TranslatableCaption.of("debug.debug_section").getComponent(player) + "\n";
information.append(header);
information.append(MINI_MESSAGE.parse(section, Template.of("val", "PlotArea")));
information.append(MINI_MESSAGE.deserialize(
section,
TagResolver.resolver("val", Tag.inserting(Component.text("PlotArea")))
));
information.append(MINI_MESSAGE
.parse(
.deserialize(
line,
Template.of("var", "Plot Worlds"),
Template.of("val", StringMan.join(this.plotAreaManager.getAllPlotAreas(), ", "))
TagResolver.builder()
.tag("var", Tag.inserting(Component.text("Plot Worlds")))
.tag(
"val",
Tag.inserting(Component.text(StringMan.join(
this.plotAreaManager.getAllPlotAreas(),
", "
)))
)
.build()
));
information.append(
MINI_MESSAGE.parse(
MINI_MESSAGE.deserialize(
line,
Template.of("var", "Owned Plots"),
Template.of("val", String.valueOf(PlotQuery.newQuery().allPlots().count()))
TagResolver.builder()
.tag("var", Tag.inserting(Component.text("Owned Plots")))
.tag(
"val",
Tag.inserting(Component.text(PlotQuery.newQuery().allPlots().count()))
)
.build()
));
information.append(MINI_MESSAGE.parse(section, Template.of("val", "Messages")));
information.append(MINI_MESSAGE.parse(
information.append(MINI_MESSAGE.deserialize(
section,
TagResolver.resolver("val", Tag.inserting(Component.text("Messages")))
));
information.append(MINI_MESSAGE.deserialize(
line,
Template.of("var", "Total Messages"),
Template.of("val", String.valueOf(captions.size()))
TagResolver.builder()
.tag("var", Tag.inserting(Component.text("Total Messages")))
.tag(
"val",
Tag.inserting(Component.text(captions.size()))
)
.build()
));
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(information.build())));
return true;

View File

@ -19,7 +19,6 @@
package com.plotsquared.core.command;
import com.google.inject.Inject;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.caption.StaticCaption;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.events.PlotFlagRemoveEvent;
@ -37,12 +36,13 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.RunnableVal;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
@ -97,7 +97,7 @@ public class DebugExec extends SubCommand {
if (analysis != null) {
player.sendMessage(
TranslatableCaption.of("debugexec.changes_column"),
Template.of("value", String.valueOf(analysis.changes))
TagResolver.resolver("value", Tag.inserting(Component.text(analysis.changes)))
);
return true;
}
@ -107,7 +107,7 @@ public class DebugExec extends SubCommand {
public void run(PlotAnalysis value) {
player.sendMessage(
TranslatableCaption.of("debugexec.analyze_done"),
Template.of("command", "/plot debugexec analyze")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot debugexec analyze")))
);
}
});
@ -117,7 +117,10 @@ public class DebugExec extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot debugexec analyze <threshold>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot debugexec analyze <threshold>"))
)
);
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default"));
return false;
@ -128,7 +131,7 @@ public class DebugExec extends SubCommand {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("debugexec.invalid_threshold"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default_double"));
return false;
@ -140,7 +143,10 @@ public class DebugExec extends SubCommand {
return true;
}
case "start-expire" -> {
if (PlotSquared.platform().expireManager().runAutomatedTask()) {
if (ExpireManager.IMP == null) {
ExpireManager.IMP = new ExpireManager(this.eventDispatcher);
}
if (ExpireManager.IMP.runAutomatedTask()) {
player.sendMessage(TranslatableCaption.of("debugexec.expiry_started"));
} else {
player.sendMessage(TranslatableCaption.of("debugexec.expiry_already_started"));
@ -148,7 +154,7 @@ public class DebugExec extends SubCommand {
return true;
}
case "stop-expire" -> {
if (!PlotSquared.platform().expireManager().cancelTask()) {
if (ExpireManager.IMP == null || !ExpireManager.IMP.cancelTask()) {
player.sendMessage(TranslatableCaption.of("debugexec.task_halted"));
} else {
player.sendMessage(TranslatableCaption.of("debugexec.task_cancelled"));
@ -159,7 +165,7 @@ public class DebugExec extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot debugexec remove-flag <flag>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot debugexec remove-flag <flag>")))
);
return false;
}
@ -177,7 +183,7 @@ public class DebugExec extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("debugexec.cleared_flag"),
Template.of("value", flag)
TagResolver.resolver("value", Tag.inserting(Component.text(flag)))
);
return true;
}
@ -185,7 +191,10 @@ public class DebugExec extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Invalid syntax: /plot debugexec start-rgar <world>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Invalid syntax: /plot debugexec start-rgar <world>"))
)
);
return false;
}
@ -193,7 +202,7 @@ public class DebugExec extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}

View File

@ -31,7 +31,9 @@ import com.plotsquared.core.inject.annotations.WorldFile;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.util.PremiumVerification;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.File;
@ -131,8 +133,10 @@ public class DebugPaste extends SubCommand {
} catch (IOException ignored) {
player.sendMessage(
TranslatableCaption.of("debugpaste.latest_log"),
Template.of("file", "latest.log"),
Template.of("size", "14MB")
TagResolver.builder()
.tag("file", Tag.inserting(Component.text("latest.log")))
.tag("size", Tag.inserting(Component.text("14MB")))
.build()
);
}
@ -141,7 +145,7 @@ public class DebugPaste extends SubCommand {
} catch (final IllegalArgumentException ignored) {
player.sendMessage(
TranslatableCaption.of("debugpaste.empty_file"),
Template.of("file", "settings.yml")
TagResolver.resolver("file", Tag.inserting(Component.text("settings.yml")))
);
}
try {
@ -149,7 +153,7 @@ public class DebugPaste extends SubCommand {
} catch (final IllegalArgumentException ignored) {
player.sendMessage(
TranslatableCaption.of("debugpaste.empty_file"),
Template.of("file", "worlds.yml")
TagResolver.resolver("file", Tag.inserting(Component.text("worlds.yml")))
);
}
@ -162,7 +166,7 @@ public class DebugPaste extends SubCommand {
} catch (final IOException ignored) {
player.sendMessage(
TranslatableCaption.of("debugpaste.skip_multiverse"),
Template.of("file", "worlds.yml")
TagResolver.resolver("file", Tag.inserting(Component.text("worlds.yml")))
);
}
@ -177,20 +181,20 @@ public class DebugPaste extends SubCommand {
String.format("https://athion.net/ISPaster/paste/view/%s", pasteId);
player.sendMessage(
TranslatableCaption.of("debugpaste.debug_report_created"),
Template.of("url", link)
TagResolver.resolver("url", Tag.preProcessParsed(link))
);
} else {
final String responseMessage = jsonObject.get("response").getAsString();
player.sendMessage(
TranslatableCaption.of("debugpaste.creation_failed"),
Template.of("value", responseMessage)
TagResolver.resolver("value", Tag.inserting(Component.text(responseMessage)))
);
}
} catch (final Throwable throwable) {
throwable.printStackTrace();
player.sendMessage(
TranslatableCaption.of("debugpaste.creation_failed"),
Template.of("value", throwable.getMessage())
TagResolver.resolver("value", Tag.inserting(Component.text(throwable.getMessage())))
);
}
} catch (IOException e) {

View File

@ -28,7 +28,9 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotManager;
import com.plotsquared.core.queue.QueueCoordinator;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Arrays;
@ -60,7 +62,7 @@ public class DebugRoadRegen extends SubCommand {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", DebugRoadRegen.USAGE)
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
);
return false;
}
@ -80,7 +82,7 @@ public class DebugRoadRegen extends SubCommand {
default:
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", DebugRoadRegen.USAGE)
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
);
return false;
}
@ -103,11 +105,11 @@ public class DebugRoadRegen extends SubCommand {
queue.setCompleteTask(() -> {
player.sendMessage(
TranslatableCaption.of("debugroadregen.regen_done"),
Template.of("value", plot.getId().toString())
TagResolver.resolver("value", Tag.inserting(Component.text(plot.getId().toString())))
);
player.sendMessage(
TranslatableCaption.of("debugroadregen.regen_all"),
Template.of("value", "/plot regenallroads")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot regenallroads")))
);
});
manager.createRoadEast(plot, queue);
@ -126,18 +128,18 @@ public class DebugRoadRegen extends SubCommand {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Template.of("value", "0, 256")
TagResolver.resolver("value", Tag.inserting(Component.text("0, 256")))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", DebugRoadRegen.USAGE)
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
);
return false;
}
} else if (args.length != 0) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", DebugRoadRegen.USAGE)
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
);
return false;
}
@ -155,11 +157,11 @@ public class DebugRoadRegen extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("debugroadregen.schematic"),
Template.of("command", "/plot createroadschematic")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot createroadschematic")))
);
player.sendMessage(
TranslatableCaption.of("debugroadregen.regenallroads"),
Template.of("command", "/plot regenallroads")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot regenallroads")))
);
boolean result = this.hybridUtils.scheduleSingleRegionRoadUpdate(plot, height);
if (!result) {

View File

@ -33,7 +33,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@ -78,7 +80,7 @@ public class Delete extends SubCommand {
if (eventResult == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Delete")
TagResolver.resolver("value", Tag.inserting(Component.text("Delete")))
);
return true;
}
@ -114,14 +116,17 @@ public class Delete extends SubCommand {
this.econHandler.depositMoney(player, value);
player.sendMessage(
TranslatableCaption.of("economy.added_balance"),
Template.of("money", this.econHandler.format(value))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(value))))
);
}
}
player.sendMessage(
TranslatableCaption.of("working.deleting_done"),
Template.of("amount", String.valueOf(System.currentTimeMillis() - start)),
Template.of("plot", plot.getId().toString())
TagResolver.resolver(
"amount",
Tag.inserting(Component.text(String.valueOf(System.currentTimeMillis() - start)))
),
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
eventDispatcher.callPostDelete(plot);
});

View File

@ -35,7 +35,9 @@ import com.plotsquared.core.util.PlayerManager;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import com.sk89q.worldedit.world.gamemode.GameModes;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -90,7 +92,7 @@ public class Deny extends SubCommand {
if (size >= maxDenySize) {
player.sendMessage(
TranslatableCaption.of("members.plot_max_members_denied"),
Template.of("amount", String.valueOf(size))
TagResolver.resolver("amount", Tag.inserting(Component.text(size)))
);
return false;
}
@ -101,7 +103,7 @@ public class Deny extends SubCommand {
} else if (throwable != null || uuids.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
} else {
for (UUID uuid : uuids) {
@ -110,7 +112,7 @@ public class Deny extends SubCommand {
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DENY))) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
} else if (plot.isOwner(uuid)) {
player.sendMessage(TranslatableCaption.of("deny.cant_remove_owner"));
@ -118,7 +120,10 @@ public class Deny extends SubCommand {
} else if (plot.getDenied().contains(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver(
"player",
Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player))
)
);
return;
} else {

View File

@ -27,7 +27,9 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.flag.implementations.DescriptionFlag;
import com.plotsquared.core.util.EventDispatcher;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@CommandDeclaration(command = "setdescription",
@ -54,7 +56,7 @@ public class Desc extends SetCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Description removal")
TagResolver.resolver("value", Tag.inserting(Component.text("Description removal")))
);
return false;
}
@ -69,7 +71,7 @@ public class Desc extends SetCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Description set")
TagResolver.resolver("value", Tag.inserting(Component.text("Description set")))
);
return false;
}

View File

@ -19,7 +19,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.PlotDoneEvent;
@ -30,13 +29,16 @@ import com.plotsquared.core.location.Location;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.expiration.ExpireManager;
import com.plotsquared.core.plot.expiration.PlotAnalysis;
import com.plotsquared.core.plot.flag.PlotFlag;
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.task.RunnableVal;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@CommandDeclaration(command = "done",
@ -70,7 +72,7 @@ public class Done extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Done")
TagResolver.resolver("value", Tag.inserting(Component.text("Done")))
);
return true;
}
@ -91,10 +93,10 @@ public class Done extends SubCommand {
plot.addRunning();
player.sendMessage(
TranslatableCaption.of("web.generating_link"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done");
if (PlotSquared.platform().expireManager() == null || doneRequirements == null) {
if (ExpireManager.IMP == null || doneRequirements == null) {
finish(plot, player, true);
plot.removeRunning();
} else {

View File

@ -34,7 +34,9 @@ import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.task.RunnableVal;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.URL;
@ -114,7 +116,10 @@ public class Download extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_DOWNLOAD_WORLD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_DOWNLOAD_WORLD.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_DOWNLOAD_WORLD)
)
);
return false;
}
@ -128,18 +133,24 @@ public class Download extends SubCommand {
if (url == null) {
player.sendMessage(
TranslatableCaption.of("web.generating_link_failed"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return;
}
player.sendMessage(TranslatableCaption.of("web.generation_link_success_legacy_world"), Template.of("url", url.toString()));
player.sendMessage(
TranslatableCaption.of("web.generation_link_success_legacy_world"),
TagResolver.resolver("url", Tag.inserting(Component.text(url.toString())))
);
}
});
} else {
sendUsage(player);
return false;
}
player.sendMessage(TranslatableCaption.of("web.generating_link"), Template.of("plot", plot.getId().toString()));
player.sendMessage(
TranslatableCaption.of("web.generating_link"),
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return true;
}
@ -181,11 +192,12 @@ public class Download extends SubCommand {
schematicHandler.upload(compoundTag, null, null, new RunnableVal<>() {
@Override
public void run(URL value) {
plot.removeRunning();
player.sendMessage(
TranslatableCaption.of("web.generation_link_success"),
Template.of("download", value.toString()),
Template.of("delete", "Not available")
TagResolver.builder()
.tag("download", Tag.preProcessParsed(value.toString()))
.tag("delete", Tag.preProcessParsed("Not available"))
.build()
);
player.sendMessage(StaticCaption.of(value.toString()));
}
@ -199,13 +211,15 @@ public class Download extends SubCommand {
if (throwable != null || !result.isSuccess()) {
player.sendMessage(
TranslatableCaption.of("web.generating_link_failed"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("web.generation_link_success"),
Template.of("download", result.getDownloadUrl()),
Template.of("delete", result.getDeletionUrl())
TagResolver.builder()
.tag("download", Tag.preProcessParsed(result.getDownloadUrl()))
.tag("delete", Tag.preProcessParsed(result.getDeletionUrl()))
.build()
);
}
});

View File

@ -23,7 +23,6 @@ import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.CaptionUtility;
import com.plotsquared.core.configuration.caption.StaticCaption;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.events.PlotFlagAddEvent;
import com.plotsquared.core.events.PlotFlagRemoveEvent;
@ -48,7 +47,9 @@ import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.format.Style;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -85,7 +86,10 @@ public final class FlagCommand extends Command {
private static boolean sendMessage(PlotPlayer<?> player) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag <set | remove | add | list | info> <flag> <value>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot flag <set | remove | add | list | info> <flag> <value>"))
)
);
return true;
}
@ -111,9 +115,9 @@ public final class FlagCommand extends Command {
if (!result) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of(
TagResolver.resolver(
"node",
perm + "." + numeric
Tag.inserting(Component.text(perm + "." + numeric))
)
);
}
@ -130,16 +134,21 @@ public final class FlagCommand extends Command {
);
final boolean result = Permissions.hasPermission(player, permission);
if (!result) {
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", permission));
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
TagResolver.resolver("node", Tag.inserting(Component.text(permission)))
);
return false;
}
}
} catch (final FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", flag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", e.getErrorMessage().getComponent(player))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(flag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return false;
} catch (final Exception e) {
@ -156,7 +165,10 @@ public final class FlagCommand extends Command {
perm = basePerm;
}
if (!result) {
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", perm));
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
TagResolver.resolver("node", Tag.inserting(Component.text(perm)))
);
}
return result;
}
@ -181,7 +193,7 @@ public final class FlagCommand extends Command {
.hasPermission(player, Permission.PERMISSION_SET_FLAG_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SET_FLAG_OTHER))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_SET_FLAG_OTHER))
);
return false;
}
@ -216,7 +228,7 @@ public final class FlagCommand extends Command {
if (best != null) {
player.sendMessage(
TranslatableCaption.of("flag.not_valid_flag_suggested"),
Template.of("value", best)
TagResolver.resolver("value", Tag.inserting(Component.text(best)))
);
suggested = true;
}
@ -325,7 +337,7 @@ public final class FlagCommand extends Command {
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag set <flag> <value>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag set <flag> <value>")))
);
return;
}
@ -338,7 +350,7 @@ public final class FlagCommand extends Command {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Flag set")
TagResolver.resolver("value", Tag.inserting(Component.text("Flag set")))
);
return;
}
@ -354,15 +366,21 @@ public final class FlagCommand extends Command {
} catch (final FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", plotFlag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", e.getErrorMessage().getComponent(player))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(plotFlag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return;
}
plot.setFlag(parsed);
player.sendMessage(TranslatableCaption.of("flag.flag_added"), Template.of("flag", String.valueOf(args[0])),
Template.of("value", String.valueOf(parsed))
player.sendMessage(
TranslatableCaption.of("flag.flag_added"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(parsed.toString())))
.build()
);
}
@ -384,7 +402,7 @@ public final class FlagCommand extends Command {
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag add <flag> <values>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag add <flag> <values>")))
);
return;
}
@ -397,7 +415,7 @@ public final class FlagCommand extends Command {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Flag add")
TagResolver.resolver("value", Tag.inserting(Component.text("Flag add")))
);
return;
}
@ -418,9 +436,11 @@ public final class FlagCommand extends Command {
} catch (FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", plotFlag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", e.getErrorMessage().getComponent(player))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(plotFlag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return;
}
@ -430,8 +450,12 @@ public final class FlagCommand extends Command {
player.sendMessage(TranslatableCaption.of("flag.flag_not_added"));
return;
}
player.sendMessage(TranslatableCaption.of("flag.flag_added"), Template.of("flag", String.valueOf(args[0])),
Template.of("value", String.valueOf(parsed))
player.sendMessage(
TranslatableCaption.of("flag.flag_added"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(parsed.toString())))
.build()
);
}
@ -453,7 +477,7 @@ public final class FlagCommand extends Command {
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag remove <flag> [values]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag remove <flag> [values]")))
);
return;
}
@ -462,12 +486,11 @@ public final class FlagCommand extends Command {
return;
}
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) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Flag remove")
TagResolver.resolver("value", Tag.inserting(Component.text("Flag remove")))
);
return;
}
@ -477,7 +500,10 @@ public final class FlagCommand extends Command {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase()))
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase())))
)
);
return;
}
@ -492,9 +518,11 @@ public final class FlagCommand extends Command {
} catch (final FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", flag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", String.valueOf(e.getErrorMessage()))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(flag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return;
}
@ -505,10 +533,13 @@ public final class FlagCommand extends Command {
if (list.removeAll((List) parsedFlag.getValue())) {
if (list.isEmpty()) {
if (plot.removeFlag(flag)) {
player.sendMessage(TranslatableCaption.of("flag.flag_removed"), Template.of("flag", args[0]), Template.of(
"value",
String.valueOf(flagWithOldValue)
));
player.sendMessage(
TranslatableCaption.of("flag.flag_removed"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(flag.toString())))
.build()
);
return;
} else {
player.sendMessage(TranslatableCaption.of("flag.flag_not_removed"));
@ -520,7 +551,10 @@ public final class FlagCommand extends Command {
if (addEvent.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Re-addition of " + plotFlag.getName())
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Re-addition of " + plotFlag.getName()))
)
);
return;
}
@ -543,10 +577,13 @@ public final class FlagCommand extends Command {
return;
}
}
player.sendMessage(TranslatableCaption.of("flag.flag_removed"), Template.of("flag", args[0]), Template.of(
"value",
String.valueOf(flagWithOldValue)
));
player.sendMessage(
TranslatableCaption.of("flag.flag_removed"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(flag.toString())))
.build()
);
}
@CommandDeclaration(command = "list",
@ -564,34 +601,35 @@ public final class FlagCommand extends Command {
return;
}
final Map<String, ArrayList<String>> flags = new HashMap<>();
final Map<Component, ArrayList<String>> flags = new HashMap<>();
for (PlotFlag<?, ?> plotFlag : GlobalFlagContainer.getInstance().getRecognizedPlotFlags()) {
if (plotFlag instanceof InternalFlag) {
continue;
}
final String category = MINI_MESSAGE.stripTokens(plotFlag.getFlagCategory().getComponent(player));
final Collection<String> flagList =
flags.computeIfAbsent(category, k -> new ArrayList<>());
final Component category = plotFlag.getFlagCategory().toComponent(player);
final Collection<String> flagList = flags.computeIfAbsent(category, k -> new ArrayList<>());
flagList.add(plotFlag.getName());
}
for (final Map.Entry<String, ArrayList<String>> entry : flags.entrySet()) {
for (final Map.Entry<Component, ArrayList<String>> entry : flags.entrySet()) {
Collections.sort(entry.getValue());
Component category =
MINI_MESSAGE.parse(
MINI_MESSAGE.deserialize(
TranslatableCaption.of("flag.flag_list_categories").getComponent(player),
Template.of("category", entry.getKey())
TagResolver.resolver("category", Tag.inserting(entry.getKey().style(Style.empty())))
);
TextComponent.Builder builder = Component.text().append(category);
final Iterator<String> flagIterator = entry.getValue().iterator();
while (flagIterator.hasNext()) {
final String flag = flagIterator.next();
builder.append(MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("flag.flag_list_flag").getComponent(player),
Template.of("command", "/plot flag info " + flag),
Template.of("flag", flag),
Template.of("suffix", flagIterator.hasNext() ? ", " : "")
TagResolver.builder()
.tag("command", Tag.preProcessParsed("/plot flag info " + flag))
.tag("flag", Tag.inserting(Component.text(flag)))
.tag("suffix", Tag.inserting(Component.text(flagIterator.hasNext() ? ", " : "")))
.build()
));
}
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.build())));
@ -615,7 +653,7 @@ public final class FlagCommand extends Command {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag info <flag>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag info <flag>")))
);
return;
}
@ -623,11 +661,17 @@ public final class FlagCommand extends Command {
if (plotFlag != null) {
player.sendMessage(TranslatableCaption.of("flag.flag_info_header"));
// Flag name
player.sendMessage(TranslatableCaption.of("flag.flag_info_name"), Template.of("flag", plotFlag.getName()));
player.sendMessage(
TranslatableCaption.of("flag.flag_info_name"),
TagResolver.resolver("flag", Tag.inserting(Component.text(plotFlag.getName())))
);
// Flag category
player.sendMessage(
TranslatableCaption.of("flag.flag_info_category"),
Templates.of(player, "value", plotFlag.getFlagCategory())
TagResolver.resolver(
"value",
Tag.inserting(plotFlag.getFlagCategory().toComponent(player))
)
);
// Flag description
// TODO maybe merge and \n instead?
@ -636,16 +680,18 @@ public final class FlagCommand extends Command {
// Flag example
player.sendMessage(
TranslatableCaption.of("flag.flag_info_example"),
Template.of("command", "/plot flag set"),
Template.of("flag", plotFlag.getName()),
Template.of("value", plotFlag.getExample())
TagResolver.builder()
.tag("command", Tag.preProcessParsed("/plot flag set"))
.tag("flag", Tag.inserting(Component.text(plotFlag.getName())))
.tag("value", Tag.inserting(Component.text(plotFlag.getExample())))
.build()
);
// Default value
final String defaultValue = player.getLocation().getPlotArea().getFlagContainer()
.getFlagErased(plotFlag.getClass()).toString();
player.sendMessage(
TranslatableCaption.of("flag.flag_info_default_value"),
Template.of("value", defaultValue)
TagResolver.resolver("value", Tag.inserting(Component.text(defaultValue)))
);
// Footer. Done this way to prevent the duplicate-message-thingy from catching it
player.sendMessage(TranslatableCaption.of("flag.flag_info_footer"));

View File

@ -32,14 +32,16 @@ import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import com.plotsquared.core.uuid.UUIDMapping;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
@ -64,7 +66,7 @@ public class Grant extends Command {
checkTrue(
args.length >= 1 && args.length <= 2,
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot grant <check | add> [player]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot grant <check | add> [player]")))
);
final String arg0 = args[0].toLowerCase();
switch (arg0) {
@ -72,7 +74,7 @@ public class Grant extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_GRANT.format(arg0))) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_GRANT.format(arg0))
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_GRANT.format(arg0))))
);
return CompletableFuture.completedFuture(false);
}
@ -85,25 +87,25 @@ public class Grant extends Command {
} else if (throwable != null || uuids.size() != 1) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", String.valueOf(uuids))
TagResolver.resolver("value", Tag.inserting(Component.text(String.valueOf(uuids))))
);
} else {
final UUID uuid = uuids.iterator().next();
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuid);
final UUIDMapping uuid = uuids.toArray(new UUIDMapping[0])[0];
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuid.getUuid());
if (pp != null) {
try (final MetaDataAccess<Integer> access = pp.accessPersistentMetaData(
PlayerMetaDataKeys.PERSISTENT_GRANTED_PLOTS)) {
if (args[0].equalsIgnoreCase("check")) {
player.sendMessage(
TranslatableCaption.of("grants.granted_plots"),
Template.of("amount", String.valueOf(access.get().orElse(0)))
TagResolver.resolver("amount", Tag.inserting(Component.text(access.get().orElse(0))))
);
} else {
access.set(access.get().orElse(0) + 1);
}
}
} else {
DBFunc.getPersistentMeta(uuid, new RunnableVal<>() {
DBFunc.getPersistentMeta(uuid.getUuid(), new RunnableVal<>() {
@Override
public void run(Map<String, byte[]> value) {
final byte[] array = value.get("grantedPlots");
@ -116,7 +118,7 @@ public class Grant extends Command {
}
player.sendMessage(
TranslatableCaption.of("grants.granted_plots"),
Template.of("amount", String.valueOf(granted))
TagResolver.resolver("amount", Tag.inserting(Component.text(granted)))
);
} else { // add
int amount;
@ -128,10 +130,10 @@ public class Grant extends Command {
boolean replace = array != null;
String key = "grantedPlots";
byte[] rawData = Ints.toByteArray(amount);
DBFunc.addPersistentMeta(uuid, key, rawData, replace);
DBFunc.addPersistentMeta(uuid.getUuid(), key, rawData, replace);
player.sendMessage(
TranslatableCaption.of("grants.added"),
Template.of("grants", String.valueOf(amount))
TagResolver.resolver("grants", Tag.inserting(Component.text(amount)))
);
}
}

View File

@ -28,7 +28,8 @@ import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.ArrayList;
import java.util.Collection;
@ -110,27 +111,31 @@ public class Help extends Command {
}
if (cat == null && page == 0) {
TextComponent.Builder builder = Component.text();
builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("help.help_header").getComponent(player)));
builder.append(MINI_MESSAGE.deserialize(TranslatableCaption.of("help.help_header").getComponent(player)));
for (CommandCategory c : CommandCategory.values()) {
if (!c.canAccess(player)) {
continue;
}
builder.append(Component.newline()).append(MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("help.help_info_item").getComponent(player),
Template.of("command", "/plot help"),
Template.of("category", c.name().toLowerCase()),
Template.of("category_desc", c.getComponent(player))
TagResolver.builder()
.tag("command", Tag.inserting(Component.text("/plot help")))
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
.tag("category_desc", Tag.inserting(c.toComponent(player)))
.build()
));
}
builder.append(Component.newline()).append(MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("help.help_info_item").getComponent(player),
Template.of("command", "/plot help"),
Template.of("category", "all"),
Template.of("category_desc", "Display all commands")
TagResolver.builder()
.tag("command", Tag.inserting(Component.text("/plot help")))
.tag("category", Tag.inserting(Component.text("all")))
.tag("category_desc", Tag.inserting(Component.text("Display all commands")))
.build()
));
builder.append(Component.newline()).append(MINI_MESSAGE.parse(TranslatableCaption
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
.of("help.help_footer")
.getComponent(player)));
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.asComponent())));

View File

@ -35,7 +35,9 @@ import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.query.SortingStrategy;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -72,8 +74,10 @@ public class HomeCommand extends Command {
} else if (plots.size() < page || page < 1) {
player.sendMessage(
TranslatableCaption.of("invalid.number_not_in_range"),
Template.of("min", "1"),
Template.of("max", String.valueOf(plots.size()))
TagResolver.builder()
.tag("min", Tag.inserting(Component.text(1)))
.tag("max", Tag.inserting(Component.text(plots.size())))
.build()
);
return;
}
@ -108,7 +112,7 @@ public class HomeCommand extends Command {
.hasPermission(player, Permission.PERMISSION_HOME)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_VISIT_OWNED.toString())
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_VISIT_OWNED.toString())))
);
return CompletableFuture.completedFuture(false);
}
@ -130,7 +134,7 @@ public class HomeCommand extends Command {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("invalid.not_a_number"),
Template.of("value", identifier)
TagResolver.resolver("value", Tag.inserting(Component.text(identifier)))
);
return CompletableFuture.completedFuture(false);
}
@ -171,7 +175,7 @@ public class HomeCommand extends Command {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("invalid.not_a_number"),
Template.of("value", identifier)
TagResolver.resolver("value", Tag.inserting(Component.text(identifier)))
);
return CompletableFuture.completedFuture(false);
}

View File

@ -20,7 +20,6 @@ package com.plotsquared.core.command;
import com.google.inject.TypeLiteral;
import com.plotsquared.core.configuration.caption.StaticCaption;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.MetaDataAccess;
@ -36,7 +35,8 @@ import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Collection;
import java.util.Collections;
@ -72,9 +72,14 @@ public class Inbox extends SubCommand {
max = comments.length;
}
TextComponent.Builder builder = Component.text();
builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("list.comment_list_header_paged").getComponent(player) + '\n',
Template.of("amount", String.valueOf(comments.length)), Template.of("cur", String.valueOf(page + 1)),
Template.of("max", String.valueOf(totalPages + 1)), Template.of("word", "all")
builder.append(MINI_MESSAGE.deserialize(
TranslatableCaption.of("list.comment_list_header_paged").getComponent(player) + '\n',
TagResolver.builder()
.tag("amount", Tag.inserting(Component.text(comments.length)))
.tag("cur", Tag.inserting(Component.text(page + 1)))
.tag("max", Tag.inserting(Component.text(totalPages + 1)))
.tag("word", Tag.inserting(Component.text("all")))
.build()
));
// This might work xD
@ -83,30 +88,28 @@ public class Inbox extends SubCommand {
Component commentColored;
if (player.getName().equals(comment.senderName)) {
commentColored = MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("list.comment_list_by_lister").getComponent(player),
Template.of("comment", comment.comment)
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment)))
);
} else {
commentColored = MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("list.comment_list_by_other").getComponent(player),
Template.of("comment", comment.comment)
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment)))
);
}
Template number = Template.of("number", String.valueOf(x));
Template world = Template.of("world", comment.world);
Template plot_id = Template.of("plot_id", comment.id.getX() + ";" + comment.id.getY());
Template commenter = Template.of("commenter", comment.senderName);
Template commentTemplate = Template.of("comment", commentColored);
TagResolver resolver = TagResolver.builder()
.tag("number", Tag.inserting(Component.text(x)))
.tag("world", Tag.inserting(Component.text(comment.world)))
.tag("plot_id", Tag.inserting(Component.text(comment.id.getX() + ";" + comment.id.getY())))
.tag("commenter", Tag.inserting(Component.text(comment.senderName)))
.tag("comment", Tag.inserting(commentColored))
.build();
builder.append(MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("list.comment_list_comment").getComponent(player),
number,
world,
plot_id,
commenter,
commentTemplate
resolver
));
}
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.build())));
@ -143,20 +146,23 @@ public class Inbox extends SubCommand {
if (total != 0) {
player.sendMessage(
TranslatableCaption.of("comment.inbox_item"),
Template.of("value", inbox + " (" + total + '/' + unread + ')')
TagResolver.resolver(
"value",
Tag.inserting(Component.text(inbox + " (" + total + '/' + unread + ')'))
)
);
return;
}
}
player.sendMessage(
TranslatableCaption.of("comment.inbox_item"),
Template.of("value", inbox.toString())
TagResolver.resolver("value", Tag.inserting(Component.text(inbox.toString())))
);
}
})) {
player.sendMessage(
TranslatableCaption.of("comment.inbox_item"),
Template.of("value", inbox.toString())
TagResolver.resolver("value", Tag.inserting(Component.text(inbox.toString())))
);
}
}
@ -167,7 +173,10 @@ public class Inbox extends SubCommand {
if (inbox == null) {
player.sendMessage(
TranslatableCaption.of("comment.invalid_inbox"),
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), ", "))
TagResolver.resolver(
"list",
Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), ", ")))
)
);
return false;
}
@ -190,7 +199,10 @@ public class Inbox extends SubCommand {
if (args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot inbox " + inbox + " delete <index>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot inbox " + inbox + " delete <index>"))
)
);
return true;
}
@ -200,14 +212,17 @@ public class Inbox extends SubCommand {
if (index < 1) {
player.sendMessage(
TranslatableCaption.of("comment.not_valid_inbox_index"),
Templates.of("number", index)
TagResolver.resolver("number", Tag.inserting(Component.text(index)))
);
return false;
}
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot inbox " + inbox + " delete <index>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot inbox " + inbox + " delete <index>"))
)
);
return false;
}
@ -218,7 +233,7 @@ public class Inbox extends SubCommand {
if (index > value.size()) {
player.sendMessage(
TranslatableCaption.of("comment.not_valid_inbox_index"),
Templates.of("number", index)
TagResolver.resolver("number", Tag.inserting(Component.text(index)))
);
return;
}
@ -228,7 +243,7 @@ public class Inbox extends SubCommand {
if (success) {
player.sendMessage(
TranslatableCaption.of("comment.comment_removed_success"),
Template.of("value", comment.comment)
TagResolver.resolver("value", Tag.inserting(Component.text(comment.comment)))
);
} else {
player.sendMessage(
@ -249,7 +264,7 @@ public class Inbox extends SubCommand {
if (!comments.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("comment.comment_removed_success"),
Template.of("value", String.valueOf(comments))
TagResolver.resolver("value", Tag.inserting(Component.text("*")))
);
plot.getPlotCommentContainer().removeComments(comments);
}

View File

@ -29,7 +29,9 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.flag.implementations.HideInfoFlag;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Collection;
import java.util.Collections;
@ -91,7 +93,10 @@ public class Info extends SubCommand {
.hasPermission(Permission.PERMISSION_AREA_INFO_FORCE.toString())) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_AREA_INFO_FORCE.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_INFO_FORCE)
)
);
return true;
}
@ -113,7 +118,10 @@ public class Info extends SubCommand {
if (!hasOwner && !containsEveryone && !trustedEveryone) {
player.sendMessage(
TranslatableCaption.of("info.plot_info_unclaimed"),
Template.of("plot", plot.getId().getX() + ";" + plot.getId().getY())
TagResolver.resolver(
"plot",
Tag.inserting(Component.text(plot.getId().getX() + ";" + plot.getId().getY()))
)
);
return true;
}

View File

@ -31,7 +31,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlayerManager;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -82,7 +84,7 @@ public class Kick extends SubCommand {
} else if (throwable != null || uuids.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
} else {
Set<PlotPlayer<?>> players = new HashSet<>();
@ -106,7 +108,7 @@ public class Kick extends SubCommand {
if (players.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
return;
}
@ -114,14 +116,14 @@ public class Kick extends SubCommand {
if (!plot.equals(player2.getCurrentPlot())) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
return;
}
if (Permissions.hasPermission(player2, Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
player.sendMessage(
TranslatableCaption.of("cluster.cannot_kick_player"),
Template.of("name", player2.getName())
TagResolver.resolver("name", Tag.inserting(Component.text(player2.getName())))
);
return;
}

View File

@ -25,7 +25,9 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.UUID;
@ -67,7 +69,7 @@ public class Leave extends Command {
}
player.sendMessage(
TranslatableCaption.of("member.plot_left"),
Template.of("player", player.getName())
TagResolver.resolver("player", Tag.inserting(Component.text(player.getName())))
);
} else {
player.sendMessage(

View File

@ -34,7 +34,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -153,7 +155,7 @@ public class Like extends SubCommand {
if (oldRating != null) {
player.sendMessage(
TranslatableCaption.of("ratings.rating_already_exists"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return;
}
@ -171,12 +173,12 @@ public class Like extends SubCommand {
if (like) {
player.sendMessage(
TranslatableCaption.of("ratings.rating_liked"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("ratings.rating_disliked"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
}
}

View File

@ -23,13 +23,13 @@ import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.Caption;
import com.plotsquared.core.configuration.caption.CaptionHolder;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.expiration.ExpireManager;
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.plot.flag.implementations.PriceFlag;
import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag;
@ -47,7 +47,8 @@ import com.plotsquared.core.util.task.RunnableVal3;
import com.plotsquared.core.uuid.UUIDMapping;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -124,7 +125,7 @@ public class ListCmd extends SubCommand {
public void noArgs(PlotPlayer<?> player) {
player.sendMessage(
TranslatableCaption.of("commandconfig.subcommand_set_options_header"),
Templates.of("values", Arrays.toString(getArgumentList(player)))
TagResolver.resolver("values", Tag.inserting(Component.text(Arrays.toString(getArgumentList(player)))))
);
}
@ -160,9 +161,14 @@ public class ListCmd extends SubCommand {
if (query == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.did_you_mean"),
Template.of(
TagResolver.resolver(
"value",
new StringComparison<>(args[0], new String[]{"mine", "shared", "world", "all"}).getBestMatch()
Tag.inserting(Component.text(
new StringComparison<>(
args[0],
new String[]{"mine", "shared", "world", "all"}
).getBestMatch()
))
)
);
return;
@ -190,7 +196,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_MINE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.mine")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.mine")))
);
return false;
}
@ -205,7 +211,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_SHARED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.shared")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.shared")))
);
return false;
}
@ -218,14 +224,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
);
return false;
}
if (!Permissions.hasPermission(player, "plots.list.world." + world)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world." + world)
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
);
return false;
}
@ -235,11 +241,11 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_EXPIRED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.expired")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.expired")))
);
return false;
}
if (PlotSquared.platform().expireManager() == null) {
if (ExpireManager.IMP == null) {
plotConsumer.accept(PlotQuery.newQuery().noPlots());
} else {
plotConsumer.accept(PlotQuery.newQuery().expiredPlots());
@ -249,14 +255,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_AREA)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.area")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.area")))
);
return false;
}
if (!Permissions.hasPermission(player, "plots.list.world." + world)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world." + world)
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
);
return false;
}
@ -270,7 +276,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_ALL)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.all")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.all")))
);
return false;
}
@ -280,7 +286,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_DONE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.done")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.done")))
);
return false;
}
@ -295,7 +301,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_TOP)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.top")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.top")))
);
return false;
}
@ -306,7 +312,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_FOR_SALE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.forsale")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.forsale")))
);
return false;
}
@ -319,7 +325,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_UNOWNED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.unowned")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.unowned")))
);
return false;
}
@ -329,14 +335,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_FUZZY)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.fuzzy")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.fuzzy")))
);
return false;
}
if (args.length < (page == -1 ? 2 : 3)) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot list fuzzy <search...> [#]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot list fuzzy <search...> [#]")))
);
return false;
}
@ -354,14 +360,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
);
return false;
}
if (!Permissions.hasPermission(player, "plots.list.world." + args[0])) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world." + args[0])
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + args[0])))
);
return false;
}
@ -380,12 +386,15 @@ public class ListCmd extends SubCommand {
}
}
if (uuid == null) {
player.sendMessage(TranslatableCaption.of("errors.invalid_player"), Templates.of("value", args[0]));
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
} else {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_PLAYER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.player")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.player")))
);
} else {
sort[0] = false;
@ -421,32 +430,34 @@ public class ListCmd extends SubCommand {
} else {
color = TranslatableCaption.of("info.plot_list_default");
}
Component trusted = MINI_MESSAGE.parse(
Component trusted = MINI_MESSAGE.deserialize(
TranslatableCaption.of("info.plot_info_trusted").getComponent(player),
Template.of("trusted", PlayerManager.getPlayerList(plot.getTrusted(), player))
TagResolver.resolver("trusted", Tag.inserting(PlayerManager.getPlayerList(plot.getTrusted(), player)))
);
Component members = MINI_MESSAGE.parse(
Component members = MINI_MESSAGE.deserialize(
TranslatableCaption.of("info.plot_info_members").getComponent(player),
Template.of("members", PlayerManager.getPlayerList(plot.getMembers(), player))
TagResolver.resolver("members", Tag.inserting(PlayerManager.getPlayerList(plot.getMembers(), player)))
);
Template command_tp = Template.of("command_tp", "/plot visit " + plot.getArea() + ";" + plot.getId());
Template command_info = Template.of("command_info", "/plot info " + plot.getArea() + ";" + plot.getId());
Template hover_info =
Template.of(
"hover_info",
MINI_MESSAGE.serialize(Component
.text()
.append(trusted)
.append(Component.newline())
.append(members)
.asComponent())
);
Template numberTemplate = Template.of("number", String.valueOf(i));
Template plotTemplate = Template.of(
"plot",
MINI_MESSAGE.parse(color.getComponent(player), Template.of("plot", plot.toString()))
TagResolver.Builder finalResolver = TagResolver.builder();
finalResolver.tag(
"command_tp",
Tag.preProcessParsed("/plot visit " + plot.getArea() + ";" + plot.getId())
);
finalResolver.tag(
"command_info",
Tag.preProcessParsed("/plot info " + plot.getArea() + ";" + plot.getId())
);
finalResolver.tag("hover_info", Tag.inserting(
Component.text()
.append(trusted)
.append(Component.newline())
.append(members)
.asComponent()
));
finalResolver.tag("number", Tag.inserting(Component.text(i)));
finalResolver.tag("plot", Tag.inserting(MINI_MESSAGE.deserialize(
color.getComponent(player), TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
)));
String prefix = "";
String online = TranslatableCaption.of("info.plot_list_player_online").getComponent(player);
String offline = TranslatableCaption.of("info.plot_list_player_offline").getComponent(player);
@ -455,35 +466,37 @@ public class ListCmd extends SubCommand {
String everyone = TranslatableCaption.of("info.plot_list_player_everyone").getComponent(player);
TextComponent.Builder builder = Component.text();
if (plot.getFlag(ServerPlotFlag.class)) {
Template serverTemplate = Template.of(
TagResolver serverResolver = TagResolver.resolver(
"info.server",
TranslatableCaption.of("info.server").getComponent(player)
Tag.inserting(TranslatableCaption.of("info.server").toComponent(player))
);
builder.append(MINI_MESSAGE.parse(server, serverTemplate));
builder.append(MINI_MESSAGE.deserialize(server, serverResolver));
} else {
try {
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
for (final UUIDMapping uuidMapping : names) {
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.getUuid());
Template prefixTemplate = Template.of("prefix", prefix);
Template playerTemplate = Template.of("player", uuidMapping.getUsername());
if (pp != null) {
builder.append(MINI_MESSAGE.parse(online, prefixTemplate, playerTemplate));
TagResolver resolver = TagResolver.builder()
.tag("prefix", Tag.inserting(Component.text(prefix)))
.tag("player", Tag.inserting(Component.text(uuidMapping.getUsername())))
.build();
if (pp != null) {
builder.append(MINI_MESSAGE.deserialize(online, resolver));
} else if (uuidMapping.getUsername().equalsIgnoreCase("unknown")) {
Template unknownTemplate = Template.of(
TagResolver unknownResolver = TagResolver.resolver(
"info.unknown",
TranslatableCaption.of("info.unknown").getComponent(player)
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
);
builder.append(MINI_MESSAGE.parse(unknown, unknownTemplate));
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
} else if (uuidMapping.getUuid().equals(DBFunc.EVERYONE)) {
Template everyoneTemplate = Template.of(
TagResolver everyoneResolver = TagResolver.resolver(
"info.everyone",
TranslatableCaption.of("info.everyone").getComponent(player)
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
);
builder.append(MINI_MESSAGE.parse(everyone, everyoneTemplate));
builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver));
} else {
builder.append(MINI_MESSAGE.parse(offline, prefixTemplate, playerTemplate));
builder.append(MINI_MESSAGE.deserialize(offline, resolver));
}
prefix = ", ";
}
@ -499,15 +512,15 @@ public class ListCmd extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Templates.of("value", playerBuilder.toString())
TagResolver.resolver("value", Tag.inserting(Component.text(playerBuilder.toString())))
);
} catch (TimeoutException e) {
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
}
}
Template players = Template.of("players", builder.asComponent());
finalResolver.tag("players", Tag.inserting(builder.asComponent()));
caption.set(TranslatableCaption.of("info.plot_list_item"));
caption.setTemplates(command_tp, command_info, hover_info, numberTemplate, plotTemplate, players);
caption.setTagResolvers(finalResolver.build());
}
}, "/plot list " + args[0], TranslatableCaption.of("list.plot_list_header_paged"));
}

View File

@ -36,7 +36,9 @@ import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.TimeUtil;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.MalformedURLException;
@ -99,7 +101,7 @@ public class Load extends SubCommand {
// No schematics found:
player.sendMessage(
TranslatableCaption.of("web.load_null"),
Template.of("command", "/plot load")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot load")))
);
return false;
}
@ -110,7 +112,7 @@ public class Load extends SubCommand {
// use /plot load <index>
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Template.of("value", "(1, " + schematics.size() + ')')
TagResolver.resolver("value", Tag.inserting(Component.text("(1, " + schematics.size() + ')')))
);
return false;
}
@ -130,7 +132,10 @@ public class Load extends SubCommand {
plot.removeRunning();
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid"),
Template.of("reason", "non-existent or not in gzip format")
TagResolver.resolver(
"reason",
Tag.inserting(Component.text("non-existent or not in gzip format"))
)
);
return;
}
@ -161,7 +166,7 @@ public class Load extends SubCommand {
plot.removeRunning();
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot load <index>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot load <index>")))
);
return false;
}
@ -212,46 +217,9 @@ public class Load extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("web.load_list"),
Template.of("command", "/plot load #")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot load #")))
);
}
}
/**
* @deprecated Use {@link TimeUtil#secToTime(long)}
*/
@Deprecated(forRemoval = true, since = "6.6.2")
public String secToTime(long time) {
StringBuilder toreturn = new StringBuilder();
if (time >= 33868800) {
int years = (int) (time / 33868800);
time -= years * 33868800;
toreturn.append(years).append("y ");
}
if (time >= 604800) {
int weeks = (int) (time / 604800);
time -= weeks * 604800;
toreturn.append(weeks).append("w ");
}
if (time >= 86400) {
int days = (int) (time / 86400);
time -= days * 86400;
toreturn.append(days).append("d ");
}
if (time >= 3600) {
int hours = (int) (time / 3600);
time -= hours * 3600;
toreturn.append(hours).append("h ");
}
if (time >= 60) {
int minutes = (int) (time / 60);
time -= minutes * 60;
toreturn.append(minutes).append("m ");
}
if (toreturn.length() == 0 || (time > 0)) {
toreturn.append(time).append("s ");
}
return toreturn.toString().trim();
}
}

View File

@ -36,6 +36,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -72,7 +75,6 @@ public class MainCommand extends Command {
commands.add(Buy.class);
if (Settings.Web.LEGACY_WEBINTERFACE) {
LOGGER.warn("Legacy webinterface is used. Please note that it will be removed in future.");
commands.add(Save.class);
}
commands.add(Load.class);
commands.add(Confirm.class);
@ -121,7 +123,6 @@ public class MainCommand extends Command {
commands.add(Move.class);
commands.add(Condense.class);
commands.add(Copy.class);
commands.add(Chat.class);
commands.add(Trim.class);
commands.add(Done.class);
commands.add(Continue.class);
@ -311,7 +312,7 @@ public class MainCommand extends Command {
if (message != null) {
player.sendMessage(
TranslatableCaption.of("errors.error"),
net.kyori.adventure.text.minimessage.Template.of("value", message)
TagResolver.resolver("value", Tag.inserting(Component.text(message)))
);
} else {
player.sendMessage(

View File

@ -35,7 +35,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.StringMan;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.UUID;
@ -115,22 +117,24 @@ public class Merge extends SubCommand {
if (direction == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot merge <" + StringMan.join(values, " | ") + "> [removeroads]")
TagResolver.resolver("value", Tag.inserting(Component.text(
"/plot merge <" + StringMan.join(values, " | ") + "> [removeroads]"
)))
);
player.sendMessage(
TranslatableCaption.of("help.direction"),
Template.of("dir", direction(location.getYaw()))
TagResolver.resolver("dir", Tag.inserting(Component.text(direction(location.getYaw()))))
);
return false;
}
final int size = plot.getConnectedPlots().size();
int max = Permissions.hasPermissionRange(player, Permission.PERMISSION_MERGE, Settings.Limit.MAX_PLOTS);
int max = Permissions.hasPermissionRange(player, "plots.merge", Settings.Limit.MAX_PLOTS);
PlotMergeEvent event =
this.eventDispatcher.callMerge(plot, direction, max, player);
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Merge")
TagResolver.resolver("value", Tag.inserting(Component.text("Merge")))
);
return false;
}
@ -141,7 +145,7 @@ public class Merge extends SubCommand {
if (!force && size - 1 > maxSize) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_MERGE + "." + (size + 1))
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_MERGE + "." + (size + 1))))
);
return false;
}
@ -168,7 +172,10 @@ public class Merge extends SubCommand {
.hasPermission(player, Permission.PERMISSION_MERGE_KEEP_ROAD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_MERGE_KEEP_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_MERGE_KEEP_ROAD)
)
);
return true;
}
@ -177,8 +184,11 @@ public class Merge extends SubCommand {
this.econHandler.withdrawMoney(player, price);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(price)),
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price)))),
TagResolver.resolver(
"balance",
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player))))
)
);
}
player.sendMessage(TranslatableCaption.of("merge.success_merge"));
@ -192,7 +202,7 @@ public class Merge extends SubCommand {
&& this.econHandler.getMoney(player) < price) {
player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_merge"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
return false;
}
@ -206,7 +216,7 @@ public class Merge extends SubCommand {
.hasPermission(player, Permission.PERMISSION_MERGE_KEEP_ROAD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_MERGE_KEEP_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_KEEP_ROAD))
);
return true;
}
@ -215,7 +225,7 @@ public class Merge extends SubCommand {
this.econHandler.withdrawMoney(player, price);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
}
player.sendMessage(TranslatableCaption.of("merge.success_merge"));
@ -231,7 +241,7 @@ public class Merge extends SubCommand {
if (!force && !Permissions.hasPermission(player, Permission.PERMISSION_MERGE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_MERGE_OTHER))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_OTHER))
);
return false;
}
@ -256,14 +266,14 @@ public class Merge extends SubCommand {
if (!force && this.econHandler.getMoney(player) < price) {
player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_merge"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
return;
}
this.econHandler.withdrawMoney(player, price);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
}
player.sendMessage(TranslatableCaption.of("merge.success_merge"));
@ -271,10 +281,15 @@ public class Merge extends SubCommand {
};
if (!force && hasConfirmation(player)) {
CmdConfirm.addPending(accepter, MINI_MESSAGE.serialize(MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("merge.merge_request_confirm").getComponent(player),
Template.of("player", player.getName()),
Template.of("location", plot.getWorldName() + ";" + plot.getId())
TagResolver.builder()
.tag("player", Tag.inserting(Component.text(player.getName())))
.tag(
"location",
Tag.inserting(Component.text(plot.getWorldName() + " " + plot.getId()))
)
.build()
)),
run
);

View File

@ -29,7 +29,9 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.concurrent.CompletableFuture;
@ -107,8 +109,10 @@ public class Move extends SubCommand {
if (result) {
player.sendMessage(
TranslatableCaption.of("move.move_success"),
Template.of("origin", p1),
Template.of("target", p2)
TagResolver.builder()
.tag("origin", Tag.inserting(Component.text(p1)))
.tag("target", Tag.inserting(Component.text(p2)))
.build()
);
return true;
} else {

View File

@ -36,7 +36,9 @@ import com.plotsquared.core.util.InventoryUtil;
import com.plotsquared.core.util.Permissions;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import javax.annotation.Nullable;
@ -83,7 +85,10 @@ public class Music extends SubCommand {
.hasPermission(player, Permission.PERMISSION_ADMIN_MUSIC_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_MUSIC_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_MUSIC_OTHER)
)
);
return true;
}
@ -106,15 +111,17 @@ public class Music extends SubCommand {
if (event.getEventResult() == Result.DENY) {
getPlayer().sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Music removal")
TagResolver.resolver("value", Tag.inserting(Component.text("Music removal")))
);
return true;
}
plot.removeFlag(event.getFlag());
getPlayer().sendMessage(
TranslatableCaption.of("flag.flag_removed"),
Template.of("flag", "music"),
Template.of("value", "music_disc")
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text("music")))
.tag("value", Tag.inserting(Component.text("music_disc")))
.build()
);
} else if (item.getName().toLowerCase(Locale.ENGLISH).contains("disc")) {
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(MusicFlag.class)
@ -123,13 +130,17 @@ public class Music extends SubCommand {
if (event.getEventResult() == Result.DENY) {
getPlayer().sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Music addition")
TagResolver.resolver("value", Tag.inserting(Component.text("Music addition")))
);
return true;
}
plot.setFlag(event.getFlag());
getPlayer().sendMessage(TranslatableCaption.of("flag.flag_added"), Template.of("flag", "music"),
Template.of("value", String.valueOf(event.getFlag().getValue()))
getPlayer().sendMessage(
TranslatableCaption.of("flag.flag_added"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text("music")))
.tag("value", Tag.inserting(Component.text(event.getFlag().getValue().toString())))
.build()
);
} else {
getPlayer().sendMessage(TranslatableCaption.of("flag.flag_not_added"));

View File

@ -24,9 +24,10 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@CommandDeclaration(command = "near",
@ -49,13 +50,9 @@ public class Near extends Command {
final Plot plot = check(player.getCurrentPlot(), TranslatableCaption.of("errors.not_in_plot"));
player.sendMessage(
TranslatableCaption.of("near.plot_near"),
Template.of("list", StringMan.join(getPlayersInPlotVisible(plot, player), ", "))
TagResolver.resolver("list", Tag.inserting(Component.text(StringMan.join(plot.getPlayersInPlot(), ", "))))
);
return CompletableFuture.completedFuture(true);
}
private List<PlotPlayer<?>> getPlayersInPlotVisible(Plot plot, PlotPlayer<?> executor) {
return plot.getPlayersInPlot().stream().filter(executor::canSee).toList();
}
}

View File

@ -35,7 +35,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlayerManager;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -66,7 +68,7 @@ public class Owner extends SetCommand {
if (value == null || value.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot setowner <owner>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot setowner <owner>")))
);
return false;
}
@ -78,7 +80,7 @@ public class Owner extends SetCommand {
&& !value.equalsIgnoreCase("-")) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", value)
TagResolver.resolver("value", Tag.inserting(Component.text(value)))
);
return;
}
@ -92,7 +94,7 @@ public class Owner extends SetCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Owner change")
TagResolver.resolver("value", Tag.inserting(Component.text("Owner change")))
);
return;
}
@ -115,7 +117,7 @@ public class Owner extends SetCommand {
if (unlinkEvent.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Unlink on owner change")
TagResolver.resolver("value", Tag.inserting(Component.text("Unlink on owner change")))
);
return;
}
@ -135,7 +137,10 @@ public class Owner extends SetCommand {
if (plot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_owner"),
Template.of("player", PlayerManager.resolveName(uuid, false).getComponent(player))
TagResolver.resolver(
"player",
Tag.inserting(PlayerManager.resolveName(uuid, false).toComponent(player))
)
);
return;
}
@ -144,7 +149,10 @@ public class Owner extends SetCommand {
if (other == null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player_offline"),
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver(
"player",
Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player))
)
);
return;
}
@ -180,7 +188,10 @@ public class Owner extends SetCommand {
if (other != null) {
other.sendMessage(
TranslatableCaption.of("owner.now_owner"),
Template.of("plot", plot.getArea() + ";" + plot.getId())
TagResolver.resolver(
"plot",
Tag.inserting(Component.text(plot.getArea() + ";" + plot.getId()))
)
);
}
} else {

View File

@ -23,7 +23,9 @@ import com.plotsquared.core.configuration.caption.StaticCaption;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.util.PremiumVerification;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@CommandDeclaration(command = "plugin",
permission = "plots.use",
@ -39,7 +41,7 @@ public class PluginCmd extends SubCommand {
StaticCaption.of("<gray>>> </gray><gold><bold>" + PlotSquared
.platform()
.pluginName() + " <reset><gray>(<gold>Version</gold><gray>: </gray><gold><version></gold><gray>)</gray>"),
Template.of("version", String.valueOf(PlotSquared.get().getVersion()))
TagResolver.resolver("version", Tag.inserting(Component.text(String.valueOf(PlotSquared.get().getVersion()))))
);
player.sendMessage(StaticCaption.of(
"<gray>>> </gray><gold><bold>Authors<reset><gray>: </gray><gold>Citymonstret </gold><gray>& </gray><gold>Empire92 </gold><gray>& </gray><gold>MattBDev </gold><gray>& </gray><gold>dordsor21 </gold><gray>& </gray><gold>NotMyFault </gold><gray>& </gray><gold>SirYwell</gold>"));
@ -49,7 +51,7 @@ public class PluginCmd extends SubCommand {
"<gray>>> </gray><gold><bold>Discord<reset><gray>: </gray><gold><click:open_url:https://discord.gg/intellectualsites>https://discord.gg/intellectualsites</gold>"));
player.sendMessage(
StaticCaption.of("<gray>>> </gray><gold><bold>Premium<reset><gray>: <gold><value></gold>"),
Template.of("value", String.valueOf(PremiumVerification.isPremium()))
TagResolver.resolver("value", Tag.inserting(Component.text(PremiumVerification.isPremium())))
);
});
return true;

View File

@ -33,7 +33,9 @@ import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.uuid.UUIDMapping;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.NonNull;
@ -98,7 +100,7 @@ public class Purge extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
Template.of("value", split[1])
TagResolver.resolver("value", Tag.inserting(Component.text(split[1])))
);
return false;
}
@ -110,7 +112,7 @@ public class Purge extends SubCommand {
} catch (IllegalArgumentException ignored) {
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_plot_id"),
Template.of("value", split[1])
TagResolver.resolver("value", Tag.inserting(Component.text(split[1])))
);
return false;
}
@ -121,7 +123,7 @@ public class Purge extends SubCommand {
if (ownerMapping == null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", split[1])
TagResolver.resolver("value", Tag.inserting(Component.text(split[1])))
);
return false;
}
@ -133,7 +135,7 @@ public class Purge extends SubCommand {
if (addedMapping == null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", split[1])
TagResolver.resolver("value", Tag.inserting(Component.text(split[1])))
);
return false;
}
@ -258,7 +260,10 @@ public class Purge extends SubCommand {
DBFunc.purgeIds(ids);
player.sendMessage(
TranslatableCaption.of("purge.purge_success"),
Template.of("amount", ids.size() + "/" + toDelete.size())
TagResolver.resolver(
"amount",
Tag.inserting(Component.text(ids.size() + "/" + toDelete.size()))
)
);
});
}

View File

@ -38,7 +38,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -148,7 +150,7 @@ public class Rate extends SubCommand {
if (plot.getRatings().containsKey(player.getUUID())) {
player.sendMessage(
TranslatableCaption.of("ratings.rating_already_exists"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return;
}
@ -168,7 +170,7 @@ public class Rate extends SubCommand {
plot.addRating(this.getPlayer().getUUID(), event.getRating());
getPlayer().sendMessage(
TranslatableCaption.of("ratings.rating_applied"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
}
return false;
@ -241,7 +243,7 @@ public class Rate extends SubCommand {
if (plot.getRatings().containsKey(uuid)) {
player.sendMessage(
TranslatableCaption.of("ratings.rating_already_exists"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return;
}
@ -251,7 +253,7 @@ public class Rate extends SubCommand {
plot.addRating(uuid, event.getRating());
player.sendMessage(
TranslatableCaption.of("ratings.rating_applied"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
}
};

View File

@ -26,7 +26,9 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotManager;
import com.plotsquared.core.plot.world.PlotAreaManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@CommandDeclaration(command = "regenallroads",
@ -58,18 +60,18 @@ public class RegenAllRoads extends SubCommand {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Template.of("value", "(0, 256)")
TagResolver.resolver("value", Tag.inserting(Component.text("(0, 256)")))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot regenallroads <world> [height]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot regenallroads <world> [height]")))
);
return false;
}
} else if (args.length != 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot regenallroads <world> [height]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot regenallroads <world> [height]")))
);
return false;
}
@ -77,7 +79,7 @@ public class RegenAllRoads extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
return false;
}
@ -88,7 +90,7 @@ public class RegenAllRoads extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("debugroadregen.schematic"),
Template.of("command", "/plot createroadschematic")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot createroadschematic")))
);
player.sendMessage(TranslatableCaption.of("debugroadregen.regenallroads_started"));
boolean result = this.hybridUtils.scheduleRoadUpdate(area, height);

View File

@ -29,7 +29,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlayerManager;
import com.plotsquared.core.util.TabCompletions;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -79,7 +81,7 @@ public class Remove extends SubCommand {
} else if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
return;
} else if (!uuids.isEmpty()) {
@ -115,13 +117,13 @@ public class Remove extends SubCommand {
}
if (count == 0) {
player.sendMessage(
TranslatableCaption.of("member.player_not_removed"),
Template.of("player", args[0])
TranslatableCaption.of("errors.invalid_player"),
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
} else {
player.sendMessage(
TranslatableCaption.of("member.removed_players"),
Template.of("amount", count + "")
TagResolver.resolver("amount", Tag.inserting(Component.text(count)))
);
}
});

View File

@ -1,132 +0,0 @@
/*
* PlotSquared, a land and world management plugin for Minecraft.
* Copyright (C) IntellectualSites <https://intellectualsites.com>
* Copyright (C) IntellectualSites team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.plotsquared.core.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.MetaDataAccess;
import com.plotsquared.core.player.PlayerMetaDataKeys;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.URL;
import java.util.List;
import java.util.UUID;
/**
* @deprecated In favor of "/plot download" (Arkitektonika) and scheduled
* for removal within the next major release.
*/
@Deprecated(forRemoval = true, since = "6.0.9")
@CommandDeclaration(command = "save",
category = CommandCategory.SCHEMATIC,
requiredType = RequiredType.NONE,
permission = "plots.save")
public class Save extends SubCommand {
private final PlotAreaManager plotAreaManager;
private final SchematicHandler schematicHandler;
@Inject
public Save(
final @NonNull PlotAreaManager plotAreaManager,
final @NonNull SchematicHandler schematicHandler
) {
this.plotAreaManager = plotAreaManager;
this.schematicHandler = schematicHandler;
}
@Override
public boolean onCommand(final PlotPlayer<?> player, final String[] args) {
final String world = player.getLocation().getWorldName();
if (!this.plotAreaManager.hasPlotArea(world)) {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
return false;
}
final Plot plot = player.getCurrentPlot();
if (plot == null) {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
return false;
}
if (!plot.hasOwner()) {
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
return false;
}
if (plot.getVolume() > Integer.MAX_VALUE) {
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
return false;
}
if (!plot.isOwner(player.getUUID()) && !Permissions
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_SAVE)) {
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
return false;
}
if (plot.getRunning() > 0) {
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
return false;
}
plot.addRunning();
this.schematicHandler.getCompoundTag(plot)
.whenComplete((compoundTag, throwable) -> {
TaskManager.runTaskAsync(() -> {
String time = (System.currentTimeMillis() / 1000) + "";
Location[] corners = plot.getCorners();
corners[0] = corners[0].withY(plot.getArea().getMinBuildHeight());
corners[1] = corners[1].withY(plot.getArea().getMaxBuildHeight());
int size = (corners[1].getX() - corners[0].getX()) + 1;
PlotId id = plot.getId();
String world1 = plot.getArea().toString().replaceAll(";", "-")
.replaceAll("[^A-Za-z0-9]", "");
final String file = time + '_' + world1 + '_' + id.getX() + '_' + id.getY() + '_' + size;
UUID uuid = player.getUUID();
schematicHandler.upload(compoundTag, uuid, file, new RunnableVal<>() {
@Override
public void run(URL url) {
plot.removeRunning();
if (url == null) {
player.sendMessage(TranslatableCaption.of("backups.backup_save_failed"));
return;
}
player.sendMessage(TranslatableCaption.of("web.save_success"));
player.sendMessage(
TranslatableCaption.of("errors.deprecated_commands"),
Template.of("replacement", "/plot download")
);
try (final MetaDataAccess<List<String>> schematicAccess =
player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_SCHEMATICS)) {
schematicAccess.get().ifPresent(schematics -> schematics.add(file + ".schem"));
}
}
});
});
});
return true;
}
}

View File

@ -36,7 +36,9 @@ import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.URL;
@ -73,7 +75,7 @@ public class SchematicCmd extends SubCommand {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Possible values: save, paste, exportall, list")
TagResolver.resolver("value", Tag.inserting(Component.text("Possible values: save, paste, exportall, list")))
);
return true;
}
@ -83,14 +85,20 @@ public class SchematicCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_PASTE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SCHEMATIC_PASTE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_SCHEMATIC_PASTE)
)
);
return false;
}
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Possible values: save, paste, exportall, list")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Possible values: save, paste, exportall, list"))
)
);
break;
}
@ -131,7 +139,10 @@ public class SchematicCmd extends SubCommand {
e.printStackTrace();
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid"),
Template.of("reason", "non-existent url: " + location)
TagResolver.resolver(
"reason",
Tag.inserting(Component.text("non-existent url: " + location))
)
);
SchematicCmd.this.running = false;
return;
@ -147,7 +158,10 @@ public class SchematicCmd extends SubCommand {
SchematicCmd.this.running = false;
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid"),
Template.of("reason", "non-existent or not in gzip format")
TagResolver.resolver(
"reason",
Tag.inserting(Component.text("non-existent or not in gzip format"))
)
);
return;
}
@ -182,7 +196,10 @@ public class SchematicCmd extends SubCommand {
player.sendMessage(TranslatableCaption.of("schematics.schematic_exportall_world_args"));
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Use /plot schematic exportall <area>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Use /plot schematic exportall <area>"))
)
);
return false;
}
@ -190,7 +207,7 @@ public class SchematicCmd extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -199,7 +216,7 @@ public class SchematicCmd extends SubCommand {
player.sendMessage(TranslatableCaption.of("schematic.schematic_exportall_world"));
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Use /plot sch exportall <area>")
TagResolver.resolver("value", Tag.inserting(Component.text("Use /plot sch exportall <area>")))
);
return false;
}
@ -213,7 +230,7 @@ public class SchematicCmd extends SubCommand {
player.sendMessage(TranslatableCaption.of("schematics.schematic_exportall_started"));
player.sendMessage(
TranslatableCaption.of("schematics.plot_to_schem"),
Template.of("amount", String.valueOf(plots.size()))
TagResolver.resolver("amount", Tag.inserting(Component.text(plots.size())))
);
}
}
@ -221,7 +238,10 @@ public class SchematicCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_SAVE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SCHEMATIC_SAVE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_SCHEMATIC_SAVE)
)
);
return false;
}
@ -264,19 +284,22 @@ public class SchematicCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_LIST)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SCHEMATIC_LIST))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_SCHEMATIC_LIST)
)
);
return false;
}
final String string = StringMan.join(this.schematicHandler.getSchematicNames(), "$2, $1");
player.sendMessage(
TranslatableCaption.of("schematics.schematic_list"),
Template.of("list", string)
TagResolver.resolver("list", Tag.inserting(Component.text(string)))
);
}
default -> player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Possible values: save, paste, exportall, list")
TagResolver.resolver("value", Tag.inserting(Component.text("Possible values: save, paste, exportall, list")))
);
}
return true;

View File

@ -40,7 +40,9 @@ import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.world.block.BlockCategory;
import com.sk89q.worldedit.world.block.BlockType;
import com.sk89q.worldedit.world.block.BlockTypes;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -123,7 +125,7 @@ public class Set extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("invalid.component_illegal_block"),
Template.of("value", forbiddenType)
TagResolver.resolver("value", Tag.inserting(Component.text(forbiddenType)))
);
return true;
}
@ -135,7 +137,10 @@ public class Set extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SET_COMPONENT.format(component))) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_SET_COMPONENT.format(component))
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_SET_COMPONENT.format(component)))
)
);
return false;
}
@ -158,7 +163,7 @@ public class Set extends SubCommand {
plot.removeRunning();
player.sendMessage(
TranslatableCaption.of("working.component_complete"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
});
if (Settings.QUEUE.NOTIFY_PROGRESS) {

View File

@ -25,7 +25,9 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.StringMan;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
public abstract class SetCommand extends SubCommand {
@ -41,7 +43,10 @@ public abstract class SetCommand extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND.format(getFullId()))) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_ADMIN_COMMAND.format(getFullId()))
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_COMMAND.format(getFullId())))
)
);
player.sendMessage(TranslatableCaption.of("working.plot_not_claimed"));
return false;
@ -51,7 +56,10 @@ public abstract class SetCommand extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND.format(getFullId()))) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_ADMIN_COMMAND.format(getFullId()))
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_COMMAND.format(getFullId())))
)
);
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
return false;

View File

@ -23,7 +23,9 @@ import com.plotsquared.core.location.BlockLoc;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@CommandDeclaration(command = "sethome",
permission = "plots.set.home",
@ -64,7 +66,7 @@ public class SetHome extends SetCommand {
default -> {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Use /plot set home [none]")
TagResolver.resolver("value", Tag.inserting(Component.text("Use /plot set home [none]")))
);
return false;
}

View File

@ -29,7 +29,9 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.setup.SetupProcess;
import com.plotsquared.core.setup.SetupStep;
import com.plotsquared.core.util.SetupUtils;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -78,7 +80,10 @@ public class Setup extends SubCommand {
player.sendMessage(TranslatableCaption.of("setup.setup_not_started"));
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Use /plot setup to start a setup process.")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Use /plot setup to start a setup process."))
)
);
return true;
}

View File

@ -26,7 +26,9 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.concurrent.CompletableFuture;
@ -84,8 +86,10 @@ public class Swap extends SubCommand {
if (result) {
player.sendMessage(
TranslatableCaption.of("swap.swap_success"),
Template.of("origin", p1),
Template.of("target", p2)
TagResolver.builder()
.tag("origin", Tag.inserting(Component.text(p1)))
.tag("target", Tag.inserting(Component.text(p2)))
.build()
);
return true;
} else {

View File

@ -24,7 +24,9 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.query.PlotQuery;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Collection;
import java.util.Locale;
@ -52,7 +54,7 @@ public class Target extends SubCommand {
if (args.length == 0) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot target <<X;Z> | nearest>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot target <<X;Z> | nearest>")))
);
return false;
}
@ -76,7 +78,7 @@ public class Target extends SubCommand {
target.getCenter(player::setCompassTarget);
player.sendMessage(
TranslatableCaption.of("compass.compass_target"),
Template.of("target", target.toString())
TagResolver.resolver("target", Tag.inserting(Component.text(target.toString())))
);
return true;
}

View File

@ -44,6 +44,9 @@ import com.plotsquared.core.util.SetupUtils;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.File;
@ -169,13 +172,16 @@ public class Template extends SubCommand {
if (args[0].equalsIgnoreCase("export")) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template export <world>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot template export <world>")))
);
return true;
} else if (args[0].equalsIgnoreCase("import")) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template import <world> <template>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot template import <world> <template>"))
)
);
return true;
}
@ -189,14 +195,17 @@ public class Template extends SubCommand {
if (args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template import <world> <template>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot template import <world> <template>"))
)
);
return false;
}
if (this.plotAreaManager.hasPlotArea(world)) {
player.sendMessage(
TranslatableCaption.of("setup.setup_world_taken"),
net.kyori.adventure.text.minimessage.Template.of("value", world)
TagResolver.resolver("value", Tag.inserting(Component.text(world)))
);
return false;
}
@ -204,7 +213,7 @@ public class Template extends SubCommand {
if (!result) {
player.sendMessage(
TranslatableCaption.of("template.invalid_template"),
net.kyori.adventure.text.minimessage.Template.of("value", args[2])
TagResolver.resolver("value", Tag.inserting(Component.text(args[2])))
);
return false;
}
@ -242,7 +251,7 @@ public class Template extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template export <world>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot template export <world>")))
);
return false;
}
@ -250,7 +259,7 @@ public class Template extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
net.kyori.adventure.text.minimessage.Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -262,7 +271,7 @@ public class Template extends SubCommand {
e.printStackTrace();
player.sendMessage(
TranslatableCaption.of("template.template_failed"),
net.kyori.adventure.text.minimessage.Template.of("value", e.getMessage())
TagResolver.resolver("value", Tag.inserting(Component.text(e.getMessage())))
);
return;
}

View File

@ -22,7 +22,9 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@CommandDeclaration(command = "toggle",
aliases = {"attribute"},
@ -47,12 +49,12 @@ public class Toggle extends Command {
if (toggle(player, "chatspy")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -68,12 +70,12 @@ public class Toggle extends Command {
if (toggle(player, "worldedit")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -88,12 +90,12 @@ public class Toggle extends Command {
if (toggle(player, "chat")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -108,12 +110,12 @@ public class Toggle extends Command {
if (toggle(player, "ignoreExpireTask")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -128,12 +130,12 @@ public class Toggle extends Command {
if (toggle(player, "disabletitles")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -148,12 +150,12 @@ public class Toggle extends Command {
if (toggle(player, "disabletime")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -168,12 +170,12 @@ public class Toggle extends Command {
if (toggle(player, "debug")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
player.refreshDebug();

View File

@ -25,6 +25,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.expiration.ExpireManager;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.queue.GlobalBlockQueue;
import com.plotsquared.core.queue.QueueCoordinator;
@ -91,8 +92,8 @@ public class Trim extends SubCommand {
}
TranslatableCaption.of("trim.trim_starting");
final List<Plot> plots = PlotQuery.newQuery().inWorld(world).asList();
if (PlotSquared.platform().expireManager() != null) {
plots.removeAll(PlotSquared.platform().expireManager().getPendingExpired());
if (ExpireManager.IMP != null) {
plots.removeAll(ExpireManager.IMP.getPendingExpired());
}
result.value1 = new HashSet<>(PlotSquared.platform().worldUtil().getChunkChunks(world));
result.value2 = new HashSet<>();

View File

@ -20,7 +20,6 @@ package com.plotsquared.core.command;
import com.google.inject.Inject;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.permissions.Permission;
@ -32,7 +31,9 @@ import com.plotsquared.core.util.PlayerManager;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -75,7 +76,7 @@ public class Trust extends Command {
);
checkTrue(args.length == 1, TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
final CompletableFuture<Boolean> future = new CompletableFuture<>();
@ -86,14 +87,14 @@ public class Trust extends Command {
} else {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
}
future.completeExceptionally(throwable);
return;
} else {
checkTrue(!uuids.isEmpty(), TranslatableCaption.of("errors.invalid_player"),
Templates.of("value", args[0])
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
Iterator<UUID> iterator = uuids.iterator();
@ -105,7 +106,10 @@ public class Trust extends Command {
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver(
"value",
Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player))
)
);
iterator.remove();
continue;
@ -113,7 +117,10 @@ public class Trust extends Command {
if (currentPlot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver(
"value",
Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player))
)
);
iterator.remove();
continue;
@ -121,7 +128,10 @@ public class Trust extends Command {
if (currentPlot.getTrusted().contains(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_added"),
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver(
"value",
Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player))
)
);
iterator.remove();
continue;
@ -134,7 +144,7 @@ public class Trust extends Command {
if (localTrustSize >= maxTrustSize) {
player.sendMessage(
TranslatableCaption.of("members.plot_max_members_trusted"),
Template.of("amount", String.valueOf(localTrustSize))
TagResolver.resolver("amount", Tag.inserting(Component.text(localTrustSize)))
);
return;
}

View File

@ -30,7 +30,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@CommandDeclaration(command = "unlink",
@ -86,7 +88,7 @@ public class Unlink extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Unlink")
TagResolver.resolver("value", Tag.inserting(Component.text("Unlink")))
);
return true;
}

View File

@ -21,7 +21,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.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.events.TeleportCause;
import com.plotsquared.core.permissions.Permission;
@ -38,7 +37,9 @@ import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.query.SortingStrategy;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -100,8 +101,10 @@ public class Visit extends Command {
} else if (plots.size() < page || page < 1) {
player.sendMessage(
TranslatableCaption.of("invalid.number_not_in_range"),
Template.of("min", "1"),
Template.of("max", String.valueOf(plots.size()))
TagResolver.builder()
.tag("min", Tag.inserting(Component.text(1)))
.tag("max", Tag.inserting(Component.text(plots.size())))
.build()
);
return;
}
@ -111,7 +114,7 @@ public class Visit extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_VISIT_UNOWNED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.unowned")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.unowned")))
);
return;
}
@ -120,7 +123,7 @@ public class Visit extends Command {
.hasPermission(player, Permission.PERMISSION_HOME)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.owned")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.owned")))
);
return;
}
@ -128,7 +131,7 @@ public class Visit extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SHARED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.shared")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.shared")))
);
return;
}
@ -136,10 +139,10 @@ public class Visit extends Command {
// allow visit, if UntrustedVisit flag is set, or if the player has either the plot.visit.other or
// plot.admin.visit.untrusted permission
if (!plot.getFlag(UntrustedVisitFlag.class) && !Permissions.hasPermission(player, Permission.PERMISSION_VISIT_OTHER)
&& !Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_VISIT_UNTRUSTED)) {
&& !Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_VISIT_UNTRUSTED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.other")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.other")))
);
return;
}
@ -147,7 +150,10 @@ public class Visit extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_VISIT_DENIED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_VISIT_DENIED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_VISIT_DENIED)
)
);
return;
}
@ -189,11 +195,11 @@ public class Visit extends Command {
if (!MathMan.isInteger(args[2])) {
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Templates.of("value", "(1, ∞)")
TagResolver.resolver("value", Tag.inserting(Component.text("(1, ∞)")))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return CompletableFuture.completedFuture(false);
}
@ -206,11 +212,11 @@ public class Visit extends Command {
if (sortByArea == null) {
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Templates.of("value", "(1, ∞)")
TagResolver.resolver("value", Tag.inserting(Component.text("(1, ∞)")))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return CompletableFuture.completedFuture(false);
}
@ -223,7 +229,7 @@ public class Visit extends Command {
} else if (throwable != null || uuids.size() != 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
} else {
final UUID uuid = uuids.toArray(new UUID[0])[0];
@ -250,7 +256,7 @@ public class Visit extends Command {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("invalid.not_a_number"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return CompletableFuture.completedFuture(false);
}
@ -285,7 +291,7 @@ public class Visit extends Command {
} else {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", finalArgs[0])
TagResolver.resolver("value", Tag.inserting(Component.text(finalArgs[0])))
);
}
} else {
@ -313,7 +319,7 @@ public class Visit extends Command {
// /p v is invalid
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return CompletableFuture.completedFuture(false);
default:

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