Compare commits

..

62 Commits

Author SHA1 Message Date
052ae37755 chore: Change maven group and artifact ID 2022-05-20 14:11:25 +02:00
7e4499e092 Merge branch 'v7' of https://github.com/IntellectualSites/PlotSquared into v7 2022-05-18 22:14:35 +02:00
396a1575d2 Merge branch 'v6' into v7 2022-05-18 22:13:29 +02:00
fc9fe1462f build: Back to snapshot for development 2022-05-18 22:07:22 +02:00
41f546ca6b build: Release 6.8.0 2022-05-18 22:05:31 +02:00
d037da33cb chore: Ignore .DS_Store files 2022-05-18 21:59:09 +02:00
dc2d08c67e build: Update release-drafter/release-drafter action to v5.20.0 (#3624)
* build: Update release-drafter/release-drafter action to v5.20.0

* Update release-drafter.yml

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-05-18 17:19:23 +02:00
953d57d1b5 Replace legacy color codes in flag examples (#3520) 2022-05-16 13:28:03 +01:00
96dfc27411 Fix lag caused when generating augmented worlds with roads (#3614)
- Begin by implementing forceSync to the queue system as we know the chunk will be accessible to edits in some cases (i.e. population).
 - Also implement custom SideEffectSets to override any decided by the default chunk consumer, as we do NOT want to update neighbours in population (this caused infinite generation to be required causing the lag and server death). We also do not want to enqueue the QueueCoordinator in AugmentedUtils as this would write to the world and update neighbours before we might want to (plus it's just used to restrict and offset the blocks being set)
 - Then implement disabling any biomes from being saved/set to the queue to prevent augmented worlds having their biomes overridden in roads
 - Consequently fix ScopedQueueCoordinator, preventing the y value of blocks being set from needlessly being changed, fixing road heights in augmented worlds
 - Finally we do not need a method with chunkObject in the signature in AugmentedUtils as this is no longer used by the method
2022-05-16 13:27:41 +01:00
171d2e5e99 Fix generation of augmented/partial worlds when single worlds are enabled (#3615) 2022-05-16 13:21:43 +01:00
4433892431 fix: Block Endermites from spawning if mob spawning is disabled (#3623) 2022-05-16 13:20:03 +01:00
b53d2d03a4 Merge branch 'v6' into v7 2022-05-15 15:41:17 +02:00
c1431c0971 build: Update to Paper 1.18.2 (#3622)
build: Align MM and Adventure version
2022-05-15 12:31:40 +02:00
98a07dad1b Fix plot analysis (#3618)
* Fix plot analysis
 - Stop using deprecated ChunkQueueCoordinator and create a new purpose-built coordinator
 - Generation is chunk-by-chunk thus the old blocks cache needs to be filled accordingly
 - Remove the **four** System#gc calls
 - Fixes #3464
 - Fix really weird dumb... maths? in ExpiryTask
 - Fixes #3600

* Add since annotation

* Address comments and maxY should be inclusive

* Annotate new queue as internal use only
2022-05-15 11:58:04 +02:00
0ffa22b7a6 Deprecations to Queues (#3613)
* Deprecations and niceties
 - Deprecate ScopedQueueCoordinator as it is poorly named
 - Deprecate ChunkQueueCoordinator for complete removal as it is poorly designed (though still used)

* Add since tags
2022-05-15 11:57:26 +02:00
60a0129fe9 Correctly use yIndex when regenerating plots in certain world configurations (#3601)
- Fixes #3597
2022-05-15 11:42:19 +02:00
62ee60a76c Update MiniMessage to 4.10.1 (#3617)
* chore!: bump MiniMessage to 4.10.1

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

* chore: fix minimessage messages, fix circular method reference
2022-05-14 17:05:28 +02:00
d5f8a0842b make y location of homes always absolute part 2 (#3620) 2022-05-13 15:46:52 +02:00
f7d55ce105 Implement restoring tags directly using a supplied block (#3616)
- Reduces overhead when setting blocks via fallback
 - Also means blocks will not be accessed via world when they should be access via chunk (https://github.com/IntellectualSites/PlotSquared/pull/3612)
2022-05-11 13:12:19 +01:00
85911646f3 Add ability to disable random Mojang uuid API calls (#3586)
* feature: ability to disable impromtu Mojang uuid API calls

* refactor: update comment for the new setting
2022-05-11 13:11:57 +01:00
8b75dece69 Implement chunkObject into queueing (#3612) 2022-05-11 13:11:38 +01:00
7d6e515ba8 Improvements to /plot list command (#3585)
* refactor: list command shows owner better
added check for:
- unknown owners (UUID not cached/invalid)
- server plots
- plots owner by everyone

* fix: show correct color in list command if plot is owned by everyone

* refactor: improved List command for server plots

(cherry picked from commit fed700f0d8)

* refactor: removed duplicate code

* refactor: renamed placeholders to reflect their use

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-05-10 09:50:27 +02:00
13d7357c85 Niceties
- Better ordering of augmented information printed to consol on startup
 - Override
2022-05-10 01:43:01 +01:00
16e26b910c build: Update dependency com.github.spotbugs:spotbugs-annotations to v4.7.0 (#3606)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-09 13:53:59 +02:00
faadebd30e chore: Update my name (#3599) 2022-05-07 15:56:24 +02:00
2aeacb3dcf build: Back to snapshot for development 2022-05-05 10:07:58 +02:00
9db7791835 build: Release 6.7.0 2022-05-05 09:58:14 +02:00
f49ddb819d Add Plot flag for projectiles (#3581)
* feature: add flag for projectiles

* build: add License to ProjectilesFlag.java

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-05-04 23:21:24 +02:00
d71c62771e build: Update dependency org.checkerframework:checker-qual to v3.22.0 (#3595)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-03 09:58:14 +02:00
a6aaa9538f Set plot biome chunk by chunk (#3590)
* Actually set plot biome chunk by chunk

* Better variable name for chunk position
2022-04-30 14:16:58 +02:00
0974fb2834 [ci skip] build: Update com.fastasyncworldedit to v2.1.2 (#3588)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-25 16:56:30 +02:00
8982b33b6c build: Update github/codeql-action action to v2 (#3589)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-25 15:59:30 +02:00
a7b3b3b7df build: Back to snapshot for development 2022-04-19 08:50:50 +02:00
888bb20e78 build: Release 6.6.3 2022-04-19 08:45:44 +02:00
b11bb6fa22 make y location of homes always absolute (#3568) 2022-04-19 00:48:51 +02:00
e5764b958d build: Replace jsr305 with spotbugs (#3576) 2022-04-19 00:48:23 +02:00
bfe3141ff1 style: Emphasize project icon in idea selection (#3577) 2022-04-19 00:47:38 +02:00
73c82deeb0 build: Switch back to upstream SquirrelID (#3575) 2022-04-19 00:46:39 +02:00
38682ecff6 fix: share the QueueCoordinator in PlotModificationManager#unlinkPlot (#3571)
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-04-15 07:01:53 +00:00
6a54dc7eff fix: typo (MaxBuildHeight -> MinBuildHeight) (#3572) 2022-04-15 08:59:01 +02:00
8454c29c91 fix: Make PlayerManager#resolveName blocking for entry title (#3556) 2022-04-11 14:38:02 +00:00
b2c9311a47 build: Update com.fastasyncworldedit to v2.1.1 (#3562)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-04 15:32:02 +02:00
c4aa497a2b build: Update actions/setup-java action to v3.1.0 (#3563)
* build: Update actions/setup-java action to v3.1.0

* Update build.yml

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-04-04 15:31:53 +02:00
c13f544390 build: Back to snapshot for development 2022-04-04 13:03:49 +02:00
c28177d6af build: Release 6.6.2 2022-04-04 12:56:13 +02:00
8a80f252cf chore: Fill in since TODOs 2022-04-04 12:54:42 +02:00
93571c72d1 build: Update dependency org.checkerframework:checker-qual to v3.21.4 (#3561)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-04 12:47:38 +02:00
6fd7379221 build: Update dependency gradle to v7.4.2 (#3560)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-04-04 12:46:49 +02:00
dc5c80d812 clean up PlayerCommandPreprocess listener (#3557) 2022-04-01 19:30:37 +02:00
96e9a61e7c refactor: Deprecate Load#secToTime() (#3558) 2022-04-01 19:30:11 +02:00
b9bd9b81e6 Make confirm tasks synchronous. It was changed in 7ac3f7ca03 (#3551) 2022-03-23 15:04:39 +01:00
ec77812879 build: Update com.sk89q.worldedit to v7.2.10 (#3554)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-21 11:49:34 +01:00
efc2083798 Change the default sign orientation to better match the wall location 2022-03-15 16:25:40 +00:00
3a6f845c01 Use correct field for unsaved in 1.18 2022-03-15 16:25:23 +00:00
7efd42ae45 build: Ignore kyori updates until we update MM
Closes #3543
2022-03-14 20:09:52 +01:00
f43f4cbf5d build: Update com.fastasyncworldedit to v2.1.0 (#3541)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-14 15:36:43 +01:00
104cc4b7a4 build: Update dependency net.essentialsx:EssentialsX to v2.19.4 (#3540)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-14 12:40:03 +01:00
218be43143 build: Update dependency gradle to v7.4.1 (#3539)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-14 12:39:46 +01:00
308dba5601 Only add extent to WE operations once (#3537) 2022-03-10 22:40:09 +01:00
5f233bb5d1 Use new FAWE method including actor for schematic pasting 2022-03-09 16:31:33 +01:00
5e188d114f build: Misc dependency updates 2022-03-08 20:50:19 +01:00
660e05d27f build: Back to snapshot for development 2022-03-08 20:21:23 +01:00
159 changed files with 2987 additions and 1606 deletions

View File

@ -26,12 +26,12 @@ jobs:
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v1
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v2

8
.gitignore vendored
View File

@ -41,7 +41,8 @@ hs_err_pid*
*.iml
## Directory-based project format:
.idea/
/.idea/*
!/.idea/icon.svg
# if you remove the above rule, at least ignore the following:
# User-specific stuff:
@ -74,9 +75,6 @@ hs_err_pid*
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
@ -135,3 +133,5 @@ classes/
*.bat
docs/
build/
.DS_Store

49
.idea/icon.svg generated Normal file
View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 4000 3333.3333" height="3333.3333" width="4000" xml:space="preserve" id="svg2" version="1.1">
<metadata id="metadata8">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs id="defs6">
<clipPath id="clipPath18" clipPathUnits="userSpaceOnUse">
<path id="path16" d="M 0,2500 H 3000 V 0 H 0 Z" />
</clipPath>
</defs>
<g transform="matrix(1.3333333,0,0,-1.3333333,0,3333.3333)" id="g10">
<g id="g12">
<g clip-path="url(#clipPath18)" id="g14">
<g transform="translate(1486.1511,2242.6453)" id="g20">
<path id="path22" style="fill:#2b3f56;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 16.533,10.846 33.211,21.453 50.104,31.699 78.972,-48.281 153.985,-102.704 227.269,-159.144 148.61,-115.422 287.884,-243.01 414.393,-382.333 111.39,-122.861 212.751,-255.152 298.898,-396.971 52.744,-87.322 100.544,-177.884 139.514,-272.214 -11.638,-3.551 -23.108,-7.655 -34.362,-12.286 l -0.24,0.288 c -11.135,12.982 -24.141,24.212 -34.915,37.506 -22.557,23.013 -45.425,45.737 -68.03,68.678 -19.725,20.253 -40.601,39.45 -58.958,60.974 -36.355,36.451 -72.517,73.093 -108.944,109.471 -22.628,26.013 -48.064,49.385 -71.965,74.197 -19.029,19.485 -38.706,38.346 -57.519,57.999 -12.166,14.998 -26.684,27.716 -39.93,41.658 -27.668,27.524 -54.903,55.479 -82.571,82.979 -23.924,27.956 -51.664,52.264 -76.692,79.164 -4.68,4.487 -8.855,10.774 -15.886,11.326 -22.34,34.027 -58.311,57.327 -97.377,67.502 -104.312,99.153 -215.487,191.202 -332.661,274.782 -117.942,-83.94 -229.476,-176.781 -334.484,-276.39 -26.684,-0.024 -53.368,0.024 -80.076,-0.024 0.024,-26.564 0.048,-53.104 0,-79.668 -72.229,-73.021 -139.491,-150.937 -202.385,-232.092 -63.758,-82.619 -121.973,-169.51 -173.541,-260.264 131.932,-69.061 257.864,-149.521 375.926,-240.275 0.096,-26.444 -0.12,-52.888 0.096,-79.332 l 0.744,-0.984 c 20.109,-24.14 43.409,-45.233 65.126,-67.861 15.118,-15.382 30.571,-30.404 45.569,-45.881 17.565,-20.733 37.698,-39.042 56.607,-58.503 19.917,-20.781 41.25,-40.218 59.967,-62.151 29.156,-29.299 58.167,-58.815 87.515,-87.922 29.155,-33.043 61.502,-63.111 92.169,-94.738 13.726,-12.67 25.124,-27.571 38.634,-40.457 25.029,-25.365 50.129,-50.657 75.325,-75.853 -37.914,-51.208 -73.741,-103.952 -107.192,-158.183 -167.83,273.317 -397.235,507.305 -662.37,687.158 -81.875,55.335 -167.23,105.584 -255.681,149.641 -52.815,26.276 -106.831,50.248 -162.239,70.381 99.393,233.628 242.795,446.715 410.289,636.79 93.562,106.088 194.634,205.433 301.466,298.13 C -217.335,-155.808 -111.439,-73.789 0,0" />
</g>
<g transform="translate(1201.7948,1741.5303)" id="g24">
<path id="path26" style="fill:#5693ce;fill-opacity:1;fill-rule:nonzero;stroke:none" d="M 0,0 C 105.008,99.609 216.543,192.45 334.485,276.39 451.659,192.81 562.833,100.76 667.146,1.608 c -34.987,8.83 -71.51,9.718 -107.264,6.431 -41.202,-4.296 -82.907,-19.077 -112.543,-48.953 -33.019,-32.155 -49.456,-77.604 -55.311,-122.501 -28.124,27.908 -56.104,55.983 -84.035,84.083 -2.976,2.976 -6.839,4.823 -10.391,6.911 -19.029,26.348 -45.953,46.673 -76.62,57.495 C 187.555,-2.472 151.513,-0.12 116.166,0 Z" />
</g>
<g transform="translate(919.3342,1429.7462)" id="g28">
<path id="path30" style="fill:#5693ce;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 62.894,81.156 130.156,159.072 202.385,232.092 0.048,-244.21 0.024,-488.421 0,-732.631 C 84.323,-409.785 -41.61,-329.325 -173.541,-260.264 -121.973,-169.51 -63.758,-82.619 0,0" />
</g>
<g transform="translate(1649.134,1700.6166)" id="g32">
<path id="path34" style="fill:#feeeef;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 29.635,29.875 71.341,44.657 112.543,48.952 35.754,3.288 72.277,2.4 107.263,-6.431 39.066,-10.174 75.037,-33.474 97.377,-67.501 11.879,-17.661 20.181,-37.411 26.42,-57.687 10.871,-38.802 11.95,-79.356 11.446,-119.358 -44.345,-0.072 -88.69,0.048 -133.035,-0.072 -1.032,30.907 3.263,63.686 -10.175,92.626 -9.526,20.325 -32.107,31.243 -53.751,32.131 -21.453,1.44 -45.065,-4.32 -59.175,-21.597 -12.79,-15.861 -15.382,-37.002 -16.558,-56.655 -1.295,-29.132 3.696,-59.031 17.518,-84.923 16.821,-30.619 39.378,-57.783 64.526,-81.9 31.387,-32.634 67.501,-60.374 97.857,-94.041 27.332,-28.988 51.256,-61.479 68.005,-97.785 20.541,-41.13 26.972,-87.827 25.82,-133.372 -0.912,-32.107 -5.231,-64.406 -16.149,-94.737 -11.59,-31.699 -31.123,-61.047 -58.335,-81.371 -25.124,-19.125 -55.696,-29.852 -86.651,-34.771 -49.552,-6.743 -101.888,-4.847 -148.465,14.854 -35.227,14.829 -64.238,42.689 -81.708,76.548 -20.996,40.242 -27.115,86.339 -27.259,131.212 0.048,17.829 0,35.658 0.048,53.463 44.345,0.048 88.69,-0.023 133.059,0.048 1.728,-35.538 -4.055,-72.06 5.663,-106.807 5.783,-22.173 26.204,-37.794 48.185,-41.754 20.733,-3.431 43.577,-2.015 61.622,9.791 15.502,9.43 23.949,26.78 26.78,44.225 5.903,35.922 1.872,74.293 -15.381,106.688 -16.918,30.595 -39.474,57.711 -64.55,81.899 -33.187,34.099 -71.173,63.254 -102.585,99.081 -26.756,28.867 -49.408,61.646 -65.486,97.641 -24.572,52.48 -26.731,112.422 -20.18,169.102 C -49.456,-77.604 -33.019,-32.155 0,0" />
</g>
<g transform="translate(1262.7214,1613.126)" id="g36">
<path id="path38" style="fill:#feeeef;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 v -301.13 c 23.204,0.024 46.409,-0.048 69.613,0.024 18.525,0.288 38.202,6.575 50.153,21.429 12.43,17.277 13.917,39.522 14.613,60.111 0.024,43.985 -0.048,87.994 0.024,131.979 -0.48,23.637 -0.983,50.369 -17.277,69.23 C 104.864,-5.711 86.867,-0.24 69.589,0 46.385,0.048 23.204,0.024 0,0 m -141.002,128.38 c 26.708,0.048 53.392,0 80.075,0.024 H 55.24 c 35.346,-0.12 71.389,-2.471 104.815,-14.925 30.668,-10.823 57.592,-31.148 76.621,-57.496 26.852,-39.09 36.69,-87.202 38.058,-133.947 0.024,-48.833 0.096,-97.689 -0.024,-146.521 -1.728,-47.993 -11.974,-97.953 -41.514,-136.971 -22.748,-30.644 -57.495,-50.801 -94.281,-59.583 -45.377,-11.878 -92.578,-6.791 -138.891,-7.847 -0.072,-111.799 0,-223.574 -0.024,-335.373 -13.942,0 -27.86,0.024 -41.778,-0.024 -32.802,0.072 -65.605,0 -98.384,0.048 l -0.744,0.984 c -0.216,26.444 0,52.888 -0.096,79.332 0.024,244.211 0.048,488.421 0,732.632 0.048,26.563 0.024,53.103 0,79.667" />
</g>
<g transform="translate(1966.3174,1675.6364)" id="g40">
<path id="path42" style="fill:#2a3746;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 7.031,-0.552 11.206,-6.839 15.885,-11.326 25.029,-26.9 52.768,-51.208 76.693,-79.164 27.667,-27.5 54.903,-55.456 82.571,-82.979 13.246,-13.942 27.764,-26.66 39.93,-41.658 18.813,-19.653 38.49,-38.514 57.519,-57.999 23.9,-24.812 49.337,-48.185 71.965,-74.197 36.427,-36.378 72.589,-73.02 108.943,-109.471 18.358,-21.524 39.234,-40.722 58.959,-60.974 22.605,-22.941 45.473,-45.665 68.03,-68.678 10.774,-13.294 23.78,-24.524 34.914,-37.506 -103.904,-41.97 -203.488,-94.114 -298.922,-152.761 -246.994,-152.28 -466.224,-350.298 -639.333,-583.398 -25.197,25.196 -50.297,50.488 -75.325,75.852 -13.51,12.886 -24.908,27.788 -38.634,40.458 -30.667,31.627 -63.014,61.695 -92.17,94.738 -29.347,29.107 -58.359,58.623 -87.514,87.922 -18.717,21.933 -40.05,41.37 -59.967,62.151 -18.909,19.461 -39.042,37.77 -56.607,58.503 -14.998,15.477 -30.452,30.499 -45.569,45.88 -21.717,22.629 -45.017,43.722 -65.126,67.862 32.779,-0.048 65.582,0.024 98.384,-0.048 114.391,-98.097 220.407,-205.984 315.384,-322.99 92.914,114.318 196.242,220.022 307.753,316.271 30.955,4.919 61.526,15.646 86.65,34.771 27.212,20.325 46.745,49.672 58.335,81.371 107.312,77.988 219.327,149.929 337.509,210.376 -35.299,64.67 -75.829,126.437 -118.254,186.643 C 176.253,-228.037 104.24,-140.115 26.42,-57.687 20.181,-37.41 11.878,-17.661 0,0" />
</g>
<g transform="translate(1499.3971,1669.1094)" id="g44">
<path id="path46" style="fill:#3378bc;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 3.551,-2.088 7.415,-3.935 10.39,-6.911 27.932,-28.1 55.912,-56.175 84.036,-84.083 -6.551,-56.679 -4.392,-116.622 20.18,-169.102 16.078,-35.994 38.73,-68.774 65.486,-97.641 31.412,-35.826 69.398,-64.982 102.585,-99.081 25.076,-24.188 47.632,-51.304 64.55,-81.899 17.253,-32.395 21.284,-70.765 15.381,-106.688 -2.831,-17.445 -11.278,-34.794 -26.78,-44.225 -18.045,-11.806 -40.889,-13.222 -61.622,-9.79 -21.981,3.959 -42.402,19.58 -48.185,41.753 -9.718,34.747 -3.935,71.269 -5.663,106.808 -44.369,-0.072 -88.714,0 -133.059,-0.048 -0.048,-17.806 0,-35.635 -0.048,-53.464 0.144,-44.873 6.263,-90.97 27.259,-131.212 17.47,-33.859 46.481,-61.718 81.708,-76.548 46.577,-19.701 98.913,-21.597 148.465,-14.854 -111.511,-96.249 -214.839,-201.953 -307.753,-316.271 -94.977,117.006 -200.993,224.893 -315.383,322.99 13.918,0.048 27.836,0.024 41.777,0.024 0.024,111.799 -0.048,223.574 0.024,335.372 46.313,1.056 93.514,-4.031 138.891,7.847 36.786,8.783 71.533,28.94 94.282,59.583 29.539,39.018 39.785,88.978 41.513,136.971 0.12,48.833 0.048,97.689 0.024,146.522 C 36.69,-87.203 26.852,-39.09 0,0" />
</g>
<g transform="translate(1748.0469,1601.6797)" id="g48">
<path id="path50" style="fill:#3378bc;fill-opacity:1;fill-rule:nonzero;stroke:none" d="M 0,0 C 14.11,17.277 37.722,23.036 59.175,21.597 80.82,20.709 103.4,9.791 112.927,-10.534 c 13.438,-28.94 9.142,-61.719 10.174,-92.626 44.345,0.12 88.691,0 133.036,0.072 0.504,40.002 -0.576,80.556 -11.447,119.358 77.82,-82.428 149.833,-170.35 215.583,-262.664 42.426,-60.207 82.956,-121.973 118.254,-186.643 -118.182,-60.447 -230.196,-132.388 -337.508,-210.376 10.918,30.331 15.238,62.63 16.149,94.737 1.152,45.545 -5.279,92.242 -25.82,133.372 -16.749,36.306 -40.673,68.797 -68.005,97.785 -30.355,33.667 -66.47,61.406 -97.857,94.041 -25.148,24.117 -47.705,51.28 -64.526,81.9 -13.822,25.892 -18.813,55.791 -17.517,84.923 C -15.382,-37.002 -12.79,-15.862 0,0" />
</g>
<g transform="translate(1262.7214,1613.126)" id="g52">
<path id="path54" style="fill:#3378bc;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 0,0 c 23.204,0.024 46.385,0.048 69.589,0 17.278,-0.24 35.275,-5.711 47.537,-18.357 16.294,-18.861 16.797,-45.593 17.277,-69.23 -0.072,-43.985 0,-87.994 -0.024,-131.979 -0.696,-20.589 -2.183,-42.834 -14.613,-60.111 -11.951,-14.854 -31.628,-21.141 -50.153,-21.429 -23.204,-0.072 -46.409,0 -69.613,-0.024 z" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

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

View File

@ -18,7 +18,7 @@ repositories {
}
dependencies {
api(projects.plotSquaredCore)
api(projects.plotsquaredCore)
// Metrics
implementation(libs.bstats)
@ -83,7 +83,7 @@ tasks.named<ShadowJar>("shadowJar") {
relocate("org.jetbrains", "com.plotsquared.core.annotations")
relocate("org.intellij.lang", "com.plotsquared.core.intellij.annotations")
relocate("javax.annotation", "com.plotsquared.core.annotation")
relocate("com.google.code.findbugs", "com.plotsquared.core.findbugs")
relocate("com.github.spotbugs", "com.plotsquared.core.spotbugs")
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
// Get rid of all the libs which are 100% unused.

View File

@ -513,8 +513,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.backgroundPipeline.registerService(essentialsUUIDService);
}
final SquirrelIdUUIDService impromptuMojangService = new SquirrelIdUUIDService(Settings.UUID.IMPROMPTU_LIMIT);
this.impromptuPipeline.registerService(impromptuMojangService);
if (Settings.UUID.IMPROMPTU_SERVICE_MOJANG_API) {
final SquirrelIdUUIDService impromptuMojangService = new SquirrelIdUUIDService(Settings.UUID.IMPROMPTU_LIMIT);
this.impromptuPipeline.registerService(impromptuMojangService);
}
final SquirrelIdUUIDService backgroundMojangService = new SquirrelIdUUIDService(Settings.UUID.BACKGROUND_LIMIT);
this.backgroundPipeline.registerService(backgroundMojangService);
} else {

View File

@ -25,7 +25,11 @@
*/
package com.plotsquared.bukkit.generator;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.generator.AugmentedUtils;
import com.plotsquared.core.queue.QueueCoordinator;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.util.SideEffectSet;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
@ -52,7 +56,14 @@ public class BukkitAugmentedGenerator extends BlockPopulator {
@Override
public void populate(@NonNull World world, @NonNull Random random, @NonNull Chunk source) {
AugmentedUtils.generate(source, world.getName(), source.getX(), source.getZ(), null);
QueueCoordinator queue = PlotSquared.platform().globalBlockQueue().getNewQueue(BukkitAdapter.adapt(world));
// The chunk is already loaded and we do not want to load the chunk in "fully" by using any PaperLib methods.
queue.setForceSync(true);
queue.setSideEffectSet(SideEffectSet.none());
queue.setBiomesEnabled(false);
queue.setChunkObject(source);
AugmentedUtils.generateChunk(world.getName(), source.getX(), source.getZ(), queue);
queue.enqueue();
}
}

View File

@ -80,7 +80,8 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
result.setBiome(x, z, BukkitAdapter.adapt(biome));
}
//do not annotate with Override until we discontinue support for 1.4.4
//do not annotate with Override until we discontinue support for 1.4.4 (we no longer support 1.4.4)
@Override
public void setBiome(int x, int y, int z, @NonNull Biome biome) {
result.setBiome(x, z, BukkitAdapter.adapt(biome));

View File

@ -68,7 +68,9 @@ import com.plotsquared.core.util.task.TaskTime;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.block.BlockType;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
@ -285,15 +287,20 @@ public class BlockEventListener implements Listener {
event.setCancelled(true);
pp.sendMessage(
TranslatableCaption.of("height.height_limit"),
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
TagResolver.builder()
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
.build()
);
}
if (!plot.hasOwner()) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
return;
@ -310,7 +317,10 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
plot.debug(player.getName() + " could not place " + event.getBlock().getType()
@ -337,7 +347,10 @@ public class BlockEventListener implements Listener {
} else if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
);
event.setCancelled(true);
}
@ -360,7 +373,10 @@ public class BlockEventListener implements Listener {
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)
)
);
event.setCancelled(true);
return;
@ -371,8 +387,10 @@ public class BlockEventListener implements Listener {
event.setCancelled(true);
plotPlayer.sendMessage(
TranslatableCaption.of("height.height_limit"),
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
TagResolver.builder()
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
.build()
);
}
if (!plot.hasOwner()) {
@ -397,7 +415,10 @@ public class BlockEventListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
)
);
event.setCancelled(true);
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
@ -423,7 +444,10 @@ public class BlockEventListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
)
);
event.setCancelled(true);
}
@ -1099,7 +1123,10 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
);
event.setCancelled(true);
}
@ -1107,7 +1134,10 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1115,7 +1145,10 @@ public class BlockEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
}
@ -1239,7 +1272,7 @@ public class BlockEventListener implements Listener {
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
);
event.setCancelled(true);
break;
@ -1250,8 +1283,10 @@ public class BlockEventListener implements Listener {
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
pp.sendMessage(
TranslatableCaption.of("height.height_limit"),
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
TagResolver.builder()
.tag("minheight", Tag.inserting(Component.text(area.getMinBuildHeight())))
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
.build()
);
event.setCancelled(true);
break;

View File

@ -168,6 +168,7 @@ public class EntityEventListener implements Listener {
case "RAID":
case "SHEARED":
case "SILVERFISH_BLOCK":
case "ENDER_PEARL":
case "TRAP":
case "VILLAGE_DEFENSE":
case "VILLAGE_INVASION":

View File

@ -44,9 +44,12 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.Chunk;
import org.bukkit.block.Block;
import org.bukkit.block.TileState;
@ -195,6 +198,7 @@ public class PaperListener implements Listener {
case "RAID":
case "SHEARED":
case "SILVERFISH_BLOCK":
case "ENDER_PEARL":
case "TRAP":
case "VILLAGE_DEFENSE":
case "VILLAGE_INVASION":
@ -303,7 +307,7 @@ public class PaperListener implements Listener {
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
plotPlayer.sendMessage(
TranslatableCaption.of("errors.tile_entity_cap_reached"),
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
);
event.setCancelled(true);
event.setBuild(false);
@ -337,7 +341,10 @@ public class PaperListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
)
);
entity.remove();
event.setCancelled(true);
@ -346,19 +353,27 @@ public class PaperListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
)
);
entity.remove();
event.setCancelled(true);
}
} else if (!plot.isAdded(pp.getUUID())) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
);
entity.remove();
event.setCancelled(true);
if (!plot.getFlag(ProjectilesFlag.class)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
)
);
entity.remove();
event.setCancelled(true);
}
}
}
}

View File

@ -33,7 +33,9 @@ import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.block.Banner;
import org.bukkit.block.Beacon;
import org.bukkit.block.BlockState;
@ -84,7 +86,7 @@ public class PaperListener113 extends PaperListener {
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
plotPlayer.sendMessage(
TranslatableCaption.of("errors.tile_entity_cap_reached"),
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
);
event.setCancelled(true);
event.setBuild(false);

View File

@ -76,7 +76,6 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PremiumVerification;
import com.plotsquared.core.util.RegExUtil;
import com.plotsquared.core.util.entity.EntityCategories;
import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.util.task.TaskTime;
@ -85,7 +84,10 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.block.BlockType;
import io.papermc.lib.PaperLib;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.FluidCollisionMode;
@ -153,13 +155,11 @@ import org.bukkit.util.Vector;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Pattern;
/**
* Player Events involving plots.
@ -223,10 +223,9 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
}
@SuppressWarnings("StringSplitter")
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void playerCommand(PlayerCommandPreprocessEvent event) {
String msg = event.getMessage().toLowerCase().replaceAll("/", "").trim();
String msg = event.getMessage().replace("/", "").toLowerCase(Locale.ROOT).trim();
if (msg.isEmpty()) {
return;
}
@ -240,11 +239,9 @@ public class PlayerEventListener extends PlotListener implements Listener {
String[] parts = msg.split(" ");
Plot plot = plotPlayer.getCurrentPlot();
// Check WorldEdit
switch (parts[0].toLowerCase()) {
switch (parts[0]) {
case "up":
case "/up":
case "worldedit:up":
case "worldedit:/up":
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER, true))) {
event.setCancelled(true);
@ -258,63 +255,67 @@ public class PlayerEventListener extends PlotListener implements Listener {
List<String> blockedCommands = plot != null ?
plot.getFlag(BlockedCmdsFlag.class) :
area.getFlag(BlockedCmdsFlag.class);
if (!blockedCommands.isEmpty() && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
String part = parts[0];
if (parts[0].contains(":")) {
part = parts[0].split(":")[1];
msg = msg.replace(parts[0].split(":")[0] + ':', "");
}
String s1 = part;
List<String> aliases = new ArrayList<>();
for (HelpTopic cmdLabel : Bukkit.getServer().getHelpMap().getHelpTopics()) {
if (part.equals(cmdLabel.getName())) {
break;
}
String label = cmdLabel.getName().replaceFirst("/", "");
if (aliases.contains(label)) {
continue;
}
PluginCommand p;
if ((p = Bukkit.getPluginCommand(label)) != null) {
for (String a : p.getAliases()) {
if (aliases.contains(a)) {
continue;
}
aliases.add(a);
a = a.replaceFirst("/", "");
if (!a.equals(label) && a.equals(part)) {
part = label;
break;
}
}
}
}
if (!s1.equals(part)) {
msg = msg.replace(s1, part);
}
for (String s : blockedCommands) {
Pattern pattern;
if (!RegExUtil.compiledPatterns.containsKey(s)) {
RegExUtil.compiledPatterns.put(s, pattern = Pattern.compile(s));
if (blockedCommands.isEmpty()) {
return;
}
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
return;
}
// When using namespaced commands, we're not interested in the namespace
String part = parts[0];
if (part.contains(":")) {
String[] namespaced = part.split(":");
part = namespaced[1];
msg = msg.substring(namespaced[0].length() + 1);
}
msg = replaceAliases(msg, part);
for (String blocked : blockedCommands) {
if (blocked.equalsIgnoreCase(msg)) {
String perm;
if (plot != null && plot.isAdded(plotPlayer.getUUID())) {
perm = "plots.admin.command.blocked-cmds.shared";
} else {
pattern = RegExUtil.compiledPatterns.get(s);
perm = "plots.admin.command.blocked-cmds.road";
}
if (pattern.matcher(msg).matches()) {
String perm;
if (plot != null && plot.isAdded(plotPlayer.getUUID())) {
perm = "plots.admin.command.blocked-cmds.shared";
} else {
perm = "plots.admin.command.blocked-cmds.road";
if (!Permissions.hasPermission(plotPlayer, perm)) {
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
event.setCancelled(true);
}
return;
}
}
}
private String replaceAliases(String msg, String part) {
String s1 = part;
Set<String> aliases = new HashSet<>();
for (HelpTopic cmdLabel : Bukkit.getServer().getHelpMap().getHelpTopics()) {
if (part.equals(cmdLabel.getName())) {
break;
}
String label = cmdLabel.getName().replaceFirst("/", "");
if (aliases.contains(label)) {
continue;
}
PluginCommand p = Bukkit.getPluginCommand(label);
if (p != null) {
for (String a : p.getAliases()) {
if (aliases.contains(a)) {
continue;
}
if (!Permissions.hasPermission(plotPlayer, perm)) {
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
event.setCancelled(true);
aliases.add(a);
a = a.replaceFirst("/", "");
if (!a.equals(label) && a.equals(part)) {
part = label;
break;
}
return;
}
}
}
if (!s1.equals(part)) {
msg = msg.replace(s1, part);
}
return msg;
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@ -363,11 +364,15 @@ public class PlayerEventListener extends PlotListener implements Listener {
&& PremiumVerification.isPremium() && UpdateUtility.hasUpdate) {
Caption boundary = TranslatableCaption.of("update.update_boundary");
Caption updateNotification = TranslatableCaption.of("update.update_notification");
Template internalVersion = Template.of("p2version", UpdateUtility.internalVersion.versionString());
Template spigotVersion = Template.of("spigotversion", UpdateUtility.spigotVersion);
Template downloadUrl = Template.of("downloadurl", "https://www.spigotmc.org/resources/77506/updates");
pp.sendMessage(boundary);
pp.sendMessage(updateNotification, internalVersion, spigotVersion, downloadUrl);
pp.sendMessage(
updateNotification,
TagResolver.builder()
.tag("p2version", Tag.inserting(Component.text(UpdateUtility.internalVersion.versionString())))
.tag("spigotversion", Tag.inserting(Component.text(UpdateUtility.spigotVersion)))
.tag("downloadurl", Tag.preProcessParsed("https://www.spigotmc.org/resources/77506/updates"))
.build()
);
pp.sendMessage(boundary);
}
}
@ -419,7 +424,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
.equals(BukkitUtil.adaptComplete(to)))) {
pp.sendMessage(
TranslatableCaption.of("deny.no_enter"),
Template.of("plot", plot.toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
);
event.setCancelled(true);
}
@ -535,7 +540,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
)
);
this.tmpTeleport = false;
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
@ -553,7 +561,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
} else if (!plotEntry(pp, now) && this.tmpTeleport) {
pp.sendMessage(
TranslatableCaption.of("deny.no_enter"),
Template.of("plot", now.toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(now.toString())))
);
this.tmpTeleport = false;
to.setX(from.getBlockX());
@ -625,7 +633,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
)
);
this.tmpTeleport = false;
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
@ -643,7 +654,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
} else if (!plotEntry(pp, plot) && this.tmpTeleport) {
pp.sendMessage(
TranslatableCaption.of("deny.no_enter"),
Template.of("plot", plot.toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
);
this.tmpTeleport = false;
player.teleport(from);
@ -728,46 +739,34 @@ public class PlayerEventListener extends PlotListener implements Listener {
PlotId id = plot.getId();
String worldName = plot.getWorldName();
Caption msg = TranslatableCaption.of("chat.plot_chat_format");
Template msgTemplate;
Template worldNameTemplate = Template.of("world", worldName);
Template plotTemplate = Template.of("plot_id", id.toString());
Template senderTemplate = Template.of("sender", sender);
// If we do/don't want colour, we need to be careful about how to go about it, as players could attempt either <gold></gold> or &6 etc.
// In both cases, we want to use a Component Template to ensure that the player cannot use any placeholders in their message on purpose
// or accidentally, as component templates are done at the end. We also need to deserialize from legacy color codes to a Component if
// allowing colour.
TagResolver.Builder builder = TagResolver.builder();
builder.tag("world", Tag.inserting(Component.text(worldName)));
builder.tag("plot_id", Tag.inserting(Component.text(id.toString())));
builder.tag("sender", Tag.inserting(Component.text(sender)));
if (plotPlayer.hasPermission("plots.chat.color")) {
msgTemplate = Template
.of(
"msg",
BukkitUtil.LEGACY_COMPONENT_SERIALIZER.deserialize(ChatColor.translateAlternateColorCodes(
'&',
message
))
);
builder.tag("msg", Tag.inserting(MiniMessage.miniMessage().deserialize(
message,
TagResolver.resolver(StandardTags.color(), StandardTags.gradient(),
StandardTags.rainbow(), StandardTags.decorations()
)
)));
} else {
msgTemplate = Template.of("msg", BukkitUtil.MINI_MESSAGE.deserialize(
ChatColor.stripColor(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(Component.text(message)))));
builder.tag("msg", Tag.inserting(Component.text(message)));
}
for (PlotPlayer<?> receiver : plotRecipients) {
receiver.sendMessage(msg, worldNameTemplate, msgTemplate, plotTemplate, senderTemplate);
receiver.sendMessage(msg, builder.build());
}
if (!spies.isEmpty()) {
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
Template spysenderTemplate = Template.of("sender", sender);
Template spymessageTemplate = Template.of("msg", Component.text(message));
for (PlotPlayer<?> player : spies) {
player.sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate, spymessageTemplate);
player.sendMessage(spymsg, builder.tag("message", Tag.inserting(Component.text(message))).build());
}
}
if (Settings.Chat.LOG_PLOTCHAT_TO_CONSOLE) {
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
Template spysenderTemplate = Template.of("sender", sender);
Template spymessageTemplate = Template.of("msg", Component.text(message));
ConsolePlayer.getConsole().sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate,
spymessageTemplate
ConsolePlayer.getConsole().sendMessage(
spymsg,
builder.tag("message", Tag.inserting(Component.text(message))).build()
);
}
}
@ -921,7 +920,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
)
);
cancelled = true;
}
@ -929,7 +931,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
)
);
cancelled = true;
}
@ -939,7 +944,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
)
);
cancelled = true;
}
@ -977,7 +985,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
)
);
e.setCancelled(true);
}
@ -995,7 +1006,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, "plots.admin.interact.unowned")) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
)
);
e.setCancelled(true);
}
@ -1010,7 +1024,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
)
);
e.setCancelled(true);
plot.debug(pp.getName() + " could not interact with " + entity.getType()
@ -1134,7 +1151,8 @@ public class PlayerEventListener extends PlotListener implements Listener {
return;
}
switch (type) {
case ACACIA_BOAT, BIRCH_BOAT, CHEST_MINECART, COMMAND_BLOCK_MINECART, DARK_OAK_BOAT, FURNACE_MINECART, HOPPER_MINECART, JUNGLE_BOAT, MINECART, OAK_BOAT, SPRUCE_BOAT, TNT_MINECART -> eventType = PlayerBlockEventType.PLACE_VEHICLE;
case ACACIA_BOAT, BIRCH_BOAT, CHEST_MINECART, COMMAND_BLOCK_MINECART, DARK_OAK_BOAT, FURNACE_MINECART, HOPPER_MINECART, JUNGLE_BOAT, MINECART, OAK_BOAT, SPRUCE_BOAT, TNT_MINECART ->
eventType = PlayerBlockEventType.PLACE_VEHICLE;
case FIREWORK_ROCKET, FIREWORK_STAR -> eventType = PlayerBlockEventType.SPAWN_MOB;
case BOOK, KNOWLEDGE_BOOK, WRITABLE_BOOK, WRITTEN_BOOK -> eventType = PlayerBlockEventType.READ;
case ARMOR_STAND -> {
@ -1230,7 +1248,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
);
event.setCancelled(true);
} else if (!plot.hasOwner()) {
@ -1239,7 +1257,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
} else if (!plot.isAdded(pp.getUUID())) {
@ -1248,7 +1269,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
@ -1295,7 +1319,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
);
event.setCancelled(true);
} else if (!plot.hasOwner()) {
@ -1304,7 +1328,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
} else if (!plot.isAdded(plotPlayer.getUUID())) {
@ -1313,7 +1340,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
}
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
@ -1345,7 +1375,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
)
);
event.setCancelled(true);
}
@ -1354,7 +1387,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1365,7 +1401,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
)
);
event.setCancelled(true);
}
@ -1394,7 +1433,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
)
);
event.setCancelled(true);
}
@ -1402,7 +1444,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1413,7 +1458,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
)
);
event.setCancelled(true);
plot.debug(p.getName()
@ -1435,7 +1483,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
.hasPermission(player, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1445,7 +1496,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
.hasPermission(player, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
)
);
event.setCancelled(true);
plot.debug(player.getName()
@ -1477,7 +1531,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
)
);
event.setCancelled(true);
}
@ -1485,7 +1542,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
)
);
event.setCancelled(true);
}
@ -1543,7 +1603,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
)
);
event.setCancelled(true);
}
@ -1565,7 +1628,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)
)
);
event.setCancelled(true);
}
@ -1574,7 +1640,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)
)
);
event.setCancelled(true);
return;
@ -1588,7 +1657,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)
)
);
event.setCancelled(true);
plot.debug(pp.getName()

View File

@ -35,9 +35,12 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotHandler;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@ -113,7 +116,10 @@ public class ProjectileEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
)
);
entity.remove();
event.setCancelled(true);
@ -122,19 +128,27 @@ public class ProjectileEventListener implements Listener {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
)
);
entity.remove();
event.setCancelled(true);
}
} else if (!plot.isAdded(pp.getUUID())) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
);
entity.remove();
event.setCancelled(true);
if (!plot.getFlag(ProjectilesFlag.class)) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
)
);
entity.remove();
event.setCancelled(true);
}
}
}
}
@ -162,7 +176,7 @@ public class ProjectileEventListener implements Listener {
return;
}
if (plot.isAdded(pp.getUUID()) || Permissions
.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(ProjectilesFlag.class)) {
return;
}
entity.remove();

View File

@ -46,7 +46,7 @@ import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
public class SingleWorldListener implements Listener {
private final Method methodGetHandleChunk;
private Field shouldSave;
private Field shouldSave = null;
public SingleWorldListener() throws Exception {
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
@ -59,9 +59,12 @@ public class SingleWorldListener implements Listener {
} else {
this.shouldSave = classChunk.getField("s").getRealField();
}
} else {
} else if (PlotSquared.platform().serverVersion()[1] == 17) {
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
this.shouldSave = classChunk.getField("r").getRealField();
} else if (PlotSquared.platform().serverVersion()[1] == 18) {
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
this.shouldSave = classChunk.getField("b").getRealField();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();

View File

@ -76,10 +76,11 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
private final int totalSize;
private final AtomicInteger expectedSize;
private final AtomicInteger loadingChunks = new AtomicInteger();
private final boolean forceSync;
private int batchSize;
private PlotSquaredTask task;
private boolean shouldCancel;
private volatile boolean shouldCancel;
private boolean finished;
@Inject
@ -92,7 +93,8 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
@Assisted final @NonNull Runnable whenDone,
@Assisted final @NonNull Consumer<Throwable> throwableConsumer,
@Assisted final boolean unloadAfter,
@Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers
@Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers,
@Assisted final boolean forceSync
) {
this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks);
this.availableChunks = new LinkedBlockingQueue<>();
@ -107,14 +109,27 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
this.plugin = JavaPlugin.getPlugin(BukkitPlatform.class);
this.bukkitWorld = Bukkit.getWorld(world.getName());
this.progressSubscribers.addAll(progressSubscribers);
this.forceSync = forceSync;
}
@Override
public void start() {
// Request initial batch
this.requestBatch();
// Wait until next tick to give the chunks a chance to be loaded
TaskManager.runTaskLater(() -> task = TaskManager.runTaskRepeat(this, TaskTime.ticks(1)), TaskTime.ticks(1));
if (!forceSync) {
// Request initial batch
this.requestBatch();
// Wait until next tick to give the chunks a chance to be loaded
TaskManager.runTaskLater(() -> task = TaskManager.runTaskRepeat(this, TaskTime.ticks(1)), TaskTime.ticks(1));
} else {
try {
while (!shouldCancel && !requestedChunks.isEmpty()) {
chunkConsumer.accept(requestedChunks.poll());
}
} catch (Throwable t) {
throwableConsumer.accept(t);
} finally {
finish();
}
}
}
@Override
@ -131,7 +146,9 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
for (final ProgressSubscriber subscriber : this.progressSubscribers) {
subscriber.notifyEnd();
}
task.cancel();
if (task != null) {
task.cancel();
}
finished = true;
}
}

View File

@ -51,6 +51,7 @@ import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.block.Block;
import org.bukkit.block.Container;
import org.bukkit.block.data.BlockData;
@ -62,10 +63,27 @@ import java.util.function.Consumer;
public class BukkitQueueCoordinator extends BasicQueueCoordinator {
private final SideEffectSet noSideEffectSet;
private final SideEffectSet lightingSideEffectSet;
private final SideEffectSet edgeSideEffectSet;
private final SideEffectSet edgeLightingSideEffectSet;
private static final SideEffectSet NO_SIDE_EFFECT_SET;
private static final SideEffectSet EDGE_SIDE_EFFECT_SET;
private static final SideEffectSet LIGHTING_SIDE_EFFECT_SET;
private static final SideEffectSet EDGE_LIGHTING_SIDE_EFFECT_SET;
static {
NO_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with(
SideEffect.NEIGHBORS,
SideEffect.State.OFF
);
EDGE_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with(
SideEffect.NEIGHBORS,
SideEffect.State.ON
);
LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
EDGE_LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with(
SideEffect.NEIGHBORS,
SideEffect.State.ON
);
}
private org.bukkit.World bukkitWorld;
@Inject
private ChunkCoordinatorBuilderFactory chunkCoordinatorBuilderFactory;
@ -76,19 +94,6 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
@Inject
public BukkitQueueCoordinator(@NonNull World world) {
super(world);
noSideEffectSet = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with(
SideEffect.NEIGHBORS,
SideEffect.State.OFF
);
lightingSideEffectSet = SideEffectSet.none().with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
edgeSideEffectSet = noSideEffectSet.with(SideEffect.UPDATE, SideEffect.State.ON).with(
SideEffect.NEIGHBORS,
SideEffect.State.ON
);
edgeLightingSideEffectSet = noSideEffectSet.with(SideEffect.UPDATE, SideEffect.State.ON).with(
SideEffect.NEIGHBORS,
SideEffect.State.ON
);
}
@Override
@ -201,7 +206,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
localChunk.getTiles().forEach((blockVector3, tag) -> {
try {
BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag);
getWorld().setBlock(blockVector3, block, noSideEffectSet);
getWorld().setBlock(blockVector3, block, getSideEffectSet(SideEffectState.NONE));
} catch (WorldEditException ignored) {
StateWrapper sw = new StateWrapper(tag);
sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ());
@ -258,15 +263,21 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
}
SideEffectSet sideEffectSet;
if (lighting) {
sideEffectSet = edge ? edgeLightingSideEffectSet : lightingSideEffectSet;
sideEffectSet = getSideEffectSet(edge ? SideEffectState.EDGE_LIGHTING : SideEffectState.LIGHTING);
} else {
sideEffectSet = edge ? edgeSideEffectSet : noSideEffectSet;
sideEffectSet = getSideEffectSet(edge ? SideEffectState.EDGE : SideEffectState.NONE);
}
getWorld().setBlock(loc, block, sideEffectSet);
} catch (WorldEditException ignored) {
// Fallback to not so nice method
BlockData blockData = BukkitAdapter.adapt(block);
Block existing = getBukkitWorld().getBlockAt(x, y, z);
Block existing;
// Assume a chunk object has been given only when it should have been.
if (getChunkObject() instanceof Chunk chunkObject) {
existing = chunkObject.getBlock(x & 15, y, z & 15);
} else {
existing = getBukkitWorld().getBlockAt(x, y, z);
}
final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
return;
@ -282,7 +293,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
CompoundTag tag = block.getNbtData();
StateWrapper sw = new StateWrapper(tag);
sw.restoreTag(getWorld().getName(), existing.getX(), existing.getY(), existing.getZ());
sw.restoreTag(existing);
}
}
}
@ -375,4 +386,23 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
return false;
}
private SideEffectSet getSideEffectSet(SideEffectState state) {
if (getSideEffectSet() != null) {
return getSideEffectSet();
}
return switch (state) {
case NONE -> NO_SIDE_EFFECT_SET;
case EDGE -> EDGE_SIDE_EFFECT_SET;
case LIGHTING -> LIGHTING_SIDE_EFFECT_SET;
case EDGE_LIGHTING -> EDGE_LIGHTING_SIDE_EFFECT_SET;
};
}
private enum SideEffectState {
NONE,
EDGE,
LIGHTING,
EDGE_LIGHTING
}
}

View File

@ -44,6 +44,7 @@ import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
import java.util.HashMap;
@ -166,14 +167,32 @@ public class StateWrapper {
return str;
}
@SuppressWarnings("deprecation") // #setLine is needed for Spigot compatibility
/**
* Restore the TileEntity data to the given world at the given coordinates.
*
* @param worldName World name
* @param x x position
* @param y y position
* @param z z position
* @return true if successful
*/
public boolean restoreTag(String worldName, int x, int y, int z) {
if (this.tag == null) {
World world = BukkitUtil.getWorld(worldName);
if (world == null) {
return false;
}
World world = BukkitUtil.getWorld(worldName);
Block block = world.getBlockAt(x, y, z);
if (block == null) {
return restoreTag(world.getBlockAt(x, y, z));
}
/**
* Restore the TileEntity data to the given block
*
* @param block Block to restore to
* @return true if successful
*/
@SuppressWarnings("deprecation") // #setLine is needed for Spigot compatibility
public boolean restoreTag(@NonNull Block block) {
if (this.tag == null) {
return false;
}
org.bukkit.block.BlockState state = block.getState();

View File

@ -50,7 +50,9 @@ import com.plotsquared.core.util.EntityUtil;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.entity.EntityCategories;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity;
@ -188,7 +190,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
)
);
return false;
}
@ -200,7 +205,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName()
@ -221,7 +229,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType
@ -242,7 +253,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType
@ -256,7 +270,10 @@ public class BukkitEntityUtil {
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
)
);
plot.debug(player.getName() + " could not attack " + entityType
+ " because pve = false");
@ -270,7 +287,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
)
);
return false;
}
@ -287,7 +307,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType
@ -309,7 +332,10 @@ public class BukkitEntityUtil {
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
plotPlayer.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
)
);
if (plot != null) {
plot.debug(player.getName() + " could not attack " + entityType

View File

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

View File

@ -278,7 +278,7 @@ public class BukkitRegionManager extends RegionManager {
int minY = value.getMin().getY();
for (int yIndex = 0; yIndex < ids.length; yIndex++) {
int y = yIndex + minY;
BaseBlock id = ids[y];
BaseBlock id = ids[yIndex];
if (id != null) {
value.setBlock(x1, y, z1, id);
} else {

View File

@ -76,7 +76,7 @@ public class BukkitSetupUtils extends SetupUtils {
@Override
public void updateGenerators(final boolean force) {
if (!SetupUtils.generators.isEmpty() && !force) {
if (loaded && !SetupUtils.generators.isEmpty() && !force) {
return;
}
String testWorld = "CheckingPlotSquaredGenerator";
@ -100,6 +100,7 @@ public class BukkitSetupUtils extends SetupUtils {
e.printStackTrace();
}
}
loaded = true;
}
@Override

View File

@ -52,7 +52,7 @@ import com.sk89q.worldedit.world.block.BlockTypes;
import io.papermc.lib.PaperLib;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -339,7 +339,7 @@ public class BukkitUtil extends WorldUtil {
@SuppressWarnings("deprecation")
public void setSign(
final @NonNull Location location, final @NonNull Caption[] lines,
final @NonNull Template... replacements
final @NonNull TagResolver... replacements
) {
ensureLoaded(location.getWorldName(), location.getX(), location.getZ(), chunk -> {
PlotArea area = location.getPlotArea();
@ -347,13 +347,15 @@ public class BukkitUtil extends WorldUtil {
final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ());
final Material type = block.getType();
if (type != Material.LEGACY_SIGN && type != Material.LEGACY_WALL_SIGN) {
BlockFace facing = BlockFace.EAST;
if (world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) {
facing = BlockFace.NORTH;
} else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) {
facing = BlockFace.WEST;
} else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) {
facing = BlockFace.SOUTH;
BlockFace facing = BlockFace.NORTH;
if (!world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) {
if (world.getBlockAt(location.getX() - 1, location.getY(), location.getZ()).getType().isSolid()) {
facing = BlockFace.EAST;
} else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) {
facing = BlockFace.WEST;
} else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) {
facing = BlockFace.SOUTH;
}
}
if (PlotSquared.platform().serverVersion()[1] == 13) {
block.setType(Material.valueOf(area.legacySignMaterial()), false);
@ -370,8 +372,9 @@ public class BukkitUtil extends WorldUtil {
final org.bukkit.block.BlockState blockstate = block.getState();
if (blockstate instanceof final Sign sign) {
for (int i = 0; i < lines.length; i++) {
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER
.serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements)));
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER.serialize(
MINI_MESSAGE.deserialize(lines[i].getComponent(LocaleHolder.console()), replacements)
));
}
sign.update(true, false);
}

View File

@ -67,7 +67,7 @@ public class FaweSchematicHandler extends SchematicHandler {
final PlotPlayer<?> actor,
final RunnableVal<Boolean> whenDone
) {
delegate.paste(schematic, plot, xOffset, yOffset, zOffset, autoHeight, whenDone);
delegate.paste(schematic, plot, xOffset, yOffset, zOffset, autoHeight, actor, whenDone);
}
@Override

View File

@ -22,7 +22,7 @@ dependencies {
api(libs.guiceassistedinject) {
exclude("com.google.inject", "guice")
}
api(libs.findbugs)
api(libs.spotbugs)
// Plugins
compileOnly(libs.worldeditCore) {

View File

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

View File

@ -889,8 +889,8 @@ public class PlotSquared {
e.printStackTrace();
}
LOGGER.info("| generator: {}>{}", baseGenerator, areaGen);
LOGGER.info("| plot world: {}", pa);
LOGGER.info("| manager: {}", pa);
LOGGER.info("| plot world: {}", pa.getClass().getCanonicalName());
LOGGER.info("| manager: {}", pa.getPlotManager().getClass().getCanonicalName());
LOGGER.info("Note: Area created for cluster '{}' (invalid or old configuration?)", name);
areaGen.getPlotGenerator().initialize(pa);
areaGen.augment(pa);
@ -906,6 +906,13 @@ public class PlotSquared {
throw new IllegalArgumentException("Invalid Generator: " + gen_string);
}
PlotArea pa = areaGen.getPlotGenerator().getNewPlotArea(world, null, null, null);
LOGGER.info("- generator: {}>{}", baseGenerator, areaGen);
LOGGER.info("- plot world: {}", pa.getClass().getCanonicalName());
LOGGER.info("- plot area manager: {}", pa.getPlotManager().getClass().getCanonicalName());
if (!this.worldConfiguration.contains(path)) {
this.worldConfiguration.createSection(path);
worldSection = this.worldConfiguration.getConfigurationSection(path);
}
pa.saveConfiguration(worldSection);
pa.loadDefaultConfiguration(worldSection);
try {
@ -913,9 +920,6 @@ public class PlotSquared {
} catch (IOException e) {
e.printStackTrace();
}
LOGGER.info("- generator: {}>{}", baseGenerator, areaGen);
LOGGER.info("- plot world: {}", pa);
LOGGER.info("- plot area manager: {}", pa.getPlotManager());
areaGen.getPlotGenerator().initialize(pa);
areaGen.augment(pa);
addPlotArea(pa);

View File

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

View File

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

View File

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

View File

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

View File

@ -31,7 +31,6 @@ import com.plotsquared.core.configuration.ConfigurationSection;
import com.plotsquared.core.configuration.ConfigurationUtil;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.CaptionHolder;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.configuration.file.YamlConfiguration;
import com.plotsquared.core.events.TeleportCause;
@ -76,7 +75,9 @@ import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.world.World;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.File;
@ -148,14 +149,17 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_CREATE)
)
);
return false;
}
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("single.single_area_needs_name"),
Template.of("command", "/plot area single <name>")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot area single <name>")))
);
return false;
}
@ -287,7 +291,7 @@ public class Area extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("errors.error_create"),
Template.of("world", hybridPlotWorld.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(hybridPlotWorld.getWorldName())))
);
}
};
@ -298,7 +302,10 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_CREATE)
)
);
return false;
}
@ -306,7 +313,10 @@ public class Area extends SubCommand {
case 1:
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot area create [world[:id]] [<modifier>=<value>]..."))
)
);
return false;
case 2:
@ -320,7 +330,11 @@ public class Area extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
TagResolver.resolver(
"value",
Tag.inserting(Component.text(
"/plot area create [world[:id]] [<modifier>=<value>]..."))
)
);
return false;
}
@ -331,12 +345,18 @@ public class Area extends SubCommand {
);
player.sendMessage(
TranslatableCaption.of("set.set_attribute"),
Template.of("attribute", "area_pos1"),
Template.of("value", location.getX() + "," + location.getZ())
TagResolver.builder()
.tag("attribute", Tag.inserting(Component.text("area_pos1")))
.tag("value", Tag.inserting(
Component.text(location.getX())
.append(Component.text(","))
.append(Component.text(location.getZ()))
))
.build()
);
player.sendMessage(
TranslatableCaption.of("area.set_pos2"),
Template.of("command", "/plot area create pos2")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot area create pos2")))
);
return true;
}
@ -350,7 +370,11 @@ public class Area extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
TagResolver.resolver(
"value",
Tag.inserting(Component.text(
"/plot area create [world[:id]] [<modifier>=<value>]..."))
)
);
return false;
}
@ -377,7 +401,10 @@ public class Area extends SubCommand {
if (!areas.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_intersection"),
Template.of("cluster", areas.iterator().next().toString())
TagResolver.resolver(
"cluster",
Tag.inserting(areas.iterator().next())
)
);
return false;
}
@ -416,7 +443,7 @@ public class Area extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("errors.error_create"),
Template.of("world", area.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(area.getWorldName())))
);
}
};
@ -450,7 +477,7 @@ public class Area extends SubCommand {
if (other != null && Objects.equals(pa.getId(), other.getId())) {
player.sendMessage(
TranslatableCaption.of("setup.setup_world_taken"),
Template.of("value", pa.toString())
TagResolver.resolver("value", Tag.inserting(Component.text(pa.getId())))
);
return false;
}
@ -465,8 +492,13 @@ public class Area extends SubCommand {
if (pair.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1,", getCommandString()),
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag(
"value2",
Tag.inserting(Component.text("create [world[:id]] [<modifier>=<value>]..."))
)
.build()
);
return false;
}
@ -502,8 +534,14 @@ public class Area extends SubCommand {
default -> {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag(
"value2",
Tag.inserting(Component.text(
" create [world[:id]] [<modifier>=<value>]..."))
)
.build()
);
return false;
}
@ -513,7 +551,7 @@ public class Area extends SubCommand {
if (this.worldUtil.isWorld(pa.getWorldName())) {
player.sendMessage(
TranslatableCaption.of("setup.setup_world_taken"),
Template.of("value", pa.getWorldName())
TagResolver.resolver("value", Tag.inserting(Component.text(pa.getWorldName())))
);
return false;
}
@ -534,7 +572,7 @@ public class Area extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("errors.error_create"),
Template.of("world", pa.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(pa.getWorldName())))
);
}
try {
@ -553,12 +591,18 @@ public class Area extends SubCommand {
if (pa.getId() == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag(
"value2",
Tag.inserting(Component.text(
" create [world[:id]] [<modifier>=<value>]..."))
)
.build()
);
return false;
}
@ -575,7 +619,7 @@ public class Area extends SubCommand {
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put("area_create_area", pa);
player.sendMessage(
TranslatableCaption.of("single.get_position"),
Template.of("command", getCommandString())
TagResolver.resolver("command", Tag.inserting(Component.text(getCommandString())))
);
break;
}
@ -585,7 +629,10 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_INFO)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_INFO))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_INFO)
)
);
return false;
}
@ -596,15 +643,20 @@ public class Area extends SubCommand {
default -> {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " info [area]")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag("value2", Tag.inserting(Component.text(" info [area]")))
.build()
);
return false;
}
}
if (area == null) {
if (args.length == 2) {
player.sendMessage(TranslatableCaption.of("errors.not_valid_plot_world"), Template.of("value", args[1]));
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
} else {
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
}
@ -628,42 +680,35 @@ public class Area extends SubCommand {
percent = claimed == 0 ? 0 : 100d * claimed / Integer.MAX_VALUE;
region = "N/A";
}
Template headerTemplate = Template.of(
"header",
TranslatableCaption.of("info.plot_info_header").getComponent(player)
);
Template nameTemplate = Template.of("name", name);
Template typeTemplate = Template.of("type", area.getType().name());
Template terrainTemplate = Template.of("terrain", area.getTerrain().name());
Template usageTemplate = Template.of("usage", String.format("%.2f", percent));
Template claimedTemplate = Template.of("claimed", String.valueOf(claimed));
Template clustersTemplate = Template.of("clusters", String.valueOf(clusters));
Template regionTemplate = Template.of("region", region);
Template generatorTemplate = Template.of("generator", generator);
Template footerTemplate = Template.of(
"footer",
TranslatableCaption.of("info.plot_info_footer").getComponent(player)
);
player.sendMessage(
TranslatableCaption.of("info.area_info_format"),
headerTemplate,
nameTemplate,
typeTemplate,
terrainTemplate,
usageTemplate,
claimedTemplate,
clustersTemplate,
regionTemplate,
generatorTemplate,
footerTemplate
);
TagResolver resolver = TagResolver.builder()
.tag(
"header",
Tag.inserting(TranslatableCaption.of("info.plot_info_header").toComponent(player))
)
.tag("name", Tag.inserting(Component.text(name)))
.tag("type", Tag.inserting(Component.text(area.getType().name())))
.tag("terrain", Tag.inserting(Component.text(area.getTerrain().name())))
.tag("usage", Tag.inserting(Component.text(String.format("%.2f", percent))))
.tag("claimed", Tag.inserting(Component.text(claimed)))
.tag("clusters", Tag.inserting(Component.text(clusters)))
.tag("region", Tag.inserting(Component.text(region)))
.tag("generator", Tag.inserting(Component.text(generator)))
.tag(
"footer",
Tag.inserting(TranslatableCaption.of("info.plot_info_footer").toComponent(player))
)
.build();
player.sendMessage(TranslatableCaption.of("info.area_info_format"), resolver);
return true;
}
case "l", "list" -> {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_LIST)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_LIST))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_LIST)
)
);
return false;
}
@ -680,8 +725,10 @@ public class Area extends SubCommand {
default:
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax_extended"),
Template.of("value1", getCommandString()),
Template.of("value2", " list [#]")
TagResolver.builder()
.tag("value1", Tag.inserting(Component.text(getCommandString())))
.tag("value2", Tag.inserting(Component.text(" list [#]")))
.build()
);
return false;
}
@ -707,37 +754,27 @@ public class Area extends SubCommand {
percent = claimed == 0 ? 0 : (double) claimed / Short.MAX_VALUE * Short.MAX_VALUE;
region = "N/A";
}
Template claimedTemplate = Template.of("claimed", String.valueOf(claimed));
Template usageTemplate = Template.of("usage", String.format("%.2f", percent) + "%");
Template clustersTemplate = Template.of("clusters", String.valueOf(clusters));
Template regionTemplate = Template.of("region", region);
Template generatorTemplate = Template.of("generator", generator);
String tooltip = MINI_MESSAGE.serialize(MINI_MESSAGE
.parse(
TranslatableCaption.of("info.area_list_tooltip").getComponent(player),
claimedTemplate,
usageTemplate,
clustersTemplate,
regionTemplate,
generatorTemplate
));
Template tooltipTemplate = Template.of("hover_info", tooltip);
Template visitcmdTemplate = Template.of("command_tp", "/plot area tp " + area);
Template infocmdTemplate = Template.of("command_info", "/plot area info " + area);
Template numberTemplate = Template.of("number", String.valueOf(i));
Template nameTemplate = Template.of("area_name", name);
Template typeTemplate = Template.of("area_type", area.getType().name());
Template terrainTemplate = Template.of("area_terrain", area.getTerrain().name());
caption.set(TranslatableCaption.of("info.area_list_item"));
caption.setTemplates(
tooltipTemplate,
visitcmdTemplate,
numberTemplate,
nameTemplate,
typeTemplate,
terrainTemplate,
infocmdTemplate
Component tooltip = MINI_MESSAGE.deserialize(
TranslatableCaption.of("info.area_list_tooltip").getComponent(player),
TagResolver.builder()
.tag("claimed", Tag.inserting(Component.text(claimed)))
.tag("usage", Tag.inserting(Component.text(String.format("%.2f", percent) + "%")))
.tag("clusters", Tag.inserting(Component.text(clusters)))
.tag("region", Tag.inserting(Component.text(region)))
.tag("generator", Tag.inserting(Component.text(generator)))
.build()
);
TagResolver resolver = TagResolver.builder()
.tag("hover_info", Tag.inserting(tooltip))
.tag("command_tp", Tag.preProcessParsed("/plot area tp " + name))
.tag("command_info", Tag.preProcessParsed("/plot area info " + name))
.tag("number", Tag.inserting(Component.text(i)))
.tag("area_name", Tag.inserting(Component.text(name)))
.tag("area_type", Tag.inserting(Component.text(area.getType().name())))
.tag("area_terrain", Tag.inserting(Component.text(area.getTerrain().name())))
.build();
caption.set(TranslatableCaption.of("info.area_list_item"));
caption.setTagResolvers(resolver);
}
}, "/plot area list", TranslatableCaption.of("list.area_list_header_paged"));
return true;
@ -746,7 +783,10 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_REGEN)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_REGEN))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_AREA_REGEN)
)
);
return false;
}
@ -758,7 +798,7 @@ public class Area extends SubCommand {
if (area.getType() != PlotAreaType.PARTIAL) {
player.sendMessage(
TranslatableCaption.of("single.delete_world_region"),
Template.of("world", area.getWorldName())
TagResolver.resolver("world", Tag.inserting(Component.text(area.getWorldName())))
);
return false;
}
@ -779,20 +819,23 @@ public class Area extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_TP)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_TP))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AREA_TP))
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot area tp [area]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot area tp [area]")))
);
return false;
}
PlotArea area = this.plotAreaManager.getPlotAreaByString(args[1]);
if (area == null) {
player.sendMessage(TranslatableCaption.of("errors.not_valid_plot_world"), Template.of("value", args[1]));
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}
Location center;

