Compare commits

..

105 Commits

Author SHA1 Message Date
1646f2f426 Added disclaimer to PlotSettings.
This class is not and never has been proper API.
2022-11-30 16:36:33 -05:00
3a8fae47a0 Update dependency com.intellectualsites.bom:bom-1.18.x to v1.20 (#3882)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-28 15:23:44 +01:00
70cb1cd100 Back to snapshot for development 2022-11-28 11:18:56 +01:00
2067cc1670 Release 6.10.5 2022-11-28 11:18:06 +01:00
e6338976dd Update dependency gradle to v7.6 (#3880)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-25 19:20:37 +01:00
90ebd5d5ed feat: add a permission to override-allow a merge if the other plot's owner is offline (#3844) 2022-11-25 10:48:33 +00:00
c973ee8649 Revert "feat: check merge limits when completing auto-merge (#3868)" - Fixes a bug in 6.10.4 (#3876)
Revert "feat: check merge limits when completing auto-merge (#3868)"

This reverts commit 25ce7a83f1.
2022-11-20 10:58:04 +01:00
c1543f034c feat: improve handling of null issues in plot analysis (#3867) 2022-11-17 17:23:44 +00:00
6baf339ecb Update dependency com.intellectualsites.bom:bom-1.18.x to v1.19 (#3874)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-16 18:35:03 +01:00
11906ef1c9 Back to snapshot for development 2022-11-16 11:30:23 +01:00
ee8902154a Release 6.10.4 2022-11-16 11:26:03 +01:00
b5bc1988e5 feature: implement road flags as widely as seems reasonable (#3870)
* feature: implement road flags as widely as seems reasonable
 - Closes #3047
 - Any further road flag implementations would be very specific from what I can gather, and thus the gist of #3047 is now implemented

* Add javadoc since tag

Co-authored-by: Alexander Brandes <mc.cache@web.de>

* Create util class for method

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-11-15 19:07:38 +01:00
2147012beb chore: deprecate paper 1.13 listener as P2 effectively doesn't support 1.13 (#3872) 2022-11-14 22:58:05 +01:00
52bb561689 fix: attempt to recover from IllegalStateException when restoring block tags (#3838)
- Fixes #3801
2022-11-14 16:47:24 +01:00
25ce7a83f1 feat: check merge limits when completing auto-merge (#3868)
- Closes #3748
2022-11-13 11:57:41 +01:00
55c8a590e7 Fix item thrower/owner can be null (#3866)
fix: item thrower/owner can be nuill
 - Fixes #3862
2022-11-12 17:10:21 +01:00
28bd993680 Update dependency com.intellectualsites.bom:bom-1.18.x to v1.18 (#3864)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-11-06 11:13:29 +01:00
8330f37d8a Back to snapshot for development 2022-11-02 09:35:57 +01:00
985fae65b6 ÂRelease 6.10.3 2022-11-02 09:34:33 +01:00
db2d590e8e fix: account for mismatched road-schematic heights (#3854) 2022-10-23 21:22:21 +02:00
c8d356783a Update dependency com.intellectualsites.bom:bom-1.18.x to v1.17 (#3853)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-20 10:23:56 +02:00
4947450ff0 Back to snapshot for development 2022-10-18 23:14:03 +02:00
de4e91ff62 Release 6.10.2 2022-10-18 23:12:27 +02:00
fe5e3d5f6d Annotate ExpireManager with @Inject (#3852)
fix: annotate ExpireManager with @Inject
2022-10-18 10:17:34 +02:00
b8b3098022 feat: Move ExpireManager to Guice by removing legacy IMP references (#3845)
* feat: Move ExpireManager to Guice by removing legacy IMP references

* Mark ExpireManager IMP as deprecated and add comments

* Add import for PlotPlatform for function reference

* Add ExpireManager instance call and optimize performance
2022-10-17 09:31:48 +02:00
0ae8fc46b8 Update dependency com.github.spotbugs:spotbugs-annotations to v4.7.3 (#3851)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-17 09:24:42 +02:00
e0762f63a8 chore: Replace paper reference in favor of bom 2022-10-15 16:04:30 +02:00
9f3850000c fix: adjust nullability checks for shulkers in the kill road mobs task (#3842)
- Fixes #3789
2022-10-15 15:26:14 +02:00
76c6be9ba7 Fix 'No resource for locale 'lang' found ' error (#3830)
* Fix #3820

* Reword message and add link to completed translations

* Fix #3820

* Reword message and add link to completed translations

* Add line breaks for better code readability

* Add line breaks for better code readability

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-10-13 19:19:20 +02:00
308a5aa781 Ensure all setBlock methods in BlockArrayCacheScopedQueueCoordinator apply the correct offset (#3843)
- Fixes #3783
2022-10-13 19:17:27 +02:00
e244527538 Make more complex patterns work correctly (#3847)
allow more complex patterns to work correctly
2022-10-13 19:16:19 +02:00
11dd013333 fix: Adjust schematic height logic when pasting and actually set air as well (#3840) 2022-10-13 16:46:29 +01:00
b740d5854c Support MiniMessage in plot-title flag (#3835) 2022-10-10 17:41:35 +01:00
d5445cfbef Don't kill owned road entities (leashed / named) (#3829) 2022-10-10 17:41:25 +01:00
3effaefda7 chore: Announce releases on Discord (#3839) 2022-10-09 16:40:51 +02:00
49b19e0eaf Check proper locations on PortalCreateEvent (#3834)
check proper locations on PortalCreateEvent
2022-10-08 15:13:11 +02:00
caef3a923b Deprecate PlotId#copy (#3821) 2022-10-08 14:11:16 +01:00
d4c3ceaf2b Move license into jar during compile process (#3826) 2022-10-08 14:10:57 +01:00
25e6aecf13 Update dependency com.intellectualsites.bom:bom-1.18.x to v1.16 (#3825)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-10-04 22:54:56 +02:00
33c11fdee9 Back to snapshot for development 2022-10-04 19:31:27 +02:00
316dd92667 Release 6.10.1 2022-10-04 19:30:44 +02:00
e53d2ac449 Update the plot sign when a plot has been purchased (#3822) 2022-10-03 21:51:17 +02:00
5786e8cc7a refactor: replace guava's Iterables with Java's stream API (#3823) 2022-10-03 21:51:05 +02:00
1b717c9b10 Only show visible players in /plot near (#3819)
feat: check visibility of player in `/plot near`
2022-10-03 21:50:41 +02:00
35abae99ca Improve feedback for invalid patterns (#3818)
improve feedback for invalid patterns
2022-10-02 22:22:08 +02:00
d1a85982fb Fix "set block timer" error after "/plot download" with legacy-webinterface setting (#3812)
Add missing `Plot.removeRunning` call to Download
2022-10-01 11:37:24 +02:00
3446b913cd plots.auto.mega fix for #3815 (#3816)
Co-authored-by: Resi <unconfigured@null.spigotmc.org>
2022-09-28 10:53:44 +02:00
8b8fd6aab7 Update dependency com.intellectualsites.bom:bom-1.18.x to v1.15 (#3809)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-22 22:26:11 +02:00
520bb64eca Back to snapshot for development 2022-09-21 16:29:17 +02:00
60d266b2d7 Release 6.10.0 2022-09-21 16:28:17 +02:00
8deeef4f7d Add allay to animals (#3788)
add allay to animals
2022-09-21 16:18:34 +02:00
9b0b071c0c Add GLOW_BERRIES to VineGrowFlag (#3803) 2022-09-21 16:18:18 +02:00
81a3f1098d Update dependency org.junit.jupiter:junit-jupiter to v5.9.1 (#3807)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-21 16:18:08 +02:00
efc248dcdb Update dependency com.intellectualsites.bom:bom-1.18.x to v1.14 (#3794)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-12 11:19:07 +02:00
476f3d328d feature: add flag for beacon effects of other plots (#3627)
* feature: add flag for beacon effects of other plots

Took 7 minutes

* fix: don't add the beacon effect flag if the platform is not paper

Took 2 minutes

* fix: creating consistency in documentation

Took 7 minutes

* feature: add global paper setting for the beacon-effect

* fix: description of the plot flag and rewrite of the listener

* fix: renamed flag and added road support

* fix: renamed flag and changed flag functionality

* fix: added spigot fallback listener and fixed NPE

* refactor: Address checkstyle violations

* addition: remove beacon effects when player leaves a plot

* fix: updated javadoc and fixed usage of the PlotListener#addEffect method

* chore: Run license updater

Co-authored-by: BuildTools <unconfigured@null.spigotmc.org>
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-09-05 20:06:37 +02:00
69f5f88183 Update dependency com.github.spotbugs:spotbugs-annotations to v4.7.2 (#3793)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-05 09:40:41 +02:00
6df63f7fc7 Invoke -parameters on compile time (#3787)
chore: Invoke -parameters on compile time
2022-09-03 12:55:55 +02:00
295b8a0135 Update dependency cloud.commandframework:cloud-services to v1.7.1 (#3784)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-27 09:32:40 +02:00
fcc5bc5473 Update dependency net.essentialsx:EssentialsX to v2.19.7 (#3780)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-24 09:56:33 +02:00
408b834376 [ci skip] chore: Add renovate schema URL 2022-08-20 15:31:51 +02:00
986812b9e4 chore: make snow set more future-proof (#3768) 2022-08-19 13:41:04 +02:00
8d4333ad9d fix(deps): update dependency net.essentialsx:essentialsx to v2.19.6 (#3770)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-13 10:12:05 +02:00
9ff9097ff9 fix(deps): update dependency net.essentialsx:essentialsx to v2.19.5 (#3767)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-12 14:13:42 +02:00
1ef424a2f1 fix(deps): update dependency com.intellectualsites.bom:bom-1.18.x to v1.13 (#3766)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-10 16:52:47 +02:00
9fd96dbaa2 build: Back to snapshot for development 2022-08-10 11:10:41 +02:00
b0a4e11c46 build: Release 6.9.4 2022-08-10 11:09:51 +02:00
77bce43ace fix: replace usages of snow tag (#3758)
* replace usages of snow tag

* powder snow is 1.17+
2022-08-10 11:03:20 +02:00
cba1927cc7 Items no longer despawn on road when natural_mob_spawning = true and kill-road-items = false (#3764)
* fix: handling of item despawning on road

* chore: de-duplicate check

* chore: check in PaperListener for consistency
2022-08-10 10:22:19 +02:00
3d19c5c2ad perf: avoid quadratic overhead for UUID collection (#3749)
avoid quadratic overhead for UUID collection
2022-08-08 12:50:22 +02:00
e0eff15694 fix: use correct uuid type in /grant (#3759)
use correct type
2022-08-07 21:19:01 +02:00
0bdeeea83b fix(deps): update worldedit to v7.2.12 (#3762)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-07 21:16:18 +02:00
6f96daae56 Update bug_report.yml 2022-08-06 13:49:25 +02:00
d1021d19da chore(deps): update dependency gradle to v7.5.1 (#3761)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-08-06 13:49:01 +02:00
ee589ac7f0 fix(deps): update worldedit to v7.2.11 (#3750)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-31 15:58:38 +02:00
3b747ffecf Don't allow wall corals to dry (#3746) 2022-07-29 23:00:55 +02:00
4e5a2b9f96 fix: Add user friendly message for creationdate placeholder (#3745) 2022-07-29 23:00:37 +02:00
aeb4350ccb Update bug_report.yml 2022-07-29 19:01:35 +02:00
9609990832 build: Update dependency com.intellectualsites.bom:bom-1.18.x to v1.12 (#3739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-26 22:47:51 +02:00
0e4319b757 build: Update dependency org.junit.jupiter:junit-jupiter to v5.9.0 (#3741)
* build: Update dependency org.junit.jupiter:junit-jupiter to v5.9.0

* Update renovate.json

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-07-26 22:47:25 +02:00
c8f4907f77 build: Back to snapshot for development 2022-07-25 21:11:35 +02:00
dcf98c2298 build: Release 6.9.3 2022-07-25 21:10:39 +02:00
ae59c7442f fix: improve handling of missing message files (#3718)
* improve handling of missing message files

* fix javadoc

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-07-25 21:02:54 +02:00
98708118d8 Deprecate the static Permissions "util" class that is almost entirely superseded by methods in PermissionHolder instances themselves (#3695)
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-07-24 15:55:43 +02:00
276d8f8e1e change message of /p remove <player> if player does not need to be removed (#3734)
refactor: change message of `/p remove <player>` if unnecessary
2022-07-24 10:32:29 +02:00
87f89541b5 build: Update dependency com.intellectualsites.bom:bom-1.18.x to v1.11 (#3726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-15 10:04:01 +02:00
93f6de7029 build: Update dependency gradle to v7.5 (#3727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-15 10:03:27 +02:00
73d2686b17 build: Update dependency com.intellectualsites.bom:bom-1.18.x to v1.10 (#3723)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-06 00:14:20 +02:00
c446a95b07 build: Back to snapshot for development 2022-07-05 22:26:52 +02:00
3676e1df35 build: Release 6.9.2 2022-07-05 22:25:57 +02:00
12e2705260 Revert #3681 (#3722)
Revert "Adjust schematic height logic when pasting and actually set air as well (#3681)"

This reverts commit 08ce4c872c.
2022-07-05 15:02:25 +02:00
31e777a03a build: Update dependency me.clip:placeholderapi to v2.11.2 (#3720)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-04 14:07:14 +02:00
7f436c405b fix: Don't fail post processing compilation on non-ascii charmap (#3719) 2022-07-03 14:58:17 +02:00
4d4d2ab087 Ignore cancelled projectile launch events (#3709) 2022-06-28 21:15:09 +02:00
91017acce4 Realistically only need the "highest" y level of adding overlay block errors 2022-06-27 17:41:47 +01:00
e90fd231d9 build: Update dependency com.github.spotbugs:spotbugs-annotations to v4.7.1 (#3714)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-27 17:00:13 +02:00
cd9f0789de build: Update bom to 1.9 2022-06-27 16:47:32 +02:00
5f4c8d92df build: Back to snapshot for development 2022-06-27 14:57:32 +02:00
263cb47a21 build: Release 6.9.1 2022-06-27 14:56:44 +02:00
005600c99e Show old flag value in remove command (#3711) 2022-06-27 13:31:45 +02:00
26bec7fe2f style: Address javadoc violations 2022-06-26 11:18:33 +02:00
f4b886d977 Minor cleanup of the plot analyze code (#3708)
- No need to wrap the final analysis into another async method. It's already contained in an async task
 - Don't overstretch a chunk bounday when setting blocks to newBlocks array
2022-06-23 19:18:29 +02:00
c09d0d882e Use single PlotListener instance (#3704) 2022-06-22 12:50:56 +01:00
312cb2996c Better handling of offline projectile shooters (#3705) 2022-06-22 12:50:46 +01:00
f218902581 Implement build height limits into more events (#3691)
* Implement build height limits into more events

* Implement util method to check if y is within world build limits

* Extract duplicate player-build-height-checking to plot area
 - Extract to core module to allow any possible future platforms to access the method, as they will always duplicate

* Add code tag to javadoc

Co-authored-by: Alexander Brandes <mc.cache@web.de>

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-06-21 19:09:29 +02:00
f27009216c chore: Replace AnnotationHelper class (#3706) 2022-06-21 19:09:17 +02:00
194 changed files with 3355 additions and 3672 deletions

View File

@ -27,10 +27,11 @@ 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. 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 multiple: false
options: options:
- '1.19.2'
- '1.19.1'
- '1.19' - '1.19'
- '1.18.2' - '1.18.2'
- '1.18.1' - '1.18.1'
- '1.18'
- '1.17.1' - '1.17.1'
- '1.16.5' - '1.16.5'
validations: validations:

View File

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

View File

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

View File

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

View File

@ -22,30 +22,20 @@ import com.plotsquared.bukkit.queue.GenChunk;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.BukkitWorld; import com.plotsquared.bukkit.util.BukkitWorld;
import com.plotsquared.core.PlotSquared; import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.generator.ClassicPlotWorld;
import com.plotsquared.core.generator.GeneratorWrapper; import com.plotsquared.core.generator.GeneratorWrapper;
import com.plotsquared.core.generator.IndependentPlotGenerator; import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.generator.SingleWorldGenerator; import com.plotsquared.core.generator.SingleWorldGenerator;
import com.plotsquared.core.location.ChunkWrapper; import com.plotsquared.core.location.ChunkWrapper;
import com.plotsquared.core.location.UncheckedWorldLocation;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator; import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.util.ChunkManager; import com.plotsquared.core.util.ChunkManager;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.BlockVector2; 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.World;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
import org.bukkit.generator.BiomeProvider;
import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import org.bukkit.generator.WorldInfo;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -54,8 +44,6 @@ import java.util.Set;
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> { public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final boolean PAPER_ASYNC_SAFE = true; public final boolean PAPER_ASYNC_SAFE = true;
@ -64,15 +52,9 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
private final ChunkGenerator platformGenerator; private final ChunkGenerator platformGenerator;
private final boolean full; private final boolean full;
private final String levelName; private final String levelName;
private final boolean useNewGenerationMethods;
private final BiomeProvider biomeProvider;
private List<BlockPopulator> populators; private List<BlockPopulator> populators;
private boolean loaded = false; private boolean loaded = false;
private PlotArea lastPlotArea;
private int lastChunkX = Integer.MIN_VALUE;
private int lastChunkZ = Integer.MIN_VALUE;
public BukkitPlotGenerator( public BukkitPlotGenerator(
final @NonNull String name, final @NonNull String name,
final @NonNull IndependentPlotGenerator generator, final @NonNull IndependentPlotGenerator generator,
@ -90,23 +72,18 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator)); this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator));
} }
this.full = true; 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) { public BukkitPlotGenerator(final String world, final ChunkGenerator cg, final @NonNull PlotAreaManager plotAreaManager) {
if (cg instanceof BukkitPlotGenerator) { if (cg instanceof BukkitPlotGenerator) {
throw new IllegalArgumentException("ChunkGenerator: " + cg throw new IllegalArgumentException("ChunkGenerator: " + cg.getClass().getName()
.getClass() + " is already a BukkitPlotGenerator!");
.getName() + " is already a BukkitPlotGenerator!");
} }
this.plotAreaManager = plotAreaManager; this.plotAreaManager = plotAreaManager;
this.levelName = world; this.levelName = world;
this.full = false; this.full = false;
this.platformGenerator = cg; this.platformGenerator = cg;
this.plotGenerator = new DelegatePlotGenerator(cg, world); this.plotGenerator = new DelegatePlotGenerator(cg, world);
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
this.biomeProvider = null;
} }
@Override @Override
@ -134,7 +111,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
try { try {
checkLoaded(world); checkLoaded(world);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("Error attempting to load world into PlotSquared.", e); e.printStackTrace();
} }
ArrayList<BlockPopulator> toAdd = new ArrayList<>(); ArrayList<BlockPopulator> toAdd = new ArrayList<>();
List<BlockPopulator> existing = world.getPopulators(); List<BlockPopulator> existing = world.getPopulators();
@ -151,7 +128,6 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
return toAdd; return toAdd;
} }
// Extracted to synchronized method for thread-safety, preventing multiple internal world load calls
private synchronized void checkLoaded(@NonNull World world) { private synchronized void checkLoaded(@NonNull World world) {
// Do not attempt to load configurations until WorldEdit has a platform ready. // Do not attempt to load configurations until WorldEdit has a platform ready.
if (!PlotSquared.get().isWeInitialised()) { if (!PlotSquared.get().isWeInitialised()) {
@ -177,7 +153,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
} }
} }
@SuppressWarnings("deprecation") // Kept for compatibility with <=1.17.1 @SuppressWarnings("deprecation")
private void setSpawnLimits(@NonNull World world, int limit) { private void setSpawnLimits(@NonNull World world, int limit) {
world.setAmbientSpawnLimit(limit); world.setAmbientSpawnLimit(limit);
world.setAnimalSpawnLimit(limit); world.setAnimalSpawnLimit(limit);
@ -186,112 +162,10 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
} }
@Override @Override
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( public @NonNull ChunkData generateChunkData(
@NonNull World world, @NonNull Random random, int x, int z, @NonNull BiomeGrid biome @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 minY = BukkitWorld.getMinWorldHeight(world);
int maxY = BukkitWorld.getMaxWorldHeight(world); int maxY = BukkitWorld.getMaxWorldHeight(world);
GenChunk result = new GenChunk(minY, maxY); GenChunk result = new GenChunk(minY, maxY);
@ -301,6 +175,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
for (int chunkZ = 0; chunkZ < 16; chunkZ++) { for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
for (int y = minY; y < maxY; y++) { for (int y = minY; y < maxY; y++) {
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS); biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
} }
} }
} }
@ -320,32 +195,35 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
if (this.platformGenerator != this) { if (this.platformGenerator != this) {
return this.platformGenerator.generateChunkData(world, random, x, z, biome); return this.platformGenerator.generateChunkData(world, random, x, z, biome);
} else { } else {
generate(BlockVector2.at(x, z), world.getName(), result, true); generate(BlockVector2.at(x, z), world, result);
} }
} catch (Throwable e) { } catch (Throwable e) {
LOGGER.error("Error attempting to load world into PlotSquared.", e); e.printStackTrace();
} }
// Return the result data // Return the result data
return result.getChunkData(); return result.getChunkData();
} }
private void generate(BlockVector2 loc, String world, ZeroedDelegateScopedQueueCoordinator result, boolean biomes) { private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) {
// Load if improperly loaded // Load if improperly loaded
if (!this.loaded) { if (!this.loaded) {
synchronized (this) { checkLoaded(world);
PlotSquared.get().loadWorld(world, this);
}
} }
// Process the chunk // Process the chunk
if (ChunkManager.preProcessChunk(loc, result)) { if (ChunkManager.preProcessChunk(loc, result)) {
return; return;
} }
PlotArea area = getPlotArea(world, loc.getX(), loc.getZ()); 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);
}
try { try {
this.plotGenerator.generateChunk(result, area, biomes); this.plotGenerator.generateChunk(result, area);
} catch (Throwable e) { } catch (Throwable e) {
// Recover from generator error // Recover from generator error
LOGGER.error("Error attempting to generate chunk.", e); e.printStackTrace();
} }
ChunkManager.postProcessChunk(loc, result); ChunkManager.postProcessChunk(loc, result);
} }
@ -399,51 +277,4 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
return this.levelName; 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,10 +24,9 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.location.Location; import com.plotsquared.core.location.Location;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotId; import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator; import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.MathMan;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.biome.BiomeType;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Biome; import org.bukkit.block.Biome;
import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.BlockPopulator;
@ -50,11 +49,6 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
public void initialize(PlotArea area) { public void initialize(PlotArea area) {
} }
@Override
public BiomeType getBiome(final PlotArea settings, final int x, final int y, final int z) {
return null;
}
@Override @Override
public String getName() { public String getName() {
return this.chunkGenerator.getClass().getName(); return this.chunkGenerator.getClass().getName();
@ -66,7 +60,7 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
} }
@Override @Override
public void generateChunk(final ZeroedDelegateScopedQueueCoordinator result, PlotArea settings, boolean biomes) { public void generateChunk(final ScopedQueueCoordinator result, PlotArea settings) {
World world = BukkitUtil.getWorld(this.world); World world = BukkitUtil.getWorld(this.world);
Location min = result.getMin(); Location min = result.getMin();
int chunkX = min.getX() >> 4; 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.PlotArea;
import com.plotsquared.core.plot.world.SinglePlotArea; import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.queue.QueueCoordinator; import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator; import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.sk89q.worldedit.bukkit.BukkitWorld; import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.util.SideEffectSet; import com.sk89q.worldedit.util.SideEffectSet;
import org.bukkit.Chunk; import org.bukkit.Chunk;
@ -66,7 +66,7 @@ final class LegacyBlockStatePopulator extends BlockPopulator {
queue.setChunkObject(source); queue.setChunkObject(source);
Location min = UncheckedWorldLocation.at(world.getName(), chunkMinX, world.getMinHeight(), chunkMinZ); Location min = UncheckedWorldLocation.at(world.getName(), chunkMinX, world.getMinHeight(), chunkMinZ);
Location max = UncheckedWorldLocation.at(world.getName(), chunkMinX + 15, world.getMaxHeight(), chunkMinZ + 15); Location max = UncheckedWorldLocation.at(world.getName(), chunkMinX + 15, world.getMaxHeight(), chunkMinZ + 15);
ZeroedDelegateScopedQueueCoordinator offsetChunkQueue = new ZeroedDelegateScopedQueueCoordinator(queue, min, max); ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(queue, min, max);
this.plotGenerator.populateChunk(offsetChunkQueue, area); this.plotGenerator.populateChunk(offsetChunkQueue, area);
queue.enqueue(); 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.flag.types.BooleanFlag;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions; 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.TaskManager;
import com.plotsquared.core.util.task.TaskTime; import com.plotsquared.core.util.task.TaskTime;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockType;
import net.kyori.adventure.text.Component; 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.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
@ -110,6 +110,8 @@ import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class BlockEventListener implements Listener { public class BlockEventListener implements Listener {
@ -122,6 +124,11 @@ public class BlockEventListener implements Listener {
Material.TURTLE_EGG, Material.TURTLE_EGG,
Material.TURTLE_SPAWN_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 PlotAreaManager plotAreaManager;
private final WorldEdit worldEdit; private final WorldEdit worldEdit;
@ -160,7 +167,7 @@ public class BlockEventListener implements Listener {
} }
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null) { if (plot == null) {
if (area.isRoadFlags() && !area.getRoadFlag(RedstoneFlag.class)) { if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, RedstoneFlag.class, false)) {
event.setNewCurrent(0); event.setNewCurrent(0);
} }
return; return;
@ -266,26 +273,15 @@ public class BlockEventListener implements Listener {
BukkitPlayer pp = BukkitUtil.adapt(player); BukkitPlayer pp = BukkitUtil.adapt(player);
Plot plot = area.getPlot(location); Plot plot = area.getPlot(location);
if (plot != null) { if (plot != null) {
if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
.getMinBuildHeight()) && !Permissions
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
event.setCancelled(true); event.setCancelled(true);
pp.sendMessage( return;
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 (!plot.hasOwner()) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
); );
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -302,10 +298,7 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
); );
event.setCancelled(true); event.setCancelled(true);
plot.debug(player.getName() + " could not place " + event.getBlock().getType() plot.debug(player.getName() + " could not place " + event.getBlock().getType()
@ -332,10 +325,7 @@ public class BlockEventListener implements Listener {
} else if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) { } else if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
); );
event.setCancelled(true); event.setCancelled(true);
} }
@ -358,25 +348,14 @@ public class BlockEventListener implements Listener {
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) { .hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
plotPlayer.sendMessage( plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)
)
); );
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} else if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area } else if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
.getMinBuildHeight()) && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
event.setCancelled(true); event.setCancelled(true);
plotPlayer.sendMessage( return;
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 (!plot.hasOwner()) {
if (!Permissions if (!Permissions
@ -400,10 +379,7 @@ public class BlockEventListener implements Listener {
} }
plotPlayer.sendMessage( plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
)
); );
event.setCancelled(true); event.setCancelled(true);
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { } else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
@ -429,10 +405,7 @@ public class BlockEventListener implements Listener {
} }
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
)
); );
event.setCancelled(true); event.setCancelled(true);
} }
@ -470,6 +443,7 @@ public class BlockEventListener implements Listener {
case "TWISTING_VINES": case "TWISTING_VINES":
case "CAVE_VINES": case "CAVE_VINES":
case "VINE": case "VINE":
case "GLOW_BERRIES":
if (!plot.getFlag(VineGrowFlag.class)) { if (!plot.getFlag(VineGrowFlag.class)) {
plot.debug("Vine could not grow because vine-grow = false"); plot.debug("Vine could not grow because vine-grow = false");
event.setCancelled(true); event.setCancelled(true);
@ -560,18 +534,18 @@ public class BlockEventListener implements Listener {
if (plot == null) { if (plot == null) {
return; return;
} }
if (location.getY() >= area.getMaxBuildHeight() || location.getY() < area.getMinBuildHeight()) { if (!area.buildRangeContainsY(location.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) { if (SNOW.contains(event.getNewState().getType())) {
if (!plot.getFlag(SnowFormFlag.class)) { if (!plot.getFlag(SnowFormFlag.class)) {
plot.debug("Snow could not form because snow-form = false"); plot.debug("Snow could not form because snow-form = false");
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
} }
if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) { if (Tag.ICE.isTagged(event.getNewState().getType())) {
if (!plot.getFlag(IceFormFlag.class)) { if (!plot.getFlag(IceFormFlag.class)) {
plot.debug("Ice could not form because ice-form = false"); plot.debug("Ice could not form because ice-form = false");
event.setCancelled(true); event.setCancelled(true);
@ -596,9 +570,9 @@ public class BlockEventListener implements Listener {
return; return;
} }
Class<? extends BooleanFlag<?>> flag; Class<? extends BooleanFlag<?>> flag;
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) { if (SNOW.contains(event.getNewState().getType())) {
flag = SnowFormFlag.class; flag = SnowFormFlag.class;
} else if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) { } else if (Tag.ICE.isTagged(event.getNewState().getType())) {
flag = IceFormFlag.class; flag = IceFormFlag.class;
} else { } else {
return; return;
@ -706,14 +680,14 @@ public class BlockEventListener implements Listener {
return; return;
} }
Material blockType = block.getType(); Material blockType = block.getType();
if (org.bukkit.Tag.ICE.isTagged(blockType)) { if (Tag.ICE.isTagged(blockType)) {
if (!plot.getFlag(IceMeltFlag.class)) { if (!plot.getFlag(IceMeltFlag.class)) {
plot.debug("Ice could not melt because ice-melt = false"); plot.debug("Ice could not melt because ice-melt = false");
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
} }
if (org.bukkit.Tag.SNOW.isTagged(blockType)) { if (SNOW.contains(blockType)) {
if (!plot.getFlag(SnowMeltFlag.class)) { if (!plot.getFlag(SnowMeltFlag.class)) {
plot.debug("Snow could not melt because snow-melt = false"); plot.debug("Snow could not melt because snow-melt = false");
event.setCancelled(true); event.setCancelled(true);
@ -727,7 +701,7 @@ public class BlockEventListener implements Listener {
} }
return; return;
} }
if (org.bukkit.Tag.CORAL_BLOCKS.isTagged(blockType) || org.bukkit.Tag.CORALS.isTagged(blockType)) { if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType) || Tag.WALL_CORALS.isTagged(blockType)) {
if (!plot.getFlag(CoralDryFlag.class)) { if (!plot.getFlag(CoralDryFlag.class)) {
plot.debug("Coral could not dry because coral-dry = false"); plot.debug("Coral could not dry because coral-dry = false");
event.setCancelled(true); event.setCancelled(true);
@ -762,7 +736,7 @@ public class BlockEventListener implements Listener {
} }
return; return;
} }
if (toLocation.getY() >= toArea.getMaxBuildHeight() || toLocation.getY() < toArea.getMinBuildHeight()) { if (!toArea.buildRangeContainsY(toLocation.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -836,6 +810,11 @@ public class BlockEventListener implements Listener {
return; return;
} }
if (!area.buildRangeContainsY(location.getY())) {
event.setCancelled(true);
return;
}
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null || !plot.getFlag(CropGrowFlag.class)) { if (plot == null || !plot.getFlag(CropGrowFlag.class)) {
if (plot != null) { if (plot != null) {
@ -879,15 +858,16 @@ public class BlockEventListener implements Listener {
} }
for (Block block1 : event.getBlocks()) { for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation()); Location bloc = BukkitUtil.adapt(block1.getLocation());
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains( Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
bloc.getX() + relative.getBlockX(), if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
bloc.getZ() + relative.getBlockZ()
)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) { event.setCancelled(true);
return;
}
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -913,9 +893,8 @@ public class BlockEventListener implements Listener {
} }
for (Block block1 : event.getBlocks()) { for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation()); Location bloc = BukkitUtil.adapt(block1.getLocation());
if (bloc.isPlotArea() || bloc Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()) if (bloc.isPlotArea() || newLoc.isPlotArea()) {
.isPlotArea()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -929,15 +908,16 @@ public class BlockEventListener implements Listener {
} }
for (Block block1 : event.getBlocks()) { for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation()); Location bloc = BukkitUtil.adapt(block1.getLocation());
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains( Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
bloc.getX() + relative.getBlockX(), if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
bloc.getZ() + relative.getBlockZ()
)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) { event.setCancelled(true);
return;
}
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -961,6 +941,11 @@ public class BlockEventListener implements Listener {
Location location = BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation()); Location location = BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation());
if (location.isPlotRoad()) { if (location.isPlotRoad()) {
event.setCancelled(true); event.setCancelled(true);
return;
}
PlotArea area = location.getPlotArea();
if (area != null && !area.buildRangeContainsY(location.getY())) {
event.setCancelled(true);
} }
} }
} }
@ -1000,6 +985,10 @@ public class BlockEventListener implements Listener {
Plot plot = area.getOwnedPlot(location); Plot plot = area.getOwnedPlot(location);
if (!Objects.equals(plot, origin)) { if (!Objects.equals(plot, origin)) {
event.getBlocks().remove(i); event.getBlocks().remove(i);
continue;
}
if (!area.buildRangeContainsY(location.getY())) {
event.getBlocks().remove(i);
} }
} }
} }
@ -1091,25 +1080,29 @@ public class BlockEventListener implements Listener {
Plot plot = area.getOwnedPlot(location1); Plot plot = area.getOwnedPlot(location1);
if (player != null) { if (player != null) {
BukkitPlayer pp = BukkitUtil.adapt(player); BukkitPlayer pp = BukkitUtil.adapt(player);
if (area.notifyIfOutsideBuildArea(pp, location1.getY())) {
event.setCancelled(true);
return;
}
if (plot == null) { if (plot == null) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) { if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_BUILD_ROAD
)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
); );
event.setCancelled(true); event.setCancelled(true);
} }
} else if (!plot.hasOwner()) { } else if (!plot.hasOwner()) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) { if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_BUILD_UNOWNED
)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
); );
event.setCancelled(true); event.setCancelled(true);
} }
@ -1117,10 +1110,7 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
); );
event.setCancelled(true); event.setCancelled(true);
} }
@ -1207,7 +1197,10 @@ public class BlockEventListener implements Listener {
return true; return true;
} }
Plot plot = area.getOwnedPlot(blockLocation); Plot plot = area.getOwnedPlot(blockLocation);
return !Objects.equals(plot, origin); if (!Objects.equals(plot, origin)) {
return true;
}
return !area.buildRangeContainsY(location.getY());
}); });
} }
if (blocks.isEmpty()) { if (blocks.isEmpty()) {
@ -1244,22 +1237,12 @@ public class BlockEventListener implements Listener {
) && !(Objects.equals(currentLocation.getPlot(), plot))) { ) && !(Objects.equals(currentLocation.getPlot(), plot))) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)) Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
); );
event.setCancelled(true); event.setCancelled(true);
break; break;
} }
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) { if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
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); event.setCancelled(true);
break; break;
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -18,6 +18,7 @@
*/ */
package com.plotsquared.bukkit.listener; 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.EntityPathfindEvent;
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent; import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent; import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
@ -36,13 +37,15 @@ import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; 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.DoneFlag;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; 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.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions; import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.Component; import com.plotsquared.core.util.PlotFlagUtil;
import net.kyori.adventure.text.minimessage.tag.Tag; import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.TileState; import org.bukkit.block.TileState;
@ -231,17 +234,17 @@ public class PaperListener implements Listener {
Plot plot = location.getOwnedPlotAbs(); Plot plot = location.getOwnedPlotAbs();
if (plot == null) { if (plot == null) {
EntityType type = event.getType(); EntityType type = event.getType();
if (!area.isMobSpawning()) { // PreCreatureSpawnEvent **should** not be called for DROPPED_ITEM, just for the sake of consistency
if (type == EntityType.PLAYER) {
return;
}
if (type == EntityType.DROPPED_ITEM) { if (type == EntityType.DROPPED_ITEM) {
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
} }
if (!area.isMobSpawning()) {
if (type == EntityType.PLAYER) {
return;
}
if (type.isAlive()) { if (type.isAlive()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
@ -300,7 +303,7 @@ public class PaperListener implements Listener {
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer()); final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
plotPlayer.sendMessage( plotPlayer.sendMessage(
TranslatableCaption.of("errors.tile_entity_cap_reached"), TranslatableCaption.of("errors.tile_entity_cap_reached"),
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES))) Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
); );
event.setCancelled(true); event.setCancelled(true);
event.setBuild(false); event.setBuild(false);
@ -324,20 +327,21 @@ public class PaperListener implements Listener {
return; return;
} }
Location location = BukkitUtil.adapt(entity.getLocation()); Location location = BukkitUtil.adapt(entity.getLocation());
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) { PlotArea area = location.getPlotArea();
if (area == null) {
return; return;
} }
PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter); PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter);
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null) { if (plot == null) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) { if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_PROJECTILE_ROAD
)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
)
); );
entity.remove(); entity.remove();
event.setCancelled(true); event.setCancelled(true);
@ -346,10 +350,7 @@ public class PaperListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
)
); );
entity.remove(); entity.remove();
event.setCancelled(true); event.setCancelled(true);
@ -359,10 +360,7 @@ public class PaperListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver( Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
)
); );
entity.remove(); entity.remove();
event.setCancelled(true); event.setCancelled(true);
@ -411,4 +409,50 @@ 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,9 +26,7 @@ import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import net.kyori.adventure.text.Component; 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.bukkit.block.Banner; import org.bukkit.block.Banner;
import org.bukkit.block.Beacon; import org.bukkit.block.Beacon;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
@ -50,6 +48,10 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.checkerframework.checker.nullness.qual.NonNull; 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 { public class PaperListener113 extends PaperListener {
@Inject @Inject
@ -79,7 +81,7 @@ public class PaperListener113 extends PaperListener {
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer()); final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
plotPlayer.sendMessage( plotPlayer.sendMessage(
TranslatableCaption.of("errors.tile_entity_cap_reached"), TranslatableCaption.of("errors.tile_entity_cap_reached"),
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES))) Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
); );
event.setCancelled(true); event.setCancelled(true);
event.setBuild(false); event.setBuild(false);

View File

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

View File

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

View File

@ -0,0 +1,57 @@
/*
* 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.event.player.PlayerTeleportEvent;
import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.RegisteredListener; import org.bukkit.plugin.RegisteredListener;
import org.bukkit.potion.PotionEffectType;
import org.checkerframework.checker.index.qual.NonNegative; import org.checkerframework.checker.index.qual.NonNegative;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Arrays; import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.UUID; 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.ADVENTURE;
import static com.sk89q.worldedit.world.gamemode.GameModes.CREATIVE; import static com.sk89q.worldedit.world.gamemode.GameModes.CREATIVE;
@ -348,6 +348,14 @@ public class BukkitPlayer extends PlotPlayer<Player> {
return BukkitUtil.BUKKIT_AUDIENCES.player(this.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 @Override
public boolean canSee(final PlotPlayer<?> other) { public boolean canSee(final PlotPlayer<?> other) {
if (other instanceof ConsolePlayer) { if (other instanceof ConsolePlayer) {

View File

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

View File

@ -44,6 +44,7 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName()); private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName());
private final LimitedRegion limitedRegion; private final LimitedRegion limitedRegion;
private boolean useOtherRestoreTagMethod = false;
/** /**
* @since 6.9.0 * @since 6.9.0
@ -65,10 +66,18 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator {
CompoundTag tag = id.getNbtData(); CompoundTag tag = id.getNbtData();
StateWrapper sw = new StateWrapper(tag); StateWrapper sw = new StateWrapper(tag);
try { 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) { } catch (IllegalArgumentException e) {
LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e); LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e);
return false; 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; return result;

View File

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

View File

@ -56,7 +56,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
ItemMeta meta = null; ItemMeta meta = null;
if (item.getName() != null) { if (item.getName() != null) {
meta = stack.getItemMeta(); meta = stack.getItemMeta();
Component nameComponent = BukkitUtil.MINI_MESSAGE.deserialize(item.getName()); Component nameComponent = BukkitUtil.MINI_MESSAGE.parse(item.getName());
meta.setDisplayName(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(nameComponent)); meta.setDisplayName(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(nameComponent));
} }
if (item.getLore() != null) { 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.plot.PlotManager;
import com.plotsquared.core.queue.GlobalBlockQueue; import com.plotsquared.core.queue.GlobalBlockQueue;
import com.plotsquared.core.queue.QueueCoordinator; import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator; import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.util.ChunkManager; import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.RegionManager; import com.plotsquared.core.util.RegionManager;
import com.plotsquared.core.util.WorldUtil; 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); map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
AugmentedUtils.bypass( AugmentedUtils.bypass(
ignoreAugment, ignoreAugment,
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ZeroedDelegateScopedQueueCoordinator>() { () -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ScopedQueueCoordinator>() {
@Override @Override
public void run(ZeroedDelegateScopedQueueCoordinator value) { public void run(ScopedQueueCoordinator value) {
Location min = value.getMin(); Location min = value.getMin();
int bx = min.getX(); int bx = min.getX();
int bz = min.getZ(); int bz = min.getZ();

View File

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

View File

@ -24,6 +24,7 @@ import org.bukkit.Bukkit;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Map; import java.util.Map;
import java.util.Objects;
public class BukkitWorld implements World<org.bukkit.World> { public class BukkitWorld implements World<org.bukkit.World> {
@ -132,6 +133,14 @@ public class BukkitWorld implements World<org.bukkit.World> {
return world.hashCode(); 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() { public String toString() {
return "BukkitWorld(world=" + this.world + ")"; return "BukkitWorld(world=" + this.world + ")";
} }

View File

@ -98,6 +98,11 @@ public class FaweRegionManager extends BukkitRegionManager {
delegate.swap(pos1, pos2, swapPos, whenDone); 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 @Override
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) { public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) {
delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone); delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone);

View File

@ -43,6 +43,7 @@ dependencies {
api(libs.cloudServices) api(libs.cloudServices)
api(libs.arkitektonika) api(libs.arkitektonika)
api("com.intellectualsites.paster:Paster") api("com.intellectualsites.paster:Paster")
api("com.intellectualsites.informative-annotations:informative-annotations")
} }
tasks.processResources { tasks.processResources {
@ -53,6 +54,13 @@ tasks.processResources {
"date" to rootProject.grgit.head().dateTime.format(DateTimeFormatter.ofPattern("yy.MM.dd")) "date" to rootProject.grgit.head().dateTime.format(DateTimeFormatter.ofPattern("yy.MM.dd"))
) )
} }
doLast {
copy {
from(File("$rootDir/LICENSE"))
into("$buildDir/resources/main/")
}
}
} }
tasks { tasks {
@ -62,5 +70,7 @@ tasks {
opt.links("https://jd.adventure.kyori.net/api/4.9.3/") 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://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
opt.links("https://checkerframework.org/api/") 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.EventDispatcher;
import com.plotsquared.core.util.SchematicHandler; import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.query.PlotQuery; import com.plotsquared.core.util.query.PlotQuery;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.Template;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
@ -145,7 +145,7 @@ public class PlotAPI {
*/ */
public void sendConsoleMessage( public void sendConsoleMessage(
final @NonNull String message, final @NonNull String message,
final @NonNull TagResolver @NonNull ... replacements final @NonNull Template @NonNull ... replacements
) { ) {
ConsolePlayer.getConsole().sendMessage(StaticCaption.of(message), replacements); ConsolePlayer.getConsole().sendMessage(StaticCaption.of(message), replacements);
} }
@ -158,7 +158,7 @@ public class PlotAPI {
*/ */
public void sendConsoleMessage( public void sendConsoleMessage(
final @NonNull Caption caption, final @NonNull Caption caption,
final @NonNull TagResolver @NonNull ... replacements final @NonNull Template @NonNull ... replacements
) { ) {
ConsolePlayer.getConsole().sendMessage(caption, replacements); ConsolePlayer.getConsole().sendMessage(caption, replacements);
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -22,9 +22,6 @@ import com.plotsquared.core.configuration.caption.Caption;
import com.plotsquared.core.configuration.caption.LocaleHolder; import com.plotsquared.core.configuration.caption.LocaleHolder;
import com.plotsquared.core.configuration.caption.TranslatableCaption; import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.player.PlotPlayer; 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; import org.checkerframework.checker.nullness.qual.NonNull;
/** /**
@ -93,11 +90,6 @@ public enum CommandCategory implements Caption {
return this.caption.getComponent(localeHolder); 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 * Checks if a player has access to this command category
* *

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -36,9 +36,7 @@ import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.TimeUtil; import com.plotsquared.core.util.TimeUtil;
import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.Component; 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 org.checkerframework.checker.nullness.qual.NonNull;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@ -101,7 +99,7 @@ public class Load extends SubCommand {
// No schematics found: // No schematics found:
player.sendMessage( player.sendMessage(
TranslatableCaption.of("web.load_null"), TranslatableCaption.of("web.load_null"),
TagResolver.resolver("command", Tag.inserting(Component.text("/plot load"))) Template.of("command", "/plot load")
); );
return false; return false;
} }
@ -112,7 +110,7 @@ public class Load extends SubCommand {
// use /plot load <index> // use /plot load <index>
player.sendMessage( player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"), TranslatableCaption.of("invalid.not_valid_number"),
TagResolver.resolver("value", Tag.inserting(Component.text("(1, " + schematics.size() + ')'))) Template.of("value", "(1, " + schematics.size() + ')')
); );
return false; return false;
} }
@ -132,10 +130,7 @@ public class Load extends SubCommand {
plot.removeRunning(); plot.removeRunning();
player.sendMessage( player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid"), TranslatableCaption.of("schematics.schematic_invalid"),
TagResolver.resolver( Template.of("reason", "non-existent or not in gzip format")
"reason",
Tag.inserting(Component.text("non-existent or not in gzip format"))
)
); );
return; return;
} }
@ -166,7 +161,7 @@ public class Load extends SubCommand {
plot.removeRunning(); plot.removeRunning();
player.sendMessage( player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"), TranslatableCaption.of("commandconfig.command_syntax"),
TagResolver.resolver("value", Tag.inserting(Component.text("/plot load <index>"))) Template.of("value", "/plot load <index>")
); );
return false; return false;
} }
@ -217,9 +212,46 @@ public class Load extends SubCommand {
} }
player.sendMessage( player.sendMessage(
TranslatableCaption.of("web.load_list"), TranslatableCaption.of("web.load_list"),
TagResolver.resolver("command", Tag.inserting(Component.text("/plot load #"))) Template.of("command", "/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,9 +36,6 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotExpression; import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.task.RunnableVal2; import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3; 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.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -75,6 +72,7 @@ public class MainCommand extends Command {
commands.add(Buy.class); commands.add(Buy.class);
if (Settings.Web.LEGACY_WEBINTERFACE) { if (Settings.Web.LEGACY_WEBINTERFACE) {
LOGGER.warn("Legacy webinterface is used. Please note that it will be removed in future."); 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(Load.class);
commands.add(Confirm.class); commands.add(Confirm.class);
@ -123,6 +121,7 @@ public class MainCommand extends Command {
commands.add(Move.class); commands.add(Move.class);
commands.add(Condense.class); commands.add(Condense.class);
commands.add(Copy.class); commands.add(Copy.class);
commands.add(Chat.class);
commands.add(Trim.class); commands.add(Trim.class);
commands.add(Done.class); commands.add(Done.class);
commands.add(Continue.class); commands.add(Continue.class);
@ -312,7 +311,7 @@ public class MainCommand extends Command {
if (message != null) { if (message != null) {
player.sendMessage( player.sendMessage(
TranslatableCaption.of("errors.error"), TranslatableCaption.of("errors.error"),
TagResolver.resolver("value", Tag.inserting(Component.text(message))) net.kyori.adventure.text.minimessage.Template.of("value", message)
); );
} else { } else {
player.sendMessage( player.sendMessage(

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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