Compare commits

...

77 Commits

Author SHA1 Message Date
60d266b2d7 Release 6.10.0 2022-09-21 16:28:17 +02:00
8deeef4f7d Add allay to animals (#3788)
add allay to animals
2022-09-21 16:18:34 +02:00
9b0b071c0c Add GLOW_BERRIES to VineGrowFlag (#3803) 2022-09-21 16:18:18 +02:00
81a3f1098d Update dependency org.junit.jupiter:junit-jupiter to v5.9.1 (#3807)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-21 16:18:08 +02:00
efc248dcdb Update dependency com.intellectualsites.bom:bom-1.18.x to v1.14 (#3794)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2022-09-12 11:19:07 +02:00
476f3d328d feature: add flag for beacon effects of other plots (#3627)
* feature: add flag for beacon effects of other plots

Took 7 minutes

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

Took 2 minutes

* fix: creating consistency in documentation

Took 7 minutes

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

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

* fix: renamed flag and added road support

* fix: renamed flag and changed flag functionality

* fix: added spigot fallback listener and fixed NPE

* refactor: Address checkstyle violations

* addition: remove beacon effects when player leaves a plot

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

* chore: Run license updater

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

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

* chore: de-duplicate check

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

* Update renovate.json

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

* fix javadoc

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

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

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

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

* Add code tag to javadoc

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

Co-authored-by: Alexander Brandes <mc.cache@web.de>
2022-06-21 19:09:29 +02:00
f27009216c chore: Replace AnnotationHelper class (#3706) 2022-06-21 19:09:17 +02:00
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
580 changed files with 8844 additions and 11783 deletions

View File

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

View File

@ -40,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

View File

@ -50,6 +50,7 @@ dependencies {
implementation(libs.arkitektonika) implementation(libs.arkitektonika)
implementation(libs.http4j) implementation(libs.http4j)
implementation("com.intellectualsites.paster:Paster") implementation("com.intellectualsites.paster:Paster")
implementation("com.intellectualsites.informative-annotations:informative-annotations")
// Adventure // Adventure
implementation("net.kyori:adventure-platform-bukkit") implementation("net.kyori:adventure-platform-bukkit")
@ -87,6 +88,7 @@ tasks.named<ShadowJar>("shadowJar") {
relocate("javax.inject", "com.plotsquared.core.annotation.inject") relocate("javax.inject", "com.plotsquared.core.annotation.inject")
relocate("net.jcip", "com.plotsquared.core.annotations.jcip") relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs") relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
relocate("com.intellectualsites.informative-annotations", "com.plotsquared.core.annotation.informative")
// Get rid of all the libs which are 100% unused. // Get rid of all the libs which are 100% unused.
minimize() minimize()
@ -99,9 +101,10 @@ tasks {
val opt = options as StandardJavadocDocletOptions val opt = options as StandardJavadocDocletOptions
opt.links("https://jd.papermc.io/paper/1.18/") opt.links("https://jd.papermc.io/paper/1.18/")
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/" + libs.worldeditBukkit.get().versionConstraint.toString())
opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/") opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.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://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,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -48,6 +41,7 @@ import com.plotsquared.bukkit.listener.PlayerEventListener;
import com.plotsquared.bukkit.listener.ProjectileEventListener; import com.plotsquared.bukkit.listener.ProjectileEventListener;
import com.plotsquared.bukkit.listener.ServerListener; import com.plotsquared.bukkit.listener.ServerListener;
import com.plotsquared.bukkit.listener.SingleWorldListener; import com.plotsquared.bukkit.listener.SingleWorldListener;
import com.plotsquared.bukkit.listener.SpigotListener;
import com.plotsquared.bukkit.listener.WorldEvents; import com.plotsquared.bukkit.listener.WorldEvents;
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders; import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter; import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
@ -270,7 +264,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) {
@ -278,7 +272,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/");
} }
} }
@ -367,6 +361,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
} else { } else {
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this); getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
} }
} else {
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
} }
this.plotListener.startRunnable(); this.plotListener.startRunnable();
} }
@ -432,7 +428,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
plotSquared.startExpiryTasks(); plotSquared.startExpiryTasks();
// Once the server has loaded force updating all generators known to P2 // 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
@ -663,20 +659,15 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
final @NonNull SQLiteUUIDService sqLiteUUIDService, final @NonNull SQLiteUUIDService sqLiteUUIDService,
final @NonNull CacheUUIDService cacheUUIDService final @NonNull CacheUUIDService cacheUUIDService
) { ) {
// Load all uuids into a big chunky boi queue // Record all unique UUID's and put them into a queue
final Queue<UUID> uuidQueue = new LinkedBlockingQueue<>(); final Set<UUID> uuidSet = new HashSet<>();
PlotSquared.get().forEachPlotRaw(plot -> { PlotSquared.get().forEachPlotRaw(plot -> {
final Set<UUID> uuids = new HashSet<>(); uuidSet.add(plot.getOwnerAbs());
uuids.add(plot.getOwnerAbs()); uuidSet.addAll(plot.getMembers());
uuids.addAll(plot.getMembers()); uuidSet.addAll(plot.getTrusted());
uuids.addAll(plot.getTrusted()); uuidSet.addAll(plot.getDenied());
uuids.addAll(plot.getDenied());
for (final UUID uuid : uuids) {
if (!uuidQueue.contains(uuid)) {
uuidQueue.add(uuid);
}
}
}); });
final Queue<UUID> uuidQueue = new LinkedBlockingQueue<>(uuidSet);
LOGGER.info("(UUID) {} UUIDs will be cached", uuidQueue.size()); LOGGER.info("(UUID) {} UUIDs will be cached", uuidQueue.size());
@ -739,6 +730,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
this.getServer().getPluginManager().disablePlugin(this); this.getServer().getPluginManager().disablePlugin(this);
} }
@Override
public void shutdownServer() {
getServer().shutdown();
}
private void registerCommands() { private void registerCommands() {
final BukkitCommand bukkitCommand = new BukkitCommand(); final BukkitCommand bukkitCommand = new BukkitCommand();
final PluginCommand plotCommand = getCommand("plots"); final PluginCommand plotCommand = getCommand("plots");

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -25,17 +18,18 @@
*/ */
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,35 +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
com.plotsquared.bukkit.util.BukkitWorld.getMinWorldHeight(world), // outside of the actual chunk area.
com.plotsquared.bukkit.util.BukkitWorld.getMaxWorldHeight(world) - 1 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
); );
if (this.plotGenerator.populateChunk(chunk, area)) { ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(wrapped, min, max);
this.queue.enqueue(); this.plotGenerator.populateChunk(offsetChunkQueue, area);
}
} }
} }

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -49,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;
@ -73,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;
} }
@ -169,7 +166,6 @@ public class BukkitPlotGenerator extends ChunkGenerator
@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); int minY = BukkitWorld.getMinWorldHeight(world);
int maxY = BukkitWorld.getMaxWorldHeight(world); int maxY = BukkitWorld.getMaxWorldHeight(world);
GenChunk result = new GenChunk(minY, maxY); GenChunk result = new GenChunk(minY, maxY);

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

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,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -72,6 +65,7 @@ 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.BlockState;
@ -113,11 +107,27 @@ 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;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@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 static final Set<Material> SNOW = Stream.of(Material.values()) // needed as Tag.SNOW isn't present in 1.16.5
.filter(material -> material.name().contains("SNOW"))
.filter(Material::isBlock)
.collect(Collectors.toUnmodifiableSet());
private final PlotAreaManager plotAreaManager; private final PlotAreaManager plotAreaManager;
private final WorldEdit worldEdit; private final WorldEdit worldEdit;
@ -223,50 +233,33 @@ 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; return;
} }
case ANVIL: if (PHYSICS_BLOCKS.contains(event.getChangedType())) {
case DRAGON_EGG:
case GRAVEL:
case SAND:
case TURTLE_EGG:
case TURTLE_HELMET:
case TURTLE_SPAWN_EGG: {
if (plot.getFlag(DisablePhysicsFlag.class)) { if (plot.getFlag(DisablePhysicsFlag.class)) {
event.setCancelled(true); event.setCancelled(true);
plot.debug("Prevented block physics because disable-physics = true"); plot.debug("Prevented block physics because disable-physics = true");
} }
return; return;
} }
default:
if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) { if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) {
switch (block.getType()) { if (PISTONS.contains(block.getType())) {
case PISTON, STICKY_PISTON -> {
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);
case WEST -> location = location.add(0, 0, 1);
case NORTH -> location = location.add(0, 0, -1);
}
Plot newPlot = area.getOwnedPlotAbs(location); Plot newPlot = area.getOwnedPlotAbs(location);
if (!plot.equals(newPlot)) { if (!plot.equals(newPlot)) {
event.setCancelled(true); event.setCancelled(true);
plot.debug("Prevented piston update because of invalid edge piston detection"); plot.debug("Prevented piston update because of invalid edge piston detection");
return;
} }
} }
} }
} }
break;
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void blockCreate(BlockPlaceEvent event) { public void blockCreate(BlockPlaceEvent event) {
@ -279,15 +272,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)) {
@ -365,15 +352,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
@ -461,6 +442,7 @@ public class BlockEventListener implements Listener {
case "TWISTING_VINES": case "TWISTING_VINES":
case "CAVE_VINES": case "CAVE_VINES":
case "VINE": case "VINE":
case "GLOW_BERRIES":
if (!plot.getFlag(VineGrowFlag.class)) { if (!plot.getFlag(VineGrowFlag.class)) {
plot.debug("Vine could not grow because vine-grow = false"); plot.debug("Vine could not grow because vine-grow = false");
event.setCancelled(true); event.setCancelled(true);
@ -551,21 +533,18 @@ public class BlockEventListener implements Listener {
if (plot == null) { if (plot == null) {
return; return;
} }
if (location.getY() >= area.getMaxBuildHeight() || location.getY() < area.getMinBuildHeight()) { if (!area.buildRangeContainsY(location.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
switch (event.getNewState().getType()) { if (SNOW.contains(event.getNewState().getType())) {
case SNOW:
case SNOW_BLOCK:
if (!plot.getFlag(SnowFormFlag.class)) { if (!plot.getFlag(SnowFormFlag.class)) {
plot.debug("Snow could not form because snow-form = false"); plot.debug("Snow could not form because snow-form = false");
event.setCancelled(true); event.setCancelled(true);
} }
return; return;
case ICE: }
case FROSTED_ICE: if (Tag.ICE.isTagged(event.getNewState().getType())) {
case PACKED_ICE:
if (!plot.getFlag(IceFormFlag.class)) { if (!plot.getFlag(IceFormFlag.class)) {
plot.debug("Ice could not form because ice-form = false"); plot.debug("Ice could not form because ice-form = false");
event.setCancelled(true); event.setCancelled(true);
@ -590,18 +569,12 @@ public class BlockEventListener implements Listener {
return; return;
} }
Class<? extends BooleanFlag<?>> flag; Class<? extends BooleanFlag<?>> flag;
switch (event.getNewState().getType()) { if (SNOW.contains(event.getNewState().getType())) {
case SNOW:
case SNOW_BLOCK:
flag = SnowFormFlag.class; flag = SnowFormFlag.class;
break; } else if (Tag.ICE.isTagged(event.getNewState().getType())) {
case ICE:
case FROSTED_ICE:
case PACKED_ICE:
flag = IceFormFlag.class; flag = IceFormFlag.class;
break; } else {
default: return;
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();
@ -705,50 +678,33 @@ 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 (SNOW.contains(blockType)) {
if (!plot.getFlag(SnowMeltFlag.class)) { if (!plot.getFlag(SnowMeltFlag.class)) {
plot.debug("Snow could not melt because snow-melt = false"); plot.debug("Snow could not melt because snow-melt = false");
event.setCancelled(true); event.setCancelled(true);
} }
break; return;
case FARMLAND: }
if (blockType == Material.FARMLAND) {
if (!plot.getFlag(SoilDryFlag.class)) { if (!plot.getFlag(SoilDryFlag.class)) {
plot.debug("Soil could not dry because soil-dry = false"); plot.debug("Soil could not dry because soil-dry = false");
event.setCancelled(true); event.setCancelled(true);
} }
break; return;
case TUBE_CORAL_BLOCK: }
case BRAIN_CORAL_BLOCK: if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType) || Tag.WALL_CORALS.isTagged(blockType)) {
case BUBBLE_CORAL_BLOCK:
case FIRE_CORAL_BLOCK:
case HORN_CORAL_BLOCK:
case TUBE_CORAL:
case BRAIN_CORAL:
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)) { if (!plot.getFlag(CoralDryFlag.class)) {
plot.debug("Coral could not dry because coral-dry = false"); plot.debug("Coral could not dry because coral-dry = false");
event.setCancelled(true); event.setCancelled(true);
} }
break;
} }
} }
@ -779,7 +735,7 @@ public class BlockEventListener implements Listener {
} }
return; return;
} }
if (toLocation.getY() >= toArea.getMaxBuildHeight() || toLocation.getY() < toArea.getMinBuildHeight()) { if (!toArea.buildRangeContainsY(toLocation.getY())) {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
@ -853,6 +809,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) {
@ -896,15 +857,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;
} }
@ -930,9 +892,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;
} }
@ -946,15 +907,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;
} }
@ -965,7 +927,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;
} }
@ -973,6 +940,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);
} }
} }
} }
@ -1012,6 +984,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);
} }
} }
} }
@ -1103,6 +1079,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(
@ -1210,7 +1190,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()) {
@ -1252,15 +1235,7 @@ public class BlockEventListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
break; break;
} }
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) { if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
continue;
}
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
pp.sendMessage(
TranslatableCaption.of("height.height_limit"),
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
);
event.setCancelled(true); event.setCancelled(true);
break; break;
} }

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -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,30 +137,22 @@ public class BlockEventListener117 implements Listener {
return; return;
} }
for (int i = blocks.size() - 1; i >= 0; i--) { for (int i = blocks.size() - 1; i >= 0; i--) {
location = BukkitUtil.adapt(blocks.get(i).getLocation()); Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
if (!area.contains(location.getX(), location.getZ())) { if (!area.contains(blockLocation.getX(), blockLocation.getZ())) {
blocks.remove(i); blocks.remove(i);
continue; continue;
} }
Plot plot = area.getOwnedPlot(location); Plot plot = area.getOwnedPlot(blockLocation);
if (!Objects.equals(plot, origin)) { if (!Objects.equals(plot, origin)) {
event.getBlocks().remove(i); event.getBlocks().remove(i);
continue;
} }
} if (!area.buildRangeContainsY(location.getY())) {
}
Plot origin = area.getPlot(location);
if (origin == null) {
event.setCancelled(true);
return;
}
for (int i = blocks.size() - 1; i >= 0; i--) {
location = BukkitUtil.adapt(blocks.get(i).getLocation());
Plot plot = area.getOwnedPlot(location);
if (!Objects.equals(plot, origin) && (!plot.isMerged() && !origin.isMerged())) {
event.getBlocks().remove(i); event.getBlocks().remove(i);
} }
} }
} }
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onBlockForm(BlockFormEvent event) { public void onBlockForm(BlockFormEvent event) {
@ -155,23 +170,7 @@ 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:
case EXPOSED_COPPER:
case WEATHERED_COPPER:
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)) { if (!plot.getFlag(CopperOxideFlag.class)) {
plot.debug("Copper could not oxide because copper-oxide = false"); plot.debug("Copper could not oxide because copper-oxide = false");
event.setCancelled(true); event.setCancelled(true);

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -131,16 +124,16 @@ public class EntitySpawnListener implements Listener {
return; return;
} }
Plot plot = location.getOwnedPlotAbs(); Plot plot = location.getOwnedPlotAbs();
if (plot == null) {
EntityType type = entity.getType(); EntityType type = entity.getType();
if (!area.isMobSpawning()) { if (plot == null) {
switch (type) { if (type == EntityType.DROPPED_ITEM) {
case DROPPED_ITEM:
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setCancelled(true); event.setCancelled(true);
}
return; return;
} }
case PLAYER: if (!area.isMobSpawning()) {
if (type == EntityType.PLAYER) {
return; return;
} }
if (type.isAlive()) { if (type.isAlive()) {
@ -155,12 +148,13 @@ 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);
} }
case SHULKER: return;
}
if (type == EntityType.SHULKER) {
if (!entity.hasMetadata("shulkerPlot")) { if (!entity.hasMetadata("shulkerPlot")) {
entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId())); entity.setMetadata("shulkerPlot", new FixedMetadataValue((Plugin) PlotSquared.platform(), plot.getId()));
} }

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -25,6 +18,7 @@
*/ */
package com.plotsquared.bukkit.listener; package com.plotsquared.bukkit.listener;
import com.destroystokyo.paper.event.block.BeaconEffectEvent;
import com.destroystokyo.paper.event.entity.EntityPathfindEvent; import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent; import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent; import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
@ -43,8 +37,11 @@ import com.plotsquared.core.permissions.Permission;
import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.player.PlotPlayer;
import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.Plot;
import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.plot.PlotArea;
import com.plotsquared.core.plot.flag.FlagContainer;
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
import com.plotsquared.core.plot.flag.implementations.DoneFlag; import com.plotsquared.core.plot.flag.implementations.DoneFlag;
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag; import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
import com.plotsquared.core.plot.flag.types.BooleanFlag;
import com.plotsquared.core.plot.world.PlotAreaManager; import com.plotsquared.core.plot.world.PlotAreaManager;
import com.plotsquared.core.util.Permissions; import com.plotsquared.core.util.Permissions;
import net.kyori.adventure.text.minimessage.Template; import net.kyori.adventure.text.minimessage.Template;
@ -236,15 +233,15 @@ public class PaperListener implements Listener {
Plot plot = location.getOwnedPlotAbs(); Plot plot = location.getOwnedPlotAbs();
if (plot == null) { if (plot == null) {
EntityType type = event.getType(); EntityType type = event.getType();
if (!area.isMobSpawning()) { // PreCreatureSpawnEvent **should** not be called for DROPPED_ITEM, just for the sake of consistency
switch (type) { if (type == EntityType.DROPPED_ITEM) {
case DROPPED_ITEM:
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) { if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
event.setShouldAbortSpawn(true);
event.setCancelled(true); event.setCancelled(true);
}
return; return;
} }
case PLAYER: if (!area.isMobSpawning()) {
if (type == EntityType.PLAYER) {
return; return;
} }
if (type.isAlive()) { if (type.isAlive()) {
@ -407,4 +404,50 @@ public class PaperListener implements Listener {
} }
} }
@EventHandler(ignoreCancelled = true)
public void onBeaconEffect(final BeaconEffectEvent event) {
Block block = event.getBlock();
Location beaconLocation = BukkitUtil.adapt(block.getLocation());
Plot beaconPlot = beaconLocation.getPlot();
PlotArea area = beaconLocation.getPlotArea();
if (area == null) {
return;
}
Player player = event.getPlayer();
Location playerLocation = BukkitUtil.adapt(player.getLocation());
PlotPlayer<Player> plotPlayer = BukkitUtil.adapt(player);
Plot playerStandingPlot = playerLocation.getPlot();
if (playerStandingPlot == null) {
FlagContainer container = area.getRoadFlagContainer();
if (!getBooleanFlagValue(container, BeaconEffectsFlag.class, true) ||
(beaconPlot != null && Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW)) {
event.setCancelled(true);
}
return;
}
FlagContainer container = playerStandingPlot.getFlagContainer();
boolean plotBeaconEffects = getBooleanFlagValue(container, BeaconEffectsFlag.class, true);
if (playerStandingPlot.equals(beaconPlot)) {
if (!plotBeaconEffects) {
event.setCancelled(true);
}
return;
}
if (!plotBeaconEffects || Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW) {
event.setCancelled(true);
}
}
private boolean getBooleanFlagValue(@NonNull FlagContainer container,
@NonNull Class<? extends BooleanFlag<?>> flagClass,
boolean defaultValue) {
BooleanFlag<?> flag = container.getFlag(flagClass);
return flag == null ? defaultValue : flag.getValue();
}
} }

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -89,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;
@ -112,6 +106,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.EntityPlaceEvent; import org.bukkit.event.entity.EntityPlaceEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.hanging.HangingPlaceEvent;
@ -148,27 +143,41 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.metadata.MetadataValue; import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList;
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;
@ -188,12 +197,36 @@ public class PlayerEventListener extends PlotListener implements Listener {
public PlayerEventListener( public PlayerEventListener(
final @NonNull PlotAreaManager plotAreaManager, final @NonNull PlotAreaManager plotAreaManager,
final @NonNull EventDispatcher eventDispatcher, final @NonNull EventDispatcher eventDispatcher,
final @NonNull WorldEdit worldEdit final @NonNull WorldEdit worldEdit,
final @NonNull PlotListener plotListener
) { ) {
super(eventDispatcher);
this.eventDispatcher = eventDispatcher; this.eventDispatcher = eventDispatcher;
this.worldEdit = worldEdit; this.worldEdit = worldEdit;
this.plotAreaManager = plotAreaManager; this.plotAreaManager = plotAreaManager;
this.plotListener = plotListener;
}
@EventHandler(ignoreCancelled = true)
public void onEffect(@NonNull EntityPotionEffectEvent event) {
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
event.getCause() != EntityPotionEffectEvent.Cause.BEACON ||
!(event.getEntity() instanceof Player player)) {
return;
}
UUID uuid = player.getUniqueId();
PotionEffect effect = event.getNewEffect();
if (effect == null) {
PotionEffect oldEffect = event.getOldEffect();
if (oldEffect != null) {
String name = oldEffect.getType().getName();
plotListener.addEffect(uuid, name, -1);
}
} else {
long expiresAt = System.currentTimeMillis() + effect.getDuration() * 50L; //Convert ticks to milliseconds
String name = effect.getType().getName();
plotListener.addEffect(uuid, name, expiresAt);
}
} }
@EventHandler @EventHandler
@ -346,7 +379,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
@ -398,7 +431,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 =
@ -532,7 +565,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))
@ -550,7 +583,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())
@ -622,7 +655,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))
@ -640,7 +673,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())
@ -787,7 +820,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)) {
@ -801,7 +834,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);
} }
} }
} }
@ -837,10 +870,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();
@ -880,33 +913,25 @@ 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:
if (newMeta != null) {
break;
}
default:
return; 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: return;
if (itemType == Material.LEGACY_BANNER) {
break;
} }
case LEGACY_SKULL: } else if (stateType == Material.LEGACY_SKULL) {
if (itemType == Material.LEGACY_SKULL_ITEM) { if (itemType != Material.LEGACY_SKULL_ITEM) {
break; return;
} }
default: } else {
return; return;
} }
} }
@ -946,7 +971,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()));
@ -1133,14 +1158,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;
case FIREWORK_ROCKET, FIREWORK_STAR -> eventType = PlayerBlockEventType.SPAWN_MOB;
case BOOK, KNOWLEDGE_BOOK, WRITABLE_BOOK, WRITTEN_BOOK -> eventType = PlayerBlockEventType.READ;
case ARMOR_STAND -> {
location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation()); location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation());
eventType = PlayerBlockEventType.PLACE_MISC; eventType = PlayerBlockEventType.PLACE_MISC;
} }
if (Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
eventType = PlayerBlockEventType.PLACE_VEHICLE;
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;
} }
@ -1275,7 +1307,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
TaskManager.removeFromTeleportQueue(event.getPlayer().getName()); TaskManager.removeFromTeleportQueue(event.getPlayer().getName());
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer()); BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
pp.unregister(); pp.unregister();
this.logout(pp.getUUID()); plotListener.logout(pp.getUUID());
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@ -1712,6 +1744,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;
@ -1733,6 +1766,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,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -96,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();
@ -156,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)) {

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -92,9 +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 final boolean forceSync @Assisted("forceSync") final boolean forceSync
) { ) {
this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks); this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks);
this.availableChunks = new LinkedBlockingQueue<>(); this.availableChunks = new LinkedBlockingQueue<>();

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -235,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();
} }

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -26,12 +19,12 @@
package com.plotsquared.bukkit.queue; package com.plotsquared.bukkit.queue;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.intellectualsites.annotations.DoNotUse;
import com.plotsquared.bukkit.util.BukkitBlockUtil; import com.plotsquared.bukkit.util.BukkitBlockUtil;
import com.plotsquared.bukkit.util.BukkitUtil; import com.plotsquared.bukkit.util.BukkitUtil;
import com.plotsquared.core.location.ChunkWrapper; import com.plotsquared.core.location.ChunkWrapper;
import com.plotsquared.core.location.Location; import com.plotsquared.core.location.Location;
import com.plotsquared.core.queue.ScopedQueueCoordinator; import com.plotsquared.core.queue.ScopedQueueCoordinator;
import com.plotsquared.core.util.AnnotationHelper;
import com.plotsquared.core.util.ChunkUtil; import com.plotsquared.core.util.ChunkUtil;
import com.plotsquared.core.util.PatternUtil; import com.plotsquared.core.util.PatternUtil;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
@ -51,7 +44,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Arrays; import java.util.Arrays;
@AnnotationHelper.ApiDescription(info = "Internal use only. Subject to changes at any time.") @DoNotUse
public class GenChunk extends ScopedQueueCoordinator { public class GenChunk extends ScopedQueueCoordinator {
public final Biome[] biomes; public final Biome[] biomes;
@ -110,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;

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,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -35,11 +28,13 @@ 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;
@ -57,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;
} }
@ -230,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,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -65,6 +58,7 @@ import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign; import org.bukkit.block.Sign;
import org.bukkit.block.data.Directional; import org.bukkit.block.data.Directional;
import org.bukkit.block.data.type.WallSign; import org.bukkit.block.data.type.WallSign;
import org.bukkit.entity.Allay;
import org.bukkit.entity.Ambient; import org.bukkit.entity.Ambient;
import org.bukkit.entity.Animals; import org.bukkit.entity.Animals;
import org.bukkit.entity.AreaEffectCloud; import org.bukkit.entity.AreaEffectCloud;
@ -444,6 +438,9 @@ public class BukkitUtil extends WorldUtil {
allowedInterfaces.add(Animals.class); allowedInterfaces.add(Animals.class);
allowedInterfaces.add(WaterMob.class); allowedInterfaces.add(WaterMob.class);
allowedInterfaces.add(Ambient.class); allowedInterfaces.add(Ambient.class);
if (PlotSquared.platform().serverVersion()[1] >= 19) {
allowedInterfaces.add(Allay.class);
}
} }
case "tameable" -> allowedInterfaces.add(Tameable.class); case "tameable" -> allowedInterfaces.add(Tameable.class);
case "vehicle" -> allowedInterfaces.add(Vehicle.class); case "vehicle" -> allowedInterfaces.add(Vehicle.class);

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -43,6 +43,7 @@ dependencies {
api(libs.cloudServices) api(libs.cloudServices)
api(libs.arkitektonika) api(libs.arkitektonika)
api("com.intellectualsites.paster:Paster") api("com.intellectualsites.paster:Paster")
api("com.intellectualsites.informative-annotations:informative-annotations")
} }
tasks.processResources { tasks.processResources {
@ -59,8 +60,10 @@ tasks {
withType<Javadoc> { withType<Javadoc> {
val opt = options as StandardJavadocDocletOptions 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://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.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://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
opt.links("https://checkerframework.org/api/") opt.links("https://checkerframework.org/api/")
opt.links("https://javadoc.io/doc/com.intellectualsites.informative-annotations/informative-annotations/latest/")
opt.encoding("UTF-8")
} }
} }

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -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
* *
@ -315,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();
/** /**
@ -359,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,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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
@ -204,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
@ -274,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(
@ -1581,7 +1577,7 @@ public class PlotSquared {
} }
/** /**
* Get if the {@link PlatformReadyEvent} has been sent by WE. There is no way to query this within WE itself. * Get if the {@link PlatformReadyEvent} has been sent by WorldEdit. There is no way to query this within WorldEdit itself.
*/ */
public boolean isWeInitialised() { public boolean isWeInitialised() {
return weInitialised; return weInitialised;

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

View File

@ -1,14 +1,7 @@
/* /*
* _____ _ _ _____ _ * 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

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