View File

@ -51,7 +51,9 @@ import com.plotsquared.core.util.task.AutoClaimFinishTask;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import io.leangen.geantyref.TypeToken;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -117,13 +119,13 @@ public class Auto extends SubCommand {
if (diff < 0 && grantedPlots < sizeX * sizeZ) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(diff + grantedPlots))
TagResolver.resolver("amount", Tag.inserting(Component.text(diff + grantedPlots)))
);
return false;
} else if (diff >= 0 && grantedPlots + diff < sizeX * sizeZ) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(diff + grantedPlots))
TagResolver.resolver("amount", Tag.inserting(Component.text(diff + grantedPlots)))
);
return false;
} else {
@ -135,15 +137,16 @@ public class Auto extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("economy.removed_granted_plot"),
Template.of("usedGrants", String.valueOf(grantedPlots - left)),
Template.of("remainingGrants", String.valueOf(left))
TagResolver.builder()
.tag("usedGrants", Tag.inserting(Component.text(grantedPlots - left)))
.tag("remainingGrants", Tag.inserting(Component.text(left)))
.build()
);
}
} else {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots"),
Template.of("amount", String.valueOf(player.getAllowedPlots())
)
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
);
return false;
}
@ -222,7 +225,7 @@ public class Auto extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return true;
}
@ -245,7 +248,7 @@ public class Auto extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Auto claim")
TagResolver.resolver("value", Tag.inserting(Component.text("Auto claim")))
);
return true;
}
@ -256,13 +259,13 @@ public class Auto extends SubCommand {
if (!force && mega && !Permissions.hasPermission(player, Permission.PERMISSION_AUTO_MEGA)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AUTO_MEGA))
);
}
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_plots_num"),
Template.of("amount", String.valueOf(Settings.Claim.MAX_AUTO_AREA))
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Claim.MAX_AUTO_AREA)))
);
return false;
}
@ -280,8 +283,10 @@ public class Auto extends SubCommand {
if (!plotarea.hasSchematic(schematic)) {
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid_named"),
Template.of("schemname", schematic),
Template.of("reason", "non-existent")
TagResolver.builder()
.tag("schemname", Tag.inserting(Component.text(schematic)))
.tag("reason", Tag.inserting(Component.text("non-existent")))
.build()
);
return true;
}
@ -292,7 +297,7 @@ public class Auto extends SubCommand {
.hasPermission(player, "plots.admin.command.schematic")) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", "plots.claim.%s0")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.claim.%s0")))
);
return true;
}
@ -311,15 +316,20 @@ public class Auto extends SubCommand {
if (!force && this.econHandler.getMoney(player) < cost) {
player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_plot"),
Template.of("money", this.econHandler.format(cost)),
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
TagResolver.builder()
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
.tag(
"balance",
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player))))
)
.build()
);
return false;
}
this.econHandler.withdrawMoney(player, cost);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(cost))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
);
}
}
@ -353,7 +363,7 @@ public class Auto extends SubCommand {
if (!force && mergeEvent.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Auto merge")
TagResolver.resolver("value", Tag.inserting(Component.text("Auto merge")))
);
return false;
}

