Compare commits

..

175 Commits

Author SHA1 Message Date
4a703a305b Merge branch 'v6' into fix/missing-message-files 2022-07-22 13:49:21 +02:00
87f89541b5 build: Update dependency com.intellectualsites.bom:bom-1.18.x to v1.11 (#3726)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-15 10:04:01 +02:00
93f6de7029 build: Update dependency gradle to v7.5 (#3727)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-15 10:03:27 +02:00
73d2686b17 build: Update dependency com.intellectualsites.bom:bom-1.18.x to v1.10 (#3723)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-07-06 00:14:20 +02:00
c446a95b07 build: Back to snapshot for development 2022-07-05 22:26:52 +02:00
3676e1df35 build: Release 6.9.2 2022-07-05 22:25:57 +02:00
12e2705260 Revert #3681 (#3722)
Revert "Adjust schematic height logic when pasting and actually set air as well (#3681)"

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

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

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

* Add code tag to javadoc

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

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-06-21 19:09:29 +02:00
f27009216c chore: Replace AnnotationHelper class (#3706) 2022-06-21 19:09:17 +02:00
dda52ebc2e build: Update dependency cloud.commandframework:cloud-services to v1.7.0 (#3701)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-06-20 10:47:49 +02:00
9ac8d38bab chore: Remove checkerframework from gradle libs
Closes #3700
2022-06-20 10:43:43 +02:00
6a54328f7d refactor: replace usages of switch over keyed enums (#3673) 2022-06-19 00:59:43 +01:00
7279862def docs: Publish javadocs to GH actions (#3686)
* docs: Publish javadocs to GH actions

* chore: Use updated URL

* chore: Use correct URL
2022-06-17 23:40:29 +02:00
08ce4c872c Adjust schematic height logic when pasting and actually set air as well (#3681) 2022-06-17 15:39:41 +01:00
2b0c5b1e21 Reset wall filling on clear (#3680)
- Implements #3591
2022-06-16 16:22:27 +02:00
3d5c694daa chore: Comply with OSSRH licensing guidelines (#3684) 2022-06-15 20:17:17 +02:00
d153232969 Fix maximum plot number check in /plot continue counting the current plot twice (#3674)
Fix max plot restriction check in continue command

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-06-13 23:44:56 +02:00
bb0aa8d5cc fix: Don't publish root directory to maven repository (#3676)
* fix: Don't publish root directory (Fixes #3647)

* fix: More investigations

* fix: Exclude task 'jar' from root project

* chore: Keep group ID in the root scope
2022-06-13 15:23:12 +02:00
d69f3b0893 build: Update dependency com.intellectualsites.bom:bom-1.18.x to v1.5 (#3677)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-06-13 11:38:28 +02:00
565838ad43 [ci skip] chore: Update renovate excludes (Closes #3678) 2022-06-13 11:36:46 +02:00
8b52461271 build: Back to snapshot for development 2022-06-13 11:25:07 +02:00
d08381dfed build: Release 6.9.0 2022-06-13 11:23:48 +02:00
b6c45f2df3 Add an on-complete task to PlotArea#mergePlots (#3671)
* Add an on-complete task to PlotArea#mergePlots

* Fix typo
2022-06-13 09:06:01 +02:00
b9479405e1 Ensure forceSync is provided when constructing chunk coordinators (#3657)
* Ensure forceSync is provided when constructing chunk coordinators

* Re-add old factory create method and deprecate for removal

* Remove old create method that Guice doesn't like
2022-06-12 10:47:43 +02:00
a238ff19bf Implement tile entities to generation using Populators (#3665)
* Implement tile entities to generation using Populators
 - Fixes #3051

* Javadocs

* Don't do the big error if heads don't work

* Address comments regarding javadocs/comments

* Ensure Location is still sealed, and add api description annotation to public methods in UncheckedWorldLocation

* Clean up HybridGen
 - There's no need for while loops acting as a modulo after we've already performed a modulo
 - Make the code-sections calculating if positions are in the wall/road more readable
 - Collaps duplicate if-elseif bodies

* Better exception handling when setting data to LimitedRegion during chunk population

* Address comments

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

* Better naming for "legacy" block state populator

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-06-12 10:47:25 +02:00
c93b08d0c7 feat: Add 1.19 music disk to the /plot music GUI (#3668)
feat: Add 1.19 music disk to the GUI
2022-06-12 10:47:00 +02:00
1470b7117a chore: Add tadpole buckets to the list of dispensable items (#3669)
chore: Add tadpole buckets to the list of disposables

Signed-off-by: Alexander Brandes <mc.cache@web.de>
2022-06-12 10:46:21 +02:00
7cbc67f4fc chore: Fix typo 2022-06-11 17:14:51 +02:00
0a76bbb2b0 Update README.md 2022-06-11 17:14:05 +02:00
09cc59a1c1 docs: Unify WE, P2 and Fawe abbreviations (#3672) 2022-06-11 16:16:06 +02:00
bf646be482 Only load world cofigurations if WorldEdit has fully enabled (safe to do) (#3666)
* Only load world cofigurations if WorldEdit has fully enabled (safe to do)
 - Fixes #3664

(cherry picked from commit f2e1e99be3b4f1fd5ce00e32ea7773dd4d1855aa)

* Fix imports

* QueryCapability is effectively a "dumb" method

* Update Core/src/main/java/com/plotsquared/core/PlotSquared.java

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-06-10 16:52:17 +02:00
cc7e17960b docs: Add 1.19 to issue template 2022-06-10 13:42:09 +02:00
3c75b170f0 fix: mob cap counting for each connected plot individually (#3643)
cap meta is now handled in the base plot
2022-06-10 01:27:39 +02:00
a79c474957 Deprecate methods for removal that will be removed/had their signatures changed in v7 2022-06-09 13:49:58 +01:00
4bb480a238 chore: Update Code of conduct email (#3661) 2022-06-09 12:58:31 +02:00
9ffa935c0c build: Switch to bill of materials (#3653)
* build: Switch to managed dependencies

* build: Move bom to root build script

* build: Update bom

* Update build.gradle.kts

* fix: Use the correct bom version
2022-06-09 12:57:37 +02:00
0a32268784 Prevent blocks moving/generating below and above build height (#3641)
* fix: cancel BlockFormEvent outside of build limit

* refactor: rename variables for easier readability

* fix: cancel liquid flow outside build limit

* refactor: implement to/from context
2022-06-05 20:51:07 +02:00
ae3b8c06f6 chore: Address Paper javadoc warnings (#3648) 2022-06-05 20:50:49 +02:00
713c4ad0d2 Remove aggregation of cross module javadocs (#3646)
chore: Don't aggregate javadocs anymore
2022-06-03 23:13:41 +02:00
48386c0828 build: Back to snapshot for development 2022-06-01 20:12:50 +02:00
625b3921e1 build: Release 6.8.1 2022-06-01 20:09:36 +02:00
48aa37d173 Update Readme SVG (#3642)
docs: Update Readme SVG
2022-05-30 13:47:25 +02:00
2c2314e95c refactor: return info.server for %plotsquared_currentplot_owner% if plot is a server plot (#3640) 2022-05-25 10:18:10 +02:00
5eb2fc3ad0 Kick players on merged plots appropriately (#3639)
fix: kick denied player regardless on all connected plots
2022-05-24 20:30:06 +02:00
82cd9a092c build: Update fawe to v2.2.0 (#3637)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-05-24 13:33:54 +02:00
62754362c2 build: Don't expose jcip and findbugs annotations to the world on runtime (#3533)
* build: Don't expose jcip and findbugs

* build: Revert relocation change of unpublished, shaded deps

* chore: Exclude .DS_Store files
2022-05-21 10:01:06 +00:00
2e9dfd6f6f chore: Update PaperMC repository endpoint (#3633)
Migration - New PaperMC endpoints
2022-05-21 07:57:22 +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
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
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
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
4c0ad148bf build: Release 6.6.1 2022-03-08 20:15:16 +01:00
5c7bfb988c Fix #3532 2022-03-08 18:14:19 +00:00
b46f486680 build: Update actions/checkout action to v3 (#3530)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-07 23:14:24 +01:00
05797d0c78 build: Update dependency org.checkerframework:checker-qual to v3.21.3 (#3528)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-07 20:55:39 +01:00
36ef2cf9ba build: Update dependency net.essentialsx:EssentialsX to v2.19.3 (#3527)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-07 20:55:28 +01:00
26ec31a012 build: Back to snapshot for development 2022-03-07 15:55:25 +01:00
fd4a542062 build: Release 6.6.0 2022-03-07 15:35:00 +01:00
dc13f2565f ci: Pin GH workflow dependencies 2022-03-07 15:26:41 +01:00
9f632af0ae Implement extended world heights from Y-64 to Y319 #3473 (#3473)
* Begin to implement extended world heights:
 - Implemented in Bukkit module (and where required in Core module)

* Implement extended world heights into core module

* Add min gen height to setup,

* Default gen/build heights based on minecraft version

* Few fixes

* Fix up queues

* Address comments

* Make road schematic stuff slightly more efficient by sharing queues

* Minor fixes, don't overlay error many times for the same y

* Fix incorrect schematic paste height, undo changes to HybridUtils

* Overhall regenallroads method to make it work, make sure BukkitChunkCoordinator can/will finish

* Process chunks in order when regenerating all roads

* Address comments

* Address comments

* Ground level//bedrock is at min gen height
 - Add comment on == rather than <= being used
 - It's because it's only checking for the bedrock layer being broken if that's disabled

* Fix offset for min build height in SchematicHandler

* Better javadoc

Co-authored-by: Hannes Greule <SirYwell@users.noreply.github.com>

* Address inclusivity issues for max world height

* Javadocs/comments/deprecation

* Use world min/max heights if present in QueueCoordinator

* Address some deprecations for regions and biome setting

* Add a count for chunks we're currently trying to load to not skip chunks at the end of a queue's edit

* Use minGenHeight + 1 rather than build height in AugmentedUtils

* Create utility method for layer index in GenChunk

* Correct height in HybridUtils, also use minGenHeight + 1

* Don't magically split to 128 height in regeneration

* Add utility methods for world height in QueueCoordinator

* Clean up ClassicPlotManager road creation/removal

* Start generation at min gen height if bedrock is disabled

* min gen height is set in PlotArea

* Add note on schem y normalisation

* Improve plot getVolume method readability

* Don't overly extend height when regenerating road region

* y index utility method in ChunknQueueCoordinator

* Layer index utility method in LocalChunk

* Use version min/max heights if world not present in QueueCoordinator

* Fix min -> max

* Don't allow players to modify outside build height when using plot set  / schematics.
 - Also fixes schematic height issues

* Remove debug

* Address comments

* Switch loadingChunks to AtomicInteger to be safe (in case of multi-threaded)

* Fix "security" issue that was already present

* Ensure sign isn't physicsed

Co-authored-by: Hannes Greule <SirYwell@users.noreply.github.com>
2022-03-05 19:03:39 +01:00
d698c6a1e5 [ci skip] Update issue templates for 1.18.2 2022-03-04 13:25:50 +01:00
40e1bd9897 build: Update dependency cloud.commandframework:cloud-services to v1.6.2 (#3522)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-03-01 16:31:40 +01:00
75f31c5bf6 Replace delombok-ed equals and hashCode methods (#3518)
* regenerate leftover delombok-ed equals and hashCode methods

* delegate to hashCode directly instead of single parameter calls
2022-02-27 18:51:37 +01:00
954c813cef build: Update gradle wrapper properly 2022-02-27 18:48:37 +01:00
05e055e9cf ci: Bump actions/setup-java to 3.0.0 (#3519) 2022-02-25 22:43:24 +01:00
2ea21c150f build: Back to snapshot for development 2022-02-23 11:05:40 +01:00
c2fd4edad5 build: Release 6.5.1 2022-02-23 11:00:45 +01:00
78b8696778 refactor: Delete rebase.yml 2022-02-23 10:54:07 +01:00
e653961385 Fix shulkers teleporting on the road (#3501)
* fix: Don't teleport shulkers on the road

* Address comments
2022-02-16 13:48:20 +01:00
b21d12fd52 build: Update dependency net.luckperms:api to v5.4 (#3505)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-02-14 11:58:35 +01:00
7557df96c7 Cancel block placement if the block consists of two block states (#3487)
* fix: cancel block placements out of area

* chore: use BlockMultiPlaceEvent

* chore: fix comment typo

* fix: max build height should be exclusive
2022-02-11 11:21:59 +01:00
61797c3aff build: Back to snapshot for development 2022-02-10 12:44:17 +01:00
78125ff1e2 build: Release 6.5.0 2022-02-10 12:32:02 +01:00
d7c8715b25 Don't open the component GUI if the actor has no permission for a specific preset (#3496)
* fix: Handle an empty component GUI gracefully

* Address comments
2022-02-10 12:19:35 +01:00
34f005c244 Restore ability to use PlaceholderAPI in greeting and farewell flag (#3489)
Fixes #3465
2022-02-10 12:11:39 +01:00
6fbd1376ca Don't enable presets with prices if economy is disabled (#3497) 2022-02-10 12:10:47 +01:00
951767dc64 fix: synchronize confirmExpiry (#3481)
Prevents that the MetaDataAccess is closed before setting the data
2022-02-08 15:57:09 +01:00
16928b05f1 Display "/plot help" categories only, if the player has permission to access these commands (#3490)
* feat: only show categories with access in help-menu

* chore: cleanup imports

* feat: tab complete should respect category permissions as well

* chore: cleanup imports again

* chore: rename ambiguous method name and update access modifier
2022-02-08 15:56:29 +01:00
fff14b05cb build: Update release-drafter/release-drafter action to v5.18.1 (#3494)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-02-07 10:37:26 +01:00
e619c867e9 build: Update dependency org.checkerframework:checker-qual to v3.21.2 (#3493)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-02-07 10:34:53 +01:00
543284e016 fix: NPE on unavailable music discs on lower versions (#3475)
* fix: NPE on unavailable music discs

* chore: documentation for InventoryUtil changes

* fix: no need for additional decrement

* chore: address requested changes

* fix: prevent binary mismatch

Co-authored-by: Alex <mc.cache@web.de>
2022-02-04 18:21:43 +01:00
0d78ba5f35 [ci skip] ci: Don't run actions twice 2022-01-31 21:12:00 +01:00
9ba2b62fc2 [ci skip] style: Restore GlobalFlagContainer's entry list being sorted alphabetically
Mostly helps me when updating the wiki
2022-01-31 15:50:44 +01:00
f10ee27fdd build: Update dependency org.bstats:bstats-bukkit to v3 (#3486)
* build: Update dependency org.bstats:bstats-bukkit to v3

* build: Update bStats

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: NotMyFault <mc.cache@web.de>
2022-01-31 10:35:31 +01:00
3278ce1fe9 build: Update dependency com.intellectualsites.paster:Paster to v1.1.4 (#3485)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-01-31 10:24:16 +01:00
fefb0334bd build: Update com.fastasyncworldedit to v2.0.1 (#3484)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-01-31 10:23:57 +01:00
d06a827e31 Always call plot events through the event dispatcher (#3479) 2022-01-29 13:12:00 +01:00
10bb520f3a docs: Switch to generated wiki (#3482) 2022-01-29 00:12:54 +01:00
126aa53b61 build: Back to snapshot for development 2022-01-27 14:00:51 +01:00
ac71046feb build: Release 6.4.0 2022-01-27 13:49:17 +01:00
7c290e6bd0 Align plugin's java version with API java version - Java 17 (#3468)
* refactor!: Align plugin's java version with API java version

* fix: Bump Guice to fix private injection on Java 17
2022-01-27 13:26:58 +01:00
4d297cc829 Separate linked javadocs per module (#3476)
* docs: Separate javadocs per module

* docs: Read javadoc version from Gradle version catalog
2022-01-27 13:26:27 +01:00
5ab410a5c5 fix: Don't ommit flag int input in no permission message (#3466) 2022-01-27 12:14:39 +01:00
1f28bac955 Fix: Plot#getOwner can be nullable, and redstone may be present on unowned plots (#3472) 2022-01-27 12:14:16 +01:00
92c54de5e9 fix: run whenDone on empty queue (#3474) 2022-01-27 12:13:55 +01:00
ff5d79699d docs: Add @since annotation for v6 changes (#3471) 2022-01-24 21:46:01 +01:00
a0594c19ee docs: Address dangling @see tags (#3469) 2022-01-24 21:43:35 +01:00
da41c136fe docs: Unify true/false style in @return (#3470) 2022-01-24 21:41:54 +01:00
6a5859ee0f build: Update release-drafter/release-drafter action to v5.17.6 (#3467)
Co-authored-by: Renovate Bot <bot@renovateapp.com>
2022-01-24 11:06:27 +01:00
59e0b4b67a feat: unknown owner(s) for plot expiry (#3452)
* feat: unknown owner(s) for plot expiry

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

* feat: Sort plugins on debugpaste alphabetically

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

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

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

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

* refactor: Update SquirrelID GAV

* build: Release 6.3.0

* build: Back to snapshot for development

* fix: fallback method in BukkitQueueCoordinator uses world coordinates

* mark since tags as TODO

* fix: get the lowest diff for plot age

* fix: initialize with high value and better readability

* fix: no need for multiple age checks

* fix: address exceptions in plot analysis

* chore: address requested changes

* chore: Fix introduced violations

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

* chore: More work

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

* Fix caption typo

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

* Remove wildcard import

* Use @since TODO instead of hard coded version

* chore: Update `@since` tags to TODO

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

* fix: change default message

* refactor: extract duplicated code

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

View File

@ -7,7 +7,7 @@ body:
attributes: attributes:
value: | value: |
Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem. Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem.
Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki). Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form! Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form!
- type: dropdown - type: dropdown
@ -27,13 +27,12 @@ body:
description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first. description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
multiple: false multiple: false
options: options:
- '1.19'
- '1.18.2'
- '1.18.1' - '1.18.1'
- '1.18' - '1.18'
- '1.17.1' - '1.17.1'
- '1.16.5' - '1.16.5'
- '1.15.2'
- '1.14.4'
- '1.13.2'
validations: validations:
required: true required: true

View File

@ -4,5 +4,5 @@ contact_links:
url: https://discord.gg/intellectualsites url: https://discord.gg/intellectualsites
about: Our support Discord, please ask questions and seek support here. about: Our support Discord, please ask questions and seek support here.
- name: PlotSquared Wiki - name: PlotSquared Wiki
url: https://github.com/IntellectualSites/PlotSquared-Documentation/wiki url: https://intellectualsites.github.io/plotsquared-documentation/
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands. about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.

View File

@ -7,7 +7,7 @@ body:
attributes: attributes:
value: | value: |
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added. Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki). For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
- type: textarea - type: textarea
attributes: attributes:

View File

@ -4,14 +4,15 @@ on: [ pull_request, push ]
jobs: jobs:
build: build:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v2.4.0 uses: actions/checkout@v3
- name: Validate Gradle Wrapper" - name: Validate Gradle Wrapper"
uses: gradle/wrapper-validation-action@v1.0.4 uses: gradle/wrapper-validation-action@v1
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v2.5.0 uses: actions/setup-java@v3
with: with:
distribution: temurin distribution: temurin
java-version: 17 java-version: 17
@ -39,3 +40,27 @@ jobs:
env: env:
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }} ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }} ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
- name: Publish core javadoc
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
uses: cpina/github-action-push-to-another-repository@main
env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
with:
source-directory: 'Core/build/docs/javadoc'
destination-github-username: 'IntellectualSites'
destination-repository-name: 'plotsquared-javadocs'
user-email: ${{ secrets.USER_EMAIL }}
target-branch: main
target-directory: core
- name: Publish bukkit javadoc
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
uses: cpina/github-action-push-to-another-repository@main
env:
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
with:
source-directory: 'Bukkit/build/docs/javadoc'
destination-github-username: 'IntellectualSites'
destination-repository-name: 'plotsquared-javadocs'
user-email: ${{ secrets.USER_EMAIL }}
target-branch: main
target-directory: bukkit

37
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,37 @@
name: "CodeQL"
on:
push:
branches: [ v6 ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ v6 ]
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'java' ]
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

View File

@ -1,20 +0,0 @@
name: Rebase Pull Request
on:
issue_comment:
types: [created]
jobs:
rebase:
name: Rebase
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') && github.event.comment.author_association == 'MEMBER'
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2.4.0
with:
token: ${{ secrets.REBASE_TOKEN }}
fetch-depth: 0
- name: Automatic Rebase
uses: cirrus-actions/rebase@1.5
env:
GITHUB_TOKEN: ${{ secrets.REBASE_TOKEN }}

View File

@ -11,8 +11,9 @@ on:
jobs: jobs:
update_release_draft: update_release_draft:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: release-drafter/release-drafter@v5.15.0 - uses: release-drafter/release-drafter@v5
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

10
.gitignore vendored
View File

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

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

@ -0,0 +1,50 @@
<?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" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="svg2" xml:space="preserve" width="4000" height="3333.3333" viewBox="0 0 4000 3333.3333" sodipodi:docname="PlotSquared.ai">
<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 clipPathUnits="userSpaceOnUse" id="clipPath18">
<path d="M 0,2500 H 3000 V 0 H 0 Z" id="path16" />
</clipPath>
</defs>
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview4" />
<g id="g10" inkscape:groupmode="layer" inkscape:label="PlotSquared" transform="matrix(1.3333333,0,0,-1.3333333,0,3333.3333)">
<g id="g12">
<g id="g14" clip-path="url(#clipPath18)">
<g id="g20" transform="translate(1486.1511,2242.6453)">
<path 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" style="fill:#062f4c;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path22" />
</g>
<g id="g24" transform="translate(1201.7948,1741.5303)">
<path 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" style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path26" />
</g>
<g id="g28" transform="translate(919.3342,1429.7462)">
<path 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" style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path30" />
</g>
<g id="g32" transform="translate(1649.134,1700.6166)">
<path 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" style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path34" />
</g>
<g id="g36" transform="translate(1262.7214,1613.126)">
<path 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" style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path38" />
</g>
<g id="g40" transform="translate(1966.3174,1675.6364)">
<path 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" style="fill:#042338;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path42" />
</g>
<g id="g44" transform="translate(1499.3971,1669.1094)">
<path 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" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path46" />
</g>
<g id="g48" transform="translate(1748.0469,1601.6797)">
<path 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" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path50" />
</g>
<g id="g52" transform="translate(1262.7214,1613.126)">
<path 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" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path54" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,13 +0,0 @@
{
"scanSettings": {
"baseBranches": ["v6"]
},
"checkRunSettings": {
"vulnerableCheckRunConclusionLevel": "success",
"displayMode": "diff"
},
"issueSettings": {
"minSeverityLevel": "LOW"
},
"enableRenovate": "true"
}

View File

@ -8,7 +8,7 @@ repositories {
maven { maven {
name = "PaperMC" name = "PaperMC"
url = uri("https://papermc.io/repo/repository/maven-public/") url = uri("https://repo.papermc.io/repository/maven-public/")
} }
maven { maven {
@ -21,20 +21,20 @@ dependencies {
api(projects.plotSquaredCore) api(projects.plotSquaredCore)
// Metrics // Metrics
implementation(libs.bstats) implementation("org.bstats:bstats-bukkit")
// Paper // Paper
compileOnly(libs.paper) compileOnly(libs.paper)
implementation(libs.paperlib) implementation("io.papermc:paperlib")
// Plugins // Plugins
compileOnly(libs.worldeditBukkit) { compileOnly(libs.worldeditBukkit) {
exclude(group = "org.bukkit") exclude(group = "org.bukkit")
exclude(group = "org.spigotmc") exclude(group = "org.spigotmc")
} }
compileOnly(libs.fastasyncworldeditBukkit) { isTransitive = false } compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
testImplementation(libs.fastasyncworldeditBukkit) { isTransitive = false } testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
compileOnly(libs.vault) { compileOnly("com.github.MilkBowl:VaultAPI") {
exclude(group = "org.bukkit") exclude(group = "org.bukkit")
} }
compileOnly(libs.placeholderapi) compileOnly(libs.placeholderapi)
@ -44,15 +44,16 @@ dependencies {
// Other libraries // Other libraries
implementation(libs.squirrelid) { isTransitive = false } implementation(libs.squirrelid) { isTransitive = false }
implementation(libs.serverlib) implementation("dev.notmyfault.serverlib:ServerLib")
// Our libraries // Our libraries
implementation(libs.arkitektonika) implementation(libs.arkitektonika)
implementation(libs.http4j) implementation(libs.http4j)
implementation(libs.paster) implementation("com.intellectualsites.paster:Paster")
implementation("com.intellectualsites.informative-annotations:informative-annotations")
// Adventure // Adventure
implementation(libs.adventurePlatformBukkit) implementation("net.kyori:adventure-platform-bukkit")
} }
tasks.processResources { tasks.processResources {
@ -83,8 +84,11 @@ tasks.named<ShadowJar>("shadowJar") {
relocate("org.jetbrains", "com.plotsquared.core.annotations") relocate("org.jetbrains", "com.plotsquared.core.annotations")
relocate("org.intellij.lang", "com.plotsquared.core.intellij.annotations") relocate("org.intellij.lang", "com.plotsquared.core.intellij.annotations")
relocate("javax.annotation", "com.plotsquared.core.annotation") 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") relocate("javax.inject", "com.plotsquared.core.annotation.inject")
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
relocate("com.intellectualsites.informative-annotations", "com.plotsquared.core.annotation.informative")
// Get rid of all the libs which are 100% unused. // Get rid of all the libs which are 100% unused.
minimize() minimize()
@ -95,11 +99,12 @@ tasks.named<ShadowJar>("shadowJar") {
tasks { tasks {
withType<Javadoc> { withType<Javadoc> {
val opt = options as StandardJavadocDocletOptions val opt = options as StandardJavadocDocletOptions
opt.links("https://papermc.io/javadocs/paper/1.17/") opt.links("https://jd.papermc.io/paper/1.18/")
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/7.2.7/") opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/7.2.7/") opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
opt.links("https://jd.adventure.kyori.net/api/4.9.3/") opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/") opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
opt.links("https://checkerframework.org/api/") opt.links("https://checkerframework.org/api/")
opt.encoding("UTF-8")
} }
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit; package com.plotsquared.bukkit;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit; package com.plotsquared.bukkit;
@ -218,6 +211,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
private PlatformWorldManager<World> worldManager; private PlatformWorldManager<World> worldManager;
private Locale serverLocale; private Locale serverLocale;
@SuppressWarnings("StringSplitter")
@Override @Override
public int @NonNull [] serverVersion() { public int @NonNull [] serverVersion() {
if (this.version == null) { if (this.version == null) {
@ -237,6 +231,16 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
return this.version; return this.version;
} }
@Override
public int versionMinHeight() {
return serverVersion()[1] >= 18 ? -64 : 0;
}
@Override
public int versionMaxHeight() {
return serverVersion()[1] >= 18 ? 319 : 255;
}
@Override @Override
public @NonNull String serverImplementation() { public @NonNull String serverImplementation() {
return Bukkit.getVersion(); return Bukkit.getVersion();
@ -259,7 +263,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
final PlotSquared plotSquared = new PlotSquared(this, "Bukkit"); final PlotSquared plotSquared = new PlotSquared(this, "Bukkit");
// FAWE // FastAsyncWorldEdit
if (Settings.FAWE_Components.FAWE_HOOK) { if (Settings.FAWE_Components.FAWE_HOOK) {
Plugin fawe = getServer().getPluginManager().getPlugin("FastAsyncWorldEdit"); Plugin fawe = getServer().getPluginManager().getPlugin("FastAsyncWorldEdit");
if (fawe != null) { if (fawe != null) {
@ -267,7 +271,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
Class.forName("com.fastasyncworldedit.bukkit.regions.plotsquared.FaweQueueCoordinator"); Class.forName("com.fastasyncworldedit.bukkit.regions.plotsquared.FaweQueueCoordinator");
faweHook = true; faweHook = true;
} catch (Exception ignored) { } catch (Exception ignored) {
LOGGER.error("Incompatible version of FAWE to enable hook, please upgrade: https://ci.athion" + LOGGER.error("Incompatible version of FastAsyncWorldEdit to enable hook, please upgrade: https://ci.athion" +
".net/job/FastAsyncWorldEdit/"); ".net/job/FastAsyncWorldEdit/");
} }
} }
@ -323,8 +327,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
// Comments // Comments
CommentManager.registerDefaultInboxes(); CommentManager.registerDefaultInboxes();
plotSquared.startExpiryTasks();
// Do stuff that was previously done in PlotSquared // Do stuff that was previously done in PlotSquared
// Kill entities // Kill entities
if (Settings.Enabled_Components.KILL_ROAD_MOBS || Settings.Enabled_Components.KILL_ROAD_VEHICLES) { if (Settings.Enabled_Components.KILL_ROAD_MOBS || Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
@ -421,7 +423,9 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
}, TaskTime.ticks(1L)); }, TaskTime.ticks(1L));
} }
// Once the server has loaded force updating all generators known to P2 plotSquared.startExpiryTasks();
// Once the server has loaded force updating all generators known to PlotSquared
TaskManager.runTaskLater(() -> PlotSquared.platform().setupUtils().updateGenerators(true), TaskTime.ticks(1L)); TaskManager.runTaskLater(() -> PlotSquared.platform().setupUtils().updateGenerators(true), TaskTime.ticks(1L));
// Services are accessed in order // Services are accessed in order
@ -502,8 +506,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.backgroundPipeline.registerService(essentialsUUIDService); this.backgroundPipeline.registerService(essentialsUUIDService);
} }
final SquirrelIdUUIDService impromptuMojangService = new SquirrelIdUUIDService(Settings.UUID.IMPROMPTU_LIMIT); if (Settings.UUID.IMPROMPTU_SERVICE_MOJANG_API) {
this.impromptuPipeline.registerService(impromptuMojangService); final SquirrelIdUUIDService impromptuMojangService = new SquirrelIdUUIDService(Settings.UUID.IMPROMPTU_LIMIT);
this.impromptuPipeline.registerService(impromptuMojangService);
}
final SquirrelIdUUIDService backgroundMojangService = new SquirrelIdUUIDService(Settings.UUID.BACKGROUND_LIMIT); final SquirrelIdUUIDService backgroundMojangService = new SquirrelIdUUIDService(Settings.UUID.BACKGROUND_LIMIT);
this.backgroundPipeline.registerService(backgroundMojangService); this.backgroundPipeline.registerService(backgroundMojangService);
} else { } else {
@ -726,6 +732,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.getServer().getPluginManager().disablePlugin(this); this.getServer().getPluginManager().disablePlugin(this);
} }
@Override
public void shutdownServer() {
getServer().shutdown();
}
private void registerCommands() { private void registerCommands() {
final BukkitCommand bukkitCommand = new BukkitCommand(); final BukkitCommand bukkitCommand = new BukkitCommand();
final PluginCommand plotCommand = getCommand("plots"); final PluginCommand plotCommand = getCommand("plots");
@ -970,7 +981,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
} }
iterator.remove(); iterator.remove();
entity.remove(); entity.remove();
continue;
} }
} }
} else { } else {
@ -982,7 +992,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
} }
iterator.remove(); iterator.remove();
entity.remove(); entity.remove();
continue;
} }
} }
} }
@ -1223,7 +1232,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
@Override @Override
@NonNull @NonNull
@SuppressWarnings("ALL") @SuppressWarnings("unchecked")
public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() { public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class); return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class);
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;
@ -461,6 +454,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
this.tamed.tamed = tamed.isTamed(); this.tamed.tamed = tamed.isTamed();
} }
@SuppressWarnings("deprecation") // Paper deprecation
@Override @Override
public Entity spawn(World world, int xOffset, int zOffset) { public Entity spawn(World world, int xOffset, int zOffset) {
Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset); Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset);

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.entity; package com.plotsquared.bukkit.entity;

View File

@ -1,41 +1,35 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.generator; package com.plotsquared.bukkit.generator;
import com.plotsquared.core.PlotSquared; import com.plotsquared.bukkit.queue.LimitedRegionWrapperQueue;
import com.plotsquared.core.generator.HybridPlotWorld;
import com.plotsquared.core.generator.IndependentPlotGenerator; import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.location.ChunkWrapper; import com.plotsquared.core.location.Location;
import com.plotsquared.core.location.UncheckedWorldLocation;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.queue.QueueCoordinator; import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.queue.ScopedQueueCoordinator; import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.BlockPopulator;
import org.bukkit.generator.LimitedRegion;
import org.bukkit.generator.WorldInfo;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Random; import java.util.Random;
@ -43,32 +37,51 @@ import java.util.Random;
final class BlockStatePopulator extends BlockPopulator { final class BlockStatePopulator extends BlockPopulator {
private final IndependentPlotGenerator plotGenerator; private final IndependentPlotGenerator plotGenerator;
private final PlotAreaManager plotAreaManager;
private QueueCoordinator queue; /**
* @since 6.9.0
*/
public BlockStatePopulator(
final @NonNull IndependentPlotGenerator plotGenerator
) {
this.plotGenerator = plotGenerator;
}
/**
* @deprecated Use {@link BlockStatePopulator#BlockStatePopulator(IndependentPlotGenerator)} as plotAreManager is unused
*/
@Deprecated(forRemoval = true, since = "6.9.0")
public BlockStatePopulator( public BlockStatePopulator(
final @NonNull IndependentPlotGenerator plotGenerator, final @NonNull IndependentPlotGenerator plotGenerator,
final @NonNull PlotAreaManager plotAreaManager final @NonNull PlotAreaManager plotAreaManager
) { ) {
this.plotGenerator = plotGenerator; this.plotGenerator = plotGenerator;
this.plotAreaManager = plotAreaManager;
} }
@Override @Override
public void populate(final @NonNull World world, final @NonNull Random random, final @NonNull Chunk source) { public void populate(
if (this.queue == null) { @NonNull final WorldInfo worldInfo,
this.queue = PlotSquared.platform().globalBlockQueue().getNewQueue(new BukkitWorld(world)); @NonNull final Random random,
} final int chunkX,
final PlotArea area = this.plotAreaManager.getPlotArea(world.getName(), null); final int chunkZ,
if (area == null) { @NonNull final LimitedRegion limitedRegion
) {
PlotArea area = UncheckedWorldLocation.at(worldInfo.getName(), chunkX << 4, 0, chunkZ << 4).getPlotArea();
if (area == null || (area instanceof HybridPlotWorld hpw && !hpw.populationNeeded()) || area instanceof SinglePlotArea) {
return; return;
} }
final ChunkWrapper wrap = new ChunkWrapper(area.getWorldName(), source.getX(), source.getZ()); LimitedRegionWrapperQueue wrapped = new LimitedRegionWrapperQueue(limitedRegion);
final ScopedQueueCoordinator chunk = this.queue.getForChunk(wrap.x, wrap.z); // It is possible for the region to be larger than the chunk, but there is no reason for P2 to need to populate
if (this.plotGenerator.populateChunk(chunk, area)) { // outside of the actual chunk area.
this.queue.enqueue(); Location min = UncheckedWorldLocation.at(worldInfo.getName(), chunkX << 4, worldInfo.getMinHeight(), chunkZ << 4);
} Location max = UncheckedWorldLocation.at(
worldInfo.getName(),
(chunkX << 4) + 15,
worldInfo.getMaxHeight(),
(chunkZ << 4) + 15
);
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(wrapped, min, max);
this.plotGenerator.populateChunk(offsetChunkQueue, area);
} }
} }

View File

@ -1,31 +1,28 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.generator; package com.plotsquared.bukkit.generator;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.generator.AugmentedUtils; 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.Chunk;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.generator.BlockPopulator; import org.bukkit.generator.BlockPopulator;
@ -52,7 +49,14 @@ public class BukkitAugmentedGenerator extends BlockPopulator {
@Override @Override
public void populate(@NonNull World world, @NonNull Random random, @NonNull Chunk source) { 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

@ -1,32 +1,26 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.generator; package com.plotsquared.bukkit.generator;
import com.plotsquared.bukkit.queue.GenChunk; import com.plotsquared.bukkit.queue.GenChunk;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.bukkit.util.BukkitWorld;
import com.plotsquared.core.PlotSquared; import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.generator.GeneratorWrapper; import com.plotsquared.core.generator.GeneratorWrapper;
import com.plotsquared.core.generator.IndependentPlotGenerator; import com.plotsquared.core.generator.IndependentPlotGenerator;
@ -48,8 +42,7 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
public class BukkitPlotGenerator extends ChunkGenerator public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
implements GeneratorWrapper<ChunkGenerator> {
@SuppressWarnings("unused") @SuppressWarnings("unused")
public final boolean PAPER_ASYNC_SAFE = true; public final boolean PAPER_ASYNC_SAFE = true;
@ -72,7 +65,12 @@ public class BukkitPlotGenerator extends ChunkGenerator
this.plotGenerator = generator; this.plotGenerator = generator;
this.platformGenerator = this; this.platformGenerator = this;
this.populators = new ArrayList<>(); this.populators = new ArrayList<>();
this.populators.add(new BlockStatePopulator(this.plotGenerator, this.plotAreaManager)); int minecraftMinorVersion = PlotSquared.platform().serverVersion()[1];
if (minecraftMinorVersion >= 17) {
this.populators.add(new BlockStatePopulator(this.plotGenerator));
} else {
this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator));
}
this.full = true; this.full = true;
} }
@ -111,30 +109,7 @@ public class BukkitPlotGenerator extends ChunkGenerator
@Override @Override
public @NonNull List<BlockPopulator> getDefaultPopulators(@NonNull World world) { public @NonNull List<BlockPopulator> getDefaultPopulators(@NonNull World world) {
try { try {
if (!this.loaded) { checkLoaded(world);
String name = world.getName();
PlotSquared.get().loadWorld(name, this);
final Set<PlotArea> areas = this.plotAreaManager.getPlotAreasSet(name);
if (!areas.isEmpty()) {
PlotArea area = areas.iterator().next();
if (!area.isMobSpawning()) {
if (!area.isSpawnEggs()) {
world.setSpawnFlags(false, false);
}
world.setAmbientSpawnLimit(0);
world.setAnimalSpawnLimit(0);
world.setMonsterSpawnLimit(0);
world.setWaterAnimalSpawnLimit(0);
} else {
world.setSpawnFlags(true, true);
world.setAmbientSpawnLimit(-1);
world.setAnimalSpawnLimit(-1);
world.setMonsterSpawnLimit(-1);
world.setWaterAnimalSpawnLimit(-1);
}
}
this.loaded = true;
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -153,18 +128,52 @@ public class BukkitPlotGenerator extends ChunkGenerator
return toAdd; return toAdd;
} }
private synchronized void checkLoaded(@NonNull World world) {
// Do not attempt to load configurations until WorldEdit has a platform ready.
if (!PlotSquared.get().isWeInitialised()) {
return;
}
if (!this.loaded) {
String name = world.getName();
PlotSquared.get().loadWorld(name, this);
final Set<PlotArea> areas = this.plotAreaManager.getPlotAreasSet(name);
if (!areas.isEmpty()) {
PlotArea area = areas.iterator().next();
if (!area.isMobSpawning()) {
if (!area.isSpawnEggs()) {
world.setSpawnFlags(false, false);
}
setSpawnLimits(world, 0);
} else {
world.setSpawnFlags(true, true);
setSpawnLimits(world, -1);
}
}
this.loaded = true;
}
}
@SuppressWarnings("deprecation")
private void setSpawnLimits(@NonNull World world, int limit) {
world.setAmbientSpawnLimit(limit);
world.setAnimalSpawnLimit(limit);
world.setMonsterSpawnLimit(limit);
world.setWaterAnimalSpawnLimit(limit);
}
@Override @Override
public @NonNull ChunkData generateChunkData( public @NonNull ChunkData generateChunkData(
@NonNull World world, @NonNull Random random, int x, int z, @NonNull World world, @NonNull Random random, int x, int z,
@NonNull BiomeGrid biome @NonNull BiomeGrid biome
) { ) {
int minY = BukkitWorld.getMinWorldHeight(world);
GenChunk result = new GenChunk(); int maxY = BukkitWorld.getMaxWorldHeight(world);
GenChunk result = new GenChunk(minY, maxY);
if (this.getPlotGenerator() instanceof SingleWorldGenerator) { if (this.getPlotGenerator() instanceof SingleWorldGenerator) {
if (result.getChunkData() != null) { if (result.getChunkData() != null) {
for (int chunkX = 0; chunkX < 16; chunkX++) { for (int chunkX = 0; chunkX < 16; chunkX++) {
for (int chunkZ = 0; chunkZ < 16; chunkZ++) { for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
for (int y = 0; y < world.getMaxHeight(); y++) { for (int y = minY; y < maxY; y++) {
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS); biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
} }
@ -198,9 +207,7 @@ public class BukkitPlotGenerator extends ChunkGenerator
private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) { private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) {
// Load if improperly loaded // Load if improperly loaded
if (!this.loaded) { if (!this.loaded) {
String name = world.getName(); checkLoaded(world);
PlotSquared.get().loadWorld(name, this);
this.loaded = true;
} }
// Process the chunk // Process the chunk
if (ChunkManager.preProcessChunk(loc, result)) { if (ChunkManager.preProcessChunk(loc, result)) {

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.generator; package com.plotsquared.bukkit.generator;
@ -80,7 +73,8 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
result.setBiome(x, z, BukkitAdapter.adapt(biome)); 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) { public void setBiome(int x, int y, int z, @NonNull Biome biome) {
result.setBiome(x, z, BukkitAdapter.adapt(biome)); result.setBiome(x, z, BukkitAdapter.adapt(biome));

View File

@ -0,0 +1,74 @@
/*
* PlotSquared, a land and world management plugin for Minecraft.
* Copyright (C) IntellectualSites <https://intellectualsites.com>
* Copyright (C) IntellectualSites team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.plotsquared.bukkit.generator;
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.generator.HybridPlotWorld;
import com.plotsquared.core.generator.IndependentPlotGenerator;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.location.UncheckedWorldLocation;
import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.world.SinglePlotArea;
import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.util.SideEffectSet;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.generator.BlockPopulator;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.jetbrains.annotations.NotNull;
import java.util.Random;
final class LegacyBlockStatePopulator extends BlockPopulator {
private final IndependentPlotGenerator plotGenerator;
/**
* @since 6.9.0
*/
public LegacyBlockStatePopulator(
final @NonNull IndependentPlotGenerator plotGenerator
) {
this.plotGenerator = plotGenerator;
}
@Override
public void populate(@NotNull final World world, @NotNull final Random random, @NotNull final Chunk source) {
int chunkMinX = source.getX() << 4;
int chunkMinZ = source.getZ() << 4;
PlotArea area = Location.at(world.getName(), chunkMinX, 0, chunkMinZ).getPlotArea();
if (area == null || (area instanceof HybridPlotWorld hpw && !hpw.populationNeeded()) || area instanceof SinglePlotArea) {
return;
}
QueueCoordinator queue = PlotSquared.platform().globalBlockQueue().getNewQueue(new BukkitWorld(world));
queue.setForceSync(true);
queue.setSideEffectSet(SideEffectSet.none());
queue.setBiomesEnabled(false);
queue.setChunkObject(source);
Location min = UncheckedWorldLocation.at(world.getName(), chunkMinX, world.getMinHeight(), chunkMinZ);
Location max = UncheckedWorldLocation.at(world.getName(), chunkMinX + 15, world.getMaxHeight(), chunkMinZ + 15);
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(queue, min, max);
this.plotGenerator.populateChunk(offsetChunkQueue, area);
queue.enqueue();
}
}

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.inject; package com.plotsquared.bukkit.inject;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.inject; package com.plotsquared.bukkit.inject;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.inject; package com.plotsquared.bukkit.inject;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.inject; package com.plotsquared.bukkit.inject;
@ -36,6 +29,7 @@ import org.bukkit.World;
public class WorldManagerModule extends AbstractModule { public class WorldManagerModule extends AbstractModule {
@SuppressWarnings("removal") // Internal use only
@Provides @Provides
@Singleton @Singleton
PlatformWorldManager<World> provideWorldManager() { PlatformWorldManager<World> provideWorldManager() {

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -72,8 +65,10 @@ import net.kyori.adventure.text.minimessage.Template;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Fireball; import org.bukkit.entity.Fireball;
@ -92,6 +87,7 @@ import org.bukkit.event.block.BlockFormEvent;
import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockMultiPlaceEvent;
import org.bukkit.event.block.BlockPhysicsEvent; import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent; import org.bukkit.event.block.BlockPistonRetractEvent;
@ -111,11 +107,20 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class BlockEventListener implements Listener { public class BlockEventListener implements Listener {
private static final Set<Material> PISTONS = Set.of(
Material.PISTON,
Material.STICKY_PISTON
);
private static final Set<Material> PHYSICS_BLOCKS = Set.of(
Material.TURTLE_EGG,
Material.TURTLE_SPAWN_EGG
);
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private final WorldEdit worldEdit; private final WorldEdit worldEdit;
@ -166,7 +171,7 @@ public class BlockEventListener implements Listener {
} }
if (Settings.Redstone.DISABLE_OFFLINE) { if (Settings.Redstone.DISABLE_OFFLINE) {
boolean disable = false; boolean disable = false;
if (!plot.getOwner().equals(DBFunc.SERVER)) { if (!DBFunc.SERVER.equals(plot.getOwner())) {
if (plot.isMerged()) { if (plot.isMerged()) {
disable = true; disable = true;
for (UUID owner : plot.getOwners()) { for (UUID owner : plot.getOwners()) {
@ -221,48 +226,31 @@ public class BlockEventListener implements Listener {
plot.debug("Prevented block physics and resent block change because disable-physics = true"); plot.debug("Prevented block physics and resent block change because disable-physics = true");
return; return;
} }
switch (event.getChangedType()) { if (event.getChangedType() == Material.COMPARATOR) {
case COMPARATOR: { if (!plot.getFlag(RedstoneFlag.class)) {
if (!plot.getFlag(RedstoneFlag.class)) { event.setCancelled(true);
event.setCancelled(true); plot.debug("Prevented comparator update because redstone = false");
plot.debug("Prevented comparator update because redstone = false");
}
return;
} }
case ANVIL: return;
case DRAGON_EGG: }
case GRAVEL: if (PHYSICS_BLOCKS.contains(event.getChangedType())) {
case SAND: if (plot.getFlag(DisablePhysicsFlag.class)) {
case TURTLE_EGG: event.setCancelled(true);
case TURTLE_HELMET: plot.debug("Prevented block physics because disable-physics = true");
case TURTLE_SPAWN_EGG: {
if (plot.getFlag(DisablePhysicsFlag.class)) {
event.setCancelled(true);
plot.debug("Prevented block physics because disable-physics = true");
}
return;
} }
default: return;
if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) { }
switch (block.getType()) { if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) {
case PISTON, STICKY_PISTON -> { if (PISTONS.contains(block.getType())) {
org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData(); org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData();
switch (piston.getFacing()) { final BlockFace facing = piston.getFacing();
case EAST -> location = location.add(1, 0, 0); location = location.add(facing.getModX(), facing.getModY(), facing.getModZ());
case SOUTH -> location = location.add(-1, 0, 0); Plot newPlot = area.getOwnedPlotAbs(location);
case WEST -> location = location.add(0, 0, 1); if (!plot.equals(newPlot)) {
case NORTH -> location = location.add(0, 0, -1); event.setCancelled(true);
} plot.debug("Prevented piston update because of invalid edge piston detection");
Plot newPlot = area.getOwnedPlotAbs(location);
if (!plot.equals(newPlot)) {
event.setCancelled(true);
plot.debug("Prevented piston update because of invalid edge piston detection");
return;
}
}
}
} }
break; }
} }
} }
@ -277,15 +265,9 @@ public class BlockEventListener implements Listener {
BukkitPlayer pp = BukkitUtil.adapt(player); BukkitPlayer pp = BukkitUtil.adapt(player);
Plot plot = area.getPlot(location); Plot plot = area.getPlot(location);
if (plot != null) { if (plot != null) {
if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
.getMinBuildHeight()) && !Permissions
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
event.setCancelled(true); event.setCancelled(true);
pp.sendMessage( return;
TranslatableCaption.of("height.height_limit"),
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
);
} }
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
@ -352,7 +334,8 @@ public class BlockEventListener implements Listener {
Plot plot = area.getPlot(location); Plot plot = area.getPlot(location);
if (plot != null) { if (plot != null) {
BukkitPlayer plotPlayer = BukkitUtil.adapt(player); BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
if (event.getBlock().getY() == 0) { // == rather than <= as we only care about the "ground level" not being destroyed
if (event.getBlock().getY() == area.getMinGenHeight()) {
if (!Permissions if (!Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) { .hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
plotPlayer.sendMessage( plotPlayer.sendMessage(
@ -362,15 +345,9 @@ public class BlockEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} else if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area } else if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
.getMinBuildHeight()) && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
event.setCancelled(true); event.setCancelled(true);
plotPlayer.sendMessage( return;
TranslatableCaption.of("height.height_limit"),
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
);
} }
if (!plot.hasOwner()) { if (!plot.hasOwner()) {
if (!Permissions if (!Permissions
@ -548,21 +525,22 @@ public class BlockEventListener implements Listener {
if (plot == null) { if (plot == null) {
return; return;
} }
switch (event.getNewState().getType()) { if (!area.buildRangeContainsY(location.getY())) {
case SNOW: event.setCancelled(true);
case SNOW_BLOCK: return;
if (!plot.getFlag(SnowFormFlag.class)) { }
plot.debug("Snow could not form because snow-form = false"); if (Tag.SNOW.isTagged(event.getNewState().getType())) {
event.setCancelled(true); if (!plot.getFlag(SnowFormFlag.class)) {
} plot.debug("Snow could not form because snow-form = false");
return; event.setCancelled(true);
case ICE: }
case FROSTED_ICE: return;
case PACKED_ICE: }
if (!plot.getFlag(IceFormFlag.class)) { if (Tag.ICE.isTagged(event.getNewState().getType())) {
plot.debug("Ice could not form because ice-form = false"); if (!plot.getFlag(IceFormFlag.class)) {
event.setCancelled(true); plot.debug("Ice could not form because ice-form = false");
} event.setCancelled(true);
}
} }
} }
@ -583,18 +561,12 @@ public class BlockEventListener implements Listener {
return; return;
} }
Class<? extends BooleanFlag<?>> flag; Class<? extends BooleanFlag<?>> flag;
switch (event.getNewState().getType()) { if (Tag.SNOW.isTagged(event.getNewState().getType())) {
case SNOW: flag = SnowFormFlag.class;
case SNOW_BLOCK: } else if (Tag.ICE.isTagged(event.getNewState().getType())) {
flag = SnowFormFlag.class; flag = IceFormFlag.class;
break; } else {
case ICE: return;
case FROSTED_ICE:
case PACKED_ICE:
flag = IceFormFlag.class;
break;
default:
return; // other blocks are ignored by this event
} }
boolean allowed = plot.getFlag(flag); boolean allowed = plot.getFlag(flag);
Entity entity = event.getEntity(); Entity entity = event.getEntity();
@ -647,7 +619,8 @@ public class BlockEventListener implements Listener {
event.getBlock().breakNaturally(); event.getBlock().breakNaturally();
} }
} }
if (location.getY() == 0) { // == rather than <= as we only care about the "ground level" not being destroyed
if (location.getY() == area.getMinGenHeight()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -697,111 +670,98 @@ public class BlockEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
switch (block.getType()) { Material blockType = block.getType();
case ICE: if (Tag.ICE.isTagged(blockType)) {
if (!plot.getFlag(IceMeltFlag.class)) { if (!plot.getFlag(IceMeltFlag.class)) {
plot.debug("Ice could not melt because ice-melt = false"); plot.debug("Ice could not melt because ice-melt = false");
event.setCancelled(true); event.setCancelled(true);
} }
break; return;
case SNOW: }
if (!plot.getFlag(SnowMeltFlag.class)) { if (Tag.SNOW.isTagged(blockType)) {
plot.debug("Snow could not melt because snow-melt = false"); if (!plot.getFlag(SnowMeltFlag.class)) {
event.setCancelled(true); plot.debug("Snow could not melt because snow-melt = false");
} event.setCancelled(true);
break; }
case FARMLAND: return;
if (!plot.getFlag(SoilDryFlag.class)) { }
plot.debug("Soil could not dry because soil-dry = false"); if (blockType == Material.FARMLAND) {
event.setCancelled(true); if (!plot.getFlag(SoilDryFlag.class)) {
} plot.debug("Soil could not dry because soil-dry = false");
break; event.setCancelled(true);
case TUBE_CORAL_BLOCK: }
case BRAIN_CORAL_BLOCK: return;
case BUBBLE_CORAL_BLOCK: }
case FIRE_CORAL_BLOCK: if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType)) {
case HORN_CORAL_BLOCK: if (!plot.getFlag(CoralDryFlag.class)) {
case TUBE_CORAL: plot.debug("Coral could not dry because coral-dry = false");
case BRAIN_CORAL: event.setCancelled(true);
case BUBBLE_CORAL: }
case FIRE_CORAL:
case HORN_CORAL:
case TUBE_CORAL_FAN:
case BRAIN_CORAL_FAN:
case BUBBLE_CORAL_FAN:
case FIRE_CORAL_FAN:
case HORN_CORAL_FAN:
case BRAIN_CORAL_WALL_FAN:
case BUBBLE_CORAL_WALL_FAN:
case FIRE_CORAL_WALL_FAN:
case HORN_CORAL_WALL_FAN:
case TUBE_CORAL_WALL_FAN:
if (!plot.getFlag(CoralDryFlag.class)) {
plot.debug("Coral could not dry because coral-dry = false");
event.setCancelled(true);
}
break;
} }
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onChange(BlockFromToEvent event) { public void onChange(BlockFromToEvent event) {
Block from = event.getBlock(); Block fromBlock = event.getBlock();
// Check liquid flow flag inside of origin plot too // Check liquid flow flag inside of origin plot too
final Location fLocation = BukkitUtil.adapt(from.getLocation()); final Location fromLocation = BukkitUtil.adapt(fromBlock.getLocation());
final PlotArea fromArea = fLocation.getPlotArea(); final PlotArea fromArea = fromLocation.getPlotArea();
if (fromArea != null) { if (fromArea != null) {
final Plot plot = fromArea.getOwnedPlot(fLocation); final Plot fromPlot = fromArea.getOwnedPlot(fromLocation);
if (plot != null && plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event if (fromPlot != null && fromPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event
.getBlock() .getBlock()
.isLiquid()) { .isLiquid()) {
plot.debug("Liquid could not flow because liquid-flow = disabled"); fromPlot.debug("Liquid could not flow because liquid-flow = disabled");
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
Block to = event.getToBlock(); Block toBlock = event.getToBlock();
Location tLocation = BukkitUtil.adapt(to.getLocation()); Location toLocation = BukkitUtil.adapt(toBlock.getLocation());
PlotArea area = tLocation.getPlotArea(); PlotArea toArea = toLocation.getPlotArea();
if (area == null) { if (toArea == null) {
if (from.getType() == Material.DRAGON_EGG && fromArea != null) { if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) {
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
} }
Plot plot = area.getOwnedPlot(tLocation); if (!toArea.buildRangeContainsY(toLocation.getY())) {
event.setCancelled(true);
return;
}
Plot toPlot = toArea.getOwnedPlot(toLocation);
if (from.getType() == Material.DRAGON_EGG && fromArea != null) { if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) {
final Plot fromPlot = fromArea.getOwnedPlot(fLocation); final Plot fromPlot = fromArea.getOwnedPlot(fromLocation);
if (fromPlot != null || plot != null) { if (fromPlot != null || toPlot != null) {
if ((fromPlot == null || !fromPlot.equals(plot)) && (plot == null || !plot.equals(fromPlot))) { if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
} }
if (plot != null) { if (toPlot != null) {
if (!area.contains(fLocation.getX(), fLocation.getZ()) || !Objects.equals(plot, area.getOwnedPlot(fLocation))) { if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(toPlot, toArea.getOwnedPlot(fromLocation))) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) { if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) {
return; return;
} }
if (plot.getFlag(DisablePhysicsFlag.class)) { if (toPlot.getFlag(DisablePhysicsFlag.class)) {
plot.debug(event.getBlock().getType() + " could not update because disable-physics = true"); toPlot.debug(event.getBlock().getType() + " could not update because disable-physics = true");
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) { if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) {
plot.debug("Liquid could not flow because liquid-flow = disabled"); toPlot.debug("Liquid could not flow because liquid-flow = disabled");
event.setCancelled(true); event.setCancelled(true);
} }
} else if (!area.contains(fLocation.getX(), fLocation.getZ()) || !Objects.equals(null, area.getOwnedPlot(fLocation))) { } else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(null, toArea.getOwnedPlot(fromLocation))) {
event.setCancelled(true); event.setCancelled(true);
} else if (event.getBlock().isLiquid()) { } else if (event.getBlock().isLiquid()) {
final org.bukkit.Location location = event.getBlock().getLocation(); final org.bukkit.Location location = event.getBlock().getLocation();
@ -841,6 +801,11 @@ public class BlockEventListener implements Listener {
return; return;
} }
if (!area.buildRangeContainsY(location.getY())) {
event.setCancelled(true);
return;
}
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null || !plot.getFlag(CropGrowFlag.class)) { if (plot == null || !plot.getFlag(CropGrowFlag.class)) {
if (plot != null) { if (plot != null) {
@ -884,15 +849,16 @@ public class BlockEventListener implements Listener {
} }
for (Block block1 : event.getBlocks()) { for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation()); Location bloc = BukkitUtil.adapt(block1.getLocation());
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains( Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
bloc.getX() + relative.getBlockX(), if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
bloc.getZ() + relative.getBlockZ()
)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) { event.setCancelled(true);
return;
}
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -918,9 +884,8 @@ public class BlockEventListener implements Listener {
} }
for (Block block1 : event.getBlocks()) { for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation()); Location bloc = BukkitUtil.adapt(block1.getLocation());
if (bloc.isPlotArea() || bloc Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ()) if (bloc.isPlotArea() || newLoc.isPlotArea()) {
.isPlotArea()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -934,15 +899,16 @@ public class BlockEventListener implements Listener {
} }
for (Block block1 : event.getBlocks()) { for (Block block1 : event.getBlocks()) {
Location bloc = BukkitUtil.adapt(block1.getLocation()); Location bloc = BukkitUtil.adapt(block1.getLocation());
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains( Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
bloc.getX() + relative.getBlockX(), if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
bloc.getZ() + relative.getBlockZ()
)) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) { event.setCancelled(true);
return;
}
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -953,7 +919,12 @@ public class BlockEventListener implements Listener {
public void onBlockDispense(BlockDispenseEvent event) { public void onBlockDispense(BlockDispenseEvent event) {
Material type = event.getItem().getType(); Material type = event.getItem().getType();
switch (type.toString()) { switch (type.toString()) {
case "SHULKER_BOX", "WHITE_SHULKER_BOX", "ORANGE_SHULKER_BOX", "MAGENTA_SHULKER_BOX", "LIGHT_BLUE_SHULKER_BOX", "YELLOW_SHULKER_BOX", "LIME_SHULKER_BOX", "PINK_SHULKER_BOX", "GRAY_SHULKER_BOX", "LIGHT_GRAY_SHULKER_BOX", "CYAN_SHULKER_BOX", "PURPLE_SHULKER_BOX", "BLUE_SHULKER_BOX", "BROWN_SHULKER_BOX", "GREEN_SHULKER_BOX", "RED_SHULKER_BOX", "BLACK_SHULKER_BOX", "CARVED_PUMPKIN", "WITHER_SKELETON_SKULL", "FLINT_AND_STEEL", "BONE_MEAL", "SHEARS", "GLASS_BOTTLE", "GLOWSTONE", "COD_BUCKET", "PUFFERFISH_BUCKET", "SALMON_BUCKET", "TROPICAL_FISH_BUCKET", "AXOLOTL_BUCKET", "BUCKET", "WATER_BUCKET", "LAVA_BUCKET" -> { case "SHULKER_BOX", "WHITE_SHULKER_BOX", "ORANGE_SHULKER_BOX", "MAGENTA_SHULKER_BOX", "LIGHT_BLUE_SHULKER_BOX",
"YELLOW_SHULKER_BOX", "LIME_SHULKER_BOX", "PINK_SHULKER_BOX", "GRAY_SHULKER_BOX", "LIGHT_GRAY_SHULKER_BOX",
"CYAN_SHULKER_BOX", "PURPLE_SHULKER_BOX", "BLUE_SHULKER_BOX", "BROWN_SHULKER_BOX", "GREEN_SHULKER_BOX",
"RED_SHULKER_BOX", "BLACK_SHULKER_BOX", "CARVED_PUMPKIN", "WITHER_SKELETON_SKULL", "FLINT_AND_STEEL",
"BONE_MEAL", "SHEARS", "GLASS_BOTTLE", "GLOWSTONE", "COD_BUCKET", "PUFFERFISH_BUCKET", "SALMON_BUCKET",
"TROPICAL_FISH_BUCKET", "AXOLOTL_BUCKET", "BUCKET", "WATER_BUCKET", "LAVA_BUCKET", "TADPOLE_BUCKET" -> {
if (event.getBlock().getType() == Material.DROPPER) { if (event.getBlock().getType() == Material.DROPPER) {
return; return;
} }
@ -961,6 +932,11 @@ public class BlockEventListener implements Listener {
Location location = BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation()); Location location = BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation());
if (location.isPlotRoad()) { if (location.isPlotRoad()) {
event.setCancelled(true); event.setCancelled(true);
return;
}
PlotArea area = location.getPlotArea();
if (area != null && !area.buildRangeContainsY(location.getY())) {
event.setCancelled(true);
} }
} }
} }
@ -1000,6 +976,10 @@ public class BlockEventListener implements Listener {
Plot plot = area.getOwnedPlot(location); Plot plot = area.getOwnedPlot(location);
if (!Objects.equals(plot, origin)) { if (!Objects.equals(plot, origin)) {
event.getBlocks().remove(i); event.getBlocks().remove(i);
continue;
}
if (!area.buildRangeContainsY(location.getY())) {
event.getBlocks().remove(i);
} }
} }
} }
@ -1091,6 +1071,10 @@ public class BlockEventListener implements Listener {
Plot plot = area.getOwnedPlot(location1); Plot plot = area.getOwnedPlot(location1);
if (player != null) { if (player != null) {
BukkitPlayer pp = BukkitUtil.adapt(player); BukkitPlayer pp = BukkitUtil.adapt(player);
if (area.notifyIfOutsideBuildArea(pp, location1.getY())) {
event.setCancelled(true);
return;
}
if (plot == null) { if (plot == null) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
pp.sendMessage( pp.sendMessage(
@ -1198,7 +1182,10 @@ public class BlockEventListener implements Listener {
return true; return true;
} }
Plot plot = area.getOwnedPlot(blockLocation); Plot plot = area.getOwnedPlot(blockLocation);
return !Objects.equals(plot, origin); if (!Objects.equals(plot, origin)) {
return true;
}
return !area.buildRangeContainsY(location.getY());
}); });
} }
if (blocks.isEmpty()) { if (blocks.isEmpty()) {
@ -1208,4 +1195,43 @@ public class BlockEventListener implements Listener {
} }
} }
/*
* BlockMultiPlaceEvent is called unrelated to the BlockPlaceEvent itself and therefore doesn't respect the cancellation.
*/
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onBlockMultiPlace(BlockMultiPlaceEvent event) {
// Check if the generic block place event would be cancelled
blockCreate(event);
if (event.isCancelled()) {
return;
}
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
Location placedLocation = BukkitUtil.adapt(event.getBlockReplacedState().getLocation());
PlotArea area = placedLocation.getPlotArea();
if (area == null) {
return;
}
Plot plot = placedLocation.getPlot();
for (final BlockState state : event.getReplacedBlockStates()) {
Location currentLocation = BukkitUtil.adapt(state.getLocation());
if (!Permissions.hasPermission(
pp,
Permission.PERMISSION_ADMIN_BUILD_ROAD
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
);
event.setCancelled(true);
break;
}
if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
event.setCancelled(true);
break;
}
}
}
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -33,6 +26,7 @@ import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag; import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag; import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
@ -46,11 +40,31 @@ import org.bukkit.event.block.BlockReceiveGameEvent;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class BlockEventListener117 implements Listener { public class BlockEventListener117 implements Listener {
private static final Set<Material> COPPER_OXIDIZING = Set.of(
Material.COPPER_BLOCK,
Material.EXPOSED_COPPER,
Material.WEATHERED_COPPER,
Material.OXIDIZED_COPPER,
Material.CUT_COPPER,
Material.EXPOSED_CUT_COPPER,
Material.WEATHERED_CUT_COPPER,
Material.OXIDIZED_CUT_COPPER,
Material.CUT_COPPER_STAIRS,
Material.EXPOSED_CUT_COPPER_STAIRS,
Material.WEATHERED_CUT_COPPER_STAIRS,
Material.OXIDIZED_CUT_COPPER_STAIRS,
Material.CUT_COPPER_SLAB,
Material.EXPOSED_CUT_COPPER_SLAB,
Material.WEATHERED_CUT_COPPER_SLAB,
Material.OXIDIZED_CUT_COPPER_SLAB
);
@Inject @Inject
public BlockEventListener117() { public BlockEventListener117() {
} }
@ -66,10 +80,19 @@ public class BlockEventListener117 implements Listener {
return; return;
} }
BukkitPlayer plotPlayer = null;
if (entity instanceof Player player) {
plotPlayer = BukkitUtil.adapt(player);
if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
event.setCancelled(true);
return;
}
}
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null || !plot.getFlag(MiscInteractFlag.class)) { if (plot == null || !plot.getFlag(MiscInteractFlag.class)) {
if (entity instanceof Player player) { if (plotPlayer != null) {
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
if (plot != null) { if (plot != null) {
if (!plot.isAdded(plotPlayer.getUUID())) { if (!plot.isAdded(plotPlayer.getUUID())) {
plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because misc-interact = false"); plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because misc-interact = false");
@ -101,12 +124,12 @@ public class BlockEventListener117 implements Listener {
PlotArea area = location.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
for (int i = blocks.size() - 1; i >= 0; i--) { for (int i = blocks.size() - 1; i >= 0; i--) {
location = BukkitUtil.adapt(blocks.get(i).getLocation()); Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
if (location.isPlotArea()) { blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
if (blockLocation.isPlotArea()) {
blocks.remove(i); blocks.remove(i);
} }
} }
return;
} else { } else {
Plot origin = area.getOwnedPlot(location); Plot origin = area.getOwnedPlot(location);
if (origin == null) { if (origin == null) {
@ -114,27 +137,19 @@ public class BlockEventListener117 implements Listener {
return; return;
} }
for (int i = blocks.size() - 1; i >= 0; i--) { for (int i = blocks.size() - 1; i >= 0; i--) {
location = BukkitUtil.adapt(blocks.get(i).getLocation()); Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
if (!area.contains(location.getX(), location.getZ())) { if (!area.contains(blockLocation.getX(), blockLocation.getZ())) {
blocks.remove(i); blocks.remove(i);
continue; continue;
} }
Plot plot = area.getOwnedPlot(location); Plot plot = area.getOwnedPlot(blockLocation);
if (!Objects.equals(plot, origin)) { if (!Objects.equals(plot, origin)) {
event.getBlocks().remove(i); event.getBlocks().remove(i);
continue;
}
if (!area.buildRangeContainsY(location.getY())) {
event.getBlocks().remove(i);
} }
}
}
Plot origin = area.getPlot(location);
if (origin == null) {
event.setCancelled(true);
return;
}
for (int i = blocks.size() - 1; i >= 0; i--) {
location = BukkitUtil.adapt(blocks.get(i).getLocation());
Plot plot = area.getOwnedPlot(location);
if (!Objects.equals(plot, origin) && (!plot.isMerged() && !origin.isMerged())) {
event.getBlocks().remove(i);
} }
} }
} }
@ -155,27 +170,11 @@ public class BlockEventListener117 implements Listener {
if (plot == null) { if (plot == null) {
return; return;
} }
switch (event.getNewState().getType()) { if (COPPER_OXIDIZING.contains(event.getNewState().getType())) {
case COPPER_BLOCK: if (!plot.getFlag(CopperOxideFlag.class)) {
case EXPOSED_COPPER: plot.debug("Copper could not oxide because copper-oxide = false");
case WEATHERED_COPPER: event.setCancelled(true);
case OXIDIZED_COPPER: }
case CUT_COPPER:
case EXPOSED_CUT_COPPER:
case WEATHERED_CUT_COPPER:
case OXIDIZED_CUT_COPPER:
case CUT_COPPER_STAIRS:
case EXPOSED_CUT_COPPER_STAIRS:
case WEATHERED_CUT_COPPER_STAIRS:
case OXIDIZED_CUT_COPPER_STAIRS:
case CUT_COPPER_SLAB:
case EXPOSED_CUT_COPPER_SLAB:
case WEATHERED_CUT_COPPER_SLAB:
case OXIDIZED_CUT_COPPER_SLAB:
if (!plot.getFlag(CopperOxideFlag.class)) {
plot.debug("Copper could not oxide because copper-oxide = false");
event.setCancelled(true);
}
} }
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -168,6 +161,7 @@ public class EntityEventListener implements Listener {
case "RAID": case "RAID":
case "SHEARED": case "SHEARED":
case "SILVERFISH_BLOCK": case "SILVERFISH_BLOCK":
case "ENDER_PEARL":
case "TRAP": case "TRAP":
case "VILLAGE_DEFENSE": case "VILLAGE_DEFENSE":
case "VILLAGE_INVASION": case "VILLAGE_INVASION":
@ -207,7 +201,7 @@ public class EntityEventListener implements Listener {
} }
return; return;
} }
if (BukkitEntityUtil.checkEntity(entity, plot)) { if (BukkitEntityUtil.checkEntity(entity, plot.getBasePlot(false))) {
event.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -36,6 +29,7 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.ArmorStand; import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@ -60,7 +54,7 @@ import java.util.List;
public class EntitySpawnListener implements Listener { public class EntitySpawnListener implements Listener {
private final static String KEY = "P2"; private static final String KEY = "P2";
private static boolean ignoreTP = false; private static boolean ignoreTP = false;
private static boolean hasPlotArea = false; private static boolean hasPlotArea = false;
private static String areaName = null; private static String areaName = null;
@ -130,17 +124,17 @@ public class EntitySpawnListener implements Listener {
return; return;
} }
Plot plot = location.getOwnedPlotAbs(); Plot plot = location.getOwnedPlotAbs();
EntityType type = entity.getType();
if (plot == null) { if (plot == null) {
EntityType type = entity.getType();
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
switch (type) { if (type == EntityType.PLAYER) {
case DROPPED_ITEM: return;
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { }
event.setCancelled(true); if (type == EntityType.DROPPED_ITEM) {
return; if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
} event.setCancelled(true);
case PLAYER: }
return; return;
} }
if (type.isAlive()) { if (type.isAlive()) {
event.setCancelled(true); event.setCancelled(true);
@ -154,15 +148,16 @@ public class EntitySpawnListener implements Listener {
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) { if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
event.setCancelled(true); event.setCancelled(true);
} }
switch (entity.getType()) { if (type == EntityType.ENDER_CRYSTAL) {
case ENDER_CRYSTAL: if (BukkitEntityUtil.checkEntity(entity, plot)) {
if (BukkitEntityUtil.checkEntity(entity, plot)) { event.setCancelled(true);
event.setCancelled(true); }
} return;
case SHULKER: }
if (!entity.hasMetadata("shulkerPlot")) { if (type == EntityType.SHULKER) {
entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId())); if (!entity.hasMetadata("shulkerPlot")) {
} entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId()));
}
} }
} }
@ -191,8 +186,32 @@ public class EntitySpawnListener implements Listener {
@EventHandler @EventHandler
public void onTeleport(EntityTeleportEvent event) { public void onTeleport(EntityTeleportEvent event) {
Entity ent = event.getEntity(); Entity entity = event.getEntity();
if (ent instanceof Vehicle || ent instanceof ArmorStand) { Entity fromLocation = event.getEntity();
Block toLocation = event.getTo().getBlock();
final Location fromLocLocation = BukkitUtil.adapt(fromLocation.getLocation());
final PlotArea fromArea = fromLocLocation.getPlotArea();
Location toLocLocation = BukkitUtil.adapt(toLocation.getLocation());
PlotArea toArea = toLocLocation.getPlotArea();
if (toArea == null) {
if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) {
event.setCancelled(true);
}
return;
}
Plot toPlot = toArea.getOwnedPlot(toLocLocation);
if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) {
final Plot fromPlot = fromArea.getOwnedPlot(fromLocLocation);
if (fromPlot != null || toPlot != null) {
if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) {
event.setCancelled(true);
return;
}
}
}
if (entity instanceof Vehicle || entity instanceof ArmorStand) {
testNether(event.getEntity()); testNether(event.getEntity());
} }
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -44,6 +37,7 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.implementations.DoneFlag; 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.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions; import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template; import net.kyori.adventure.text.minimessage.Template;
@ -195,6 +189,7 @@ public class PaperListener implements Listener {
case "RAID": case "RAID":
case "SHEARED": case "SHEARED":
case "SILVERFISH_BLOCK": case "SILVERFISH_BLOCK":
case "ENDER_PEARL":
case "TRAP": case "TRAP":
case "VILLAGE_DEFENSE": case "VILLAGE_DEFENSE":
case "VILLAGE_INVASION": case "VILLAGE_INVASION":
@ -235,15 +230,15 @@ public class PaperListener implements Listener {
if (plot == null) { if (plot == null) {
EntityType type = event.getType(); EntityType type = event.getType();
if (!area.isMobSpawning()) { if (!area.isMobSpawning()) {
switch (type) { if (type == EntityType.PLAYER) {
case DROPPED_ITEM: return;
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { }
event.setShouldAbortSpawn(true); if (type == EntityType.DROPPED_ITEM) {
event.setCancelled(true); if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
return; event.setShouldAbortSpawn(true);
} event.setCancelled(true);
case PLAYER: }
return; return;
} }
if (type.isAlive()) { if (type.isAlive()) {
event.setShouldAbortSpawn(true); event.setShouldAbortSpawn(true);
@ -352,13 +347,15 @@ public class PaperListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
} }
} else if (!plot.isAdded(pp.getUUID())) { } else if (!plot.isAdded(pp.getUUID())) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) { if (!plot.getFlag(ProjectilesFlag.class)) {
pp.sendMessage( if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
TranslatableCaption.of("permission.no_permission_event"), pp.sendMessage(
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) TranslatableCaption.of("permission.no_permission_event"),
); Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
entity.remove(); );
event.setCancelled(true); entity.remove();
event.setCancelled(true);
}
} }
} }
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -36,7 +29,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
import net.kyori.adventure.text.minimessage.Template; import net.kyori.adventure.text.minimessage.Template;
import org.bukkit.block.Banner; import org.bukkit.block.Banner;
import org.bukkit.block.Beacon; import org.bukkit.block.Beacon;
import org.bukkit.block.Bed;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
import org.bukkit.block.CommandBlock; import org.bukkit.block.CommandBlock;
import org.bukkit.block.Comparator; import org.bukkit.block.Comparator;
@ -51,6 +43,7 @@ import org.bukkit.block.Jukebox;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.Skull; import org.bukkit.block.Skull;
import org.bukkit.block.Structure; import org.bukkit.block.Structure;
import org.bukkit.block.data.type.Bed;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -76,7 +69,6 @@ import com.plotsquared.core.util.EventDispatcher;
import com.plotsquared.core.util.MathMan; import com.plotsquared.core.util.MathMan;
import com.plotsquared.core.util.Permissions; import com.plotsquared.core.util.Permissions;
import com.plotsquared.core.util.PremiumVerification; import com.plotsquared.core.util.PremiumVerification;
import com.plotsquared.core.util.RegExUtil;
import com.plotsquared.core.util.entity.EntityCategories; import com.plotsquared.core.util.entity.EntityCategories;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.util.task.TaskTime; import com.plotsquared.core.util.task.TaskTime;
@ -90,6 +82,7 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.FluidCollisionMode; import org.bukkit.FluidCollisionMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState; import org.bukkit.block.BlockState;
@ -153,24 +146,36 @@ import org.bukkit.util.Vector;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Pattern;
/** /**
* Player Events involving plots. * Player Events involving plots.
*/ */
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class PlayerEventListener extends PlotListener implements Listener { public class PlayerEventListener implements Listener {
private static final Set<Material> MINECARTS = Set.of(
Material.MINECART,
Material.TNT_MINECART,
Material.CHEST_MINECART,
Material.COMMAND_BLOCK_MINECART,
Material.FURNACE_MINECART,
Material.HOPPER_MINECART
);
private static final Set<Material> BOOKS = Set.of(
Material.BOOK,
Material.KNOWLEDGE_BOOK,
Material.WRITABLE_BOOK,
Material.WRITTEN_BOOK
);
private final EventDispatcher eventDispatcher; private final EventDispatcher eventDispatcher;
private final WorldEdit worldEdit; private final WorldEdit worldEdit;
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private final PlotListener plotListener;
// To prevent recursion // To prevent recursion
private boolean tmpTeleport = true; private boolean tmpTeleport = true;
private Field fieldPlayer; private Field fieldPlayer;
@ -190,12 +195,13 @@ public class PlayerEventListener extends PlotListener implements Listener {
public PlayerEventListener( public PlayerEventListener(
final @NonNull PlotAreaManager plotAreaManager, final @NonNull PlotAreaManager plotAreaManager,
final @NonNull EventDispatcher eventDispatcher, final @NonNull EventDispatcher eventDispatcher,
final @NonNull WorldEdit worldEdit final @NonNull WorldEdit worldEdit,
final @NonNull PlotListener plotListener
) { ) {
super(eventDispatcher);
this.eventDispatcher = eventDispatcher; this.eventDispatcher = eventDispatcher;
this.worldEdit = worldEdit; this.worldEdit = worldEdit;
this.plotAreaManager = plotAreaManager; this.plotAreaManager = plotAreaManager;
this.plotListener = plotListener;
} }
@EventHandler @EventHandler
@ -226,7 +232,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void playerCommand(PlayerCommandPreprocessEvent event) { public void playerCommand(PlayerCommandPreprocessEvent event) {
String msg = event.getMessage().toLowerCase().replaceAll("/", "").trim(); String msg = event.getMessage().replace("/", "").toLowerCase(Locale.ROOT).trim();
if (msg.isEmpty()) { if (msg.isEmpty()) {
return; return;
} }
@ -240,11 +246,9 @@ public class PlayerEventListener extends PlotListener implements Listener {
String[] parts = msg.split(" "); String[] parts = msg.split(" ");
Plot plot = plotPlayer.getCurrentPlot(); Plot plot = plotPlayer.getCurrentPlot();
// Check WorldEdit // Check WorldEdit
switch (parts[0].toLowerCase()) { switch (parts[0]) {
case "up": case "up":
case "/up":
case "worldedit:up": case "worldedit:up":
case "worldedit:/up":
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER, true))) { .hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER, true))) {
event.setCancelled(true); event.setCancelled(true);
@ -258,63 +262,67 @@ public class PlayerEventListener extends PlotListener implements Listener {
List<String> blockedCommands = plot != null ? List<String> blockedCommands = plot != null ?
plot.getFlag(BlockedCmdsFlag.class) : plot.getFlag(BlockedCmdsFlag.class) :
area.getFlag(BlockedCmdsFlag.class); area.getFlag(BlockedCmdsFlag.class);
if (!blockedCommands.isEmpty() && !Permissions if (blockedCommands.isEmpty()) {
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) { return;
String part = parts[0]; }
if (parts[0].contains(":")) { if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
part = parts[0].split(":")[1]; return;
msg = msg.replace(parts[0].split(":")[0] + ':', ""); }
} // When using namespaced commands, we're not interested in the namespace
String s1 = part; String part = parts[0];
List<String> aliases = new ArrayList<>(); if (part.contains(":")) {
for (HelpTopic cmdLabel : Bukkit.getServer().getHelpMap().getHelpTopics()) { String[] namespaced = part.split(":");
if (part.equals(cmdLabel.getName())) { part = namespaced[1];
break; msg = msg.substring(namespaced[0].length() + 1);
} }
String label = cmdLabel.getName().replaceFirst("/", ""); msg = replaceAliases(msg, part);
if (aliases.contains(label)) { for (String blocked : blockedCommands) {
continue; if (blocked.equalsIgnoreCase(msg)) {
} String perm;
PluginCommand p; if (plot != null && plot.isAdded(plotPlayer.getUUID())) {
if ((p = Bukkit.getPluginCommand(label)) != null) { perm = "plots.admin.command.blocked-cmds.shared";
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));
} else { } else {
pattern = RegExUtil.compiledPatterns.get(s); perm = "plots.admin.command.blocked-cmds.road";
} }
if (pattern.matcher(msg).matches()) { if (!Permissions.hasPermission(plotPlayer, perm)) {
String perm; plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
if (plot != null && plot.isAdded(plotPlayer.getUUID())) { event.setCancelled(true);
perm = "plots.admin.command.blocked-cmds.shared"; }
} else { return;
perm = "plots.admin.command.blocked-cmds.road"; }
}
}
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)) { aliases.add(a);
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked")); a = a.replaceFirst("/", "");
event.setCancelled(true); 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) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@ -346,7 +354,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (area != null) { if (area != null) {
Plot plot = area.getPlot(location); Plot plot = area.getPlot(location);
if (plot != null) { if (plot != null) {
plotEntry(pp, plot); plotListener.plotEntry(pp, plot);
} }
} }
// Delayed // Delayed
@ -379,6 +387,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
this.eventDispatcher.doRespawnTask(pp); this.eventDispatcher.doRespawnTask(pp);
} }
@SuppressWarnings("deprecation") // We explicitly want #getHomeSynchronous here
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onTeleport(PlayerTeleportEvent event) { public void onTeleport(PlayerTeleportEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
@ -397,7 +406,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
PlotArea area = location.getPlotArea(); PlotArea area = location.getPlotArea();
if (area == null) { if (area == null) {
if (lastPlot != null) { if (lastPlot != null) {
plotExit(pp, lastPlot); plotListener.plotExit(pp, lastPlot);
lastPlotAccess.remove(); lastPlotAccess.remove();
} }
try (final MetaDataAccess<Location> lastLocationAccess = try (final MetaDataAccess<Location> lastLocationAccess =
@ -531,7 +540,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (now == null) { if (now == null) {
try (final MetaDataAccess<Boolean> kickAccess = try (final MetaDataAccess<Boolean> kickAccess =
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) { pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) { if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED)) Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
@ -549,7 +558,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
} }
} else if (now.equals(lastPlot)) { } else if (now.equals(lastPlot)) {
ForceFieldListener.handleForcefield(player, pp, now); ForceFieldListener.handleForcefield(player, pp, now);
} else if (!plotEntry(pp, now) && this.tmpTeleport) { } else if (!plotListener.plotEntry(pp, now) && this.tmpTeleport) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("deny.no_enter"), TranslatableCaption.of("deny.no_enter"),
Template.of("plot", now.toString()) Template.of("plot", now.toString())
@ -621,7 +630,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (plot == null) { if (plot == null) {
try (final MetaDataAccess<Boolean> kickAccess = try (final MetaDataAccess<Boolean> kickAccess =
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) { pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) { if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("permission.no_permission_event"), TranslatableCaption.of("permission.no_permission_event"),
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED)) Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
@ -639,7 +648,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
} }
} else if (plot.equals(lastPlot)) { } else if (plot.equals(lastPlot)) {
ForceFieldListener.handleForcefield(player, pp, plot); ForceFieldListener.handleForcefield(player, pp, plot);
} else if (!plotEntry(pp, plot) && this.tmpTeleport) { } else if (!plotListener.plotEntry(pp, plot) && this.tmpTeleport) {
pp.sendMessage( pp.sendMessage(
TranslatableCaption.of("deny.no_enter"), TranslatableCaption.of("deny.no_enter"),
Template.of("plot", plot.toString()) Template.of("plot", plot.toString())
@ -786,7 +795,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
lastLocationAccess.remove(); lastLocationAccess.remove();
} }
if (plot != null) { if (plot != null) {
plotExit(pp, plot); plotListener.plotExit(pp, plot);
} }
if (this.worldEdit != null) { if (this.worldEdit != null) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_WORLDEDIT_BYPASS)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_WORLDEDIT_BYPASS)) {
@ -800,7 +809,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (location.isPlotArea()) { if (location.isPlotArea()) {
plot = location.getPlot(); plot = location.getPlot();
if (plot != null) { if (plot != null) {
plotEntry(pp, plot); plotListener.plotEntry(pp, plot);
} }
} }
} }
@ -836,10 +845,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if ((slot > 8) || !event.getEventName().equals("InventoryCreativeEvent")) { if ((slot > 8) || !event.getEventName().equals("InventoryCreativeEvent")) {
return; return;
} }
ItemStack current = inv.getItemInHand(); ItemStack oldItem = inv.getItemInHand();
ItemMeta oldMeta = oldItem.getItemMeta();
ItemStack newItem = event.getCursor(); ItemStack newItem = event.getCursor();
ItemMeta newMeta = newItem.getItemMeta(); ItemMeta newMeta = newItem.getItemMeta();
ItemMeta oldMeta = newItem.getItemMeta();
if (event.getClick() == ClickType.CREATIVE) { if (event.getClick() == ClickType.CREATIVE) {
final Plot plot = pp.getCurrentPlot(); final Plot plot = pp.getCurrentPlot();
@ -879,34 +888,26 @@ public class PlayerEventListener extends PlotListener implements Listener {
oldLore = lore.toString(); oldLore = lore.toString();
} }
} }
if (!"[(+NBT)]".equals(newLore) || (current.equals(newItem) && newLore.equals(oldLore))) { Material itemType = newItem.getType();
switch (newItem.getType()) { if (!"[(+NBT)]".equals(newLore) || (oldItem.equals(newItem) && newLore.equals(oldLore))) {
case LEGACY_BANNER: if (newMeta == null || (itemType != Material.LEGACY_BANNER && itemType != Material.PLAYER_HEAD)) {
case PLAYER_HEAD: return;
if (newMeta != null) {
break;
}
default:
return;
} }
} }
Block block = player.getTargetBlock(null, 7); Block block = player.getTargetBlock(null, 7);
org.bukkit.block.BlockState state = block.getState(); org.bukkit.block.BlockState state = block.getState();
Material stateType = state.getType(); Material stateType = state.getType();
Material itemType = newItem.getType();
if (stateType != itemType) { if (stateType != itemType) {
switch (stateType) { if (stateType == Material.LEGACY_WALL_BANNER || stateType == Material.LEGACY_STANDING_BANNER) {
case LEGACY_STANDING_BANNER: if (itemType != Material.LEGACY_BANNER) {
case LEGACY_WALL_BANNER:
if (itemType == Material.LEGACY_BANNER) {
break;
}
case LEGACY_SKULL:
if (itemType == Material.LEGACY_SKULL_ITEM) {
break;
}
default:
return; return;
}
} else if (stateType == Material.LEGACY_SKULL) {
if (itemType != Material.LEGACY_SKULL_ITEM) {
return;
}
} else {
return;
} }
} }
Location location = BukkitUtil.adapt(state.getLocation()); Location location = BukkitUtil.adapt(state.getLocation());
@ -945,7 +946,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
} }
} }
if (cancelled) { if (cancelled) {
if ((current.getType() == newItem.getType()) && (current.getDurability() == newItem if ((oldItem.getType() == newItem.getType()) && (oldItem.getDurability() == newItem
.getDurability())) { .getDurability())) {
event.setCursor( event.setCursor(
new ItemStack(newItem.getType(), newItem.getAmount(), newItem.getDurability())); new ItemStack(newItem.getType(), newItem.getAmount(), newItem.getDurability()));
@ -1063,9 +1064,13 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (area == null) { if (area == null) {
return; return;
} }
PlayerBlockEventType eventType = null; PlayerBlockEventType eventType;
BlockType blocktype1; BlockType blocktype1;
Block block = event.getClickedBlock(); Block block = event.getClickedBlock();
if (block == null) {
// We do not care in this case, the player is likely interacting with air ("nothing").
return;
}
Location location = BukkitUtil.adapt(block.getLocation()); Location location = BukkitUtil.adapt(block.getLocation());
Action action = event.getAction(); Action action = event.getAction();
switch (action) { switch (action) {
@ -1128,14 +1133,21 @@ public class PlayerEventListener extends PlotListener implements Listener {
//Allow all players to eat while also allowing the block place event ot be fired //Allow all players to eat while also allowing the block place event ot be fired
return; return;
} }
switch (type) { if (type == Material.ARMOR_STAND) {
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; location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation());
case FIREWORK_ROCKET, FIREWORK_STAR -> eventType = PlayerBlockEventType.SPAWN_MOB; eventType = PlayerBlockEventType.PLACE_MISC;
case BOOK, KNOWLEDGE_BOOK, WRITABLE_BOOK, WRITTEN_BOOK -> eventType = PlayerBlockEventType.READ; }
case ARMOR_STAND -> { if (Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation()); eventType = PlayerBlockEventType.PLACE_VEHICLE;
eventType = PlayerBlockEventType.PLACE_MISC; break;
} }
if (type == Material.FIREWORK_ROCKET || type == Material.FIREWORK_STAR) {
eventType = PlayerBlockEventType.SPAWN_MOB;
break;
}
if (BOOKS.contains(type)) {
eventType = PlayerBlockEventType.READ;
break;
} }
break; break;
} }
@ -1270,7 +1282,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
TaskManager.removeFromTeleportQueue(event.getPlayer().getName()); TaskManager.removeFromTeleportQueue(event.getPlayer().getName());
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer()); BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
pp.unregister(); pp.unregister();
this.logout(pp.getUUID()); plotListener.logout(pp.getUUID());
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@ -1667,6 +1679,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
} }
} }
@SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility
@EventHandler @EventHandler
public void onLocaleChange(final PlayerLocaleChangeEvent event) { public void onLocaleChange(final PlayerLocaleChangeEvent event) {
// The event is fired before the player is deemed online upon login // The event is fired before the player is deemed online upon login
@ -1706,6 +1719,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (PlotSquared.get().getPlotAreaManager().getPlotAreasSet(world).size() == 0) { if (PlotSquared.get().getPlotAreaManager().getPlotAreasSet(world).size() == 0) {
return; return;
} }
BukkitPlayer pp = (event.getEntity() instanceof Player player) ? BukkitUtil.adapt(player) : null;
int minX = Integer.MAX_VALUE; int minX = Integer.MAX_VALUE;
int maxX = Integer.MIN_VALUE; int maxX = Integer.MIN_VALUE;
int minZ = Integer.MAX_VALUE; int minZ = Integer.MAX_VALUE;
@ -1727,6 +1741,10 @@ public class PlayerEventListener extends PlotListener implements Listener {
if (area == null) { if (area == null) {
continue; continue;
} }
if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
event.setCancelled(true);
return;
}
Plot plot = location.getOwnedPlot(); Plot plot = location.getOwnedPlot();
if (plot == null) { if (plot == null) {
if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) { if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) {

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -35,6 +28,7 @@ import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.PlotHandler; 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.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions; import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template; import net.kyori.adventure.text.minimessage.Template;
@ -95,7 +89,7 @@ public class ProjectileEventListener implements Listener {
} }
} }
@EventHandler @EventHandler(ignoreCancelled = true)
public void onProjectileLaunch(ProjectileLaunchEvent event) { public void onProjectileLaunch(ProjectileLaunchEvent event) {
Projectile entity = event.getEntity(); Projectile entity = event.getEntity();
ProjectileSource shooter = entity.getShooter(); ProjectileSource shooter = entity.getShooter();
@ -128,13 +122,15 @@ public class ProjectileEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
} }
} else if (!plot.isAdded(pp.getUUID())) { } else if (!plot.isAdded(pp.getUUID())) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) { if (!plot.getFlag(ProjectilesFlag.class)) {
pp.sendMessage( if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
TranslatableCaption.of("permission.no_permission_event"), pp.sendMessage(
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) TranslatableCaption.of("permission.no_permission_event"),
); Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
entity.remove(); );
event.setCancelled(true); entity.remove();
event.setCancelled(true);
}
} }
} }
} }
@ -153,6 +149,18 @@ public class ProjectileEventListener implements Listener {
Plot plot = area.getPlot(location); Plot plot = area.getPlot(location);
ProjectileSource shooter = entity.getShooter(); ProjectileSource shooter = entity.getShooter();
if (shooter instanceof Player) { if (shooter instanceof Player) {
if (!((Player) shooter).isOnline()) {
if (plot != null) {
if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) {
return;
}
}
entity.remove();
event.setCancelled(true);
return;
}
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter); PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
if (plot == null) { if (plot == null) {
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) { if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
@ -162,7 +170,7 @@ public class ProjectileEventListener implements Listener {
return; return;
} }
if (plot.isAdded(pp.getUUID()) || Permissions 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; return;
} }
entity.remove(); entity.remove();

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
@ -43,11 +36,10 @@ import java.lang.reflect.Method;
import static com.plotsquared.core.util.ReflectionUtils.getRefClass; import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
@SuppressWarnings("unused")
public class SingleWorldListener implements Listener { public class SingleWorldListener implements Listener {
private final Method methodGetHandleChunk; private final Method methodGetHandleChunk;
private Field shouldSave; private Field shouldSave = null;
public SingleWorldListener() throws Exception { public SingleWorldListener() throws Exception {
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk"); ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
@ -60,9 +52,12 @@ public class SingleWorldListener implements Listener {
} else { } else {
this.shouldSave = classChunk.getField("s").getRealField(); this.shouldSave = classChunk.getField("s").getRealField();
} }
} else { } else if (PlotSquared.platform().serverVersion()[1] == 17) {
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk"); ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
this.shouldSave = classChunk.getField("r").getRealField(); 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) { } catch (NoSuchFieldException e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.managers; package com.plotsquared.bukkit.managers;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.managers; package com.plotsquared.bukkit.managers;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.managers; package com.plotsquared.bukkit.managers;
@ -38,7 +31,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
* @deprecated Deprecated and scheduled for removal without replacement * @deprecated Deprecated and scheduled for removal without replacement
* in favor of the build in setup wizard. * in favor of the build in setup wizard.
*/ */
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true, since = "6.0.0")
@Singleton @Singleton
public class MultiverseWorldManager extends BukkitWorldManager { public class MultiverseWorldManager extends BukkitWorldManager {

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.permissions; package com.plotsquared.bukkit.permissions;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.permissions; package com.plotsquared.bukkit.permissions;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.placeholder; package com.plotsquared.bukkit.placeholder;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.placeholder; package com.plotsquared.bukkit.placeholder;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.placeholder; package com.plotsquared.bukkit.placeholder;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.player; package com.plotsquared.bukkit.player;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.player; package com.plotsquared.bukkit.player;
@ -162,6 +155,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
} }
} }
@SuppressWarnings("StringSplitter")
@Override @Override
@NonNegative @NonNegative
public int hasPermissionRange( public int hasPermissionRange(
@ -319,7 +313,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
if (id == ItemTypes.AIR) { if (id == ItemTypes.AIR) {
// Let's just stop all the discs because why not? // Let's just stop all the discs because why not?
for (final Sound sound : Arrays.stream(Sound.values()) for (final Sound sound : Arrays.stream(Sound.values())
.filter(sound -> sound.name().contains("DISC")).collect(Collectors.toList())) { .filter(sound -> sound.name().contains("DISC")).toList()) {
player.stopSound(sound); player.stopSound(sound);
} }
// this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR); // this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR);
@ -331,6 +325,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
} }
} }
@SuppressWarnings("deprecation") // Needed for Spigot compatibility
@Override @Override
public void kick(final String message) { public void kick(final String message) {
this.player.kickPlayer(message); this.player.kickPlayer(message);

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.player; package com.plotsquared.bukkit.player;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.queue; package com.plotsquared.bukkit.queue;
@ -74,11 +67,13 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
private final Consumer<Throwable> throwableConsumer; private final Consumer<Throwable> throwableConsumer;
private final boolean unloadAfter; private final boolean unloadAfter;
private final int totalSize; private final int totalSize;
private final AtomicInteger expectedSize; private final AtomicInteger expectedSize;
private final AtomicInteger loadingChunks = new AtomicInteger();
private final boolean forceSync;
private int batchSize; private int batchSize;
private PlotSquaredTask task; private PlotSquaredTask task;
private boolean shouldCancel; private volatile boolean shouldCancel;
private boolean finished; private boolean finished;
@Inject @Inject
@ -90,8 +85,9 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
@Assisted final @NonNull Collection<BlockVector2> requestedChunks, @Assisted final @NonNull Collection<BlockVector2> requestedChunks,
@Assisted final @NonNull Runnable whenDone, @Assisted final @NonNull Runnable whenDone,
@Assisted final @NonNull Consumer<Throwable> throwableConsumer, @Assisted final @NonNull Consumer<Throwable> throwableConsumer,
@Assisted final boolean unloadAfter, @Assisted("unloadAfter") final boolean unloadAfter,
@Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers @Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers,
@Assisted("forceSync") final boolean forceSync
) { ) {
this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks); this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks);
this.availableChunks = new LinkedBlockingQueue<>(); this.availableChunks = new LinkedBlockingQueue<>();
@ -106,14 +102,27 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
this.plugin = JavaPlugin.getPlugin(BukkitPlatform.class); this.plugin = JavaPlugin.getPlugin(BukkitPlatform.class);
this.bukkitWorld = Bukkit.getWorld(world.getName()); this.bukkitWorld = Bukkit.getWorld(world.getName());
this.progressSubscribers.addAll(progressSubscribers); this.progressSubscribers.addAll(progressSubscribers);
this.forceSync = forceSync;
} }
@Override @Override
public void start() { public void start() {
// Request initial batch if (!forceSync) {
this.requestBatch(); // Request initial batch
// Wait until next tick to give the chunks a chance to be loaded this.requestBatch();
TaskManager.runTaskLater(() -> task = TaskManager.runTaskRepeat(this, TaskTime.ticks(1)), TaskTime.ticks(1)); // 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 @Override
@ -130,7 +139,9 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
for (final ProgressSubscriber subscriber : this.progressSubscribers) { for (final ProgressSubscriber subscriber : this.progressSubscribers) {
subscriber.notifyEnd(); subscriber.notifyEnd();
} }
task.cancel(); if (task != null) {
task.cancel();
}
finished = true; finished = true;
} }
} }
@ -150,6 +161,13 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
Chunk chunk = this.availableChunks.poll(); Chunk chunk = this.availableChunks.poll();
if (chunk == null) { if (chunk == null) {
if (this.availableChunks.isEmpty()) {
if (this.requestedChunks.isEmpty() && loadingChunks.get() == 0) {
finish();
} else {
requestBatch();
}
}
return; return;
} }
long[] iterationTime = new long[2]; long[] iterationTime = new long[2];
@ -197,9 +215,11 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
BlockVector2 chunk; BlockVector2 chunk;
for (int i = 0; i < this.batchSize && (chunk = this.requestedChunks.poll()) != null; i++) { for (int i = 0; i < this.batchSize && (chunk = this.requestedChunks.poll()) != null; i++) {
// This required PaperLib to be bumped to version 1.0.4 to mark the request as urgent // This required PaperLib to be bumped to version 1.0.4 to mark the request as urgent
loadingChunks.incrementAndGet();
PaperLib PaperLib
.getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), true, true) .getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), true, true)
.whenComplete((chunkObject, throwable) -> { .whenComplete((chunkObject, throwable) -> {
loadingChunks.decrementAndGet();
if (throwable != null) { if (throwable != null) {
throwable.printStackTrace(); throwable.printStackTrace();
// We want one less because this couldn't be processed // We want one less because this couldn't be processed

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.queue; package com.plotsquared.bukkit.queue;
@ -63,10 +56,27 @@ import java.util.function.Consumer;
public class BukkitQueueCoordinator extends BasicQueueCoordinator { public class BukkitQueueCoordinator extends BasicQueueCoordinator {
private final SideEffectSet noSideEffectSet; private static final SideEffectSet NO_SIDE_EFFECT_SET;
private final SideEffectSet lightingSideEffectSet; private static final SideEffectSet EDGE_SIDE_EFFECT_SET;
private final SideEffectSet edgeSideEffectSet; private static final SideEffectSet LIGHTING_SIDE_EFFECT_SET;
private final SideEffectSet edgeLightingSideEffectSet; 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; private org.bukkit.World bukkitWorld;
@Inject @Inject
private ChunkCoordinatorBuilderFactory chunkCoordinatorBuilderFactory; private ChunkCoordinatorBuilderFactory chunkCoordinatorBuilderFactory;
@ -77,19 +87,6 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
@Inject @Inject
public BukkitQueueCoordinator(@NonNull World world) { public BukkitQueueCoordinator(@NonNull World world) {
super(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 @Override
@ -112,8 +109,8 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
public boolean enqueue() { public boolean enqueue() {
final Clipboard regenClipboard; final Clipboard regenClipboard;
if (isRegen()) { if (isRegen()) {
BlockVector3 start = BlockVector3.at(getRegenStart()[0] << 4, 0, getRegenStart()[1] << 4); BlockVector3 start = BlockVector3.at(getRegenStart()[0] << 4, getMinY(), getRegenStart()[1] << 4);
BlockVector3 end = BlockVector3.at((getRegenEnd()[0] << 4) + 15, 255, (getRegenEnd()[1] << 4) + 15); BlockVector3 end = BlockVector3.at((getRegenEnd()[0] << 4) + 15, getMaxY(), (getRegenEnd()[1] << 4) + 15);
Region region = new CuboidRegion(start, end); Region region = new CuboidRegion(start, end);
regenClipboard = new BlockArrayClipboard(region); regenClipboard = new BlockArrayClipboard(region);
regenClipboard.setOrigin(start); regenClipboard.setOrigin(start);
@ -135,7 +132,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
int sx = blockVector2.getX() << 4; int sx = blockVector2.getX() << 4;
int sz = blockVector2.getZ() << 4; int sz = blockVector2.getZ() << 4;
if (isRegenChunk) { if (isRegenChunk) {
for (int layer = 0; layer < 16; layer++) { for (int layer = getMinLayer(); layer <= getMaxLayer(); layer++) {
for (int y = 0; y < 16; y++) { for (int y = 0; y < 16; y++) {
for (int x = 0; x < 16; x++) { for (int x = 0; x < 16; x++) {
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
@ -171,7 +168,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
int lx = ChunkUtil.getX(j); int lx = ChunkUtil.getX(j);
int lz = ChunkUtil.getZ(j); int lz = ChunkUtil.getZ(j);
int x = sx + lx; int x = sx + lx;
int y = ChunkUtil.getY(layer, j); int y = ChunkUtil.getY(layer + localChunk.getMinSection(), j);
int z = sz + lz; int z = sz + lz;
boolean edge = Settings.QUEUE.UPDATE_EDGES && isEdge(y >> 4, lx, y & 15, lz, blockVector2, boolean edge = Settings.QUEUE.UPDATE_EDGES && isEdge(y >> 4, lx, y & 15, lz, blockVector2,
localChunk localChunk
@ -180,7 +177,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
} }
} }
} }
for (int layer = 0; layer < localChunk.getBaseblocks().length; layer++) { for (int layer = 0; layer < localChunk.getBiomes().length; layer++) {
BiomeType[] biomesLayer = localChunk.getBiomes()[layer]; BiomeType[] biomesLayer = localChunk.getBiomes()[layer];
if (biomesLayer == null) { if (biomesLayer == null) {
continue; continue;
@ -199,15 +196,15 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
} }
} }
if (localChunk.getTiles().size() > 0) { if (localChunk.getTiles().size() > 0) {
localChunk.getTiles().forEach(((blockVector3, tag) -> { localChunk.getTiles().forEach((blockVector3, tag) -> {
try { try {
BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag); BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag);
getWorld().setBlock(blockVector3, block, noSideEffectSet); getWorld().setBlock(blockVector3, block, getSideEffectSet(SideEffectState.NONE));
} catch (WorldEditException ignored) { } catch (WorldEditException ignored) {
StateWrapper sw = new StateWrapper(tag); StateWrapper sw = new StateWrapper(tag);
sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ()); sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ());
} }
})); });
} }
if (localChunk.getEntities().size() > 0) { if (localChunk.getEntities().size() > 0) {
localChunk.getEntities().forEach((location, entity) -> getWorld().createEntity(location, entity)); localChunk.getEntities().forEach((location, entity) -> getWorld().createEntity(location, entity));
@ -231,6 +228,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
.withConsumer(consumer) .withConsumer(consumer)
.unloadAfter(isUnloadAfter()) .unloadAfter(isUnloadAfter())
.withProgressSubscribers(getProgressSubscribers()) .withProgressSubscribers(getProgressSubscribers())
.forceSync(isForceSync())
.build(); .build();
return super.enqueue(); return super.enqueue();
} }
@ -238,6 +236,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
/** /**
* Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails * Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails
*/ */
@SuppressWarnings("unused")
private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2, boolean edge) { private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2, boolean edge) {
try { try {
BlockVector3 loc = BlockVector3.at(x, y, z); BlockVector3 loc = BlockVector3.at(x, y, z);
@ -258,17 +257,21 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
} }
SideEffectSet sideEffectSet; SideEffectSet sideEffectSet;
if (lighting) { if (lighting) {
sideEffectSet = edge ? edgeLightingSideEffectSet : lightingSideEffectSet; sideEffectSet = getSideEffectSet(edge ? SideEffectState.EDGE_LIGHTING : SideEffectState.LIGHTING);
} else { } else {
sideEffectSet = edge ? edgeSideEffectSet : noSideEffectSet; sideEffectSet = getSideEffectSet(edge ? SideEffectState.EDGE : SideEffectState.NONE);
} }
getWorld().setBlock(loc, block, sideEffectSet); getWorld().setBlock(loc, block, sideEffectSet);
} catch (WorldEditException ignored) { } catch (WorldEditException ignored) {
// Fallback to not so nice method // Fallback to not so nice method
BlockData blockData = BukkitAdapter.adapt(block); BlockData blockData = BukkitAdapter.adapt(block);
Chunk chunk = getBukkitWorld().getChunkAt(blockVector2.getX(), blockVector2.getZ()); Block existing;
// Assume a chunk object has been given only when it should have been.
Block existing = chunk.getBlock(x, y, z); 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()); final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) { if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
return; return;
@ -284,7 +287,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
CompoundTag tag = block.getNbtData(); CompoundTag tag = block.getNbtData();
StateWrapper sw = new StateWrapper(tag); StateWrapper sw = new StateWrapper(tag);
sw.restoreTag(getWorld().getName(), existing.getX(), existing.getY(), existing.getZ()); sw.restoreTag(existing);
} }
} }
} }
@ -297,47 +300,48 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
} }
private boolean isEdge(int layer, int x, int y, int z, BlockVector2 blockVector2, LocalChunk localChunk) { private boolean isEdge(int layer, int x, int y, int z, BlockVector2 blockVector2, LocalChunk localChunk) {
if (layer == 0 || layer == localChunk.getBaseblocks().length - 1) { int layerIndex = (layer - localChunk.getMinSection());
if (layer == localChunk.getMinSection() || layerIndex == localChunk.getBaseblocks().length - 1) {
return false; return false;
} }
if (x == 0) { if (x == 0) {
LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() - 1)); LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() - 1));
if (localChunkX == null || localChunkX.getBaseblocks()[layer] == null || if (localChunkX == null || localChunkX.getBaseblocks()[layerIndex] == null ||
localChunkX.getBaseblocks()[layer][ChunkUtil.getJ(15, y, z)] != null) { localChunkX.getBaseblocks()[layerIndex][ChunkUtil.getJ(15, y, z)] != null) {
return true; return true;
} }
} else if (x == 15) { } else if (x == 15) {
LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() + 1)); LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() + 1));
if (localChunkX == null || localChunkX.getBaseblocks()[layer] == null || if (localChunkX == null || localChunkX.getBaseblocks()[layerIndex] == null ||
localChunkX.getBaseblocks()[layer][ChunkUtil.getJ(0, y, z)] != null) { localChunkX.getBaseblocks()[layerIndex][ChunkUtil.getJ(0, y, z)] != null) {
return true; return true;
} }
} }
if (z == 0) { if (z == 0) {
LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() - 1)); LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() - 1));
if (localChunkZ == null || localChunkZ.getBaseblocks()[layer] == null || if (localChunkZ == null || localChunkZ.getBaseblocks()[layerIndex] == null ||
localChunkZ.getBaseblocks()[layer][ChunkUtil.getJ(x, y, 15)] != null) { localChunkZ.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, y, 15)] != null) {
return true; return true;
} }
} else if (z == 15) { } else if (z == 15) {
LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() + 1)); LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() + 1));
if (localChunkZ == null || localChunkZ.getBaseblocks()[layer] == null || if (localChunkZ == null || localChunkZ.getBaseblocks()[layerIndex] == null ||
localChunkZ.getBaseblocks()[layer][ChunkUtil.getJ(x, y, 0)] != null) { localChunkZ.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, y, 0)] != null) {
return true; return true;
} }
} }
if (y == 0) { if (y == 0) {
if (localChunk.getBaseblocks()[layer - 1] == null || if (localChunk.getBaseblocks()[layerIndex - 1] == null ||
localChunk.getBaseblocks()[layer][ChunkUtil.getJ(x, 15, z)] != null) { localChunk.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, 15, z)] != null) {
return true; return true;
} }
} else if (y == 15) { } else if (y == 15) {
if (localChunk.getBaseblocks()[layer + 1] == null || if (localChunk.getBaseblocks()[layerIndex + 1] == null ||
localChunk.getBaseblocks()[layer][ChunkUtil.getJ(x, 0, z)] != null) { localChunk.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, 0, z)] != null) {
return true; return true;
} }
} }
BaseBlock[] baseBlocks = localChunk.getBaseblocks()[layer]; BaseBlock[] baseBlocks = localChunk.getBaseblocks()[layerIndex];
if (x > 0 && baseBlocks[ChunkUtil.getJ(x - 1, y, z)] == null) { if (x > 0 && baseBlocks[ChunkUtil.getJ(x - 1, y, z)] == null) {
return true; return true;
} }
@ -376,4 +380,23 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
return false; 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

@ -1,31 +1,25 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.queue; package com.plotsquared.bukkit.queue;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.intellectualsites.annotations.DoNotUse;
import com.plotsquared.bukkit.util.BukkitBlockUtil; import com.plotsquared.bukkit.util.BukkitBlockUtil;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.core.location.ChunkWrapper; import com.plotsquared.core.location.ChunkWrapper;
@ -50,6 +44,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Arrays; import java.util.Arrays;
@DoNotUse
public class GenChunk extends ScopedQueueCoordinator { public class GenChunk extends ScopedQueueCoordinator {
public final Biome[] biomes; public final Biome[] biomes;
@ -61,8 +56,14 @@ public class GenChunk extends ScopedQueueCoordinator {
public int chunkZ; public int chunkZ;
private ChunkData chunkData = null; private ChunkData chunkData = null;
public GenChunk() { /**
super(null, Location.at("", 0, 0, 0), Location.at("", 15, 255, 15)); * @param minY minimum world Y, inclusive
* @param maxY maximum world Y, inclusive
*
* @since 6.6.0
*/
public GenChunk(int minY, int maxY) {
super(null, Location.at("", 0, minY, 0), Location.at("", 15, maxY, 15));
this.biomes = Biome.values(); this.biomes = Biome.values();
} }
@ -102,7 +103,7 @@ public class GenChunk extends ScopedQueueCoordinator {
/** /**
* Set the world and XZ of the chunk being represented via {@link ChunkWrapper} * Set the world and XZ of the chunk being represented via {@link ChunkWrapper}
* *
* @param wrap P2 ChunkWrapper * @param wrap PlotSquared ChunkWrapper
*/ */
public void setChunk(@NonNull ChunkWrapper wrap) { public void setChunk(@NonNull ChunkWrapper wrap) {
chunk = null; chunk = null;
@ -117,7 +118,7 @@ public class GenChunk extends ScopedQueueCoordinator {
return; return;
} }
Biome biome = BukkitAdapter.adapt(biomeType); Biome biome = BukkitAdapter.adapt(biomeType);
for (int y = 0; y < 256; y++) { for (int y = getMin().getY(); y <= getMax().getY(); y++) {
for (int x = 0; x < 16; x++) { for (int x = 0; x < 16; x++) {
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
this.biomeGrid.setBiome(x, y, z, biome); this.biomeGrid.setBiome(x, y, z, biome);
@ -130,7 +131,7 @@ public class GenChunk extends ScopedQueueCoordinator {
public void setCuboid(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockState block) { public void setCuboid(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockState block) {
if (result != null && pos1.getX() == 0 && pos1.getZ() == 0 && pos2.getX() == 15 && pos2.getZ() == 15) { if (result != null && pos1.getX() == 0 && pos1.getZ() == 0 && pos2.getX() == 15 && pos2.getZ() == 15) {
for (int y = pos1.getY(); y <= pos2.getY(); y++) { for (int y = pos1.getY(); y <= pos2.getY(); y++) {
int layer = y >> 4; int layer = getLayerIndex(y);
BlockState[] data = result[layer]; BlockState[] data = result[layer];
if (data == null) { if (data == null) {
result[layer] = data = new BlockState[4096]; result[layer] = data = new BlockState[4096];
@ -164,7 +165,7 @@ public class GenChunk extends ScopedQueueCoordinator {
*/ */
public boolean setBiome(int x, int z, @NonNull Biome biome) { public boolean setBiome(int x, int z, @NonNull Biome biome) {
if (this.biomeGrid != null) { if (this.biomeGrid != null) {
for (int y = 0; y < 256; y++) { for (int y = getMin().getY(); y <= getMax().getY(); y++) {
this.setBiome(x, y, z, biome); this.setBiome(x, y, z, biome);
} }
return true; return true;
@ -197,7 +198,7 @@ public class GenChunk extends ScopedQueueCoordinator {
} }
private void storeCache(final int x, final int y, final int z, final @NonNull BlockState id) { private void storeCache(final int x, final int y, final int z, final @NonNull BlockState id) {
int i = y >> 4; int i = getLayerIndex(y);
BlockState[] v = this.result[i]; BlockState[] v = this.result[i];
if (v == null) { if (v == null) {
this.result[i] = v = new BlockState[4096]; this.result[i] = v = new BlockState[4096];
@ -219,7 +220,7 @@ public class GenChunk extends ScopedQueueCoordinator {
@Override @Override
public @Nullable BlockState getBlock(int x, int y, int z) { public @Nullable BlockState getBlock(int x, int y, int z) {
int i = y >> 4; int i = getLayerIndex(y);
if (result == null) { if (result == null) {
return BukkitBlockUtil.get(chunkData.getType(x, y, z)); return BukkitBlockUtil.get(chunkData.getType(x, y, z));
} }
@ -246,16 +247,16 @@ public class GenChunk extends ScopedQueueCoordinator {
@Override @Override
public @NonNull Location getMax() { public @NonNull Location getMax() {
return Location.at(getWorld().getName(), 15 + (getX() << 4), 255, 15 + (getZ() << 4)); return Location.at(getWorld().getName(), 15 + (getX() << 4), super.getMax().getY(), 15 + (getZ() << 4));
} }
@Override @Override
public @NonNull Location getMin() { public @NonNull Location getMin() {
return Location.at(getWorld().getName(), getX() << 4, 0, getZ() << 4); return Location.at(getWorld().getName(), getX() << 4, super.getMin().getY(), getZ() << 4);
} }
public @NonNull GenChunk clone() { public @NonNull GenChunk clone() {
GenChunk toReturn = new GenChunk(); GenChunk toReturn = new GenChunk(getMin().getY(), getMax().getY());
if (this.result != null) { if (this.result != null) {
for (int i = 0; i < this.result.length; i++) { for (int i = 0; i < this.result.length; i++) {
BlockState[] matrix = this.result[i]; BlockState[] matrix = this.result[i];
@ -269,4 +270,8 @@ public class GenChunk extends ScopedQueueCoordinator {
return toReturn; return toReturn;
} }
private int getLayerIndex(int y) {
return (y - getMin().getY()) >> 4;
}
} }

View File

@ -0,0 +1,121 @@
/*
* PlotSquared, a land and world management plugin for Minecraft.
* Copyright (C) IntellectualSites <https://intellectualsites.com>
* Copyright (C) IntellectualSites team and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.plotsquared.bukkit.queue;
import com.plotsquared.bukkit.schematic.StateWrapper;
import com.plotsquared.core.queue.DelegateQueueCoordinator;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bukkit.Location;
import org.bukkit.entity.EntityType;
import org.bukkit.generator.LimitedRegion;
import org.checkerframework.checker.nullness.qual.NonNull;
/**
* Wraps a {@link LimitedRegion} inside a {@link com.plotsquared.core.queue.QueueCoordinator} so it can be written to.
*
* @since 6.9.0
*/
public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator {
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName());
private final LimitedRegion limitedRegion;
/**
* @since 6.9.0
*/
public LimitedRegionWrapperQueue(LimitedRegion limitedRegion) {
super(null);
this.limitedRegion = limitedRegion;
}
@Override
public boolean setBlock(final int x, final int y, final int z, @NonNull final Pattern pattern) {
return setBlock(x, y, z, pattern.applyBlock(BlockVector3.at(x, y, z)));
}
@Override
public boolean setBlock(final int x, final int y, final int z, @NonNull final BaseBlock id) {
boolean result = setBlock(x, y, z, id.toImmutableState());
if (result && id.hasNbtData()) {
CompoundTag tag = id.getNbtData();
StateWrapper sw = new StateWrapper(tag);
try {
sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock());
} catch (IllegalArgumentException e) {
LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e);
return false;
}
}
return result;
}
@Override
public boolean setBlock(final int x, final int y, final int z, @NonNull final BlockState id) {
try {
limitedRegion.setType(x, y, z, BukkitAdapter.adapt(id.getBlockType()));
limitedRegion.setBlockData(x, y, z, BukkitAdapter.adapt(id));
} catch (IllegalArgumentException e) {
LOGGER.error("Error attempting to populate block into the world at location {},{},{}", x, y, z, e);
return false;
}
return true;
}
@Override
public boolean setEntity(@NonNull final Entity entity) {
EntityType type = BukkitAdapter.adapt(entity.getState().getType());
double x = entity.getLocation().getX();
double y = entity.getLocation().getY();
double z = entity.getLocation().getZ();
Location location = new Location(limitedRegion.getWorld(), x, y, z);
try {
limitedRegion.spawnEntity(location, type);
} catch (IllegalArgumentException e) {
LOGGER.error("Error attempting to populate entity into the world at location {},{},{}", (int) x, (int) y, (int) z, e);
return false;
}
return true;
}
@Override
public boolean setTile(final int x, final int y, final int z, @NonNull final CompoundTag tag) {
StateWrapper sw = new StateWrapper(tag);
try {
return sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock());
} catch (IllegalArgumentException e) {
LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e);
return false;
}
}
@Override
public boolean isSettingTiles() {
return true;
}
}

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.schematic; package com.plotsquared.bukkit.schematic;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.schematic; package com.plotsquared.bukkit.schematic;
@ -35,15 +28,18 @@ import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.blocks.BaseItemStack; import com.sk89q.worldedit.blocks.BaseItemStack;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.item.ItemType; import com.sk89q.worldedit.world.item.ItemType;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.Container; import org.bukkit.block.Container;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.Skull;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -56,6 +52,11 @@ public class StateWrapper {
public org.bukkit.block.BlockState state = null; public org.bukkit.block.BlockState state = null;
public CompoundTag tag = null; public CompoundTag tag = null;
/**
* @deprecated in favour of using WE methods for obtaining NBT, specifically by obtaining a
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
*/
@Deprecated(forRemoval = true, since = "6.9.0")
public StateWrapper(org.bukkit.block.BlockState state) { public StateWrapper(org.bukkit.block.BlockState state) {
this.state = state; this.state = state;
} }
@ -166,13 +167,32 @@ public class StateWrapper {
return str; return str;
} }
/**
* 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) { 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; return false;
} }
World world = BukkitUtil.getWorld(worldName); return restoreTag(world.getBlockAt(x, y, z));
Block block = world.getBlockAt(x, y, z); }
if (block == null) {
/**
* 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; return false;
} }
org.bukkit.block.BlockState state = block.getState(); org.bukkit.block.BlockState state = block.getState();
@ -210,10 +230,37 @@ public class StateWrapper {
} }
return false; return false;
} }
case "skull" -> {
if (state instanceof Skull skull) {
CompoundTag skullOwner = ((CompoundTag) this.tag.getValue().get("SkullOwner"));
if (skullOwner == null) {
return true;
}
String player = skullOwner.getString("Name");
if (player == null || player.isEmpty()) {
return false;
}
try {
skull.setOwningPlayer(Bukkit.getOfflinePlayer(player));
skull.update(true);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
return false;
}
} }
return false; return false;
} }
/**
* Get a CompoundTag of the contents of a block's inventory (chest, furnace, etc.).
*
* @deprecated in favour of using WorldEdit methods for obtaining NBT, specifically by obtaining a
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
*/
@Deprecated(forRemoval = true, since = "6.9.0")
public CompoundTag getTag() { public CompoundTag getTag() {
if (this.tag != null) { if (this.tag != null) {
return this.tag; return this.tag;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
@ -42,6 +35,7 @@ import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -50,11 +44,15 @@ import java.util.stream.IntStream;
@Singleton @Singleton
public class BukkitInventoryUtil extends InventoryUtil { public class BukkitInventoryUtil extends InventoryUtil {
private static ItemStack getItem(PlotItemStack item) { private static @Nullable ItemStack getItem(PlotItemStack item) {
if (item == null) { if (item == null) {
return null; return null;
} }
ItemStack stack = new ItemStack(BukkitAdapter.adapt(item.getType()), item.getAmount()); Material material = BukkitAdapter.adapt(item.getType());
if (material == null) {
return null;
}
ItemStack stack = new ItemStack(material, item.getAmount());
ItemMeta meta = null; ItemMeta meta = null;
if (item.getName() != null) { if (item.getName() != null) {
meta = stack.getItemMeta(); meta = stack.getItemMeta();
@ -77,6 +75,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
return stack; return stack;
} }
@SuppressWarnings("deprecation") // Paper deprecation
@Override @Override
public void open(PlotInventory inv) { public void open(PlotInventory inv) {
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer(); BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
@ -103,16 +102,22 @@ public class BukkitInventoryUtil extends InventoryUtil {
} }
@Override @Override
public void setItem(PlotInventory inv, int index, PlotItemStack item) { public boolean setItemChecked(PlotInventory inv, int index, PlotItemStack item) {
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer(); BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
InventoryView opened = bp.player.getOpenInventory(); InventoryView opened = bp.player.getOpenInventory();
if (!inv.isOpen()) { ItemStack stack = getItem(item);
return; if (stack == null) {
return false;
} }
opened.setItem(index, getItem(item)); if (!inv.isOpen()) {
return true;
}
opened.setItem(index, stack);
bp.player.updateInventory(); bp.player.updateInventory();
return true;
} }
@SuppressWarnings("deprecation") // Paper deprecation
public PlotItemStack getItem(ItemStack item) { public PlotItemStack getItem(ItemStack item) {
if (item == null) { if (item == null) {
return null; return null;
@ -145,6 +150,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
.toArray(PlotItemStack[]::new); .toArray(PlotItemStack[]::new);
} }
@SuppressWarnings("deprecation") // #getTitle is needed for Spigot compatibility
@Override @Override
public boolean isOpen(PlotInventory plotInventory) { public boolean isOpen(PlotInventory plotInventory) {
if (!plotInventory.isOpen()) { if (!plotInventory.isOpen()) {

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
@ -40,7 +33,6 @@ import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.queue.ScopedQueueCoordinator; import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.util.ChunkManager; import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.RegionManager; import com.plotsquared.core.util.RegionManager;
import com.plotsquared.core.util.RegionUtil;
import com.plotsquared.core.util.WorldUtil; import com.plotsquared.core.util.WorldUtil;
import com.plotsquared.core.util.entity.EntityCategories; import com.plotsquared.core.util.entity.EntityCategories;
import com.plotsquared.core.util.task.RunnableVal; import com.plotsquared.core.util.task.RunnableVal;
@ -261,7 +253,7 @@ public class BukkitRegionManager extends RegionManager {
if (checkX2 && checkZ2) { if (checkX2 && checkZ2) {
map.saveRegion(world, xxt2, xxt, zzt2, zzt); // map.saveRegion(world, xxt2, xxt, zzt2, zzt); //
} }
CuboidRegion currentPlotClear = RegionUtil.createRegion(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()); CuboidRegion currentPlotClear = new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3());
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear); map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
AugmentedUtils.bypass( AugmentedUtils.bypass(
ignoreAugment, ignoreAugment,
@ -276,20 +268,16 @@ public class BukkitRegionManager extends RegionManager {
PlotLoc plotLoc = new PlotLoc(bx + x1, bz + z1); PlotLoc plotLoc = new PlotLoc(bx + x1, bz + z1);
BaseBlock[] ids = map.allBlocks.get(plotLoc); BaseBlock[] ids = map.allBlocks.get(plotLoc);
if (ids != null) { if (ids != null) {
for (int y = 0; y < Math.min(128, ids.length); y++) { int minY = value.getMin().getY();
BaseBlock id = ids[y]; for (int yIndex = 0; yIndex < ids.length; yIndex++) {
int y = yIndex + minY;
BaseBlock id = ids[yIndex];
if (id != null) { if (id != null) {
value.setBlock(x1, y, z1, id); value.setBlock(x1, y, z1, id);
} else { } else {
value.setBlock(x1, y, z1, BlockTypes.AIR.getDefaultState()); value.setBlock(x1, y, z1, BlockTypes.AIR.getDefaultState());
} }
} }
for (int y = Math.min(128, ids.length); y < ids.length; y++) {
BaseBlock id = ids[y];
if (id != null) {
value.setBlock(x1, y, z1, id);
}
}
} }
} }
} }
@ -297,7 +285,7 @@ public class BukkitRegionManager extends RegionManager {
}, world.getName(), chunk) }, world.getName(), chunk)
); );
//map.restoreBlocks(worldObj, 0, 0); //map.restoreBlocks(worldObj, 0, 0);
map.restoreEntities(Bukkit.getWorld(world.getName()), 0, 0); map.restoreEntities(Bukkit.getWorld(world.getName()));
}); });
regenQueue.setCompleteTask(whenDone); regenQueue.setCompleteTask(whenDone);
queue.setCompleteTask(regenQueue::enqueue); queue.setCompleteTask(regenQueue::enqueue);

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
@ -76,7 +69,7 @@ public class BukkitSetupUtils extends SetupUtils {
@Override @Override
public void updateGenerators(final boolean force) { public void updateGenerators(final boolean force) {
if (!SetupUtils.generators.isEmpty() && !force) { if (loaded && !SetupUtils.generators.isEmpty() && !force) {
return; return;
} }
String testWorld = "CheckingPlotSquaredGenerator"; String testWorld = "CheckingPlotSquaredGenerator";
@ -100,6 +93,7 @@ public class BukkitSetupUtils extends SetupUtils {
e.printStackTrace(); e.printStackTrace();
} }
} }
loaded = true;
} }
@Override @Override

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
@ -44,7 +37,6 @@ import com.plotsquared.core.util.task.TaskManager;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.bukkit.BukkitWorld; import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockCategories; import com.sk89q.worldedit.world.block.BlockCategories;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockState;
@ -61,7 +53,6 @@ import org.bukkit.Bukkit;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Biome;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
@ -246,7 +237,9 @@ public class BukkitUtil extends WorldUtil {
final World bukkitWorld = Objects.requireNonNull(getWorld(world)); final World bukkitWorld = Objects.requireNonNull(getWorld(world));
// Skip top and bottom block // Skip top and bottom block
int air = 1; int air = 1;
for (int y = bukkitWorld.getMaxHeight() - 1; y >= 0; y--) { int maxY = com.plotsquared.bukkit.util.BukkitWorld.getMaxWorldHeight(bukkitWorld);
int minY = com.plotsquared.bukkit.util.BukkitWorld.getMinWorldHeight(bukkitWorld);
for (int y = maxY - 1; y >= minY; y--) {
Block block = bukkitWorld.getBlockAt(x, y, z); Block block = bukkitWorld.getBlockAt(x, y, z);
Material type = block.getType(); Material type = block.getType();
if (type.isSolid()) { if (type.isSolid()) {
@ -273,7 +266,9 @@ public class BukkitUtil extends WorldUtil {
final World bukkitWorld = Objects.requireNonNull(getWorld(world)); final World bukkitWorld = Objects.requireNonNull(getWorld(world));
// Skip top and bottom block // Skip top and bottom block
int air = 1; int air = 1;
for (int y = bukkitWorld.getMaxHeight() - 1; y >= 0; y--) { int maxY = com.plotsquared.bukkit.util.BukkitWorld.getMaxWorldHeight(bukkitWorld);
int minY = com.plotsquared.bukkit.util.BukkitWorld.getMinWorldHeight(bukkitWorld);
for (int y = maxY - 1; y >= minY; y--) {
Block block = bukkitWorld.getBlockAt(x, y, z); Block block = bukkitWorld.getBlockAt(x, y, z);
Material type = block.getType(); Material type = block.getType();
if (type.isSolid()) { if (type.isSolid()) {
@ -345,13 +340,15 @@ public class BukkitUtil extends WorldUtil {
final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ()); final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ());
final Material type = block.getType(); final Material type = block.getType();
if (type != Material.LEGACY_SIGN && type != Material.LEGACY_WALL_SIGN) { if (type != Material.LEGACY_SIGN && type != Material.LEGACY_WALL_SIGN) {
BlockFace facing = BlockFace.EAST; BlockFace facing = BlockFace.NORTH;
if (world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) { if (!world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) {
facing = BlockFace.NORTH; if (world.getBlockAt(location.getX() - 1, location.getY(), location.getZ()).getType().isSolid()) {
} else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) { facing = BlockFace.EAST;
facing = BlockFace.WEST; } else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) {
} else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) { facing = BlockFace.WEST;
facing = BlockFace.SOUTH; } else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) {
facing = BlockFace.SOUTH;
}
} }
if (PlotSquared.platform().serverVersion()[1] == 13) { if (PlotSquared.platform().serverVersion()[1] == 13) {
block.setType(Material.valueOf(area.legacySignMaterial()), false); block.setType(Material.valueOf(area.legacySignMaterial()), false);
@ -371,7 +368,7 @@ public class BukkitUtil extends WorldUtil {
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER sign.setLine(i, LEGACY_COMPONENT_SERIALIZER
.serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements))); .serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements)));
} }
sign.update(true); sign.update(true, false);
} }
}); });
} }
@ -382,27 +379,6 @@ public class BukkitUtil extends WorldUtil {
return new StringComparison<BlockState>().new ComparisonResult(1, state); return new StringComparison<BlockState>().new ComparisonResult(1, state);
} }
@Override
public void setBiomes(
final @NonNull String worldName,
final @NonNull CuboidRegion region,
final @NonNull BiomeType biomeType
) {
final World world = getWorld(worldName);
if (world == null) {
LOGGER.warn("An error occurred while setting the biome because the world was null", new RuntimeException());
return;
}
final Biome biome = BukkitAdapter.adapt(biomeType);
for (int x = region.getMinimumPoint().getX(); x <= region.getMaximumPoint().getX(); x++) {
for (int z = region.getMinimumPoint().getZ(); z <= region.getMaximumPoint().getZ(); z++) {
if (world.getBiome(x, z) != biome) {
world.setBiome(x, z, biome);
}
}
}
}
@Override @Override
public com.sk89q.worldedit.world.@NonNull World getWeWorld(final @NonNull String world) { public com.sk89q.worldedit.world.@NonNull World getWeWorld(final @NonNull String world) {
return new BukkitWorld(Bukkit.getWorld(world)); return new BukkitWorld(Bukkit.getWorld(world));

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
@ -36,6 +29,18 @@ import java.util.Objects;
public class BukkitWorld implements World<org.bukkit.World> { public class BukkitWorld implements World<org.bukkit.World> {
private static final Map<String, BukkitWorld> worldMap = Maps.newHashMap(); private static final Map<String, BukkitWorld> worldMap = Maps.newHashMap();
private static final boolean HAS_MIN_Y;
static {
boolean temp;
try {
org.bukkit.World.class.getMethod("getMinHeight");
temp = true;
} catch (NoSuchMethodException e) {
temp = false;
}
HAS_MIN_Y = temp;
}
private final org.bukkit.World world; private final org.bukkit.World world;
@ -73,6 +78,24 @@ public class BukkitWorld implements World<org.bukkit.World> {
return bukkitWorld; return bukkitWorld;
} }
/**
* Get the min world height from a Bukkit {@link org.bukkit.World}. Inclusive
*
* @since 6.6.0
*/
public static int getMinWorldHeight(org.bukkit.World world) {
return HAS_MIN_Y ? world.getMinHeight() : 0;
}
/**
* Get the max world height from a Bukkit {@link org.bukkit.World}. Exclusive
*
* @since 6.6.0
*/
public static int getMaxWorldHeight(org.bukkit.World world) {
return HAS_MIN_Y ? world.getMaxHeight() : 256;
}
@Override @Override
public org.bukkit.World getPlatformWorld() { public org.bukkit.World getPlatformWorld() {
return this.world; return this.world;
@ -83,34 +106,41 @@ public class BukkitWorld implements World<org.bukkit.World> {
return this.world.getName(); return this.world.getName();
} }
@Override
public int getMinHeight() {
return getMinWorldHeight(world);
}
@Override
public int getMaxHeight() {
return getMaxWorldHeight(world) - 1;
}
@Override
public boolean equals(final Object o) { public boolean equals(final Object o) {
if (o == this) { if (this == o) {
return true; return true;
} }
if (!(o instanceof final BukkitWorld other)) { if (o == null || getClass() != o.getClass()) {
return false; return false;
} }
if (!other.canEqual(this)) { final BukkitWorld that = (BukkitWorld) o;
return false; return world.equals(that.world);
}
if (!Objects.equals(this.world, other.world)) {
return false;
}
return true;
} }
@Override
public int hashCode() {
return world.hashCode();
}
/**
* @deprecated This method is not meant to be invoked or overridden, with no replacement.
*/
@Deprecated(forRemoval = true, since = "6.6.0")
protected boolean canEqual(final Object other) { protected boolean canEqual(final Object other) {
return other instanceof BukkitWorld; return other instanceof BukkitWorld;
} }
public int hashCode() {
final int PRIME = 59;
int result = 1;
final Object $world = this.world;
result = result * PRIME + ($world == null ? 43 : $world.hashCode());
return result;
}
public String toString() { public String toString() {
return "BukkitWorld(world=" + this.world + ")"; return "BukkitWorld(world=" + this.world + ")";
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
@ -70,7 +63,7 @@ public class ContentMap {
} }
for (int x = x1; x <= x2; x++) { for (int x = x1; x <= x2; x++) {
for (int z = z1; z <= z2; z++) { for (int z = z1; z <= z2; z++) {
saveBlocks(world, 256, x, z, 0, 0); saveBlocks(world, x, z);
} }
} }
} }
@ -92,14 +85,7 @@ public class ContentMap {
} }
} }
void saveEntitiesIn(Chunk chunk, CuboidRegion region) { void saveEntitiesIn(Chunk chunk, CuboidRegion region, boolean delete) {
saveEntitiesIn(chunk, region, 0, 0, false);
}
void saveEntitiesIn(
Chunk chunk, CuboidRegion region, int offsetX, int offsetZ,
boolean delete
) {
for (Entity entity : chunk.getEntities()) { for (Entity entity : chunk.getEntities()) {
Location location = BukkitUtil.adapt(entity.getLocation()); Location location = BukkitUtil.adapt(entity.getLocation());
int x = location.getX(); int x = location.getX();
@ -111,8 +97,6 @@ public class ContentMap {
continue; continue;
} }
EntityWrapper wrap = new ReplicatingEntityWrapper(entity, (short) 2); EntityWrapper wrap = new ReplicatingEntityWrapper(entity, (short) 2);
wrap.x += offsetX;
wrap.z += offsetZ;
wrap.saveEntity(); wrap.saveEntity();
this.entities.add(wrap); this.entities.add(wrap);
if (delete) { if (delete) {
@ -123,10 +107,10 @@ public class ContentMap {
} }
} }
void restoreEntities(World world, int xOffset, int zOffset) { void restoreEntities(World world) {
for (EntityWrapper entity : this.entities) { for (EntityWrapper entity : this.entities) {
try { try {
entity.spawn(world, xOffset, zOffset); entity.spawn(world, 0, 0);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("Failed to restore entity", e); LOGGER.error("Failed to restore entity", e);
} }
@ -134,15 +118,13 @@ public class ContentMap {
this.entities.clear(); this.entities.clear();
} }
//todo optimize maxY private void saveBlocks(BukkitWorld world, int x, int z) {
void saveBlocks(BukkitWorld world, int maxY, int x, int z, int offsetX, int offsetZ) { BaseBlock[] ids = new BaseBlock[world.getMaxY() - world.getMinY() + 1];
maxY = Math.min(255, maxY); for (short yIndex = 0; yIndex <= world.getMaxY() - world.getMinY(); yIndex++) {
BaseBlock[] ids = new BaseBlock[maxY + 1]; BaseBlock block = world.getFullBlock(BlockVector3.at(x, yIndex + world.getMinY(), z));
for (short y = 0; y <= maxY; y++) { ids[yIndex] = block;
BaseBlock block = world.getFullBlock(BlockVector3.at(x, y, z));
ids[y] = block;
} }
PlotLoc loc = new PlotLoc(x + offsetX, z + offsetZ); PlotLoc loc = new PlotLoc(x, z);
this.allBlocks.put(loc, ids); this.allBlocks.put(loc, ids);
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util; package com.plotsquared.bukkit.util;
@ -61,6 +54,7 @@ public class UpdateUtility implements Listener {
internalVersion = PlotSquared.get().getVersion(); internalVersion = PlotSquared.get().getVersion();
} }
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
public void updateChecker() { public void updateChecker() {
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> { task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
try { try {
@ -68,7 +62,7 @@ public class UpdateUtility implements Listener {
"https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506") "https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
.openConnection(); .openConnection();
connection.setRequestMethod("GET"); connection.setRequestMethod("GET");
JsonObject result = (new JsonParser()) JsonObject result = new JsonParser()
.parse(new JsonReader(new InputStreamReader(connection.getInputStream()))) .parse(new JsonReader(new InputStreamReader(connection.getInputStream())))
.getAsJsonObject(); .getAsJsonObject();
spigotVersion = result.get("current_version").getAsString(); spigotVersion = result.get("current_version").getAsString();
@ -91,7 +85,7 @@ public class UpdateUtility implements Listener {
notify = false; notify = false;
LOGGER.info("Congratulations! You are running the latest PlotSquared version"); LOGGER.info("Congratulations! You are running the latest PlotSquared version");
} }
}, 0L, Settings.UpdateChecker.POLL_RATE * 60 * 20); }, 0L, (long) Settings.UpdateChecker.POLL_RATE * 60 * 20);
} }
private void cancelTask() { private void cancelTask() {

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util.fawe; package com.plotsquared.bukkit.util.fawe;
@ -110,6 +103,11 @@ public class FaweRegionManager extends BukkitRegionManager {
delegate.setBiome(region, extendBiome, biome, world, whenDone); delegate.setBiome(region, extendBiome, biome, world, whenDone);
} }
@Override
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) {
delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone);
}
@Override @Override
public boolean copyRegion( public boolean copyRegion(
final @NonNull Location pos1, final @NonNull Location pos1,

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util.fawe; package com.plotsquared.bukkit.util.fawe;
@ -67,7 +60,7 @@ public class FaweSchematicHandler extends SchematicHandler {
final PlotPlayer<?> actor, final PlotPlayer<?> actor,
final RunnableVal<Boolean> whenDone final RunnableVal<Boolean> whenDone
) { ) {
delegate.paste(schematic, plot, xOffset, yOffset, zOffset, autoHeight, whenDone); delegate.paste(schematic, plot, xOffset, yOffset, zOffset, autoHeight, actor, whenDone);
} }
@Override @Override
@ -75,6 +68,7 @@ public class FaweSchematicHandler extends SchematicHandler {
return delegate.save(tag, path); return delegate.save(tag, path);
} }
@SuppressWarnings("removal") // Just the override
@Override @Override
public void upload(final CompoundTag tag, final UUID uuid, final String file, final RunnableVal<URL> whenDone) { public void upload(final CompoundTag tag, final UUID uuid, final String file, final RunnableVal<URL> whenDone) {
delegate.upload(tag, uuid, file, whenDone); delegate.upload(tag, uuid, file, whenDone);

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util.task; package com.plotsquared.bukkit.util.task;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util.task; package com.plotsquared.bukkit.util.task;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util.task; package com.plotsquared.bukkit.util.task;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.util.task; package com.plotsquared.bukkit.util.task;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.uuid; package com.plotsquared.bukkit.uuid;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.uuid; package com.plotsquared.bukkit.uuid;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.uuid; package com.plotsquared.bukkit.uuid;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.uuid; package com.plotsquared.bukkit.uuid;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.uuid; package com.plotsquared.bukkit.uuid;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.bukkit.uuid; package com.plotsquared.bukkit.uuid;

View File

@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
## Enforcement ## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at contact@alexander-soderberg.com. All reported by contacting the project team at contact@intellectualsites.com. All
complaints will be reviewed and investigated and will result in a response that complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident. obligated to maintain confidentiality with regard to the reporter of an incident.

View File

@ -2,18 +2,18 @@ import java.time.format.DateTimeFormatter
dependencies { dependencies {
// Expected everywhere. // Expected everywhere.
compileOnlyApi(libs.checkerqual) compileOnlyApi("org.checkerframework:checker-qual")
// Minecraft expectations // Minecraft expectations
compileOnlyApi(libs.gson) compileOnlyApi("com.google.code.gson:gson")
compileOnly(libs.guava) compileOnly("com.google.guava:guava")
// Platform expectations // Platform expectations
compileOnlyApi(libs.snakeyaml) compileOnlyApi("org.yaml:snakeyaml")
// Adventure // Adventure
api(libs.adventure) api("net.kyori:adventure-api")
api(libs.minimessage) api("net.kyori:adventure-text-minimessage")
// Guice // Guice
api(libs.guice) { api(libs.guice) {
@ -22,7 +22,7 @@ dependencies {
api(libs.guiceassistedinject) { api(libs.guiceassistedinject) {
exclude("com.google.inject", "guice") exclude("com.google.inject", "guice")
} }
api(libs.findbugs) api(libs.spotbugs)
// Plugins // Plugins
compileOnly(libs.worldeditCore) { compileOnly(libs.worldeditCore) {
@ -31,18 +31,19 @@ dependencies {
exclude(group = "dummypermscompat") exclude(group = "dummypermscompat")
} }
testImplementation(libs.worldeditCore) testImplementation(libs.worldeditCore)
compileOnly(libs.fastasyncworldeditCore) { isTransitive = false } compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
testImplementation(libs.fastasyncworldeditCore) { isTransitive = false } testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
// Logging // Logging
compileOnlyApi(libs.log4j) compileOnlyApi("org.apache.logging.log4j:log4j-api")
// Other libraries // Other libraries
api(libs.prtree) api(libs.prtree)
api(libs.aopalliance) api(libs.aopalliance)
api(libs.cloudServices) api(libs.cloudServices)
api(libs.arkitektonika) api(libs.arkitektonika)
api(libs.paster) api("com.intellectualsites.paster:Paster")
api("com.intellectualsites.informative-annotations:informative-annotations")
} }
tasks.processResources { tasks.processResources {
@ -54,3 +55,15 @@ tasks.processResources {
) )
} }
} }
tasks {
withType<Javadoc> {
val opt = options as StandardJavadocDocletOptions
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
opt.links("https://checkerframework.org/api/")
opt.links("https://javadoc.io/doc/com.intellectualsites.informative-annotations/informative-annotations/latest/")
opt.encoding("UTF-8")
}
}

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core; package com.plotsquared.core;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core; package com.plotsquared.core;
@ -29,6 +22,7 @@ import cloud.commandframework.services.ServicePipeline;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Key; import com.google.inject.Key;
import com.google.inject.TypeLiteral; import com.google.inject.TypeLiteral;
import com.intellectualsites.annotations.DoNotUse;
import com.plotsquared.core.backup.BackupManager; import com.plotsquared.core.backup.BackupManager;
import com.plotsquared.core.configuration.caption.LocaleHolder; import com.plotsquared.core.configuration.caption.LocaleHolder;
import com.plotsquared.core.generator.GeneratorWrapper; import com.plotsquared.core.generator.GeneratorWrapper;
@ -40,7 +34,6 @@ import com.plotsquared.core.permissions.PermissionHandler;
import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.queue.GlobalBlockQueue; import com.plotsquared.core.queue.GlobalBlockQueue;
import com.plotsquared.core.util.AnnotationHelper;
import com.plotsquared.core.util.ChunkManager; import com.plotsquared.core.util.ChunkManager;
import com.plotsquared.core.util.EconHandler; import com.plotsquared.core.util.EconHandler;
import com.plotsquared.core.util.PlatformWorldManager; import com.plotsquared.core.util.PlatformWorldManager;
@ -82,6 +75,11 @@ public interface PlotPlatform<P> extends LocaleHolder {
*/ */
void shutdown(); void shutdown();
/**
* Completely shuts down the server.
*/
void shutdownServer();
/** /**
* Get the name of the plugin * Get the name of the plugin
* *
@ -98,6 +96,22 @@ public interface PlotPlatform<P> extends LocaleHolder {
*/ */
int[] serverVersion(); int[] serverVersion();
/**
* Gets the default minimum world height for the version of Minecraft that the server is running.
*
* @return minimum world height
* @since 6.6.0
*/
int versionMinHeight();
/**
* Gets the default maximum world height for the version of Minecraft that the server is running.
*
* @return maximum world height (inclusive)
* @since 6.6.0
*/
int versionMaxHeight();
/** /**
* Gets the server implementation name and version * Gets the server implementation name and version
* *
@ -274,6 +288,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
* Get the {@link PlotAreaManager} implementation. * Get the {@link PlotAreaManager} implementation.
* *
* @return the PlotAreaManager * @return the PlotAreaManager
* @since 6.1.4
*/ */
@NonNull PlotAreaManager plotAreaManager(); @NonNull PlotAreaManager plotAreaManager();
@ -298,7 +313,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
* @return worldedit implementations * @return worldedit implementations
* @since 6.3.0 * @since 6.3.0
*/ */
@AnnotationHelper.ApiDescription(info = "Internal use only") @DoNotUse
@NonNull String worldEditImplementations(); @NonNull String worldEditImplementations();
/** /**
@ -342,9 +357,9 @@ public interface PlotPlatform<P> extends LocaleHolder {
@NonNull String toLegacyPlatformString(@NonNull Component component); @NonNull String toLegacyPlatformString(@NonNull Component component);
/** /**
* Returns if the FAWE-P2 hook is active/enabled * Returns if the FastAsyncWorldEdit-PlotSquared hook is active/enabled
* *
* @return status of FAWE-P2 hook * @return status of FastAsyncWorldEdit-PlotSquared hook
*/ */
default boolean isFaweHooking() { default boolean isFaweHooking() {
return false; return false;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core; package com.plotsquared.core;
@ -72,7 +65,10 @@ import com.plotsquared.core.util.ReflectionUtils;
import com.plotsquared.core.util.task.TaskManager; import com.plotsquared.core.util.task.TaskManager;
import com.plotsquared.core.uuid.UUIDPipeline; import com.plotsquared.core.uuid.UUIDPipeline;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.event.platform.PlatformReadyEvent;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.util.eventbus.EventHandler;
import com.sk89q.worldedit.util.eventbus.Subscribe;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@ -153,6 +149,8 @@ public class PlotSquared {
private EventDispatcher eventDispatcher; private EventDispatcher eventDispatcher;
private PlotListener plotListener; private PlotListener plotListener;
private boolean weInitialised;
/** /**
* Initialize PlotSquared with the desired Implementation class. * Initialize PlotSquared with the desired Implementation class.
* *
@ -199,6 +197,9 @@ public class PlotSquared {
this.loadCaptionMap(); this.loadCaptionMap();
} catch (final Exception e) { } catch (final Exception e) {
LOGGER.error("Failed to load caption map", e); LOGGER.error("Failed to load caption map", e);
LOGGER.error("Shutting down server to prevent further issues");
this.platform.shutdownServer();
throw new RuntimeException("Abort loading PlotSquared");
} }
// Setup the global flag container // Setup the global flag container
@ -223,6 +224,7 @@ public class PlotSquared {
} }
this.worldedit = WorldEdit.getInstance(); this.worldedit = WorldEdit.getInstance();
WorldEdit.getInstance().getEventBus().register(new WEPlatformReadyListener());
// Create Event utility class // Create Event utility class
this.eventDispatcher = new EventDispatcher(this.worldedit); this.eventDispatcher = new EventDispatcher(this.worldedit);
@ -268,7 +270,7 @@ public class PlotSquared {
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang")); captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
} else { } else {
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json"; String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
captionMap = this.captionLoader.loadSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName)); captionMap = this.captionLoader.loadOrCreateSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName));
} }
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap); this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
LOGGER.info( LOGGER.info(
@ -306,7 +308,7 @@ public class PlotSquared {
* *
* @param version First version * @param version First version
* @param version2 Second version * @param version2 Second version
* @return true if `version` is &gt;= `version2` * @return {@code true} if `version` is &gt;= `version2`
*/ */
public boolean checkVersion( public boolean checkVersion(
final int[] version, final int[] version,
@ -338,10 +340,13 @@ public class PlotSquared {
/** /**
* Add a global reference to a plot world. * Add a global reference to a plot world.
* <p>
* You can remove the reference by calling {@link #removePlotArea(PlotArea)}
* </p>
* *
* @param plotArea the {@link PlotArea} to add. * @param plotArea the {@link PlotArea} to add.
* @see #removePlotArea(PlotArea) To remove the reference
*/ */
@SuppressWarnings("unchecked")
public void addPlotArea(final @NonNull PlotArea plotArea) { public void addPlotArea(final @NonNull PlotArea plotArea) {
HashMap<PlotId, Plot> plots; HashMap<PlotId, Plot> plots;
if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) { if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) {
@ -556,6 +561,7 @@ public class PlotSquared {
* *
* @param input an array of plots to sort * @param input an array of plots to sort
*/ */
@SuppressWarnings("unchecked")
private void sortPlotsByHash(final @NonNull Plot @NonNull [] input) { private void sortPlotsByHash(final @NonNull Plot @NonNull [] input) {
List<Plot>[] bucket = new ArrayList[32]; List<Plot>[] bucket = new ArrayList[32];
Arrays.fill(bucket, new ArrayList<>()); Arrays.fill(bucket, new ArrayList<>());
@ -696,20 +702,12 @@ public class PlotSquared {
ArrayList<Plot> toReturn = new ArrayList<>(plots.size()); ArrayList<Plot> toReturn = new ArrayList<>(plots.size());
for (PlotArea area : areas) { for (PlotArea area : areas) {
switch (type) { switch (type) {
case CREATION_DATE: case CREATION_DATE -> toReturn.addAll(sortPlotsByTemp(map.get(area)));
toReturn.addAll(sortPlotsByTemp(map.get(area))); case CREATION_DATE_TIMESTAMP -> toReturn.addAll(sortPlotsByTimestamp(map.get(area)));
break; case DISTANCE_FROM_ORIGIN -> toReturn.addAll(sortPlotsByHash(map.get(area)));
case CREATION_DATE_TIMESTAMP: case LAST_MODIFIED -> toReturn.addAll(sortPlotsByModified(map.get(area)));
toReturn.addAll(sortPlotsByTimestamp(map.get(area))); default -> {
break; }
case DISTANCE_FROM_ORIGIN:
toReturn.addAll(sortPlotsByHash(map.get(area)));
break;
case LAST_MODIFIED:
toReturn.addAll(sortPlotsByModified(map.get(area)));
break;
default:
break;
} }
} }
return toReturn; return toReturn;
@ -739,7 +737,7 @@ public class PlotSquared {
* *
* @param plot the plot to remove * @param plot the plot to remove
* @param callEvent If to call an event about the plot being removed * @param callEvent If to call an event about the plot being removed
* @return true if plot existed | false if it didn't * @return {@code true} if plot existed | {@code false} if it didn't
*/ */
public boolean removePlot( public boolean removePlot(
final @NonNull Plot plot, final @NonNull Plot plot,
@ -893,8 +891,8 @@ public class PlotSquared {
e.printStackTrace(); e.printStackTrace();
} }
LOGGER.info("| generator: {}>{}", baseGenerator, areaGen); LOGGER.info("| generator: {}>{}", baseGenerator, areaGen);
LOGGER.info("| plot world: {}", pa); LOGGER.info("| plot world: {}", pa.getClass().getCanonicalName());
LOGGER.info("| manager: {}", pa); LOGGER.info("| manager: {}", pa.getPlotManager().getClass().getCanonicalName());
LOGGER.info("Note: Area created for cluster '{}' (invalid or old configuration?)", name); LOGGER.info("Note: Area created for cluster '{}' (invalid or old configuration?)", name);
areaGen.getPlotGenerator().initialize(pa); areaGen.getPlotGenerator().initialize(pa);
areaGen.augment(pa); areaGen.augment(pa);
@ -910,6 +908,13 @@ public class PlotSquared {
throw new IllegalArgumentException("Invalid Generator: " + gen_string); throw new IllegalArgumentException("Invalid Generator: " + gen_string);
} }
PlotArea pa = areaGen.getPlotGenerator().getNewPlotArea(world, null, null, null); 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.saveConfiguration(worldSection);
pa.loadDefaultConfiguration(worldSection); pa.loadDefaultConfiguration(worldSection);
try { try {
@ -917,9 +922,6 @@ public class PlotSquared {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
LOGGER.info("- generator: {}>{}", baseGenerator, areaGen);
LOGGER.info("- plot world: {}", pa);
LOGGER.info("- plot area manager: {}", pa.getPlotManager());
areaGen.getPlotGenerator().initialize(pa); areaGen.getPlotGenerator().initialize(pa);
areaGen.augment(pa); areaGen.augment(pa);
addPlotArea(pa); addPlotArea(pa);
@ -1024,8 +1026,8 @@ public class PlotSquared {
// save configuration // save configuration
final List<String> validArguments = Arrays final List<String> validArguments = Arrays
.asList("s=", "size=", "g=", "gap=", "h=", "height=", "f=", "floor=", "m=", "main=", .asList("s=", "size=", "g=", "gap=", "h=", "height=", "minh=", "minheight=", "maxh=", "maxheight=",
"w=", "wall=", "b=", "border=" "f=", "floor=", "m=", "main=", "w=", "wall=", "b=", "border="
); );
// Calculate the number of expected arguments // Calculate the number of expected arguments
@ -1104,6 +1106,14 @@ public class PlotSquared {
ConfigurationUtil.INTEGER.parseString(value).shortValue() ConfigurationUtil.INTEGER.parseString(value).shortValue()
); );
} }
case "minh", "minheight" -> this.worldConfiguration.set(
base + "world.min_gen_height",
ConfigurationUtil.INTEGER.parseString(value).shortValue()
);
case "maxh", "maxheight" -> this.worldConfiguration.set(
base + "world.max_gen_height",
ConfigurationUtil.INTEGER.parseString(value).shortValue()
);
case "f", "floor" -> this.worldConfiguration.set( case "f", "floor" -> this.worldConfiguration.set(
base + "plot.floor", base + "plot.floor",
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString() ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString()
@ -1482,7 +1492,7 @@ public class PlotSquared {
* *
* @param world World name * @param world World name
* @param chunkCoordinates Chunk coordinates * @param chunkCoordinates Chunk coordinates
* @return True if the chunk uses non-standard generation, false if not * @return {@code true} if the chunk uses non-standard generation, {@code false} if not
*/ */
public boolean isNonStandardGeneration( public boolean isNonStandardGeneration(
final @NonNull String world, final @NonNull String world,
@ -1527,10 +1537,12 @@ public class PlotSquared {
/** /**
* Get the caption map belonging to a namespace. If none exists, a dummy * Get the caption map belonging to a namespace. If none exists, a dummy
* caption map will be returned. * caption map will be returned.
* <p>
* You can register a caption map by calling {@link #registerCaptionMap(String, CaptionMap)}
* </p>
* *
* @param namespace Namespace * @param namespace Namespace
* @return Map instance * @return Map instance
* @see #registerCaptionMap(String, CaptionMap) To register a caption map
*/ */
public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) { public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) {
return this.captionMaps.computeIfAbsent( return this.captionMaps.computeIfAbsent(
@ -1540,7 +1552,7 @@ public class PlotSquared {
} }
/** /**
* Register a caption map. The namespace needs be equal to the namespace used for * Register a caption map. The namespace needs to be equal to the namespace used for
* the {@link TranslatableCaption}s inside the map. * the {@link TranslatableCaption}s inside the map.
* *
* @param namespace Namespace * @param namespace Namespace
@ -1564,6 +1576,13 @@ public class PlotSquared {
return this.plotListener; return this.plotListener;
} }
/**
* Get if the {@link PlatformReadyEvent} has been sent by WorldEdit. There is no way to query this within WorldEdit itself.
*/
public boolean isWeInitialised() {
return weInitialised;
}
/** /**
* Different ways of sorting {@link Plot plots} * Different ways of sorting {@link Plot plots}
*/ */
@ -1586,4 +1605,15 @@ public class PlotSquared {
DISTANCE_FROM_ORIGIN DISTANCE_FROM_ORIGIN
} }
private final class WEPlatformReadyListener {
@SuppressWarnings("unused")
@Subscribe(priority = EventHandler.Priority.VERY_EARLY)
public void onPlatformReady(PlatformReadyEvent event) {
weInitialised = true;
WorldEdit.getInstance().getEventBus().unregister(WEPlatformReadyListener.this);
}
}
} }

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core; package com.plotsquared.core;
@ -122,7 +115,7 @@ public final class PlotVersion {
* Compare a given version string with the one cached here. * Compare a given version string with the one cached here.
* *
* @param versionString the version to compare * @param versionString the version to compare
* @return true if the given version is a "later" version * @return {@code true} if the given version is a "later" version
*/ */
public boolean isLaterVersion(final @NonNull String versionString) { public boolean isLaterVersion(final @NonNull String versionString) {
int dash = versionString.indexOf('-'); int dash = versionString.indexOf('-');
@ -144,7 +137,7 @@ public final class PlotVersion {
* Compare a given version with the one cached here. * Compare a given version with the one cached here.
* *
* @param verArray the version to compare * @param verArray the version to compare
* @return true if the given version is a "later" version * @return {@code true} if the given version is a "later" version
*/ */
public boolean isLaterVersion(int[] verArray) { public boolean isLaterVersion(int[] verArray) {
if (verArray[0] > version[0]) { if (verArray[0] > version[0]) {

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.backup; package com.plotsquared.core.backup;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.backup; package com.plotsquared.core.backup;
@ -88,7 +81,7 @@ public interface BackupManager {
* Returns true if (potentially) destructive actions should cause * Returns true if (potentially) destructive actions should cause
* PlotSquared to create automatic plot backups * PlotSquared to create automatic plot backups
* *
* @return True if automatic backups are enabled * @return {@code true} if automatic backups are enabled
*/ */
boolean shouldAutomaticallyBackup(); boolean shouldAutomaticallyBackup();

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.backup; package com.plotsquared.core.backup;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.backup; package com.plotsquared.core.backup;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.backup; package com.plotsquared.core.backup;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.backup; package com.plotsquared.core.backup;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.backup; package com.plotsquared.core.backup;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.collection; package com.plotsquared.core.collection;
@ -29,7 +22,8 @@ import java.util.Arrays;
public class ArrayUtil { public class ArrayUtil {
public static final <T> T[] concatAll(T[] first, T[]... rest) { @SuppressWarnings("unchecked")
public static <T> T[] concatAll(T[] first, T[]... rest) {
int totalLength = first.length; int totalLength = first.length;
for (T[] array : rest) { for (T[] array : rest) {
totalLength += array.length; totalLength += array.length;

View File

@ -1,27 +1,20 @@
/* /*
* _____ _ _ _____ _ * PlotSquared, a land and world management plugin for Minecraft.
* | __ \| | | | / ____| | | * Copyright (C) IntellectualSites <https://intellectualsites.com>
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| | * Copyright (C) IntellectualSites team and contributors
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2014 - 2022 IntellectualSites
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package com.plotsquared.core.collection; package com.plotsquared.core.collection;

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