View File

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

View File

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

View File

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

View File

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

View File

@ -28,7 +28,9 @@ 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;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
/**
* @deprecated In favor of "/plot toggle chat" and
@ -48,7 +50,7 @@ public class Chat extends SubCommand {
check(area, TranslatableCaption.of("errors.not_in_plot_world"));
player.sendMessage(
TranslatableCaption.of("errors.deprecated_commands"),
Template.of("replacement", "/plot toggle chat")
TagResolver.resolver("replacement", Tag.inserting(Component.text("/plot toggle chat")))
);
if (player.getPlotAreaAbs().isForcingPlotChat()) {
player.sendMessage(TranslatableCaption.of("chat.plot_chat_forced"));

View File

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

View File

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

View File

@ -39,10 +39,15 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotCluster;
import com.plotsquared.core.plot.PlotId;
import com.plotsquared.core.util.ComponentHelper;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.query.PlotQuery;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.Style;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.Collection;
import java.util.Collections;
@ -53,6 +58,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@CommandDeclaration(command = "cluster",
aliases = "clusters",
@ -61,18 +67,19 @@ import java.util.stream.Collectors;
permission = "plots.cluster")
public class Cluster extends SubCommand {
private static final Component[] AVAILABLE_ARGS = Stream.of(
"list", "create", "delete", "resize", "invite", "kick", "leave", "helpers", "tp", "sethome"
).map(s -> Component.text(s).style(Style.style(NamedTextColor.DARK_AQUA))).toArray(Component[]::new);
private static final Component SEPARATOR = Component.text(", ").style(Style.style(NamedTextColor.GRAY));
// list, create, delete, resize, invite, kick, leave, helpers, tp, sethome
@Override
public boolean onCommand(PlotPlayer<?> player, String[] args) {
// list, create, delete, resize, invite, kick, leave, helpers, tp, sethome
if (args.length == 0) {
// return arguments
player.sendMessage(
TranslatableCaption.of("cluster.cluster_available_args"),
Template.of(
"list",
"<dark_aqua>list</dark_aqua><gray>, </gray><dark_aqua>create</dark_aqua><gray>, </gray><dark_aqua>delete</dark_aqua><gray>, </gray><dark_aqua>resize</dark_aqua><gray>, </gray><dark_aqua>invite</dark_aqua><gray>, </gray><dark_aqua>kick</dark_aqua><gray>, </gray><dark_aqua>leave</dark_aqua><gray>, </gray><dark_aqua>members</dark_aqua><gray>, </gray><dark_aqua>info</dark_aqua><gray>, </gray><dark_aqua>tp</dark_aqua><gray>, </gray><dark_aqua>sethome</dark_aqua>"
)
TagResolver.resolver("list", Tag.inserting(ComponentHelper.join(AVAILABLE_ARGS, SEPARATOR)))
);
return false;
}
@ -83,14 +90,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_LIST)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_LIST))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_LIST)
)
);
return false;
}
if (args.length != 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster list")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster list")))
);
return false;
}
@ -102,7 +112,7 @@ public class Cluster extends SubCommand {
Set<PlotCluster> clusters = area.getClusters();
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_heading"),
Template.of("amount", clusters.size() + "")
TagResolver.resolver("amount", Tag.inserting(Component.text(clusters.size())))
);
for (PlotCluster cluster : clusters) {
// Ignore unmanaged clusters
@ -110,22 +120,22 @@ public class Cluster extends SubCommand {
if (player.getUUID().equals(cluster.owner)) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element_owner"),
Template.of("cluster", name)
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
);
} else if (cluster.helpers.contains(player.getUUID())) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element_helpers"),
Template.of("cluster", name)
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
);
} else if (cluster.invited.contains(player.getUUID())) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element_invited"),
Template.of("cluster", name)
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
);
} else {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_list_element"),
Template.of("cluster", cluster.toString())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.toString())))
);
}
}
@ -136,7 +146,10 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_CREATE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_CREATE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_CREATE)
)
);
return false;
}
@ -148,7 +161,10 @@ public class Cluster extends SubCommand {
if (args.length != 4) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster create <name> <id-bot> <id-top>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot cluster create <name> <id-bot> <id-top>"))
)
);
return false;
}
@ -158,7 +174,7 @@ public class Cluster extends SubCommand {
if (currentClusters >= player.getAllowedPlots()) {
player.sendMessage(
TranslatableCaption.of("permission.cant_claim_more_clusters"),
Template.of("amount", String.valueOf(player.getAllowedPlots()))
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
);
}
PlotId pos1;
@ -176,7 +192,7 @@ public class Cluster extends SubCommand {
if (area.getCluster(name) != null) {
player.sendMessage(
TranslatableCaption.of("alias.alias_is_taken"),
Template.of("alias", name)
TagResolver.resolver("alias", Tag.inserting(Component.text(name)))
);
return false;
}
@ -190,7 +206,7 @@ public class Cluster extends SubCommand {
if (cluster != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_intersection"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
return false;
}
@ -198,7 +214,7 @@ public class Cluster extends SubCommand {
if (!area.contains(pos1) || !area.contains(pos2)) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_outside"),
Template.of("area", String.valueOf(area))
TagResolver.resolver("area", Tag.inserting(Component.text(area.toString())))
);
return false;
}
@ -211,7 +227,10 @@ public class Cluster extends SubCommand {
if (!plot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_CREATE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_CREATE_OTHER)
)
);
return false;
}
@ -233,7 +252,10 @@ public class Cluster extends SubCommand {
if (current + cluster.getArea() > allowed) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_SIZE + "." + (current + cluster.getArea()))
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_CLUSTER_SIZE + "." + (current + cluster.getArea())))
)
);
return false;
}
@ -252,7 +274,7 @@ public class Cluster extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("cluster.cluster_created"),
Template.of("name", name)
TagResolver.resolver("name", Tag.inserting(Component.text(name)))
);
return true;
}
@ -262,14 +284,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_DELETE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_DELETE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_DELETE)
)
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster delete [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster delete [name]")))
);
return false;
}
@ -284,7 +309,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -300,15 +325,18 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_DELETE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_DELETE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_DELETE_OTHER)
)
);
return false;
}
}
DBFunc.delete(cluster);
player.sendMessage(TranslatableCaption.of("cluster.cluster_deleted"), Template.of(
player.sendMessage(TranslatableCaption.of("cluster.cluster_deleted"), TagResolver.resolver(
"cluster",
String.valueOf(cluster)
Tag.inserting(Component.text(cluster.toString()))
));
return true;
}
@ -317,14 +345,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE)
)
);
return false;
}
if (args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster resize [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster resize [name]")))
);
return false;
}
@ -358,7 +389,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_OTHER))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_OTHER)
)
);
return false;
}
@ -368,13 +402,12 @@ public class Cluster extends SubCommand {
if (intersect != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_intersection"),
Template.of("cluster", intersect.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(intersect.getName())))
);
return false;
}
Set<Plot> existing = area.getPlotSelectionOwned(cluster.getP1(), cluster.getP2());
Set<Plot> newPlots = area.getPlotSelectionOwned(pos1, pos2);
// Set<Plot> removed = (HashSet<Plot>) existing.clone();
Set<Plot> removed = new HashSet<>(existing);
removed.removeAll(newPlots);
@ -384,7 +417,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)
)
);
return false;
}
@ -395,7 +431,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)
)
);
return false;
}
@ -414,7 +453,9 @@ public class Cluster extends SubCommand {
if (current + cluster.getArea() > allowed) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER + "." + (current + cluster.getArea()))
TagResolver.resolver("node", Tag.inserting(Component.text(
Permission.PERMISSION_CLUSTER + "." + (current + cluster.getArea())
)))
);
return false;
}
@ -429,14 +470,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INVITE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_INVITE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_INVITE)
)
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster invite <player>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster invite <player>")))
);
return false;
}
@ -455,7 +499,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_INVITE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_INVITE_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_INVITE_OTHER)
)
);
return false;
}
@ -468,7 +515,7 @@ public class Cluster extends SubCommand {
} else if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
} else {
if (!cluster.isAdded(uuid)) {
@ -480,7 +527,7 @@ public class Cluster extends SubCommand {
if (otherPlayer != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_invited"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
}
}
@ -495,14 +542,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_KICK.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_KICK)
)
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster kick <player>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster kick <player>")))
);
return false;
}
@ -520,7 +570,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_KICK_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_KICK_OTHER)
)
);
return false;
}
@ -533,7 +586,7 @@ public class Cluster extends SubCommand {
} else if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
} else {
// Can't kick if the player is yourself, the owner, or not added to the cluster
@ -541,7 +594,7 @@ public class Cluster extends SubCommand {
|| !cluster.isAdded(uuid)) {
player.sendMessage(
TranslatableCaption.of("cluster.cannot_kick_player"),
Template.of("value", cluster.getName())
TagResolver.resolver("value", Tag.inserting(Component.text(cluster.getName())))
);
} else {
if (cluster.helpers.contains(uuid)) {
@ -556,7 +609,7 @@ public class Cluster extends SubCommand {
if (player2 != null) {
player.sendMessage(
TranslatableCaption.of("cluster.cluster_removed"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
}
removePlayerPlots(cluster, uuid, player2.getLocation().getWorldName());
@ -571,14 +624,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_LEAVE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_LEAVE.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_LEAVE)
)
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster leave [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster leave [name]")))
);
return false;
}
@ -592,7 +648,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -620,7 +676,7 @@ public class Cluster extends SubCommand {
DBFunc.removeInvited(cluster, uuid);
player.sendMessage(
TranslatableCaption.of("cluster.cluster_removed"),
Template.of("cluster", cluster.getName())
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
);
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
return true;
@ -629,14 +685,20 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_HELPERS)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_HELPERS.toString())
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_CLUSTER_HELPERS.toString()))
)
);
return false;
}
if (args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster members <add | remove> <player>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot cluster members <add | remove> <player>"))
)
);
return false;
}
@ -657,7 +719,7 @@ public class Cluster extends SubCommand {
} else if (throwable != null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", args[2])
TagResolver.resolver("value", Tag.inserting(Component.text(args[2])))
);
} else {
if (args[1].equalsIgnoreCase("add")) {
@ -671,7 +733,9 @@ public class Cluster extends SubCommand {
} else {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster members <add | remove> <player>")
TagResolver.resolver("value", Tag.inserting(Component.text(
"/plot cluster members <add | remove> <player>"
)))
);
}
}
@ -684,14 +748,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_TP)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_TP.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_TP)
)
);
return false;
}
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster tp <name>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster tp <name>")))
);
return false;
}
@ -704,7 +771,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -713,7 +780,10 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_TP_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_TP_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_TP_OTHER)
)
);
return false;
}
@ -729,14 +799,17 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INFO)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_TP.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_TP)
)
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster info [name]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster info [name]")))
);
}
PlotArea area = player.getApplicablePlotArea();
@ -750,7 +823,7 @@ public class Cluster extends SubCommand {
if (cluster == null) {
player.sendMessage(
TranslatableCaption.of("cluster.invalid_cluster_name"),
Template.of("cluster", args[1])
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -779,19 +852,14 @@ public class Cluster extends SubCommand {
cluster.getP2().getY() - cluster.getP1().getY() + 1);
String rights = cluster.isAdded(player.getUUID()) + "";
Caption message = TranslatableCaption.of("cluster.cluster_info");
Template idTemplate = Template.of("id", id);
Template ownerTemplate = Template.of("owner", owner);
Template nameTemplate = Template.of("name", name);
Template sizeTemplate = Template.of("size", size);
Template rightsTemplate = Template.of("rights", rights);
player.sendMessage(
message,
idTemplate,
ownerTemplate,
nameTemplate,
sizeTemplate,
rightsTemplate
);
TagResolver resolver = TagResolver.builder()
.tag("id", Tag.inserting(Component.text(id)))
.tag("owner", Tag.inserting(Component.text(owner)))
.tag("name", Tag.inserting(Component.text(name)))
.tag("size", Tag.inserting(Component.text(size)))
.tag("rights", Tag.inserting(Component.text(rights)))
.build();
player.sendMessage(message, resolver);
}
});
return true;
@ -802,14 +870,14 @@ public class Cluster extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_SETHOME)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_SETHOME.toString())
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME))
);
return false;
}
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot cluster sethome")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster sethome")))
);
return false;
}
@ -827,7 +895,10 @@ public class Cluster extends SubCommand {
.hasPermission(player, Permission.PERMISSION_CLUSTER_SETHOME_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_CLUSTER_SETHOME_OTHER.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME_OTHER)
)
);
return false;
}
@ -846,10 +917,7 @@ public class Cluster extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("cluster.cluster_available_args"),
Template.of(
"list",
"<dark_aqua>list</dark_aqua><gray>, </gray><dark_aqua>create</dark_aqua><gray>, </gray><dark_aqua>delete</dark_aqua><gray>, </gray><dark_aqua>resize</dark_aqua><gray>, </gray><dark_aqua>invite</dark_aqua><gray>, </gray><dark_aqua>kick</dark_aqua><gray>, </gray><dark_aqua>leave</dark_aqua><gray>, </gray><dark_aqua>members</dark_aqua><gray>, </gray><dark_aqua>info</dark_aqua><gray>, </gray><dark_aqua>tp</dark_aqua><gray>, </gray><dark_aqua>sethome</dark_aqua>"
)
TagResolver.resolver("list", Tag.inserting(ComponentHelper.join(AVAILABLE_ARGS, SEPARATOR)))
);
return false;
}

View File

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

View File

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

View File

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

View File

@ -29,6 +29,9 @@ import com.plotsquared.core.configuration.caption.Caption;
import com.plotsquared.core.configuration.caption.LocaleHolder;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.player.PlotPlayer;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
@ -97,6 +100,11 @@ public enum CommandCategory implements Caption {
return this.caption.getComponent(localeHolder);
}
@Override
public @NonNull Component toComponent(@NonNull final LocaleHolder localeHolder) {
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
}
/**
* Checks if a player has access to this command category
*

View File

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

View File

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

View File

@ -48,7 +48,7 @@ public class Confirm extends SubCommand {
player.sendMessage(TranslatableCaption.of("confirm.expired_confirm"));
return false;
}
TaskManager.runTaskAsync(command.command);
TaskManager.runTask(command.command);
return true;
}

View File

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

View File

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

View File

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

View File

@ -47,7 +47,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.FileUtils;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.File;
@ -108,7 +110,10 @@ public class DatabaseCommand extends SubCommand {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot database [area] <sqlite | mysql | import>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot database [area] <sqlite | mysql | import>"))
)
);
return false;
}
@ -123,7 +128,7 @@ public class DatabaseCommand extends SubCommand {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot database [area] <sqlite|mysql|import>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot database [area] <sqlite|mysql|import>")))
);
player.sendMessage(TranslatableCaption.of("database.arg"));
return false;
@ -136,7 +141,10 @@ public class DatabaseCommand extends SubCommand {
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot database import <sqlite file> [prefix]")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot database import <sqlite file> [prefix]"))
)
);
return false;
}
@ -147,7 +155,7 @@ public class DatabaseCommand extends SubCommand {
if (!file.exists()) {
player.sendMessage(
TranslatableCaption.of("database.does_not_exist"),
Template.of("value", String.valueOf(file))
TagResolver.resolver("value", Tag.inserting(Component.text(file.toString())))
);
return false;
}
@ -191,8 +199,10 @@ public class DatabaseCommand extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("database.skipping_duplicated_plot"),
Template.of("plot", String.valueOf(plot)),
Template.of("id", String.valueOf(plot.temp))
TagResolver.builder()
.tag("plot", Tag.inserting(Component.text(plot.toString())))
.tag("id", Tag.inserting(Component.text(plot.temp)))
.build()
);
continue;
}

View File

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

View File

@ -43,12 +43,13 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.RunnableVal;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
@ -103,7 +104,7 @@ public class DebugExec extends SubCommand {
if (analysis != null) {
player.sendMessage(
TranslatableCaption.of("debugexec.changes_column"),
Template.of("value", String.valueOf(analysis.changes))
TagResolver.resolver("value", Tag.inserting(Component.text(analysis.changes)))
);
return true;
}
@ -113,7 +114,7 @@ public class DebugExec extends SubCommand {
public void run(PlotAnalysis value) {
player.sendMessage(
TranslatableCaption.of("debugexec.analyze_done"),
Template.of("command", "/plot debugexec analyze")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot debugexec analyze")))
);
}
});
@ -123,7 +124,10 @@ public class DebugExec extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot debugexec analyze <threshold>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot debugexec analyze <threshold>"))
)
);
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default"));
return false;
@ -134,7 +138,7 @@ public class DebugExec extends SubCommand {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("debugexec.invalid_threshold"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default_double"));
return false;
@ -168,7 +172,7 @@ public class DebugExec extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot debugexec remove-flag <flag>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot debugexec remove-flag <flag>")))
);
return false;
}
@ -186,7 +190,7 @@ public class DebugExec extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("debugexec.cleared_flag"),
Template.of("value", flag)
TagResolver.resolver("value", Tag.inserting(Component.text(flag)))
);
return true;
}
@ -194,7 +198,10 @@ public class DebugExec extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Invalid syntax: /plot debugexec start-rgar <world>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Invalid syntax: /plot debugexec start-rgar <world>"))
)
);
return false;
}
@ -202,7 +209,7 @@ public class DebugExec extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -43,7 +43,9 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.task.RunnableVal;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
@CommandDeclaration(command = "done",
@ -77,7 +79,7 @@ public class Done extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Done")
TagResolver.resolver("value", Tag.inserting(Component.text("Done")))
);
return true;
}
@ -98,7 +100,7 @@ public class Done extends SubCommand {
plot.addRunning();
player.sendMessage(
TranslatableCaption.of("web.generating_link"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done");
if (ExpireManager.IMP == null || doneRequirements == null) {

View File

@ -41,7 +41,9 @@ import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.task.RunnableVal;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.URL;
@ -121,7 +123,10 @@ public class Download extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_DOWNLOAD_WORLD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_DOWNLOAD_WORLD.toString())
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_DOWNLOAD_WORLD)
)
);
return false;
}
@ -135,18 +140,24 @@ public class Download extends SubCommand {
if (url == null) {
player.sendMessage(
TranslatableCaption.of("web.generating_link_failed"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return;
}
player.sendMessage(TranslatableCaption.of("web.generation_link_success_legacy_world"), Template.of("url", url.toString()));
player.sendMessage(
TranslatableCaption.of("web.generation_link_success_legacy_world"),
TagResolver.resolver("url", Tag.inserting(Component.text(url.toString())))
);
}
});
} else {
sendUsage(player);
return false;
}
player.sendMessage(TranslatableCaption.of("web.generating_link"), Template.of("plot", plot.getId().toString()));
player.sendMessage(
TranslatableCaption.of("web.generating_link"),
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return true;
}
@ -190,8 +201,10 @@ public class Download extends SubCommand {
public void run(URL value) {
player.sendMessage(
TranslatableCaption.of("web.generation_link_success"),
Template.of("download", value.toString()),
Template.of("delete", "Not available")
TagResolver.builder()
.tag("download", Tag.preProcessParsed(value.toString()))
.tag("delete", Tag.preProcessParsed("Not available"))
.build()
);
player.sendMessage(StaticCaption.of(value.toString()));
}
@ -205,13 +218,15 @@ public class Download extends SubCommand {
if (throwable != null || !result.isSuccess()) {
player.sendMessage(
TranslatableCaption.of("web.generating_link_failed"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("web.generation_link_success"),
Template.of("download", result.getDownloadUrl()),
Template.of("delete", result.getDeletionUrl())
TagResolver.builder()
.tag("download", Tag.preProcessParsed(result.getDownloadUrl()))
.tag("delete", Tag.preProcessParsed(result.getDeletionUrl()))
.build()
);
}
});

View File

@ -30,7 +30,6 @@ import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.CaptionUtility;
import com.plotsquared.core.configuration.caption.StaticCaption;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.events.PlotFlagAddEvent;
import com.plotsquared.core.events.PlotFlagRemoveEvent;
@ -55,7 +54,9 @@ import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.format.Style;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -92,7 +93,10 @@ public final class FlagCommand extends Command {
private static boolean sendMessage(PlotPlayer<?> player) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag <set | remove | add | list | info> <flag> <value>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot flag <set | remove | add | list | info> <flag> <value>"))
)
);
return true;
}
@ -118,9 +122,9 @@ public final class FlagCommand extends Command {
if (!result) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of(
TagResolver.resolver(
"node",
perm + "." + numeric
Tag.inserting(Component.text(perm + "." + numeric))
)
);
}
@ -137,16 +141,21 @@ public final class FlagCommand extends Command {
);
final boolean result = Permissions.hasPermission(player, permission);
if (!result) {
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", permission));
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
TagResolver.resolver("node", Tag.inserting(Component.text(permission)))
);
return false;
}
}
} catch (final FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", flag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", e.getErrorMessage().getComponent(player))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(flag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return false;
} catch (final Exception e) {
@ -163,7 +172,10 @@ public final class FlagCommand extends Command {
perm = basePerm;
}
if (!result) {
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", perm));
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
TagResolver.resolver("node", Tag.inserting(Component.text(perm)))
);
}
return result;
}
@ -188,7 +200,7 @@ public final class FlagCommand extends Command {
.hasPermission(player, Permission.PERMISSION_SET_FLAG_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SET_FLAG_OTHER))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_SET_FLAG_OTHER))
);
return false;
}
@ -223,7 +235,7 @@ public final class FlagCommand extends Command {
if (best != null) {
player.sendMessage(
TranslatableCaption.of("flag.not_valid_flag_suggested"),
Template.of("value", best)
TagResolver.resolver("value", Tag.inserting(Component.text(best)))
);
suggested = true;
}
@ -332,7 +344,7 @@ public final class FlagCommand extends Command {
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag set <flag> <value>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag set <flag> <value>")))
);
return;
}
@ -345,7 +357,7 @@ public final class FlagCommand extends Command {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Flag set")
TagResolver.resolver("value", Tag.inserting(Component.text("Flag set")))
);
return;
}
@ -361,15 +373,21 @@ public final class FlagCommand extends Command {
} catch (final FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", plotFlag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", e.getErrorMessage().getComponent(player))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(plotFlag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return;
}
plot.setFlag(parsed);
player.sendMessage(TranslatableCaption.of("flag.flag_added"), Template.of("flag", String.valueOf(args[0])),
Template.of("value", String.valueOf(parsed))
player.sendMessage(
TranslatableCaption.of("flag.flag_added"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(parsed.toString())))
.build()
);
}
@ -391,7 +409,7 @@ public final class FlagCommand extends Command {
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag add <flag> <values>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag add <flag> <values>")))
);
return;
}
@ -404,7 +422,7 @@ public final class FlagCommand extends Command {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Flag add")
TagResolver.resolver("value", Tag.inserting(Component.text("Flag add")))
);
return;
}
@ -425,9 +443,11 @@ public final class FlagCommand extends Command {
} catch (FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", plotFlag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", e.getErrorMessage().getComponent(player))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(plotFlag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return;
}
@ -437,8 +457,12 @@ public final class FlagCommand extends Command {
player.sendMessage(TranslatableCaption.of("flag.flag_not_added"));
return;
}
player.sendMessage(TranslatableCaption.of("flag.flag_added"), Template.of("flag", String.valueOf(args[0])),
Template.of("value", String.valueOf(parsed))
player.sendMessage(
TranslatableCaption.of("flag.flag_added"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(parsed.toString())))
.build()
);
}
@ -460,7 +484,7 @@ public final class FlagCommand extends Command {
if (args.length != 1 && args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag remove <flag> [values]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag remove <flag> [values]")))
);
return;
}
@ -473,7 +497,7 @@ public final class FlagCommand extends Command {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Flag remove")
TagResolver.resolver("value", Tag.inserting(Component.text("Flag remove")))
);
return;
}
@ -483,7 +507,10 @@ public final class FlagCommand extends Command {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase()))
TagResolver.resolver(
"node",
Tag.inserting(Component.text(Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase())))
)
);
return;
}
@ -498,9 +525,11 @@ public final class FlagCommand extends Command {
} catch (final FlagParseException e) {
player.sendMessage(
TranslatableCaption.of("flag.flag_parse_error"),
Template.of("flag_name", flag.getName()),
Template.of("flag_value", e.getValue()),
Template.of("error", String.valueOf(e.getErrorMessage()))
TagResolver.builder()
.tag("flag_name", Tag.inserting(Component.text(flag.getName())))
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
.build()
);
return;
}
@ -511,10 +540,13 @@ public final class FlagCommand extends Command {
if (list.removeAll((List) parsedFlag.getValue())) {
if (list.isEmpty()) {
if (plot.removeFlag(flag)) {
player.sendMessage(TranslatableCaption.of("flag.flag_removed"), Template.of("flag", args[0]), Template.of(
"value",
String.valueOf(flag)
));
player.sendMessage(
TranslatableCaption.of("flag.flag_removed"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(flag.toString())))
.build()
);
return;
} else {
player.sendMessage(TranslatableCaption.of("flag.flag_not_removed"));
@ -526,7 +558,10 @@ public final class FlagCommand extends Command {
if (addEvent.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Re-addition of " + plotFlag.getName())
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Re-addition of " + plotFlag.getName()))
)
);
return;
}
@ -549,10 +584,13 @@ public final class FlagCommand extends Command {
return;
}
}
player.sendMessage(TranslatableCaption.of("flag.flag_removed"), Template.of("flag", args[0]), Template.of(
"value",
String.valueOf(flag)
));
player.sendMessage(
TranslatableCaption.of("flag.flag_removed"),
TagResolver.builder()
.tag("flag", Tag.inserting(Component.text(args[0])))
.tag("value", Tag.inserting(Component.text(flag.toString())))
.build()
);
}
@CommandDeclaration(command = "list",
@ -570,34 +608,35 @@ public final class FlagCommand extends Command {
return;
}
final Map<String, ArrayList<String>> flags = new HashMap<>();
final Map<Component, ArrayList<String>> flags = new HashMap<>();
for (PlotFlag<?, ?> plotFlag : GlobalFlagContainer.getInstance().getRecognizedPlotFlags()) {
if (plotFlag instanceof InternalFlag) {
continue;
}
final String category = MINI_MESSAGE.stripTokens(plotFlag.getFlagCategory().getComponent(player));
final Collection<String> flagList =
flags.computeIfAbsent(category, k -> new ArrayList<>());
final Component category = plotFlag.getFlagCategory().toComponent(player);
final Collection<String> flagList = flags.computeIfAbsent(category, k -> new ArrayList<>());
flagList.add(plotFlag.getName());
}
for (final Map.Entry<String, ArrayList<String>> entry : flags.entrySet()) {
for (final Map.Entry<Component, ArrayList<String>> entry : flags.entrySet()) {
Collections.sort(entry.getValue());
Component category =
MINI_MESSAGE.parse(
MINI_MESSAGE.deserialize(
TranslatableCaption.of("flag.flag_list_categories").getComponent(player),
Template.of("category", entry.getKey())
TagResolver.resolver("category", Tag.inserting(entry.getKey().style(Style.empty())))
);
TextComponent.Builder builder = Component.text().append(category);
final Iterator<String> flagIterator = entry.getValue().iterator();
while (flagIterator.hasNext()) {
final String flag = flagIterator.next();
builder.append(MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("flag.flag_list_flag").getComponent(player),
Template.of("command", "/plot flag info " + flag),
Template.of("flag", flag),
Template.of("suffix", flagIterator.hasNext() ? ", " : "")
TagResolver.builder()
.tag("command", Tag.preProcessParsed("/plot flag info " + flag))
.tag("flag", Tag.inserting(Component.text(flag)))
.tag("suffix", Tag.inserting(Component.text(flagIterator.hasNext() ? ", " : "")))
.build()
));
}
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.build())));
@ -621,7 +660,7 @@ public final class FlagCommand extends Command {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot flag info <flag>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag info <flag>")))
);
return;
}
@ -629,11 +668,17 @@ public final class FlagCommand extends Command {
if (plotFlag != null) {
player.sendMessage(TranslatableCaption.of("flag.flag_info_header"));
// Flag name
player.sendMessage(TranslatableCaption.of("flag.flag_info_name"), Template.of("flag", plotFlag.getName()));
player.sendMessage(
TranslatableCaption.of("flag.flag_info_name"),
TagResolver.resolver("flag", Tag.inserting(Component.text(plotFlag.getName())))
);
// Flag category
player.sendMessage(
TranslatableCaption.of("flag.flag_info_category"),
Templates.of(player, "value", plotFlag.getFlagCategory())
TagResolver.resolver(
"value",
Tag.inserting(plotFlag.getFlagCategory().toComponent(player))
)
);
// Flag description
// TODO maybe merge and \n instead?
@ -642,16 +687,18 @@ public final class FlagCommand extends Command {
// Flag example
player.sendMessage(
TranslatableCaption.of("flag.flag_info_example"),
Template.of("command", "/plot flag set"),
Template.of("flag", plotFlag.getName()),
Template.of("value", plotFlag.getExample())
TagResolver.builder()
.tag("command", Tag.preProcessParsed("/plot flag set"))
.tag("flag", Tag.inserting(Component.text(plotFlag.getName())))
.tag("value", Tag.inserting(Component.text(plotFlag.getExample())))
.build()
);
// Default value
final String defaultValue = player.getLocation().getPlotArea().getFlagContainer()
.getFlagErased(plotFlag.getClass()).toString();
player.sendMessage(
TranslatableCaption.of("flag.flag_info_default_value"),
Template.of("value", defaultValue)
TagResolver.resolver("value", Tag.inserting(Component.text(defaultValue)))
);
// Footer. Done this way to prevent the duplicate-message-thingy from catching it
player.sendMessage(TranslatableCaption.of("flag.flag_info_footer"));

View File

@ -40,7 +40,9 @@ import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.RunnableVal2;
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.Collections;
@ -71,7 +73,7 @@ public class Grant extends Command {
checkTrue(
args.length >= 1 && args.length <= 2,
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot grant <check | add> [player]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot grant <check | add> [player]")))
);
final String arg0 = args[0].toLowerCase();
switch (arg0) {
@ -79,7 +81,7 @@ public class Grant extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_GRANT.format(arg0))) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_GRANT.format(arg0))
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_GRANT.format(arg0))))
);
return CompletableFuture.completedFuture(false);
}
@ -92,7 +94,7 @@ public class Grant extends Command {
} else if (throwable != null || uuids.size() != 1) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", String.valueOf(uuids))
TagResolver.resolver("value", Tag.inserting(Component.text(String.valueOf(uuids))))
);
} else {
final UUIDMapping uuid = uuids.toArray(new UUIDMapping[0])[0];
@ -103,7 +105,7 @@ public class Grant extends Command {
if (args[0].equalsIgnoreCase("check")) {
player.sendMessage(
TranslatableCaption.of("grants.granted_plots"),
Template.of("amount", String.valueOf(access.get().orElse(0)))
TagResolver.resolver("amount", Tag.inserting(Component.text(access.get().orElse(0))))
);
} else {
access.set(access.get().orElse(0) + 1);
@ -123,7 +125,7 @@ public class Grant extends Command {
}
player.sendMessage(
TranslatableCaption.of("grants.granted_plots"),
Template.of("amount", String.valueOf(granted))
TagResolver.resolver("amount", Tag.inserting(Component.text(granted)))
);
} else { // add
int amount;
@ -138,7 +140,7 @@ public class Grant extends Command {
DBFunc.addPersistentMeta(uuid.getUuid(), key, rawData, replace);
player.sendMessage(
TranslatableCaption.of("grants.added"),
Template.of("grants", String.valueOf(amount))
TagResolver.resolver("grants", Tag.inserting(Component.text(amount)))
);
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -30,8 +30,8 @@ import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.Caption;
import com.plotsquared.core.configuration.caption.CaptionHolder;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.database.DBFunc;
import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
@ -39,6 +39,7 @@ import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.expiration.ExpireManager;
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.plot.flag.implementations.PriceFlag;
import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.EconHandler;
import com.plotsquared.core.util.MathMan;
@ -53,7 +54,8 @@ import com.plotsquared.core.util.task.RunnableVal3;
import com.plotsquared.core.uuid.UUIDMapping;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -130,7 +132,7 @@ public class ListCmd extends SubCommand {
public void noArgs(PlotPlayer<?> player) {
player.sendMessage(
TranslatableCaption.of("commandconfig.subcommand_set_options_header"),
Templates.of("values", Arrays.toString(getArgumentList(player)))
TagResolver.resolver("values", Tag.inserting(Component.text(Arrays.toString(getArgumentList(player)))))
);
}
@ -166,9 +168,14 @@ public class ListCmd extends SubCommand {
if (query == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.did_you_mean"),
Template.of(
TagResolver.resolver(
"value",
new StringComparison<>(args[0], new String[]{"mine", "shared", "world", "all"}).getBestMatch()
Tag.inserting(Component.text(
new StringComparison<>(
args[0],
new String[]{"mine", "shared", "world", "all"}
).getBestMatch()
))
)
);
return;
@ -196,7 +203,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_MINE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.mine")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.mine")))
);
return false;
}
@ -211,7 +218,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_SHARED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.shared")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.shared")))
);
return false;
}
@ -224,14 +231,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
);
return false;
}
if (!Permissions.hasPermission(player, "plots.list.world." + world)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world." + world)
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
);
return false;
}
@ -241,7 +248,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_EXPIRED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.expired")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.expired")))
);
return false;
}
@ -255,14 +262,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_AREA)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.area")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.area")))
);
return false;
}
if (!Permissions.hasPermission(player, "plots.list.world." + world)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world." + world)
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
);
return false;
}
@ -276,7 +283,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_ALL)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.all")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.all")))
);
return false;
}
@ -286,7 +293,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_DONE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.done")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.done")))
);
return false;
}
@ -301,7 +308,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_TOP)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.top")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.top")))
);
return false;
}
@ -312,7 +319,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_FOR_SALE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.forsale")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.forsale")))
);
return false;
}
@ -325,7 +332,7 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_UNOWNED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.unowned")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.unowned")))
);
return false;
}
@ -335,14 +342,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_FUZZY)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.fuzzy")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.fuzzy")))
);
return false;
}
if (args.length < (page == -1 ? 2 : 3)) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", "/plot list fuzzy <search...> [#]")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot list fuzzy <search...> [#]")))
);
return false;
}
@ -360,14 +367,14 @@ public class ListCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
);
return false;
}
if (!Permissions.hasPermission(player, "plots.list.world." + args[0])) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.world." + args[0])
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + args[0])))
);
return false;
}
@ -386,12 +393,15 @@ public class ListCmd extends SubCommand {
}
}
if (uuid == null) {
player.sendMessage(TranslatableCaption.of("errors.invalid_player"), Templates.of("value", args[0]));
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
);
} else {
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_PLAYER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.list.player")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.player")))
);
} else {
sort[0] = false;
@ -418,7 +428,7 @@ public class ListCmd extends SubCommand {
Caption color;
if (plot.getOwner() == null) {
color = TranslatableCaption.of("info.plot_list_no_owner");
} else if (plot.isOwner(player.getUUID())) {
} else if (plot.isOwner(player.getUUID()) || plot.getOwner().equals(DBFunc.EVERYONE)) {
color = TranslatableCaption.of("info.plot_list_owned_by");
} else if (plot.isAdded(player.getUUID())) {
color = TranslatableCaption.of("info.plot_list_added_to");
@ -427,70 +437,97 @@ public class ListCmd extends SubCommand {
} else {
color = TranslatableCaption.of("info.plot_list_default");
}
Component trusted = MINI_MESSAGE.parse(
Component trusted = MINI_MESSAGE.deserialize(
TranslatableCaption.of("info.plot_info_trusted").getComponent(player),
Template.of("trusted", PlayerManager.getPlayerList(plot.getTrusted(), player))
TagResolver.resolver("trusted", Tag.inserting(PlayerManager.getPlayerList(plot.getTrusted(), player)))
);
Component members = MINI_MESSAGE.parse(
Component members = MINI_MESSAGE.deserialize(
TranslatableCaption.of("info.plot_info_members").getComponent(player),
Template.of("members", PlayerManager.getPlayerList(plot.getMembers(), player))
TagResolver.resolver("members", Tag.inserting(PlayerManager.getPlayerList(plot.getMembers(), player)))
);
Template command_tp = Template.of("command_tp", "/plot visit " + plot.getArea() + ";" + plot.getId());
Template command_info = Template.of("command_info", "/plot info " + plot.getArea() + ";" + plot.getId());
Template hover_info =
Template.of(
"hover_info",
MINI_MESSAGE.serialize(Component
.text()
.append(trusted)
.append(Component.newline())
.append(members)
.asComponent())
);
Template numberTemplate = Template.of("number", String.valueOf(i));
Template plotTemplate = Template.of(
"plot",
MINI_MESSAGE.parse(color.getComponent(player), Template.of("plot", plot.toString()))
TagResolver.Builder finalResolver = TagResolver.builder();
finalResolver.tag(
"command_tp",
Tag.preProcessParsed("/plot visit " + plot.getArea() + ";" + plot.getId())
);
finalResolver.tag(
"command_info",
Tag.preProcessParsed("/plot info " + plot.getArea() + ";" + plot.getId())
);
finalResolver.tag("hover_info", Tag.inserting(
Component.text()
.append(trusted)
.append(Component.newline())
.append(members)
.asComponent()
));
finalResolver.tag("number", Tag.inserting(Component.text(i)));
finalResolver.tag("plot", Tag.inserting(MINI_MESSAGE.deserialize(
color.getComponent(player), TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
)));
String prefix = "";
String online = TranslatableCaption.of("info.plot_list_player_online").getComponent(player);
String offline = TranslatableCaption.of("info.plot_list_player_offline").getComponent(player);
String unknown = TranslatableCaption.of("info.plot_list_player_unknown").getComponent(player);
String server = TranslatableCaption.of("info.plot_list_player_server").getComponent(player);
String everyone = TranslatableCaption.of("info.plot_list_player_everyone").getComponent(player);
TextComponent.Builder builder = Component.text();
try {
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
for (final UUIDMapping uuidMapping : names) {
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.getUuid());
Template prefixTemplate = Template.of("prefix", prefix);
Template playerTemplate = Template.of("player", uuidMapping.getUsername());
if (pp != null) {
builder.append(MINI_MESSAGE.parse(online, prefixTemplate, playerTemplate));
} else {
builder.append(MINI_MESSAGE.parse(offline, prefixTemplate, playerTemplate));
}
prefix = ", ";
}
} catch (InterruptedException | ExecutionException e) {
final StringBuilder playerBuilder = new StringBuilder();
final Iterator<UUID> uuidIterator = plot.getOwners().iterator();
while (uuidIterator.hasNext()) {
final UUID uuid = uuidIterator.next();
playerBuilder.append(uuid);
if (uuidIterator.hasNext()) {
playerBuilder.append(", ");
}
}
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Templates.of("value", playerBuilder.toString())
if (plot.getFlag(ServerPlotFlag.class)) {
TagResolver serverResolver = TagResolver.resolver(
"info.server",
Tag.inserting(TranslatableCaption.of("info.server").toComponent(player))
);
} catch (TimeoutException e) {
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
builder.append(MINI_MESSAGE.deserialize(server, serverResolver));
} else {
try {
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
for (final UUIDMapping uuidMapping : names) {
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.getUuid());
TagResolver resolver = TagResolver.builder()
.tag("prefix", Tag.inserting(Component.text(prefix)))
.tag("player", Tag.inserting(Component.text(uuidMapping.getUsername())))
.build();
if (pp != null) {
builder.append(MINI_MESSAGE.deserialize(online, resolver));
} else if (uuidMapping.getUsername().equalsIgnoreCase("unknown")) {
TagResolver unknownResolver = TagResolver.resolver(
"info.unknown",
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
);
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
} else if (uuidMapping.getUuid().equals(DBFunc.EVERYONE)) {
TagResolver everyoneResolver = TagResolver.resolver(
"info.everyone",
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
);
builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver));
} else {
builder.append(MINI_MESSAGE.deserialize(offline, resolver));
}
prefix = ", ";
}
} catch (InterruptedException | ExecutionException e) {
final StringBuilder playerBuilder = new StringBuilder();
final Iterator<UUID> uuidIterator = plot.getOwners().iterator();
while (uuidIterator.hasNext()) {
final UUID uuid = uuidIterator.next();
playerBuilder.append(uuid);
if (uuidIterator.hasNext()) {
playerBuilder.append(", ");
}
}
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
TagResolver.resolver("value", Tag.inserting(Component.text(playerBuilder.toString())))
);
} catch (TimeoutException e) {
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
}
}
Template players = Template.of("players", builder.asComponent());
finalResolver.tag("players", Tag.inserting(builder.asComponent()));
caption.set(TranslatableCaption.of("info.plot_list_item"));
caption.setTemplates(command_tp, command_info, hover_info, numberTemplate, plotTemplate, players);
caption.setTagResolvers(finalResolver.build());
}
}, "/plot list " + args[0], TranslatableCaption.of("list.plot_list_header_paged"));
}

View File

@ -40,9 +40,12 @@ import com.plotsquared.core.plot.schematic.Schematic;
import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.SchematicHandler;
import com.plotsquared.core.util.TimeUtil;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.MalformedURLException;
@ -105,7 +108,7 @@ public class Load extends SubCommand {
// No schematics found:
player.sendMessage(
TranslatableCaption.of("web.load_null"),
Template.of("command", "/plot load")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot load")))
);
return false;
}
@ -116,7 +119,7 @@ public class Load extends SubCommand {
// use /plot load <index>
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Template.of("value", "(1, " + schematics.size() + ')')
TagResolver.resolver("value", Tag.inserting(Component.text("(1, " + schematics.size() + ')')))
);
return false;
}
@ -136,7 +139,10 @@ public class Load extends SubCommand {
plot.removeRunning();
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid"),
Template.of("reason", "non-existent or not in gzip format")
TagResolver.resolver(
"reason",
Tag.inserting(Component.text("non-existent or not in gzip format"))
)
);
return;
}
@ -167,7 +173,7 @@ public class Load extends SubCommand {
plot.removeRunning();
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot load <index>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot load <index>")))
);
return false;
}
@ -205,7 +211,7 @@ public class Load extends SubCommand {
if (split.length < 5) {
continue;
}
String time = secToTime((System.currentTimeMillis() / 1000) - Long.parseLong(split[0]));
String time = TimeUtil.secToTime((System.currentTimeMillis() / 1000) - Long.parseLong(split[0]));
String world = split[1];
PlotId id = PlotId.fromString(split[2] + ';' + split[3]);
String size = split[4];
@ -218,11 +224,15 @@ public class Load extends SubCommand {
}
player.sendMessage(
TranslatableCaption.of("web.load_list"),
Template.of("command", "/plot load #")
TagResolver.resolver("command", Tag.inserting(Component.text("/plot load #")))
);
}
}
/**
* @deprecated Use {@link TimeUtil#secToTime(long)}
*/
@Deprecated(forRemoval = true, since = "6.6.2")
public String secToTime(long time) {
StringBuilder toreturn = new StringBuilder();
if (time >= 33868800) {

View File

@ -43,6 +43,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -318,7 +321,7 @@ public class MainCommand extends Command {
if (message != null) {
player.sendMessage(
TranslatableCaption.of("errors.error"),
net.kyori.adventure.text.minimessage.Template.of("value", message)
TagResolver.resolver("value", Tag.inserting(Component.text(message)))
);
} else {
player.sendMessage(

View File

@ -42,7 +42,9 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlotExpression;
import com.plotsquared.core.util.StringMan;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.UUID;
@ -122,11 +124,13 @@ public class Merge extends SubCommand {
if (direction == null) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot merge <" + StringMan.join(values, " | ") + "> [removeroads]")
TagResolver.resolver("value", Tag.inserting(Component.text(
"/plot merge <" + StringMan.join(values, " | ") + "> [removeroads]"
)))
);
player.sendMessage(
TranslatableCaption.of("help.direction"),
Template.of("dir", direction(location.getYaw()))
TagResolver.resolver("dir", Tag.inserting(Component.text(direction(location.getYaw()))))
);
return false;
}
@ -137,7 +141,7 @@ public class Merge extends SubCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Merge")
TagResolver.resolver("value", Tag.inserting(Component.text("Merge")))
);
return false;
}
@ -148,7 +152,7 @@ public class Merge extends SubCommand {
if (!force && size - 1 > maxSize) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", Permission.PERMISSION_MERGE + "." + (size + 1))
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_MERGE + "." + (size + 1))))
);
return false;
}
@ -175,7 +179,10 @@ public class Merge extends SubCommand {
.hasPermission(player, Permission.PERMISSION_MERGE_KEEP_ROAD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_MERGE_KEEP_ROAD))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_MERGE_KEEP_ROAD)
)
);
return true;
}
@ -184,8 +191,11 @@ public class Merge extends SubCommand {
this.econHandler.withdrawMoney(player, price);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(price)),
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price)))),
TagResolver.resolver(
"balance",
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player))))
)
);
}
player.sendMessage(TranslatableCaption.of("merge.success_merge"));
@ -199,7 +209,7 @@ public class Merge extends SubCommand {
&& this.econHandler.getMoney(player) < price) {
player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_merge"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
return false;
}
@ -213,7 +223,7 @@ public class Merge extends SubCommand {
.hasPermission(player, Permission.PERMISSION_MERGE_KEEP_ROAD)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_MERGE_KEEP_ROAD))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_KEEP_ROAD))
);
return true;
}
@ -222,7 +232,7 @@ public class Merge extends SubCommand {
this.econHandler.withdrawMoney(player, price);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
}
player.sendMessage(TranslatableCaption.of("merge.success_merge"));
@ -238,7 +248,7 @@ public class Merge extends SubCommand {
if (!force && !Permissions.hasPermission(player, Permission.PERMISSION_MERGE_OTHER)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_MERGE_OTHER))
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_OTHER))
);
return false;
}
@ -263,14 +273,14 @@ public class Merge extends SubCommand {
if (!force && this.econHandler.getMoney(player) < price) {
player.sendMessage(
TranslatableCaption.of("economy.cannot_afford_merge"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
return;
}
this.econHandler.withdrawMoney(player, price);
player.sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", this.econHandler.format(price))
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
);
}
player.sendMessage(TranslatableCaption.of("merge.success_merge"));
@ -278,10 +288,15 @@ public class Merge extends SubCommand {
};
if (!force && hasConfirmation(player)) {
CmdConfirm.addPending(accepter, MINI_MESSAGE.serialize(MINI_MESSAGE
.parse(
.deserialize(
TranslatableCaption.of("merge.merge_request_confirm").getComponent(player),
Template.of("player", player.getName()),
Template.of("location", plot.getWorldName() + ";" + plot.getId())
TagResolver.builder()
.tag("player", Tag.inserting(Component.text(player.getName())))
.tag(
"location",
Tag.inserting(Component.text(plot.getWorldName() + " " + plot.getId()))
)
.build()
)),
run
);

View File

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

View File

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

View File

@ -31,7 +31,9 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import java.util.concurrent.CompletableFuture;
@ -55,7 +57,7 @@ public class Near extends Command {
final Plot plot = check(player.getCurrentPlot(), TranslatableCaption.of("errors.not_in_plot"));
player.sendMessage(
TranslatableCaption.of("near.plot_near"),
Template.of("list", StringMan.join(plot.getPlayersInPlot(), ", "))
TagResolver.resolver("list", Tag.inserting(Component.text(StringMan.join(plot.getPlayersInPlot(), ", "))))
);
return CompletableFuture.completedFuture(true);
}

View File

@ -42,7 +42,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PlayerManager;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
@ -73,7 +75,7 @@ public class Owner extends SetCommand {
if (value == null || value.isEmpty()) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "/plot setowner <owner>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot setowner <owner>")))
);
return false;
}
@ -85,7 +87,7 @@ public class Owner extends SetCommand {
&& !value.equalsIgnoreCase("-")) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", value)
TagResolver.resolver("value", Tag.inserting(Component.text(value)))
);
return;
}
@ -99,7 +101,7 @@ public class Owner extends SetCommand {
if (event.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Owner change")
TagResolver.resolver("value", Tag.inserting(Component.text("Owner change")))
);
return;
}
@ -122,7 +124,7 @@ public class Owner extends SetCommand {
if (unlinkEvent.getEventResult() == Result.DENY) {
player.sendMessage(
TranslatableCaption.of("events.event_denied"),
Template.of("value", "Unlink on owner change")
TagResolver.resolver("value", Tag.inserting(Component.text("Unlink on owner change")))
);
return;
}
@ -142,7 +144,10 @@ public class Owner extends SetCommand {
if (plot.isOwner(uuid)) {
player.sendMessage(
TranslatableCaption.of("member.already_owner"),
Template.of("player", PlayerManager.resolveName(uuid, false).getComponent(player))
TagResolver.resolver(
"player",
Tag.inserting(PlayerManager.resolveName(uuid, false).toComponent(player))
)
);
return;
}
@ -151,7 +156,10 @@ public class Owner extends SetCommand {
if (other == null) {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player_offline"),
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
TagResolver.resolver(
"player",
Tag.inserting(PlayerManager.resolveName(uuid).toComponent(player))
)
);
return;
}
@ -187,7 +195,10 @@ public class Owner extends SetCommand {
if (other != null) {
other.sendMessage(
TranslatableCaption.of("owner.now_owner"),
Template.of("plot", plot.getArea() + ";" + plot.getId())
TagResolver.resolver(
"plot",
Tag.inserting(Component.text(plot.getArea() + ";" + plot.getId()))
)
);
}
} else {

View File

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

View File

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

View File

@ -45,7 +45,9 @@ import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
@ -155,7 +157,7 @@ public class Rate extends SubCommand {
if (plot.getRatings().containsKey(player.getUUID())) {
player.sendMessage(
TranslatableCaption.of("ratings.rating_already_exists"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return;
}
@ -175,7 +177,7 @@ public class Rate extends SubCommand {
plot.addRating(this.getPlayer().getUUID(), event.getRating());
getPlayer().sendMessage(
TranslatableCaption.of("ratings.rating_applied"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
}
return false;
@ -248,7 +250,7 @@ public class Rate extends SubCommand {
if (plot.getRatings().containsKey(uuid)) {
player.sendMessage(
TranslatableCaption.of("ratings.rating_already_exists"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
return;
}
@ -258,7 +260,7 @@ public class Rate extends SubCommand {
plot.addRating(uuid, event.getRating());
player.sendMessage(
TranslatableCaption.of("ratings.rating_applied"),
Template.of("plot", plot.getId().toString())
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
}
};

View File

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

View File

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

View File

@ -39,7 +39,9 @@ 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 net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.URL;
@ -123,7 +125,7 @@ public class Save extends SubCommand {
player.sendMessage(TranslatableCaption.of("web.save_success"));
player.sendMessage(
TranslatableCaption.of("errors.deprecated_commands"),
Template.of("replacement", "/plot download")
TagResolver.resolver("replacement", Tag.inserting(Component.text("/plot download")))
);
try (final MetaDataAccess<List<String>> schematicAccess =
player.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_SCHEMATICS)) {

View File

@ -43,7 +43,9 @@ import com.plotsquared.core.util.StringMan;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.task.RunnableVal;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.net.URL;
@ -80,7 +82,7 @@ public class SchematicCmd extends SubCommand {
if (args.length < 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Possible values: save, paste, exportall, list")
TagResolver.resolver("value", Tag.inserting(Component.text("Possible values: save, paste, exportall, list")))
);
return true;
}
@ -90,14 +92,20 @@ public class SchematicCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_PASTE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SCHEMATIC_PASTE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_SCHEMATIC_PASTE)
)
);
return false;
}
if (args.length < 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Possible values: save, paste, exportall, list")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Possible values: save, paste, exportall, list"))
)
);
break;
}
@ -138,7 +146,10 @@ public class SchematicCmd extends SubCommand {
e.printStackTrace();
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid"),
Template.of("reason", "non-existent url: " + location)
TagResolver.resolver(
"reason",
Tag.inserting(Component.text("non-existent url: " + location))
)
);
SchematicCmd.this.running = false;
return;
@ -154,7 +165,10 @@ public class SchematicCmd extends SubCommand {
SchematicCmd.this.running = false;
player.sendMessage(
TranslatableCaption.of("schematics.schematic_invalid"),
Template.of("reason", "non-existent or not in gzip format")
TagResolver.resolver(
"reason",
Tag.inserting(Component.text("non-existent or not in gzip format"))
)
);
return;
}
@ -189,7 +203,10 @@ public class SchematicCmd extends SubCommand {
player.sendMessage(TranslatableCaption.of("schematics.schematic_exportall_world_args"));
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Use /plot schematic exportall <area>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("Use /plot schematic exportall <area>"))
)
);
return false;
}
@ -197,7 +214,7 @@ public class SchematicCmd extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -206,7 +223,7 @@ public class SchematicCmd extends SubCommand {
player.sendMessage(TranslatableCaption.of("schematic.schematic_exportall_world"));
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Use /plot sch exportall <area>")
TagResolver.resolver("value", Tag.inserting(Component.text("Use /plot sch exportall <area>")))
);
return false;
}
@ -220,7 +237,7 @@ public class SchematicCmd extends SubCommand {
player.sendMessage(TranslatableCaption.of("schematics.schematic_exportall_started"));
player.sendMessage(
TranslatableCaption.of("schematics.plot_to_schem"),
Template.of("amount", String.valueOf(plots.size()))
TagResolver.resolver("amount", Tag.inserting(Component.text(plots.size())))
);
}
}
@ -228,7 +245,10 @@ public class SchematicCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_SAVE)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SCHEMATIC_SAVE))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_SCHEMATIC_SAVE)
)
);
return false;
}
@ -271,19 +291,22 @@ public class SchematicCmd extends SubCommand {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_LIST)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_SCHEMATIC_LIST))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_SCHEMATIC_LIST)
)
);
return false;
}
final String string = StringMan.join(this.schematicHandler.getSchematicNames(), "$2, $1");
player.sendMessage(
TranslatableCaption.of("schematics.schematic_list"),
Template.of("list", string)
TagResolver.resolver("list", Tag.inserting(Component.text(string)))
);
}
default -> player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Possible values: save, paste, exportall, list")
TagResolver.resolver("value", Tag.inserting(Component.text("Possible values: save, paste, exportall, list")))
);
}
return true;

View File

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

View File

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

View File

@ -30,7 +30,9 @@ import com.plotsquared.core.location.BlockLoc;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@CommandDeclaration(command = "sethome",
permission = "plots.set.home",
@ -57,8 +59,12 @@ public class SetHome extends SetCommand {
Plot base = plot.getBasePlot(false);
Location bottom = base.getBottomAbs();
Location location = player.getLocationFull();
BlockLoc rel = new BlockLoc(location.getX() - bottom.getX(), location.getY(),
location.getZ() - bottom.getZ(), location.getYaw(), location.getPitch()
BlockLoc rel = new BlockLoc(
location.getX() - bottom.getX(),
location.getY(), // y is absolute
location.getZ() - bottom.getZ(),
location.getYaw(),
location.getPitch()
);
base.setHome(rel);
player.sendMessage(TranslatableCaption.of("position.position_set"));
@ -67,7 +73,7 @@ public class SetHome extends SetCommand {
default -> {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Template.of("value", "Use /plot set home [none]")
TagResolver.resolver("value", Tag.inserting(Component.text("Use /plot set home [none]")))
);
return false;
}

View File

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

View File

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

View File

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

View File

@ -51,6 +51,9 @@ import com.plotsquared.core.util.SetupUtils;
import com.plotsquared.core.util.TabCompletions;
import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.task.TaskManager;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.io.File;
@ -176,13 +179,16 @@ public class Template extends SubCommand {
if (args[0].equalsIgnoreCase("export")) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template export <world>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot template export <world>")))
);
return true;
} else if (args[0].equalsIgnoreCase("import")) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template import <world> <template>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot template import <world> <template>"))
)
);
return true;
}
@ -196,14 +202,17 @@ public class Template extends SubCommand {
if (args.length != 3) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template import <world> <template>")
TagResolver.resolver(
"value",
Tag.inserting(Component.text("/plot template import <world> <template>"))
)
);
return false;
}
if (this.plotAreaManager.hasPlotArea(world)) {
player.sendMessage(
TranslatableCaption.of("setup.setup_world_taken"),
net.kyori.adventure.text.minimessage.Template.of("value", world)
TagResolver.resolver("value", Tag.inserting(Component.text(world)))
);
return false;
}
@ -211,7 +220,7 @@ public class Template extends SubCommand {
if (!result) {
player.sendMessage(
TranslatableCaption.of("template.invalid_template"),
net.kyori.adventure.text.minimessage.Template.of("value", args[2])
TagResolver.resolver("value", Tag.inserting(Component.text(args[2])))
);
return false;
}
@ -249,7 +258,7 @@ public class Template extends SubCommand {
if (args.length != 2) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
net.kyori.adventure.text.minimessage.Template.of("value", "/plot template export <world>")
TagResolver.resolver("value", Tag.inserting(Component.text("/plot template export <world>")))
);
return false;
}
@ -257,7 +266,7 @@ public class Template extends SubCommand {
if (area == null) {
player.sendMessage(
TranslatableCaption.of("errors.not_valid_plot_world"),
net.kyori.adventure.text.minimessage.Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return false;
}
@ -269,7 +278,7 @@ public class Template extends SubCommand {
e.printStackTrace();
player.sendMessage(
TranslatableCaption.of("template.template_failed"),
net.kyori.adventure.text.minimessage.Template.of("value", e.getMessage())
TagResolver.resolver("value", Tag.inserting(Component.text(e.getMessage())))
);
return;
}

View File

@ -29,7 +29,9 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
@CommandDeclaration(command = "toggle",
aliases = {"attribute"},
@ -54,12 +56,12 @@ public class Toggle extends Command {
if (toggle(player, "chatspy")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -75,12 +77,12 @@ public class Toggle extends Command {
if (toggle(player, "worldedit")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -95,12 +97,12 @@ public class Toggle extends Command {
if (toggle(player, "chat")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -115,12 +117,12 @@ public class Toggle extends Command {
if (toggle(player, "ignoreExpireTask")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -135,12 +137,12 @@ public class Toggle extends Command {
if (toggle(player, "disabletitles")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -155,12 +157,12 @@ public class Toggle extends Command {
if (toggle(player, "disabletime")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
}
@ -175,12 +177,12 @@ public class Toggle extends Command {
if (toggle(player, "debug")) {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_disabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
} else {
player.sendMessage(
TranslatableCaption.of("toggle.toggle_enabled"),
Template.of("setting", command.toString())
TagResolver.resolver("setting", Tag.inserting(Component.text(command.toString())))
);
}
player.refreshDebug();

View File

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

View File

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

View File

@ -28,7 +28,6 @@ package com.plotsquared.core.command;
import com.google.inject.Inject;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.configuration.Settings;
import com.plotsquared.core.configuration.caption.Templates;
import com.plotsquared.core.configuration.caption.TranslatableCaption;
import com.plotsquared.core.events.TeleportCause;
import com.plotsquared.core.permissions.Permission;
@ -45,7 +44,9 @@ import com.plotsquared.core.util.query.PlotQuery;
import com.plotsquared.core.util.query.SortingStrategy;
import com.plotsquared.core.util.task.RunnableVal2;
import com.plotsquared.core.util.task.RunnableVal3;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList;
@ -107,8 +108,10 @@ public class Visit extends Command {
} else if (plots.size() < page || page < 1) {
player.sendMessage(
TranslatableCaption.of("invalid.number_not_in_range"),
Template.of("min", "1"),
Template.of("max", String.valueOf(plots.size()))
TagResolver.builder()
.tag("min", Tag.inserting(Component.text(1)))
.tag("max", Tag.inserting(Component.text(plots.size())))
.build()
);
return;
}
@ -118,7 +121,7 @@ public class Visit extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_VISIT_UNOWNED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.unowned")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.unowned")))
);
return;
}
@ -127,7 +130,7 @@ public class Visit extends Command {
.hasPermission(player, Permission.PERMISSION_HOME)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.owned")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.owned")))
);
return;
}
@ -135,7 +138,7 @@ public class Visit extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_SHARED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.shared")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.shared")))
);
return;
}
@ -143,10 +146,10 @@ public class Visit extends Command {
// allow visit, if UntrustedVisit flag is set, or if the player has either the plot.visit.other or
// plot.admin.visit.untrusted permission
if (!plot.getFlag(UntrustedVisitFlag.class) && !Permissions.hasPermission(player, Permission.PERMISSION_VISIT_OTHER)
&& !Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_VISIT_UNTRUSTED)) {
&& !Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_VISIT_UNTRUSTED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Templates.of("node", "plots.visit.other")
TagResolver.resolver("node", Tag.inserting(Component.text("plots.visit.other")))
);
return;
}
@ -154,7 +157,10 @@ public class Visit extends Command {
if (!Permissions.hasPermission(player, Permission.PERMISSION_VISIT_DENIED)) {
player.sendMessage(
TranslatableCaption.of("permission.no_permission"),
Template.of("node", String.valueOf(Permission.PERMISSION_VISIT_DENIED))
TagResolver.resolver(
"node",
Tag.inserting(Permission.PERMISSION_VISIT_DENIED)
)
);
return;
}
@ -196,11 +202,11 @@ public class Visit extends Command {
if (!MathMan.isInteger(args[2])) {
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Templates.of("value", "(1, ∞)")
TagResolver.resolver("value", Tag.inserting(Component.text("(1, ∞)")))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return CompletableFuture.completedFuture(false);
}
@ -213,11 +219,11 @@ public class Visit extends Command {
if (sortByArea == null) {
player.sendMessage(
TranslatableCaption.of("invalid.not_valid_number"),
Templates.of("value", "(1, ∞)")
TagResolver.resolver("value", Tag.inserting(Component.text("(1, ∞)")))
);
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return CompletableFuture.completedFuture(false);
}
@ -230,7 +236,7 @@ public class Visit extends Command {
} else if (throwable != null || uuids.size() != 1) {
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
} else {
final UUID uuid = uuids.toArray(new UUID[0])[0];
@ -257,7 +263,7 @@ public class Visit extends Command {
} catch (NumberFormatException ignored) {
player.sendMessage(
TranslatableCaption.of("invalid.not_a_number"),
Template.of("value", args[1])
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
);
return CompletableFuture.completedFuture(false);
}
@ -292,7 +298,7 @@ public class Visit extends Command {
} else {
player.sendMessage(
TranslatableCaption.of("errors.invalid_player"),
Template.of("value", finalArgs[0])
TagResolver.resolver("value", Tag.inserting(Component.text(finalArgs[0])))
);
}
} else {
@ -320,7 +326,7 @@ public class Visit extends Command {
// /p v is invalid
player.sendMessage(
TranslatableCaption.of("commandconfig.command_syntax"),
Templates.of("value", getUsage())
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
);
return CompletableFuture.completedFuture(false);
default:

View File

@ -45,8 +45,10 @@ import com.plotsquared.core.util.PatternUtil;
import com.plotsquared.core.util.Permissions;
import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.world.item.ItemTypes;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.Tag;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.NonNull;
@ -187,7 +189,8 @@ public class ComponentPresetManager {
}
final int size = (int) Math.ceil((double) allowedPresets.size() / 9.0D);
final PlotInventory plotInventory = new PlotInventory(this.inventoryUtil, player, size,
TranslatableCaption.of("preset.title").getComponent(player)) {
TranslatableCaption.of("preset.title").getComponent(player)
) {
@Override
public boolean onClick(final int index) {
if (!getPlayer().getCurrentPlot().equals(plot)) {
@ -218,7 +221,8 @@ public class ComponentPresetManager {
if (!econHandler.isEnabled(plot.getArea())) {
getPlayer().sendMessage(
TranslatableCaption.of("preset.economy_disabled"),
Template.of("preset", componentPreset.getDisplayName()));
TagResolver.resolver("preset", Tag.inserting(Component.text(componentPreset.getDisplayName())))
);
return false;
}
if (econHandler.getMoney(getPlayer()) < componentPreset.getCost()) {
@ -228,7 +232,10 @@ public class ComponentPresetManager {
econHandler.withdrawMoney(getPlayer(), componentPreset.getCost());
getPlayer().sendMessage(
TranslatableCaption.of("economy.removed_balance"),
Template.of("money", econHandler.format(componentPreset.getCost()))
TagResolver.resolver(
"money",
Tag.inserting(Component.text(econHandler.format(componentPreset.getCost())))
)
);
}
}
@ -258,19 +265,21 @@ public class ComponentPresetManager {
final List<String> lore = new ArrayList<>();
if (preset.getCost() > 0) {
if (!this.econHandler.isEnabled(plot.getArea())) {
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
TranslatableCaption.of("preset.preset_lore_economy_disabled").getComponent(player))));
} else {
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
TranslatableCaption.of("preset.preset_lore_cost").getComponent(player),
Template.of("cost", String.format("%.2f", preset.getCost()))
TagResolver.resolver("cost", Tag.inserting(Component.text(String.format("%.2f", preset.getCost()))))
)));
}
}
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.parse(
lore.add(MINI_MESSAGE.serialize(MINI_MESSAGE.deserialize(
TranslatableCaption.of("preset.preset_lore_component").getComponent(player),
Template.of("component", preset.getComponent().name().toLowerCase()),
Template.of("prefix", TranslatableCaption.of("core.prefix").getComponent(player))
TagResolver.builder()
.tag("component", Tag.inserting(Component.text(preset.getComponent().name().toLowerCase())))
.tag("prefix", Tag.inserting(TranslatableCaption.of("core.prefix").toComponent(player)))
.build()
)));
lore.removeIf(String::isEmpty);
lore.addAll(preset.getDescription());

View File

@ -249,6 +249,9 @@ public class Settings extends Config {
public static int UUID_CACHE_SIZE = 100000;
@Comment("Rate limit (per 10 minutes) for background UUID fetching from the Mojang API")
public static int BACKGROUND_LIMIT = 200;
@Comment("Whether the Mojang API service is enabled for impromptu api calls. If false only the Background task will use" +
" http requests to fill the UUID cache (requires restart)")
public static boolean IMPROMPTU_SERVICE_MOJANG_API = true;
@Comment("Rate limit (per 10 minutes) for random UUID fetching from the Mojang API")
public static int IMPROMPTU_LIMIT = 300;
@Comment("Timeout (in milliseconds) for non-blocking UUID requests (mostly commands)")
@ -691,6 +694,7 @@ public class Settings extends Config {
@Comment({"If blocks at the edges of queued operations should be set causing updates",
" - Slightly slower, but prevents issues such as fences left connected to nothing"})
public static boolean UPDATE_EDGES = true;
}
@Comment("Settings related to tab completion")

View File

@ -25,6 +25,8 @@
*/
package com.plotsquared.core.configuration.caption;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.ComponentLike;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
@ -40,4 +42,13 @@ public interface Caption {
*/
@NonNull String getComponent(@NonNull LocaleHolder localeHolder);
/**
* Get the Adventure {@link ComponentLike} for this caption
*
* @param localeHolder Locale holder
* @return {@link ComponentLike}
* @since TODO
*/
@NonNull Component toComponent(@NonNull LocaleHolder localeHolder);
}

View File

@ -25,27 +25,53 @@
*/
package com.plotsquared.core.configuration.caption;
import net.kyori.adventure.text.minimessage.Template;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
/**
* A holder for a caption.
* Useful when constructing messages in multiple steps with {@link TagResolver}s.
*/
public class CaptionHolder {
private Caption caption = StaticCaption.of("");
private Template[] templates = new Template[0];
private TagResolver[] tagResolvers = new TagResolver[0];
/**
* Set the {@link Caption} to send.
*
* @param caption The new caption.
*/
public void set(Caption caption) {
this.caption = caption;
}
/**
* Get the {@link Caption} to send.
*
* @return The caption to send.
*/
public Caption get() {
return this.caption;
}
public Template[] getTemplates() {
return this.templates;
/**
* Get the {@link TagResolver}s to use when resolving tags in the {@link Caption}.
*
* @return The tag resolvers to use.
* @since TODO
*/
public TagResolver[] getTagResolvers() {
return this.tagResolvers;
}
public void setTemplates(Template... templates) {
this.templates = templates;
/**
* Set the {@link TagResolver}s to use when resolving tags in the {@link Caption}.
*
* @param tagResolvers The tag resolvers to use.
* @since TODO
*/
public void setTagResolvers(TagResolver... tagResolvers) {
this.tagResolvers = tagResolvers;
}
}

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