mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-03 06:04:43 +02:00
Compare commits
152 Commits
6.2.2
...
renovate/a
Author | SHA1 | Date | |
---|---|---|---|
d3a9872dd5 | |||
0a32268784 | |||
ae3b8c06f6 | |||
713c4ad0d2 | |||
48386c0828 | |||
625b3921e1 | |||
48aa37d173 | |||
2c2314e95c | |||
5eb2fc3ad0 | |||
82cd9a092c | |||
62754362c2 | |||
2e9dfd6f6f | |||
fc9fe1462f | |||
41f546ca6b | |||
d037da33cb | |||
dc2d08c67e | |||
96dfc27411 | |||
171d2e5e99 | |||
4433892431 | |||
98a07dad1b | |||
0ffa22b7a6 | |||
60a0129fe9 | |||
d5f8a0842b | |||
f7d55ce105 | |||
85911646f3 | |||
8b75dece69 | |||
7d6e515ba8 | |||
13d7357c85 | |||
16e26b910c | |||
faadebd30e | |||
2aeacb3dcf | |||
9db7791835 | |||
f49ddb819d | |||
d71c62771e | |||
a6aaa9538f | |||
0974fb2834 | |||
8982b33b6c | |||
a7b3b3b7df | |||
888bb20e78 | |||
b11bb6fa22 | |||
e5764b958d | |||
bfe3141ff1 | |||
73c82deeb0 | |||
38682ecff6 | |||
6a54dc7eff | |||
8454c29c91 | |||
b2c9311a47 | |||
c4aa497a2b | |||
c13f544390 | |||
c28177d6af | |||
8a80f252cf | |||
93571c72d1 | |||
6fd7379221 | |||
dc5c80d812 | |||
96e9a61e7c | |||
b9bd9b81e6 | |||
ec77812879 | |||
efc2083798 | |||
3a6f845c01 | |||
7efd42ae45 | |||
f43f4cbf5d | |||
104cc4b7a4 | |||
218be43143 | |||
308dba5601 | |||
5f233bb5d1 | |||
5e188d114f | |||
660e05d27f | |||
4c0ad148bf | |||
5c7bfb988c | |||
b46f486680 | |||
05797d0c78 | |||
36ef2cf9ba | |||
26ec31a012 | |||
fd4a542062 | |||
dc13f2565f | |||
9f632af0ae | |||
d698c6a1e5 | |||
40e1bd9897 | |||
75f31c5bf6 | |||
954c813cef | |||
05e055e9cf | |||
2ea21c150f | |||
c2fd4edad5 | |||
78b8696778 | |||
e653961385 | |||
b21d12fd52 | |||
7557df96c7 | |||
61797c3aff | |||
78125ff1e2 | |||
d7c8715b25 | |||
34f005c244 | |||
6fbd1376ca | |||
951767dc64 | |||
16928b05f1 | |||
fff14b05cb | |||
e619c867e9 | |||
543284e016 | |||
0d78ba5f35 | |||
9ba2b62fc2 | |||
f10ee27fdd | |||
3278ce1fe9 | |||
fefb0334bd | |||
d06a827e31 | |||
10bb520f3a | |||
126aa53b61 | |||
ac71046feb | |||
7c290e6bd0 | |||
4d297cc829 | |||
5ab410a5c5 | |||
1f28bac955 | |||
92c54de5e9 | |||
ff5d79699d | |||
a0594c19ee | |||
da41c136fe | |||
6a5859ee0f | |||
59e0b4b67a | |||
5fc153d896 | |||
a003836dbc | |||
42bf413528 | |||
827f46566c | |||
6f4d2f6d5a | |||
6073b96317 | |||
74a490f9f0 | |||
3a752db698 | |||
7cdde5a822 | |||
8b6e7b2f2b | |||
06f0b42a97 | |||
9a85080bf6 | |||
d14d2caa2d | |||
bcfe7c58dd | |||
289f0f3bfd | |||
6fc4005c72 | |||
8f7c2e4c02 | |||
b43d08f4aa | |||
2c55c6a92e | |||
31f48cc7d1 | |||
4b77f1ab28 | |||
7cc38b5fa8 | |||
0c76d08b10 | |||
9c474570c8 | |||
7e1d56c849 | |||
07d0f124b4 | |||
8d6c621763 | |||
cef7098014 | |||
e1efa7266e | |||
f363941719 | |||
25095f4546 | |||
fd0c2050d8 | |||
07fdc94dd8 | |||
b501a81e21 | |||
eb334b3aac | |||
a77a51b6f2 |
3
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
3
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -7,7 +7,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem.
|
Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem.
|
||||||
Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki).
|
Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
|
||||||
Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form!
|
Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form!
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
@ -27,6 +27,7 @@ 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.18.2'
|
||||||
- '1.18.1'
|
- '1.18.1'
|
||||||
- '1.18'
|
- '1.18'
|
||||||
- '1.17.1'
|
- '1.17.1'
|
||||||
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -4,5 +4,5 @@ contact_links:
|
|||||||
url: https://discord.gg/intellectualsites
|
url: https://discord.gg/intellectualsites
|
||||||
about: Our support Discord, please ask questions and seek support here.
|
about: Our support Discord, please ask questions and seek support here.
|
||||||
- name: PlotSquared Wiki
|
- name: PlotSquared Wiki
|
||||||
url: https://github.com/IntellectualSites/PlotSquared-Documentation/wiki
|
url: https://intellectualsites.github.io/plotsquared-documentation/
|
||||||
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.
|
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.
|
||||||
|
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -7,7 +7,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
|
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
|
||||||
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://github.com/IntellectualSites/PlotSquared-Documentation/wiki).
|
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
|
7
.github/workflows/build.yml
vendored
7
.github/workflows/build.yml
vendored
@ -4,14 +4,15 @@ on: [ pull_request, push ]
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v2.4.0
|
uses: actions/checkout@v3
|
||||||
- name: Validate Gradle Wrapper"
|
- name: Validate Gradle Wrapper"
|
||||||
uses: gradle/wrapper-validation-action@v1.0.4
|
uses: gradle/wrapper-validation-action@v1
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v2.5.0
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
37
.github/workflows/codeql.yml
vendored
Normal file
37
.github/workflows/codeql.yml
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ v6 ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ v6 ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'java' ]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v2
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v2
|
7
.github/workflows/release-drafter.yml
vendored
7
.github/workflows/release-drafter.yml
vendored
@ -4,11 +4,16 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- v6
|
- v6
|
||||||
|
pull_request:
|
||||||
|
types: [ opened, reopened, synchronize ]
|
||||||
|
pull_request_target:
|
||||||
|
types: [ opened, reopened, synchronize ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update_release_draft:
|
update_release_draft:
|
||||||
|
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: release-drafter/release-drafter@v5.15.0
|
- uses: release-drafter/release-drafter@v5
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
10
.gitignore
vendored
10
.gitignore
vendored
@ -41,7 +41,8 @@ hs_err_pid*
|
|||||||
*.iml
|
*.iml
|
||||||
|
|
||||||
## Directory-based project format:
|
## Directory-based project format:
|
||||||
.idea/
|
/.idea/*
|
||||||
|
!/.idea/icon.svg
|
||||||
# if you remove the above rule, at least ignore the following:
|
# if you remove the above rule, at least ignore the following:
|
||||||
|
|
||||||
# User-specific stuff:
|
# User-specific stuff:
|
||||||
@ -74,9 +75,6 @@ hs_err_pid*
|
|||||||
# IntelliJ
|
# IntelliJ
|
||||||
/out/
|
/out/
|
||||||
|
|
||||||
# mpeltonen/sbt-idea plugin
|
|
||||||
.idea_modules/
|
|
||||||
|
|
||||||
# JIRA plugin
|
# JIRA plugin
|
||||||
atlassian-ide-plugin.xml
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
@ -133,5 +131,9 @@ local.properties
|
|||||||
checkstyle.xml
|
checkstyle.xml
|
||||||
classes/
|
classes/
|
||||||
*.bat
|
*.bat
|
||||||
|
|
||||||
|
# Other
|
||||||
docs/
|
docs/
|
||||||
build/
|
build/
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
50
.idea/icon.svg
generated
Normal file
50
.idea/icon.svg
generated
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="svg2" xml:space="preserve" width="4000" height="3333.3333" viewBox="0 0 4000 3333.3333" sodipodi:docname="PlotSquared.ai">
|
||||||
|
<metadata id="metadata8">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs id="defs6">
|
||||||
|
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
|
||||||
|
<path d="M 0,2500 H 3000 V 0 H 0 Z" id="path16" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview4" />
|
||||||
|
<g id="g10" inkscape:groupmode="layer" inkscape:label="PlotSquared" transform="matrix(1.3333333,0,0,-1.3333333,0,3333.3333)">
|
||||||
|
<g id="g12">
|
||||||
|
<g id="g14" clip-path="url(#clipPath18)">
|
||||||
|
<g id="g20" transform="translate(1486.1511,2242.6453)">
|
||||||
|
<path d="m 0,0 c 16.533,10.846 33.211,21.453 50.104,31.699 78.972,-48.281 153.985,-102.704 227.269,-159.144 148.61,-115.422 287.884,-243.01 414.393,-382.333 111.39,-122.861 212.751,-255.152 298.898,-396.971 52.744,-87.322 100.544,-177.884 139.514,-272.214 -11.638,-3.551 -23.108,-7.655 -34.362,-12.286 l -0.24,0.288 c -11.135,12.982 -24.141,24.212 -34.915,37.506 -22.557,23.013 -45.425,45.737 -68.03,68.678 -19.725,20.253 -40.601,39.45 -58.958,60.974 -36.355,36.451 -72.517,73.093 -108.944,109.471 -22.628,26.013 -48.064,49.385 -71.965,74.197 -19.029,19.485 -38.706,38.346 -57.519,57.999 -12.166,14.998 -26.684,27.716 -39.93,41.658 -27.668,27.524 -54.903,55.479 -82.571,82.979 -23.924,27.956 -51.664,52.264 -76.692,79.164 -4.68,4.487 -8.855,10.774 -15.886,11.326 -22.34,34.027 -58.311,57.327 -97.377,67.502 -104.312,99.153 -215.487,191.202 -332.661,274.782 -117.942,-83.94 -229.476,-176.781 -334.484,-276.39 -26.684,-0.024 -53.368,0.024 -80.076,-0.024 0.024,-26.564 0.048,-53.104 0,-79.668 -72.229,-73.021 -139.491,-150.937 -202.385,-232.092 -63.758,-82.619 -121.973,-169.51 -173.541,-260.264 131.932,-69.061 257.864,-149.521 375.926,-240.275 0.096,-26.444 -0.12,-52.888 0.096,-79.332 l 0.744,-0.984 c 20.109,-24.14 43.409,-45.233 65.126,-67.861 15.118,-15.382 30.571,-30.404 45.569,-45.881 17.565,-20.733 37.698,-39.042 56.607,-58.503 19.917,-20.781 41.25,-40.218 59.967,-62.151 29.156,-29.299 58.167,-58.815 87.515,-87.922 29.155,-33.043 61.502,-63.111 92.169,-94.738 13.726,-12.67 25.124,-27.571 38.634,-40.457 25.029,-25.365 50.129,-50.657 75.325,-75.853 -37.914,-51.208 -73.741,-103.952 -107.192,-158.183 -167.83,273.317 -397.235,507.305 -662.37,687.158 -81.875,55.335 -167.23,105.584 -255.681,149.641 -52.815,26.276 -106.831,50.248 -162.239,70.381 99.393,233.628 242.795,446.715 410.289,636.79 93.562,106.088 194.634,205.433 301.466,298.13 C -217.335,-155.808 -111.439,-73.789 0,0" style="fill:#062f4c;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path22" />
|
||||||
|
</g>
|
||||||
|
<g id="g24" transform="translate(1201.7948,1741.5303)">
|
||||||
|
<path d="M 0,0 C 105.008,99.609 216.543,192.45 334.485,276.39 451.659,192.81 562.833,100.76 667.146,1.608 c -34.987,8.83 -71.51,9.718 -107.264,6.431 -41.202,-4.296 -82.907,-19.077 -112.543,-48.953 -33.019,-32.155 -49.456,-77.604 -55.311,-122.501 -28.124,27.908 -56.104,55.983 -84.035,84.083 -2.976,2.976 -6.839,4.823 -10.391,6.911 -19.029,26.348 -45.953,46.673 -76.62,57.495 C 187.555,-2.472 151.513,-0.12 116.166,0 Z" style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path26" />
|
||||||
|
</g>
|
||||||
|
<g id="g28" transform="translate(919.3342,1429.7462)">
|
||||||
|
<path d="m 0,0 c 62.894,81.156 130.156,159.072 202.385,232.092 0.048,-244.21 0.024,-488.421 0,-732.631 C 84.323,-409.785 -41.61,-329.325 -173.541,-260.264 -121.973,-169.51 -63.758,-82.619 0,0" style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path30" />
|
||||||
|
</g>
|
||||||
|
<g id="g32" transform="translate(1649.134,1700.6166)">
|
||||||
|
<path d="m 0,0 c 29.635,29.875 71.341,44.657 112.543,48.952 35.754,3.288 72.277,2.4 107.263,-6.431 39.066,-10.174 75.037,-33.474 97.377,-67.501 11.879,-17.661 20.181,-37.411 26.42,-57.687 10.871,-38.802 11.95,-79.356 11.446,-119.358 -44.345,-0.072 -88.69,0.048 -133.035,-0.072 -1.032,30.907 3.263,63.686 -10.175,92.626 -9.526,20.325 -32.107,31.243 -53.751,32.131 -21.453,1.44 -45.065,-4.32 -59.175,-21.597 -12.79,-15.861 -15.382,-37.002 -16.558,-56.655 -1.295,-29.132 3.696,-59.031 17.518,-84.923 16.821,-30.619 39.378,-57.783 64.526,-81.9 31.387,-32.634 67.501,-60.374 97.857,-94.041 27.332,-28.988 51.256,-61.479 68.005,-97.785 20.541,-41.13 26.972,-87.827 25.82,-133.372 -0.912,-32.107 -5.231,-64.406 -16.149,-94.737 -11.59,-31.699 -31.123,-61.047 -58.335,-81.371 -25.124,-19.125 -55.696,-29.852 -86.651,-34.771 -49.552,-6.743 -101.888,-4.847 -148.465,14.854 -35.227,14.829 -64.238,42.689 -81.708,76.548 -20.996,40.242 -27.115,86.339 -27.259,131.212 0.048,17.829 0,35.658 0.048,53.463 44.345,0.048 88.69,-0.023 133.059,0.048 1.728,-35.538 -4.055,-72.06 5.663,-106.807 5.783,-22.173 26.204,-37.794 48.185,-41.754 20.733,-3.431 43.577,-2.015 61.622,9.791 15.502,9.43 23.949,26.78 26.78,44.225 5.903,35.922 1.872,74.293 -15.381,106.688 -16.918,30.595 -39.474,57.711 -64.55,81.899 -33.187,34.099 -71.173,63.254 -102.585,99.081 -26.756,28.867 -49.408,61.646 -65.486,97.641 -24.572,52.48 -26.731,112.422 -20.18,169.102 C -49.456,-77.604 -33.019,-32.155 0,0" style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path34" />
|
||||||
|
</g>
|
||||||
|
<g id="g36" transform="translate(1262.7214,1613.126)">
|
||||||
|
<path d="m 0,0 v -301.13 c 23.204,0.024 46.409,-0.048 69.613,0.024 18.525,0.288 38.202,6.575 50.153,21.429 12.43,17.277 13.917,39.522 14.613,60.111 0.024,43.985 -0.048,87.994 0.024,131.979 -0.48,23.637 -0.983,50.369 -17.277,69.23 C 104.864,-5.711 86.867,-0.24 69.589,0 46.385,0.048 23.204,0.024 0,0 m -141.002,128.38 c 26.708,0.048 53.392,0 80.075,0.024 H 55.24 c 35.346,-0.12 71.389,-2.471 104.815,-14.925 30.668,-10.823 57.592,-31.148 76.621,-57.496 26.852,-39.09 36.69,-87.202 38.058,-133.947 0.024,-48.833 0.096,-97.689 -0.024,-146.521 -1.728,-47.993 -11.974,-97.953 -41.514,-136.971 -22.748,-30.644 -57.495,-50.801 -94.281,-59.583 -45.377,-11.878 -92.578,-6.791 -138.891,-7.847 -0.072,-111.799 0,-223.574 -0.024,-335.373 -13.942,0 -27.86,0.024 -41.778,-0.024 -32.802,0.072 -65.605,0 -98.384,0.048 l -0.744,0.984 c -0.216,26.444 0,52.888 -0.096,79.332 0.024,244.211 0.048,488.421 0,732.632 0.048,26.563 0.024,53.103 0,79.667" style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path38" />
|
||||||
|
</g>
|
||||||
|
<g id="g40" transform="translate(1966.3174,1675.6364)">
|
||||||
|
<path d="m 0,0 c 7.031,-0.552 11.206,-6.839 15.885,-11.326 25.029,-26.9 52.768,-51.208 76.693,-79.164 27.667,-27.5 54.903,-55.456 82.571,-82.979 13.246,-13.942 27.764,-26.66 39.93,-41.658 18.813,-19.653 38.49,-38.514 57.519,-57.999 23.9,-24.812 49.337,-48.185 71.965,-74.197 36.427,-36.378 72.589,-73.02 108.943,-109.471 18.358,-21.524 39.234,-40.722 58.959,-60.974 22.605,-22.941 45.473,-45.665 68.03,-68.678 10.774,-13.294 23.78,-24.524 34.914,-37.506 -103.904,-41.97 -203.488,-94.114 -298.922,-152.761 -246.994,-152.28 -466.224,-350.298 -639.333,-583.398 -25.197,25.196 -50.297,50.488 -75.325,75.852 -13.51,12.886 -24.908,27.788 -38.634,40.458 -30.667,31.627 -63.014,61.695 -92.17,94.738 -29.347,29.107 -58.359,58.623 -87.514,87.922 -18.717,21.933 -40.05,41.37 -59.967,62.151 -18.909,19.461 -39.042,37.77 -56.607,58.503 -14.998,15.477 -30.452,30.499 -45.569,45.88 -21.717,22.629 -45.017,43.722 -65.126,67.862 32.779,-0.048 65.582,0.024 98.384,-0.048 114.391,-98.097 220.407,-205.984 315.384,-322.99 92.914,114.318 196.242,220.022 307.753,316.271 30.955,4.919 61.526,15.646 86.65,34.771 27.212,20.325 46.745,49.672 58.335,81.371 107.312,77.988 219.327,149.929 337.509,210.376 -35.299,64.67 -75.829,126.437 -118.254,186.643 C 176.253,-228.037 104.24,-140.115 26.42,-57.687 20.181,-37.41 11.878,-17.661 0,0" style="fill:#042338;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path42" />
|
||||||
|
</g>
|
||||||
|
<g id="g44" transform="translate(1499.3971,1669.1094)">
|
||||||
|
<path d="m 0,0 c 3.551,-2.088 7.415,-3.935 10.39,-6.911 27.932,-28.1 55.912,-56.175 84.036,-84.083 -6.551,-56.679 -4.392,-116.622 20.18,-169.102 16.078,-35.994 38.73,-68.774 65.486,-97.641 31.412,-35.826 69.398,-64.982 102.585,-99.081 25.076,-24.188 47.632,-51.304 64.55,-81.899 17.253,-32.395 21.284,-70.765 15.381,-106.688 -2.831,-17.445 -11.278,-34.794 -26.78,-44.225 -18.045,-11.806 -40.889,-13.222 -61.622,-9.79 -21.981,3.959 -42.402,19.58 -48.185,41.753 -9.718,34.747 -3.935,71.269 -5.663,106.808 -44.369,-0.072 -88.714,0 -133.059,-0.048 -0.048,-17.806 0,-35.635 -0.048,-53.464 0.144,-44.873 6.263,-90.97 27.259,-131.212 17.47,-33.859 46.481,-61.718 81.708,-76.548 46.577,-19.701 98.913,-21.597 148.465,-14.854 -111.511,-96.249 -214.839,-201.953 -307.753,-316.271 -94.977,117.006 -200.993,224.893 -315.383,322.99 13.918,0.048 27.836,0.024 41.777,0.024 0.024,111.799 -0.048,223.574 0.024,335.372 46.313,1.056 93.514,-4.031 138.891,7.847 36.786,8.783 71.533,28.94 94.282,59.583 29.539,39.018 39.785,88.978 41.513,136.971 0.12,48.833 0.048,97.689 0.024,146.522 C 36.69,-87.203 26.852,-39.09 0,0" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path46" />
|
||||||
|
</g>
|
||||||
|
<g id="g48" transform="translate(1748.0469,1601.6797)">
|
||||||
|
<path d="M 0,0 C 14.11,17.277 37.722,23.036 59.175,21.597 80.82,20.709 103.4,9.791 112.927,-10.534 c 13.438,-28.94 9.142,-61.719 10.174,-92.626 44.345,0.12 88.691,0 133.036,0.072 0.504,40.002 -0.576,80.556 -11.447,119.358 77.82,-82.428 149.833,-170.35 215.583,-262.664 42.426,-60.207 82.956,-121.973 118.254,-186.643 -118.182,-60.447 -230.196,-132.388 -337.508,-210.376 10.918,30.331 15.238,62.63 16.149,94.737 1.152,45.545 -5.279,92.242 -25.82,133.372 -16.749,36.306 -40.673,68.797 -68.005,97.785 -30.355,33.667 -66.47,61.406 -97.857,94.041 -25.148,24.117 -47.705,51.28 -64.526,81.9 -13.822,25.892 -18.813,55.791 -17.517,84.923 C -15.382,-37.002 -12.79,-15.862 0,0" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path50" />
|
||||||
|
</g>
|
||||||
|
<g id="g52" transform="translate(1262.7214,1613.126)">
|
||||||
|
<path d="m 0,0 c 23.204,0.024 46.385,0.048 69.589,0 17.278,-0.24 35.275,-5.711 47.537,-18.357 16.294,-18.861 16.797,-45.593 17.277,-69.23 -0.072,-43.985 0,-87.994 -0.024,-131.979 -0.696,-20.589 -2.183,-42.834 -14.613,-60.111 -11.951,-14.854 -31.628,-21.141 -50.153,-21.429 -23.204,-0.072 -46.409,0 -69.613,-0.024 z" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path54" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
13
.whitesource
13
.whitesource
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"scanSettings": {
|
|
||||||
"baseBranches": ["v6"]
|
|
||||||
},
|
|
||||||
"checkRunSettings": {
|
|
||||||
"vulnerableCheckRunConclusionLevel": "success",
|
|
||||||
"displayMode": "diff"
|
|
||||||
},
|
|
||||||
"issueSettings": {
|
|
||||||
"minSeverityLevel": "LOW"
|
|
||||||
},
|
|
||||||
"enableRenovate": "true"
|
|
||||||
}
|
|
@ -8,7 +8,7 @@ repositories {
|
|||||||
|
|
||||||
maven {
|
maven {
|
||||||
name = "PaperMC"
|
name = "PaperMC"
|
||||||
url = uri("https://papermc.io/repo/repository/maven-public/")
|
url = uri("https://repo.papermc.io/repository/maven-public/")
|
||||||
}
|
}
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
@ -40,7 +40,6 @@ dependencies {
|
|||||||
compileOnly(libs.placeholderapi)
|
compileOnly(libs.placeholderapi)
|
||||||
compileOnly(libs.luckperms)
|
compileOnly(libs.luckperms)
|
||||||
compileOnly(libs.essentialsx)
|
compileOnly(libs.essentialsx)
|
||||||
compileOnly(libs.hyperverse) { isTransitive = false }
|
|
||||||
compileOnly(libs.mvdwapi) { isTransitive = false }
|
compileOnly(libs.mvdwapi) { isTransitive = false }
|
||||||
|
|
||||||
// Other libraries
|
// Other libraries
|
||||||
@ -75,7 +74,8 @@ tasks.named<ShadowJar>("shadowJar") {
|
|||||||
relocate("org.khelekore.prtree", "com.plotsquared.prtree")
|
relocate("org.khelekore.prtree", "com.plotsquared.prtree")
|
||||||
relocate("com.google.inject", "com.plotsquared.google")
|
relocate("com.google.inject", "com.plotsquared.google")
|
||||||
relocate("org.aopalliance", "com.plotsquared.core.aopalliance")
|
relocate("org.aopalliance", "com.plotsquared.core.aopalliance")
|
||||||
relocate("com.intellectualsites.services", "com.plotsquared.core.services")
|
relocate("cloud.commandframework.services", "com.plotsquared.core.services")
|
||||||
|
relocate("io.leangen.geantyref", "com.plotsquared.core.geantyref")
|
||||||
relocate("com.intellectualsites.arkitektonika", "com.plotsquared.core.arkitektonika")
|
relocate("com.intellectualsites.arkitektonika", "com.plotsquared.core.arkitektonika")
|
||||||
relocate("com.intellectualsites.http", "com.plotsquared.core.http")
|
relocate("com.intellectualsites.http", "com.plotsquared.core.http")
|
||||||
relocate("com.intellectualsites.paster", "com.plotsquared.core.paster")
|
relocate("com.intellectualsites.paster", "com.plotsquared.core.paster")
|
||||||
@ -83,7 +83,10 @@ tasks.named<ShadowJar>("shadowJar") {
|
|||||||
relocate("org.jetbrains", "com.plotsquared.core.annotations")
|
relocate("org.jetbrains", "com.plotsquared.core.annotations")
|
||||||
relocate("org.intellij.lang", "com.plotsquared.core.intellij.annotations")
|
relocate("org.intellij.lang", "com.plotsquared.core.intellij.annotations")
|
||||||
relocate("javax.annotation", "com.plotsquared.core.annotation")
|
relocate("javax.annotation", "com.plotsquared.core.annotation")
|
||||||
|
relocate("com.github.spotbugs", "com.plotsquared.core.spotbugs")
|
||||||
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
|
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
|
||||||
|
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
|
||||||
|
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
|
||||||
|
|
||||||
// Get rid of all the libs which are 100% unused.
|
// Get rid of all the libs which are 100% unused.
|
||||||
minimize()
|
minimize()
|
||||||
@ -94,11 +97,11 @@ tasks.named<ShadowJar>("shadowJar") {
|
|||||||
tasks {
|
tasks {
|
||||||
withType<Javadoc> {
|
withType<Javadoc> {
|
||||||
val opt = options as StandardJavadocDocletOptions
|
val opt = options as StandardJavadocDocletOptions
|
||||||
opt.links("https://papermc.io/javadocs/paper/1.17/")
|
opt.links("https://jd.papermc.io/paper/1.18/")
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/7.2.7/")
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/7.2.7/")
|
opt.links("https://javadoc.io/doc/com.plotsquared/PlotSquared-Core/latest/")
|
||||||
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
|
opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.get().versionConstraint.toString())
|
||||||
opt.links("https://google.github.io/guice/api-docs/5.0.1/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -147,6 +147,8 @@ import java.io.File;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -216,6 +218,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
private PlatformWorldManager<World> worldManager;
|
private PlatformWorldManager<World> worldManager;
|
||||||
private Locale serverLocale;
|
private Locale serverLocale;
|
||||||
|
|
||||||
|
@SuppressWarnings("StringSplitter")
|
||||||
@Override
|
@Override
|
||||||
public int @NonNull [] serverVersion() {
|
public int @NonNull [] serverVersion() {
|
||||||
if (this.version == null) {
|
if (this.version == null) {
|
||||||
@ -235,6 +238,16 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
return this.version;
|
return this.version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int versionMinHeight() {
|
||||||
|
return serverVersion()[1] >= 18 ? -64 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int versionMaxHeight() {
|
||||||
|
return serverVersion()[1] >= 18 ? 319 : 255;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull String serverImplementation() {
|
public @NonNull String serverImplementation() {
|
||||||
return Bukkit.getVersion();
|
return Bukkit.getVersion();
|
||||||
@ -266,7 +279,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
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 FAWE to enable hook, please upgrade: https://ci.athion" +
|
||||||
".net/job/FastAsyncWorldEdit-1.17/");
|
".net/job/FastAsyncWorldEdit/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -321,8 +334,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
// Comments
|
// Comments
|
||||||
CommentManager.registerDefaultInboxes();
|
CommentManager.registerDefaultInboxes();
|
||||||
|
|
||||||
plotSquared.startExpiryTasks();
|
|
||||||
|
|
||||||
// Do stuff that was previously done in PlotSquared
|
// Do stuff that was previously done in PlotSquared
|
||||||
// Kill entities
|
// Kill entities
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_MOBS || Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
if (Settings.Enabled_Components.KILL_ROAD_MOBS || Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
||||||
@ -419,6 +430,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}, TaskTime.ticks(1L));
|
}, TaskTime.ticks(1L));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 P2
|
||||||
TaskManager.runTaskLater(() -> PlotSquared.platform().setupUtils().updateGenerators(true), TaskTime.ticks(1L));
|
TaskManager.runTaskLater(() -> PlotSquared.platform().setupUtils().updateGenerators(true), TaskTime.ticks(1L));
|
||||||
|
|
||||||
@ -500,8 +513,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
this.backgroundPipeline.registerService(essentialsUUIDService);
|
this.backgroundPipeline.registerService(essentialsUUIDService);
|
||||||
}
|
}
|
||||||
|
|
||||||
final SquirrelIdUUIDService impromptuMojangService = new SquirrelIdUUIDService(Settings.UUID.IMPROMPTU_LIMIT);
|
if (Settings.UUID.IMPROMPTU_SERVICE_MOJANG_API) {
|
||||||
this.impromptuPipeline.registerService(impromptuMojangService);
|
final SquirrelIdUUIDService impromptuMojangService = new SquirrelIdUUIDService(Settings.UUID.IMPROMPTU_LIMIT);
|
||||||
|
this.impromptuPipeline.registerService(impromptuMojangService);
|
||||||
|
}
|
||||||
final SquirrelIdUUIDService backgroundMojangService = new SquirrelIdUUIDService(Settings.UUID.BACKGROUND_LIMIT);
|
final SquirrelIdUUIDService backgroundMojangService = new SquirrelIdUUIDService(Settings.UUID.BACKGROUND_LIMIT);
|
||||||
this.backgroundPipeline.registerService(backgroundMojangService);
|
this.backgroundPipeline.registerService(backgroundMojangService);
|
||||||
} else {
|
} else {
|
||||||
@ -968,7 +983,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}
|
}
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
entity.remove();
|
entity.remove();
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -980,7 +994,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}
|
}
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
entity.remove();
|
entity.remove();
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1141,8 +1154,10 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
@Override
|
@Override
|
||||||
public @NonNull String pluginsFormatted() {
|
public @NonNull String pluginsFormatted() {
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
Plugin[] plugins = Bukkit.getServer().getPluginManager().getPlugins();
|
List<Plugin> plugins = new ArrayList<>();
|
||||||
msg.append("Plugins (").append(plugins.length).append("): \n");
|
Collections.addAll(plugins, Bukkit.getServer().getPluginManager().getPlugins());
|
||||||
|
plugins.sort(Comparator.comparing(Plugin::getName));
|
||||||
|
msg.append("Plugins (").append(plugins.size()).append("): \n");
|
||||||
for (Plugin p : plugins) {
|
for (Plugin p : plugins) {
|
||||||
msg.append(" - ").append(p.getName()).append(":").append("\n")
|
msg.append(" - ").append(p.getName()).append(":").append("\n")
|
||||||
.append(" • Version: ").append(p.getDescription().getVersion()).append("\n")
|
.append(" • Version: ").append(p.getDescription().getVersion()).append("\n")
|
||||||
@ -1156,6 +1171,21 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
return msg.toString();
|
return msg.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
|
public @NonNull String worldEditImplementations() {
|
||||||
|
StringBuilder msg = new StringBuilder();
|
||||||
|
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
|
||||||
|
msg.append("FastAsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit").getDescription().getVersion());
|
||||||
|
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
||||||
|
msg.append("AsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("AsyncWorldEdit").getDescription().getVersion()).append("\n");
|
||||||
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
|
} else {
|
||||||
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
|
}
|
||||||
|
return msg.toString();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public com.plotsquared.core.location.@NonNull World<?> getPlatformWorld(final @NonNull String worldName) {
|
public com.plotsquared.core.location.@NonNull World<?> getPlatformWorld(final @NonNull String worldName) {
|
||||||
return BukkitWorld.of(worldName);
|
return BukkitWorld.of(worldName);
|
||||||
@ -1204,7 +1234,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
@SuppressWarnings("ALL")
|
@SuppressWarnings("unchecked")
|
||||||
public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
|
public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
|
||||||
return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class);
|
return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -461,6 +461,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.tamed.tamed = tamed.isTamed();
|
this.tamed.tamed = tamed.isTamed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // Paper deprecation
|
||||||
@Override
|
@Override
|
||||||
public Entity spawn(World world, int xOffset, int zOffset) {
|
public Entity spawn(World world, int xOffset, int zOffset) {
|
||||||
Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset);
|
Location location = new Location(world, this.getX() + xOffset, this.getY(), this.z + zOffset);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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,7 +65,10 @@ final class BlockStatePopulator extends BlockPopulator {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final ChunkWrapper wrap = new ChunkWrapper(area.getWorldName(), source.getX(), source.getZ());
|
final ChunkWrapper wrap = new ChunkWrapper(area.getWorldName(), source.getX(), source.getZ());
|
||||||
final ScopedQueueCoordinator chunk = this.queue.getForChunk(wrap.x, wrap.z);
|
final ScopedQueueCoordinator chunk = this.queue.getForChunk(wrap.x, wrap.z,
|
||||||
|
com.plotsquared.bukkit.util.BukkitWorld.getMinWorldHeight(world),
|
||||||
|
com.plotsquared.bukkit.util.BukkitWorld.getMaxWorldHeight(world) - 1
|
||||||
|
);
|
||||||
if (this.plotGenerator.populateChunk(chunk, area)) {
|
if (this.plotGenerator.populateChunk(chunk, area)) {
|
||||||
this.queue.enqueue();
|
this.queue.enqueue();
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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,7 +25,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.generator;
|
package com.plotsquared.bukkit.generator;
|
||||||
|
|
||||||
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.generator.AugmentedUtils;
|
import com.plotsquared.core.generator.AugmentedUtils;
|
||||||
|
import com.plotsquared.core.queue.QueueCoordinator;
|
||||||
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
|
import com.sk89q.worldedit.util.SideEffectSet;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
@ -52,7 +56,14 @@ public class BukkitAugmentedGenerator extends BlockPopulator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void populate(@NonNull World world, @NonNull Random random, @NonNull Chunk source) {
|
public void populate(@NonNull World world, @NonNull Random random, @NonNull Chunk source) {
|
||||||
AugmentedUtils.generate(source, world.getName(), source.getX(), source.getZ(), null);
|
QueueCoordinator queue = PlotSquared.platform().globalBlockQueue().getNewQueue(BukkitAdapter.adapt(world));
|
||||||
|
// The chunk is already loaded and we do not want to load the chunk in "fully" by using any PaperLib methods.
|
||||||
|
queue.setForceSync(true);
|
||||||
|
queue.setSideEffectSet(SideEffectSet.none());
|
||||||
|
queue.setBiomesEnabled(false);
|
||||||
|
queue.setChunkObject(source);
|
||||||
|
AugmentedUtils.generateChunk(world.getName(), source.getX(), source.getZ(), queue);
|
||||||
|
queue.enqueue();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -27,6 +27,7 @@ package com.plotsquared.bukkit.generator;
|
|||||||
|
|
||||||
import com.plotsquared.bukkit.queue.GenChunk;
|
import com.plotsquared.bukkit.queue.GenChunk;
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
|
import com.plotsquared.bukkit.util.BukkitWorld;
|
||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.generator.GeneratorWrapper;
|
import com.plotsquared.core.generator.GeneratorWrapper;
|
||||||
import com.plotsquared.core.generator.IndependentPlotGenerator;
|
import com.plotsquared.core.generator.IndependentPlotGenerator;
|
||||||
@ -159,12 +160,14 @@ public class BukkitPlotGenerator extends ChunkGenerator
|
|||||||
@NonNull BiomeGrid biome
|
@NonNull BiomeGrid biome
|
||||||
) {
|
) {
|
||||||
|
|
||||||
GenChunk result = new GenChunk();
|
int minY = BukkitWorld.getMinWorldHeight(world);
|
||||||
|
int maxY = BukkitWorld.getMaxWorldHeight(world);
|
||||||
|
GenChunk result = new GenChunk(minY, maxY);
|
||||||
if (this.getPlotGenerator() instanceof SingleWorldGenerator) {
|
if (this.getPlotGenerator() instanceof SingleWorldGenerator) {
|
||||||
if (result.getChunkData() != null) {
|
if (result.getChunkData() != null) {
|
||||||
for (int chunkX = 0; chunkX < 16; chunkX++) {
|
for (int chunkX = 0; chunkX < 16; chunkX++) {
|
||||||
for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
|
for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
|
||||||
for (int y = 0; y < world.getMaxHeight(); y++) {
|
for (int y = minY; y < maxY; y++) {
|
||||||
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
|
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -80,7 +80,8 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
|||||||
result.setBiome(x, z, BukkitAdapter.adapt(biome));
|
result.setBiome(x, z, BukkitAdapter.adapt(biome));
|
||||||
}
|
}
|
||||||
|
|
||||||
//do not annotate with Override until we discontinue support for 1.4.4
|
//do not annotate with Override until we discontinue support for 1.4.4 (we no longer support 1.4.4)
|
||||||
|
@Override
|
||||||
public void setBiome(int x, int y, int z, @NonNull Biome biome) {
|
public void setBiome(int x, int y, int z, @NonNull Biome biome) {
|
||||||
result.setBiome(x, z, BukkitAdapter.adapt(biome));
|
result.setBiome(x, z, BukkitAdapter.adapt(biome));
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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,7 +29,6 @@ import com.google.inject.AbstractModule;
|
|||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.plotsquared.bukkit.managers.BukkitWorldManager;
|
import com.plotsquared.bukkit.managers.BukkitWorldManager;
|
||||||
import com.plotsquared.bukkit.managers.HyperverseWorldManager;
|
|
||||||
import com.plotsquared.bukkit.managers.MultiverseWorldManager;
|
import com.plotsquared.bukkit.managers.MultiverseWorldManager;
|
||||||
import com.plotsquared.core.util.PlatformWorldManager;
|
import com.plotsquared.core.util.PlatformWorldManager;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -37,12 +36,11 @@ import org.bukkit.World;
|
|||||||
|
|
||||||
public class WorldManagerModule extends AbstractModule {
|
public class WorldManagerModule extends AbstractModule {
|
||||||
|
|
||||||
|
@SuppressWarnings("removal") // Internal use only
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
PlatformWorldManager<World> provideWorldManager() {
|
PlatformWorldManager<World> provideWorldManager() {
|
||||||
if (Bukkit.getPluginManager().getPlugin("Hyperverse") != null) {
|
if (Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) {
|
||||||
return new HyperverseWorldManager();
|
|
||||||
} else if (Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) {
|
|
||||||
return new MultiverseWorldManager();
|
return new MultiverseWorldManager();
|
||||||
} else {
|
} else {
|
||||||
return new BukkitWorldManager();
|
return new BukkitWorldManager();
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -74,6 +74,7 @@ import org.bukkit.GameMode;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Fireball;
|
import org.bukkit.entity.Fireball;
|
||||||
@ -92,6 +93,7 @@ import org.bukkit.event.block.BlockFormEvent;
|
|||||||
import org.bukkit.event.block.BlockFromToEvent;
|
import org.bukkit.event.block.BlockFromToEvent;
|
||||||
import org.bukkit.event.block.BlockGrowEvent;
|
import org.bukkit.event.block.BlockGrowEvent;
|
||||||
import org.bukkit.event.block.BlockIgniteEvent;
|
import org.bukkit.event.block.BlockIgniteEvent;
|
||||||
|
import org.bukkit.event.block.BlockMultiPlaceEvent;
|
||||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
import org.bukkit.event.block.BlockPhysicsEvent;
|
||||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||||
@ -166,7 +168,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
if (Settings.Redstone.DISABLE_OFFLINE) {
|
if (Settings.Redstone.DISABLE_OFFLINE) {
|
||||||
boolean disable = false;
|
boolean disable = false;
|
||||||
if (!plot.getOwner().equals(DBFunc.SERVER)) {
|
if (!DBFunc.SERVER.equals(plot.getOwner())) {
|
||||||
if (plot.isMerged()) {
|
if (plot.isMerged()) {
|
||||||
disable = true;
|
disable = true;
|
||||||
for (UUID owner : plot.getOwners()) {
|
for (UUID owner : plot.getOwners()) {
|
||||||
@ -277,7 +279,7 @@ 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 ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
|
||||||
.getMinBuildHeight()) && !Permissions
|
.getMinBuildHeight()) && !Permissions
|
||||||
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -352,7 +354,8 @@ public class BlockEventListener implements Listener {
|
|||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
||||||
if (event.getBlock().getY() == 0) {
|
// == rather than <= as we only care about the "ground level" not being destroyed
|
||||||
|
if (event.getBlock().getY() == area.getMinGenHeight()) {
|
||||||
if (!Permissions
|
if (!Permissions
|
||||||
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
@ -362,7 +365,7 @@ public class BlockEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if ((location.getY() > area.getMaxBuildHeight() || location.getY() < area
|
} else if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
|
||||||
.getMinBuildHeight()) && !Permissions
|
.getMinBuildHeight()) && !Permissions
|
||||||
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -548,6 +551,10 @@ public class BlockEventListener implements Listener {
|
|||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (location.getY() >= area.getMaxBuildHeight() || location.getY() < area.getMinBuildHeight()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
switch (event.getNewState().getType()) {
|
switch (event.getNewState().getType()) {
|
||||||
case SNOW:
|
case SNOW:
|
||||||
case SNOW_BLOCK:
|
case SNOW_BLOCK:
|
||||||
@ -647,7 +654,8 @@ public class BlockEventListener implements Listener {
|
|||||||
event.getBlock().breakNaturally();
|
event.getBlock().breakNaturally();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (location.getY() == 0) {
|
// == rather than <= as we only care about the "ground level" not being destroyed
|
||||||
|
if (location.getY() == area.getMinGenHeight()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -746,62 +754,66 @@ public class BlockEventListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onChange(BlockFromToEvent event) {
|
public void onChange(BlockFromToEvent event) {
|
||||||
Block from = event.getBlock();
|
Block fromBlock = event.getBlock();
|
||||||
|
|
||||||
// Check liquid flow flag inside of origin plot too
|
// Check liquid flow flag inside of origin plot too
|
||||||
final Location fLocation = BukkitUtil.adapt(from.getLocation());
|
final Location fromLocation = BukkitUtil.adapt(fromBlock.getLocation());
|
||||||
final PlotArea fromArea = fLocation.getPlotArea();
|
final PlotArea fromArea = fromLocation.getPlotArea();
|
||||||
if (fromArea != null) {
|
if (fromArea != null) {
|
||||||
final Plot plot = fromArea.getOwnedPlot(fLocation);
|
final Plot fromPlot = fromArea.getOwnedPlot(fromLocation);
|
||||||
if (plot != null && plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event
|
if (fromPlot != null && fromPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event
|
||||||
.getBlock()
|
.getBlock()
|
||||||
.isLiquid()) {
|
.isLiquid()) {
|
||||||
plot.debug("Liquid could not flow because liquid-flow = disabled");
|
fromPlot.debug("Liquid could not flow because liquid-flow = disabled");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Block to = event.getToBlock();
|
Block toBlock = event.getToBlock();
|
||||||
Location tLocation = BukkitUtil.adapt(to.getLocation());
|
Location toLocation = BukkitUtil.adapt(toBlock.getLocation());
|
||||||
PlotArea area = tLocation.getPlotArea();
|
PlotArea toArea = toLocation.getPlotArea();
|
||||||
if (area == null) {
|
if (toArea == null) {
|
||||||
if (from.getType() == Material.DRAGON_EGG && fromArea != null) {
|
if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Plot plot = area.getOwnedPlot(tLocation);
|
if (toLocation.getY() >= toArea.getMaxBuildHeight() || toLocation.getY() < toArea.getMinBuildHeight()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot toPlot = toArea.getOwnedPlot(toLocation);
|
||||||
|
|
||||||
if (from.getType() == Material.DRAGON_EGG && fromArea != null) {
|
if (fromBlock.getType() == Material.DRAGON_EGG && fromArea != null) {
|
||||||
final Plot fromPlot = fromArea.getOwnedPlot(fLocation);
|
final Plot fromPlot = fromArea.getOwnedPlot(fromLocation);
|
||||||
|
|
||||||
if (fromPlot != null || plot != null) {
|
if (fromPlot != null || toPlot != null) {
|
||||||
if ((fromPlot == null || !fromPlot.equals(plot)) && (plot == null || !plot.equals(fromPlot))) {
|
if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plot != null) {
|
if (toPlot != null) {
|
||||||
if (!area.contains(fLocation.getX(), fLocation.getZ()) || !Objects.equals(plot, area.getOwnedPlot(fLocation))) {
|
if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(toPlot, toArea.getOwnedPlot(fromLocation))) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) {
|
if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.ENABLED && event.getBlock().isLiquid()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.getFlag(DisablePhysicsFlag.class)) {
|
if (toPlot.getFlag(DisablePhysicsFlag.class)) {
|
||||||
plot.debug(event.getBlock().getType() + " could not update because disable-physics = true");
|
toPlot.debug(event.getBlock().getType() + " could not update because disable-physics = true");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) {
|
if (toPlot.getFlag(LiquidFlowFlag.class) == LiquidFlowFlag.FlowStatus.DISABLED && event.getBlock().isLiquid()) {
|
||||||
plot.debug("Liquid could not flow because liquid-flow = disabled");
|
toPlot.debug("Liquid could not flow because liquid-flow = disabled");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!area.contains(fLocation.getX(), fLocation.getZ()) || !Objects.equals(null, area.getOwnedPlot(fLocation))) {
|
} else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(null, toArea.getOwnedPlot(fromLocation))) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (event.getBlock().isLiquid()) {
|
} else if (event.getBlock().isLiquid()) {
|
||||||
final org.bukkit.Location location = event.getBlock().getLocation();
|
final org.bukkit.Location location = event.getBlock().getLocation();
|
||||||
@ -1208,4 +1220,51 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BlockMultiPlaceEvent is called unrelated to the BlockPlaceEvent itself and therefore doesn't respect the cancellation.
|
||||||
|
*/
|
||||||
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
|
public void onBlockMultiPlace(BlockMultiPlaceEvent event) {
|
||||||
|
// Check if the generic block place event would be cancelled
|
||||||
|
blockCreate(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
|
||||||
|
Location placedLocation = BukkitUtil.adapt(event.getBlockReplacedState().getLocation());
|
||||||
|
PlotArea area = placedLocation.getPlotArea();
|
||||||
|
if (area == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot plot = placedLocation.getPlot();
|
||||||
|
|
||||||
|
for (final BlockState state : event.getReplacedBlockStates()) {
|
||||||
|
Location currentLocation = BukkitUtil.adapt(state.getLocation());
|
||||||
|
if (!Permissions.hasPermission(
|
||||||
|
pp,
|
||||||
|
Permission.PERMISSION_ADMIN_BUILD_ROAD
|
||||||
|
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
|
||||||
|
pp.sendMessage(
|
||||||
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
|
);
|
||||||
|
event.setCancelled(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
|
||||||
|
pp.sendMessage(
|
||||||
|
TranslatableCaption.of("height.height_limit"),
|
||||||
|
Template.of("minHeight", String.valueOf(area.getMinBuildHeight())),
|
||||||
|
Template.of("maxHeight", String.valueOf(area.getMaxBuildHeight()))
|
||||||
|
);
|
||||||
|
event.setCancelled(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -108,41 +108,11 @@ public class ChunkListener implements Listener {
|
|||||||
this.isTrueForNotSave = false;
|
this.isTrueForNotSave = false;
|
||||||
} else {
|
} else {
|
||||||
this.mustSave = classChunk.getField("mustNotSave");
|
this.mustSave = classChunk.getField("mustNotSave");
|
||||||
/*
|
|
||||||
this.worldServer = classCraftWorld.getField("world");
|
|
||||||
this.methodGetChunkProvider = getRefClass("{nms}.WorldServer").getMethod("getChunkProvider");
|
|
||||||
this.playerChunkMap = getRefClass("{nms}.ChunkProviderServer").getField("playerChunkMap");
|
|
||||||
RefClass classPlayerChunkMap = getRefClass("{nms}.PlayerChunkMap");
|
|
||||||
if (PaperLib.isPaper() && version == 16) {
|
|
||||||
this.updatingChunks = classPlayerChunkMap.getField("updatingChunks");
|
|
||||||
this.methodGetVisibleMap = getRefClass("com.destroystokyo.paper.util.map.QueuedChangesMapLong2Object").getMethod(
|
|
||||||
"getVisibleMap");
|
|
||||||
} else {
|
|
||||||
this.visibleChunks = classPlayerChunkMap.getField("visibleChunks");
|
|
||||||
}
|
|
||||||
this.methodGetFullChunk = getRefClass("{nms}.PlayerChunk").getMethod("getFullChunk");
|
|
||||||
this.methodGetBukkitChunk = getRefClass("{nms}.Chunk").getMethod("getBukkitChunk");
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
} else if (version == 17) {
|
} else {
|
||||||
RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
||||||
this.mustSave = classChunk.getField("mustNotSave");
|
this.mustSave = classChunk.getField("mustNotSave");
|
||||||
/*
|
|
||||||
this.worldServer = classCraftWorld.getField("world");
|
|
||||||
this.methodGetChunkProvider = getRefClass("net.minecraft.server.level.WorldServer").getMethod(
|
|
||||||
"getChunkProvider");
|
|
||||||
this.playerChunkMap = getRefClass("net.minecraft.server.level.ChunkProviderServer").getField("a");
|
|
||||||
RefClass classPlayerChunkMap = getRefClass("net.minecraft.server.level.PlayerChunkMap");
|
|
||||||
if (PaperLib.isPaper()) {
|
|
||||||
this.updatingChunks = classPlayerChunkMap.getField("updatingChunks");
|
|
||||||
this.methodGetVisibleMap = getRefClass("com.destroystokyo.paper.util.map.QueuedChangesMapLong2Object").getMethod(
|
|
||||||
"getVisibleMap");
|
|
||||||
} else {
|
|
||||||
this.visibleChunks = classPlayerChunkMap.getField("l");
|
|
||||||
}
|
|
||||||
this.methodGetFullChunk = getRefClass("net.minecraft.server.level.PlayerChunk").getMethod("getFullChunk");
|
|
||||||
this.methodGetBukkitChunk = getRefClass("net.minecraft.world.level.chunk.Chunk").getMethod("getBukkitChunk");
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
} catch (NoSuchFieldException e) {
|
} catch (NoSuchFieldException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -182,32 +152,7 @@ public class ChunkListener implements Listener {
|
|||||||
}
|
}
|
||||||
toUnload.add(chunk);
|
toUnload.add(chunk);
|
||||||
}
|
}
|
||||||
}/* else {
|
}
|
||||||
Object worldServer = this.worldServer.of(craftWorld).get();
|
|
||||||
Object chunkProviderServer = methodGetChunkProvider.of(worldServer).call();
|
|
||||||
Object playerChunkMap = this.playerChunkMap.of(chunkProviderServer).get();
|
|
||||||
Long2ObjectLinkedOpenHashMap<?> chunks;
|
|
||||||
if (PaperLib.isPaper() && version > 15) {
|
|
||||||
Object updatingChunks = this.updatingChunks.of(playerChunkMap).get();
|
|
||||||
chunks = (Long2ObjectLinkedOpenHashMap<?>) this.methodGetVisibleMap.of(updatingChunks).call();
|
|
||||||
} else {
|
|
||||||
chunks = (Long2ObjectLinkedOpenHashMap<?>) this.visibleChunks.of(playerChunkMap).get();
|
|
||||||
}
|
|
||||||
for (Object playerChunk : chunks.values()) {
|
|
||||||
Object nmsChunk = this.methodGetFullChunk.of(playerChunk).call();
|
|
||||||
if (nmsChunk == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Chunk chunk = (Chunk) this.methodGetBukkitChunk.of(nmsChunk).call();
|
|
||||||
int x = chunk.getX();
|
|
||||||
int z = chunk.getZ();
|
|
||||||
if (!shouldSave(worldName, x, z)) {
|
|
||||||
unloadChunk(worldName, chunk, false);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
toUnload.add(chunk);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
if (toUnload.isEmpty()) {
|
if (toUnload.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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 +48,7 @@ import com.plotsquared.core.util.Permissions;
|
|||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.block.BlockType;
|
import com.sk89q.worldedit.world.block.BlockType;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Ageable;
|
import org.bukkit.entity.Ageable;
|
||||||
@ -167,6 +168,7 @@ public class EntityEventListener implements Listener {
|
|||||||
case "RAID":
|
case "RAID":
|
||||||
case "SHEARED":
|
case "SHEARED":
|
||||||
case "SILVERFISH_BLOCK":
|
case "SILVERFISH_BLOCK":
|
||||||
|
case "ENDER_PEARL":
|
||||||
case "TRAP":
|
case "TRAP":
|
||||||
case "VILLAGE_DEFENSE":
|
case "VILLAGE_DEFENSE":
|
||||||
case "VILLAGE_INVASION":
|
case "VILLAGE_INVASION":
|
||||||
@ -323,6 +325,10 @@ public class EntityEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
//Spawn Explosion Particles when enabled in settings
|
||||||
|
if (Settings.General.ALWAYS_SHOW_EXPLOSIONS) {
|
||||||
|
event.getLocation().getWorld().spawnParticle(Particle.EXPLOSION_HUGE, event.getLocation(), 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -36,6 +36,7 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
|||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
@ -60,7 +61,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public class EntitySpawnListener implements Listener {
|
public class EntitySpawnListener implements Listener {
|
||||||
|
|
||||||
private final static String KEY = "P2";
|
private static final String KEY = "P2";
|
||||||
private static boolean ignoreTP = false;
|
private static boolean ignoreTP = false;
|
||||||
private static boolean hasPlotArea = false;
|
private static boolean hasPlotArea = false;
|
||||||
private static String areaName = null;
|
private static String areaName = null;
|
||||||
@ -191,8 +192,32 @@ public class EntitySpawnListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onTeleport(EntityTeleportEvent event) {
|
public void onTeleport(EntityTeleportEvent event) {
|
||||||
Entity ent = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
if (ent instanceof Vehicle || ent instanceof ArmorStand) {
|
Entity fromLocation = event.getEntity();
|
||||||
|
Block toLocation = event.getTo().getBlock();
|
||||||
|
final Location fromLocLocation = BukkitUtil.adapt(fromLocation.getLocation());
|
||||||
|
final PlotArea fromArea = fromLocLocation.getPlotArea();
|
||||||
|
Location toLocLocation = BukkitUtil.adapt(toLocation.getLocation());
|
||||||
|
PlotArea toArea = toLocLocation.getPlotArea();
|
||||||
|
|
||||||
|
if (toArea == null) {
|
||||||
|
if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot toPlot = toArea.getOwnedPlot(toLocLocation);
|
||||||
|
if (fromLocation.getType() == EntityType.SHULKER && fromArea != null) {
|
||||||
|
final Plot fromPlot = fromArea.getOwnedPlot(fromLocLocation);
|
||||||
|
|
||||||
|
if (fromPlot != null || toPlot != null) {
|
||||||
|
if ((fromPlot == null || !fromPlot.equals(toPlot)) && (toPlot == null || !toPlot.equals(fromPlot))) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (entity instanceof Vehicle || entity instanceof ArmorStand) {
|
||||||
testNether(event.getEntity());
|
testNether(event.getEntity());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -44,6 +44,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.Permissions;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import net.kyori.adventure.text.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
@ -195,6 +196,7 @@ public class PaperListener implements Listener {
|
|||||||
case "RAID":
|
case "RAID":
|
||||||
case "SHEARED":
|
case "SHEARED":
|
||||||
case "SILVERFISH_BLOCK":
|
case "SILVERFISH_BLOCK":
|
||||||
|
case "ENDER_PEARL":
|
||||||
case "TRAP":
|
case "TRAP":
|
||||||
case "VILLAGE_DEFENSE":
|
case "VILLAGE_DEFENSE":
|
||||||
case "VILLAGE_INVASION":
|
case "VILLAGE_INVASION":
|
||||||
@ -352,13 +354,15 @@ public class PaperListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (!plot.getFlag(ProjectilesFlag.class)) {
|
||||||
pp.sendMessage(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
pp.sendMessage(
|
||||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
);
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
||||||
entity.remove();
|
);
|
||||||
event.setCancelled(true);
|
entity.remove();
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -36,7 +36,6 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
|
|||||||
import net.kyori.adventure.text.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import org.bukkit.block.Banner;
|
import org.bukkit.block.Banner;
|
||||||
import org.bukkit.block.Beacon;
|
import org.bukkit.block.Beacon;
|
||||||
import org.bukkit.block.Bed;
|
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.CommandBlock;
|
import org.bukkit.block.CommandBlock;
|
||||||
import org.bukkit.block.Comparator;
|
import org.bukkit.block.Comparator;
|
||||||
@ -51,6 +50,7 @@ import org.bukkit.block.Jukebox;
|
|||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.block.Skull;
|
import org.bukkit.block.Skull;
|
||||||
import org.bukkit.block.Structure;
|
import org.bukkit.block.Structure;
|
||||||
|
import org.bukkit.block.data.type.Bed;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -68,17 +68,14 @@ import com.plotsquared.core.plot.flag.implementations.PlayerInteractFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.PreventCreativeCopyFlag;
|
import com.plotsquared.core.plot.flag.implementations.PreventCreativeCopyFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.TamedInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.TamedInteractFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.UntrustedVisitFlag;
|
import com.plotsquared.core.plot.flag.implementations.UntrustedVisitFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.UseFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.VehicleBreakFlag;
|
import com.plotsquared.core.plot.flag.implementations.VehicleBreakFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.VehicleUseFlag;
|
import com.plotsquared.core.plot.flag.implementations.VehicleUseFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.VillagerInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.VillagerInteractFlag;
|
||||||
import com.plotsquared.core.plot.flag.types.BlockTypeWrapper;
|
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
import com.plotsquared.core.util.Permissions;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PremiumVerification;
|
import com.plotsquared.core.util.PremiumVerification;
|
||||||
import com.plotsquared.core.util.RegExUtil;
|
|
||||||
import com.plotsquared.core.util.entity.EntityCategories;
|
import com.plotsquared.core.util.entity.EntityCategories;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import com.plotsquared.core.util.task.TaskTime;
|
import com.plotsquared.core.util.task.TaskTime;
|
||||||
@ -94,6 +91,7 @@ import org.bukkit.FluidCollisionMode;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.data.Waterlogged;
|
import org.bukkit.block.data.Waterlogged;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
@ -226,7 +224,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
public void playerCommand(PlayerCommandPreprocessEvent event) {
|
public void playerCommand(PlayerCommandPreprocessEvent event) {
|
||||||
String msg = event.getMessage().toLowerCase().replaceAll("/", "").trim();
|
String msg = event.getMessage().replace("/", "").toLowerCase(Locale.ROOT).trim();
|
||||||
if (msg.isEmpty()) {
|
if (msg.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -240,11 +238,9 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
String[] parts = msg.split(" ");
|
String[] parts = msg.split(" ");
|
||||||
Plot plot = plotPlayer.getCurrentPlot();
|
Plot plot = plotPlayer.getCurrentPlot();
|
||||||
// Check WorldEdit
|
// Check WorldEdit
|
||||||
switch (parts[0].toLowerCase()) {
|
switch (parts[0]) {
|
||||||
case "up":
|
case "up":
|
||||||
case "/up":
|
|
||||||
case "worldedit:up":
|
case "worldedit:up":
|
||||||
case "worldedit:/up":
|
|
||||||
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions
|
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions
|
||||||
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER, true))) {
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER, true))) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -258,63 +254,67 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
List<String> blockedCommands = plot != null ?
|
List<String> blockedCommands = plot != null ?
|
||||||
plot.getFlag(BlockedCmdsFlag.class) :
|
plot.getFlag(BlockedCmdsFlag.class) :
|
||||||
area.getFlag(BlockedCmdsFlag.class);
|
area.getFlag(BlockedCmdsFlag.class);
|
||||||
if (!blockedCommands.isEmpty() && !Permissions
|
if (blockedCommands.isEmpty()) {
|
||||||
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
|
return;
|
||||||
String part = parts[0];
|
}
|
||||||
if (parts[0].contains(":")) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
|
||||||
part = parts[0].split(":")[1];
|
return;
|
||||||
msg = msg.replace(parts[0].split(":")[0] + ':', "");
|
}
|
||||||
}
|
// When using namespaced commands, we're not interested in the namespace
|
||||||
String s1 = part;
|
String part = parts[0];
|
||||||
List<String> aliases = new ArrayList<>();
|
if (part.contains(":")) {
|
||||||
for (HelpTopic cmdLabel : Bukkit.getServer().getHelpMap().getHelpTopics()) {
|
String[] namespaced = part.split(":");
|
||||||
if (part.equals(cmdLabel.getName())) {
|
part = namespaced[1];
|
||||||
break;
|
msg = msg.substring(namespaced[0].length() + 1);
|
||||||
}
|
}
|
||||||
String label = cmdLabel.getName().replaceFirst("/", "");
|
msg = replaceAliases(msg, part);
|
||||||
if (aliases.contains(label)) {
|
for (String blocked : blockedCommands) {
|
||||||
continue;
|
if (blocked.equalsIgnoreCase(msg)) {
|
||||||
}
|
String perm;
|
||||||
PluginCommand p;
|
if (plot != null && plot.isAdded(plotPlayer.getUUID())) {
|
||||||
if ((p = Bukkit.getPluginCommand(label)) != null) {
|
perm = "plots.admin.command.blocked-cmds.shared";
|
||||||
for (String a : p.getAliases()) {
|
|
||||||
if (aliases.contains(a)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
aliases.add(a);
|
|
||||||
a = a.replaceFirst("/", "");
|
|
||||||
if (!a.equals(label) && a.equals(part)) {
|
|
||||||
part = label;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!s1.equals(part)) {
|
|
||||||
msg = msg.replace(s1, part);
|
|
||||||
}
|
|
||||||
for (String s : blockedCommands) {
|
|
||||||
Pattern pattern;
|
|
||||||
if (!RegExUtil.compiledPatterns.containsKey(s)) {
|
|
||||||
RegExUtil.compiledPatterns.put(s, pattern = Pattern.compile(s));
|
|
||||||
} else {
|
} else {
|
||||||
pattern = RegExUtil.compiledPatterns.get(s);
|
perm = "plots.admin.command.blocked-cmds.road";
|
||||||
}
|
}
|
||||||
if (pattern.matcher(msg).matches()) {
|
if (!Permissions.hasPermission(plotPlayer, perm)) {
|
||||||
String perm;
|
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
|
||||||
if (plot != null && plot.isAdded(plotPlayer.getUUID())) {
|
event.setCancelled(true);
|
||||||
perm = "plots.admin.command.blocked-cmds.shared";
|
}
|
||||||
} else {
|
return;
|
||||||
perm = "plots.admin.command.blocked-cmds.road";
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String replaceAliases(String msg, String part) {
|
||||||
|
String s1 = part;
|
||||||
|
Set<String> aliases = new HashSet<>();
|
||||||
|
for (HelpTopic cmdLabel : Bukkit.getServer().getHelpMap().getHelpTopics()) {
|
||||||
|
if (part.equals(cmdLabel.getName())) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
String label = cmdLabel.getName().replaceFirst("/", "");
|
||||||
|
if (aliases.contains(label)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
PluginCommand p = Bukkit.getPluginCommand(label);
|
||||||
|
if (p != null) {
|
||||||
|
for (String a : p.getAliases()) {
|
||||||
|
if (aliases.contains(a)) {
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if (!Permissions.hasPermission(plotPlayer, perm)) {
|
aliases.add(a);
|
||||||
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
|
a = a.replaceFirst("/", "");
|
||||||
event.setCancelled(true);
|
if (!a.equals(label) && a.equals(part)) {
|
||||||
|
part = label;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!s1.equals(part)) {
|
||||||
|
msg = msg.replace(s1, part);
|
||||||
|
}
|
||||||
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@ -379,6 +379,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
this.eventDispatcher.doRespawnTask(pp);
|
this.eventDispatcher.doRespawnTask(pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // We explicitly want #getHomeSynchronous here
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onTeleport(PlayerTeleportEvent event) {
|
public void onTeleport(PlayerTeleportEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -571,7 +572,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
this.tmpTeleport = true;
|
this.tmpTeleport = true;
|
||||||
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
||||||
} else {
|
} else if (MathMan.roundInt(from.getX()) <= border) { // Only send if they just moved out of the border
|
||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (x2 < -border && this.tmpTeleport) {
|
} else if (x2 < -border && this.tmpTeleport) {
|
||||||
@ -581,7 +582,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
this.tmpTeleport = true;
|
this.tmpTeleport = true;
|
||||||
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
||||||
} else {
|
} else if (MathMan.roundInt(from.getX()) >= -border) { // Only send if they just moved out of the border
|
||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (((x1 = MathMan.roundInt(from.getX())) >= border && x2 <= border) || (x1 <= -border && x2 >= -border)) {
|
} else if (((x1 = MathMan.roundInt(from.getX())) >= border && x2 <= border) || (x1 <= -border && x2 >= -border)) {
|
||||||
@ -662,7 +663,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
this.tmpTeleport = true;
|
this.tmpTeleport = true;
|
||||||
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
||||||
} else {
|
} else if (MathMan.roundInt(from.getZ()) <= border) { // Only send if they just moved out of the border
|
||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (z2 < -border && this.tmpTeleport) {
|
} else if (z2 < -border && this.tmpTeleport) {
|
||||||
@ -672,7 +673,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
this.tmpTeleport = true;
|
this.tmpTeleport = true;
|
||||||
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
pp.sendMessage(TranslatableCaption.of("border.denied"));
|
||||||
} else {
|
} else if (MathMan.roundInt(from.getZ()) >= -border) { // Only send if they just moved out of the border
|
||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (((z1 = MathMan.roundInt(from.getZ())) >= border && z2 <= border) || (z1 <= -border && z2 >= -border)) {
|
} else if (((z1 = MathMan.roundInt(from.getZ())) >= border && z2 <= border) || (z1 <= -border && z2 >= -border)) {
|
||||||
@ -1063,9 +1064,13 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
if (area == null) {
|
if (area == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerBlockEventType eventType = null;
|
PlayerBlockEventType eventType;
|
||||||
BlockType blocktype1;
|
BlockType blocktype1;
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
|
if (block == null) {
|
||||||
|
// We do not care in this case, the player is likely interacting with air ("nothing").
|
||||||
|
return;
|
||||||
|
}
|
||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
Location location = BukkitUtil.adapt(block.getLocation());
|
||||||
Action action = event.getAction();
|
Action action = event.getAction();
|
||||||
switch (action) {
|
switch (action) {
|
||||||
@ -1667,6 +1672,7 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onLocaleChange(final PlayerLocaleChangeEvent event) {
|
public void onLocaleChange(final PlayerLocaleChangeEvent event) {
|
||||||
// The event is fired before the player is deemed online upon login
|
// The event is fired before the player is deemed online upon login
|
||||||
@ -1702,22 +1708,49 @@ public class PlayerEventListener extends PlotListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPortalCreation(PortalCreateEvent event) {
|
public void onPortalCreation(PortalCreateEvent event) {
|
||||||
Location location = BukkitUtil.adapt(event.getEntity().getLocation());
|
String world = event.getWorld().getName();
|
||||||
PlotArea area = location.getPlotArea();
|
if (PlotSquared.get().getPlotAreaManager().getPlotAreasSet(world).size() == 0) {
|
||||||
if (area == null) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
int minX = Integer.MAX_VALUE;
|
||||||
if (plot == null) {
|
int maxX = Integer.MIN_VALUE;
|
||||||
if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) {
|
int minZ = Integer.MAX_VALUE;
|
||||||
event.setCancelled(true);
|
int maxZ = Integer.MIN_VALUE;
|
||||||
|
for (BlockState state : event.getBlocks()) {
|
||||||
|
minX = Math.min(state.getX(), minX);
|
||||||
|
maxX = Math.max(state.getX(), maxX);
|
||||||
|
minZ = Math.min(state.getZ(), minZ);
|
||||||
|
maxZ = Math.max(state.getZ(), maxZ);
|
||||||
|
}
|
||||||
|
int y = event.getBlocks().get(0).getY(); // Don't need to worry about this too much
|
||||||
|
for (Location location : Set.of( // Use Set to lazily avoid duplicate locations
|
||||||
|
Location.at(world, minX, y, maxX),
|
||||||
|
Location.at(world, minZ, y, maxZ),
|
||||||
|
Location.at(world, minX, y, maxZ),
|
||||||
|
Location.at(world, minZ, y, maxX)
|
||||||
|
)) {
|
||||||
|
PlotArea area = location.getPlotArea();
|
||||||
|
if (area == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Plot plot = location.getOwnedPlot();
|
||||||
|
if (plot == null) {
|
||||||
|
if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (plot.getFlag(DenyPortalsFlag.class)) {
|
|
||||||
if (plot.getFlag(DenyPortalsFlag.class)) {
|
if (plot.getFlag(DenyPortalsFlag.class)) {
|
||||||
plot.debug(event.getEntity().getName() + " did not create a portal because of deny-portals = true");
|
StringBuilder builder = new StringBuilder();
|
||||||
|
if (event.getEntity() != null) {
|
||||||
|
builder.append(event.getEntity().getName()).append(" did not create a portal");
|
||||||
|
} else {
|
||||||
|
builder.append("Portal creation cancelled");
|
||||||
|
}
|
||||||
|
plot.debug(builder.append(" because of deny-portals = true").toString());
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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,6 +35,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.PlotHandler;
|
import com.plotsquared.core.plot.PlotHandler;
|
||||||
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.Permissions;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import net.kyori.adventure.text.minimessage.Template;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
@ -128,13 +129,15 @@ public class ProjectileEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (!plot.getFlag(ProjectilesFlag.class)) {
|
||||||
pp.sendMessage(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
pp.sendMessage(
|
||||||
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
);
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
||||||
entity.remove();
|
);
|
||||||
event.setCancelled(true);
|
entity.remove();
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -162,7 +165,7 @@ public class ProjectileEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.isAdded(pp.getUUID()) || Permissions
|
if (plot.isAdded(pp.getUUID()) || Permissions
|
||||||
.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(ProjectilesFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
entity.remove();
|
entity.remove();
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -43,11 +43,10 @@ import java.lang.reflect.Method;
|
|||||||
|
|
||||||
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
|
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public class SingleWorldListener implements Listener {
|
public class SingleWorldListener implements Listener {
|
||||||
|
|
||||||
private final Method methodGetHandleChunk;
|
private final Method methodGetHandleChunk;
|
||||||
private Field shouldSave;
|
private Field shouldSave = null;
|
||||||
|
|
||||||
public SingleWorldListener() throws Exception {
|
public SingleWorldListener() throws Exception {
|
||||||
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
||||||
@ -60,9 +59,12 @@ public class SingleWorldListener implements Listener {
|
|||||||
} else {
|
} else {
|
||||||
this.shouldSave = classChunk.getField("s").getRealField();
|
this.shouldSave = classChunk.getField("s").getRealField();
|
||||||
}
|
}
|
||||||
} else {
|
} else if (PlotSquared.platform().serverVersion()[1] == 17) {
|
||||||
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
||||||
this.shouldSave = classChunk.getField("r").getRealField();
|
this.shouldSave = classChunk.getField("r").getRealField();
|
||||||
|
} else if (PlotSquared.platform().serverVersion()[1] == 18) {
|
||||||
|
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
|
||||||
|
this.shouldSave = classChunk.getField("b").getRealField();
|
||||||
}
|
}
|
||||||
} catch (NoSuchFieldException e) {
|
} catch (NoSuchFieldException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.managers;
|
package com.plotsquared.bukkit.managers;
|
||||||
|
|
||||||
|
/*
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
@ -35,10 +36,9 @@ import se.hyperver.hyperverse.world.WorldConfigurationBuilder;
|
|||||||
import se.hyperver.hyperverse.world.WorldFeatures;
|
import se.hyperver.hyperverse.world.WorldFeatures;
|
||||||
import se.hyperver.hyperverse.world.WorldType;
|
import se.hyperver.hyperverse.world.WorldType;
|
||||||
|
|
||||||
/**
|
Hyperverse implementation is currently put on ice until Hyperverse is released on a stable line and deployed to the central
|
||||||
* Hyperverse specific manager that creates worlds
|
repository.
|
||||||
* using Hyperverse's API
|
|
||||||
*/
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class HyperverseWorldManager extends BukkitWorldManager {
|
public class HyperverseWorldManager extends BukkitWorldManager {
|
||||||
|
|
||||||
@ -67,3 +67,4 @@ public class HyperverseWorldManager extends BukkitWorldManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -38,7 +38,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
* @deprecated Deprecated and scheduled for removal without replacement
|
* @deprecated Deprecated and scheduled for removal without replacement
|
||||||
* in favor of the build in setup wizard.
|
* in favor of the build in setup wizard.
|
||||||
*/
|
*/
|
||||||
@Deprecated(forRemoval = true)
|
@Deprecated(forRemoval = true, since = "6.0.0")
|
||||||
@Singleton
|
@Singleton
|
||||||
public class MultiverseWorldManager extends BukkitWorldManager {
|
public class MultiverseWorldManager extends BukkitWorldManager {
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -162,6 +162,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("StringSplitter")
|
||||||
@Override
|
@Override
|
||||||
@NonNegative
|
@NonNegative
|
||||||
public int hasPermissionRange(
|
public int hasPermissionRange(
|
||||||
@ -319,7 +320,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
if (id == ItemTypes.AIR) {
|
if (id == ItemTypes.AIR) {
|
||||||
// Let's just stop all the discs because why not?
|
// Let's just stop all the discs because why not?
|
||||||
for (final Sound sound : Arrays.stream(Sound.values())
|
for (final Sound sound : Arrays.stream(Sound.values())
|
||||||
.filter(sound -> sound.name().contains("DISC")).collect(Collectors.toList())) {
|
.filter(sound -> sound.name().contains("DISC")).toList()) {
|
||||||
player.stopSound(sound);
|
player.stopSound(sound);
|
||||||
}
|
}
|
||||||
// this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR);
|
// this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR);
|
||||||
@ -331,6 +332,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // Needed for Spigot compatibility
|
||||||
@Override
|
@Override
|
||||||
public void kick(final String message) {
|
public void kick(final String message) {
|
||||||
this.player.kickPlayer(message);
|
this.player.kickPlayer(message);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -74,11 +74,13 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
|||||||
private final Consumer<Throwable> throwableConsumer;
|
private final Consumer<Throwable> throwableConsumer;
|
||||||
private final boolean unloadAfter;
|
private final boolean unloadAfter;
|
||||||
private final int totalSize;
|
private final int totalSize;
|
||||||
|
|
||||||
private final AtomicInteger expectedSize;
|
private final AtomicInteger expectedSize;
|
||||||
|
private final AtomicInteger loadingChunks = new AtomicInteger();
|
||||||
|
private final boolean forceSync;
|
||||||
|
|
||||||
private int batchSize;
|
private int batchSize;
|
||||||
private PlotSquaredTask task;
|
private PlotSquaredTask task;
|
||||||
private boolean shouldCancel;
|
private volatile boolean shouldCancel;
|
||||||
private boolean finished;
|
private boolean finished;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@ -91,7 +93,8 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
|||||||
@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 final boolean unloadAfter,
|
||||||
@Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers
|
@Assisted final @NonNull Collection<ProgressSubscriber> progressSubscribers,
|
||||||
|
@Assisted final boolean forceSync
|
||||||
) {
|
) {
|
||||||
this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks);
|
this.requestedChunks = new LinkedBlockingQueue<>(requestedChunks);
|
||||||
this.availableChunks = new LinkedBlockingQueue<>();
|
this.availableChunks = new LinkedBlockingQueue<>();
|
||||||
@ -106,14 +109,27 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
|||||||
this.plugin = JavaPlugin.getPlugin(BukkitPlatform.class);
|
this.plugin = JavaPlugin.getPlugin(BukkitPlatform.class);
|
||||||
this.bukkitWorld = Bukkit.getWorld(world.getName());
|
this.bukkitWorld = Bukkit.getWorld(world.getName());
|
||||||
this.progressSubscribers.addAll(progressSubscribers);
|
this.progressSubscribers.addAll(progressSubscribers);
|
||||||
|
this.forceSync = forceSync;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
// Request initial batch
|
if (!forceSync) {
|
||||||
this.requestBatch();
|
// Request initial batch
|
||||||
// Wait until next tick to give the chunks a chance to be loaded
|
this.requestBatch();
|
||||||
TaskManager.runTaskLater(() -> task = TaskManager.runTaskRepeat(this, TaskTime.ticks(1)), TaskTime.ticks(1));
|
// Wait until next tick to give the chunks a chance to be loaded
|
||||||
|
TaskManager.runTaskLater(() -> task = TaskManager.runTaskRepeat(this, TaskTime.ticks(1)), TaskTime.ticks(1));
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
while (!shouldCancel && !requestedChunks.isEmpty()) {
|
||||||
|
chunkConsumer.accept(requestedChunks.poll());
|
||||||
|
}
|
||||||
|
} catch (Throwable t) {
|
||||||
|
throwableConsumer.accept(t);
|
||||||
|
} finally {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -130,7 +146,9 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
|||||||
for (final ProgressSubscriber subscriber : this.progressSubscribers) {
|
for (final ProgressSubscriber subscriber : this.progressSubscribers) {
|
||||||
subscriber.notifyEnd();
|
subscriber.notifyEnd();
|
||||||
}
|
}
|
||||||
task.cancel();
|
if (task != null) {
|
||||||
|
task.cancel();
|
||||||
|
}
|
||||||
finished = true;
|
finished = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -150,6 +168,13 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
|||||||
|
|
||||||
Chunk chunk = this.availableChunks.poll();
|
Chunk chunk = this.availableChunks.poll();
|
||||||
if (chunk == null) {
|
if (chunk == null) {
|
||||||
|
if (this.availableChunks.isEmpty()) {
|
||||||
|
if (this.requestedChunks.isEmpty() && loadingChunks.get() == 0) {
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
requestBatch();
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
long[] iterationTime = new long[2];
|
long[] iterationTime = new long[2];
|
||||||
@ -197,9 +222,11 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
|||||||
BlockVector2 chunk;
|
BlockVector2 chunk;
|
||||||
for (int i = 0; i < this.batchSize && (chunk = this.requestedChunks.poll()) != null; i++) {
|
for (int i = 0; i < this.batchSize && (chunk = this.requestedChunks.poll()) != null; i++) {
|
||||||
// This required PaperLib to be bumped to version 1.0.4 to mark the request as urgent
|
// This required PaperLib to be bumped to version 1.0.4 to mark the request as urgent
|
||||||
|
loadingChunks.incrementAndGet();
|
||||||
PaperLib
|
PaperLib
|
||||||
.getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), true, true)
|
.getChunkAtAsync(this.bukkitWorld, chunk.getX(), chunk.getZ(), true, true)
|
||||||
.whenComplete((chunkObject, throwable) -> {
|
.whenComplete((chunkObject, throwable) -> {
|
||||||
|
loadingChunks.decrementAndGet();
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
// We want one less because this couldn't be processed
|
// We want one less because this couldn't be processed
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -63,10 +63,27 @@ import java.util.function.Consumer;
|
|||||||
|
|
||||||
public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
||||||
|
|
||||||
private final SideEffectSet noSideEffectSet;
|
private static final SideEffectSet NO_SIDE_EFFECT_SET;
|
||||||
private final SideEffectSet lightingSideEffectSet;
|
private static final SideEffectSet EDGE_SIDE_EFFECT_SET;
|
||||||
private final SideEffectSet edgeSideEffectSet;
|
private static final SideEffectSet LIGHTING_SIDE_EFFECT_SET;
|
||||||
private final SideEffectSet edgeLightingSideEffectSet;
|
private static final SideEffectSet EDGE_LIGHTING_SIDE_EFFECT_SET;
|
||||||
|
|
||||||
|
static {
|
||||||
|
NO_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with(
|
||||||
|
SideEffect.NEIGHBORS,
|
||||||
|
SideEffect.State.OFF
|
||||||
|
);
|
||||||
|
EDGE_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with(
|
||||||
|
SideEffect.NEIGHBORS,
|
||||||
|
SideEffect.State.ON
|
||||||
|
);
|
||||||
|
LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
|
||||||
|
EDGE_LIGHTING_SIDE_EFFECT_SET = SideEffectSet.none().with(SideEffect.UPDATE, SideEffect.State.ON).with(
|
||||||
|
SideEffect.NEIGHBORS,
|
||||||
|
SideEffect.State.ON
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private org.bukkit.World bukkitWorld;
|
private org.bukkit.World bukkitWorld;
|
||||||
@Inject
|
@Inject
|
||||||
private ChunkCoordinatorBuilderFactory chunkCoordinatorBuilderFactory;
|
private ChunkCoordinatorBuilderFactory chunkCoordinatorBuilderFactory;
|
||||||
@ -77,19 +94,6 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
@Inject
|
@Inject
|
||||||
public BukkitQueueCoordinator(@NonNull World world) {
|
public BukkitQueueCoordinator(@NonNull World world) {
|
||||||
super(world);
|
super(world);
|
||||||
noSideEffectSet = SideEffectSet.none().with(SideEffect.LIGHTING, SideEffect.State.OFF).with(
|
|
||||||
SideEffect.NEIGHBORS,
|
|
||||||
SideEffect.State.OFF
|
|
||||||
);
|
|
||||||
lightingSideEffectSet = SideEffectSet.none().with(SideEffect.NEIGHBORS, SideEffect.State.OFF);
|
|
||||||
edgeSideEffectSet = noSideEffectSet.with(SideEffect.UPDATE, SideEffect.State.ON).with(
|
|
||||||
SideEffect.NEIGHBORS,
|
|
||||||
SideEffect.State.ON
|
|
||||||
);
|
|
||||||
edgeLightingSideEffectSet = noSideEffectSet.with(SideEffect.UPDATE, SideEffect.State.ON).with(
|
|
||||||
SideEffect.NEIGHBORS,
|
|
||||||
SideEffect.State.ON
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -112,8 +116,8 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
public boolean enqueue() {
|
public boolean enqueue() {
|
||||||
final Clipboard regenClipboard;
|
final Clipboard regenClipboard;
|
||||||
if (isRegen()) {
|
if (isRegen()) {
|
||||||
BlockVector3 start = BlockVector3.at(getRegenStart()[0] << 4, 0, getRegenStart()[1] << 4);
|
BlockVector3 start = BlockVector3.at(getRegenStart()[0] << 4, getMinY(), getRegenStart()[1] << 4);
|
||||||
BlockVector3 end = BlockVector3.at((getRegenEnd()[0] << 4) + 15, 255, (getRegenEnd()[1] << 4) + 15);
|
BlockVector3 end = BlockVector3.at((getRegenEnd()[0] << 4) + 15, getMaxY(), (getRegenEnd()[1] << 4) + 15);
|
||||||
Region region = new CuboidRegion(start, end);
|
Region region = new CuboidRegion(start, end);
|
||||||
regenClipboard = new BlockArrayClipboard(region);
|
regenClipboard = new BlockArrayClipboard(region);
|
||||||
regenClipboard.setOrigin(start);
|
regenClipboard.setOrigin(start);
|
||||||
@ -135,7 +139,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
int sx = blockVector2.getX() << 4;
|
int sx = blockVector2.getX() << 4;
|
||||||
int sz = blockVector2.getZ() << 4;
|
int sz = blockVector2.getZ() << 4;
|
||||||
if (isRegenChunk) {
|
if (isRegenChunk) {
|
||||||
for (int layer = 0; layer < 16; layer++) {
|
for (int layer = getMinLayer(); layer <= getMaxLayer(); layer++) {
|
||||||
for (int y = 0; y < 16; y++) {
|
for (int y = 0; y < 16; y++) {
|
||||||
for (int x = 0; x < 16; x++) {
|
for (int x = 0; x < 16; x++) {
|
||||||
for (int z = 0; z < 16; z++) {
|
for (int z = 0; z < 16; z++) {
|
||||||
@ -171,7 +175,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
int lx = ChunkUtil.getX(j);
|
int lx = ChunkUtil.getX(j);
|
||||||
int lz = ChunkUtil.getZ(j);
|
int lz = ChunkUtil.getZ(j);
|
||||||
int x = sx + lx;
|
int x = sx + lx;
|
||||||
int y = ChunkUtil.getY(layer, j);
|
int y = ChunkUtil.getY(layer + localChunk.getMinSection(), j);
|
||||||
int z = sz + lz;
|
int z = sz + lz;
|
||||||
boolean edge = Settings.QUEUE.UPDATE_EDGES && isEdge(y >> 4, lx, y & 15, lz, blockVector2,
|
boolean edge = Settings.QUEUE.UPDATE_EDGES && isEdge(y >> 4, lx, y & 15, lz, blockVector2,
|
||||||
localChunk
|
localChunk
|
||||||
@ -180,7 +184,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int layer = 0; layer < localChunk.getBaseblocks().length; layer++) {
|
for (int layer = 0; layer < localChunk.getBiomes().length; layer++) {
|
||||||
BiomeType[] biomesLayer = localChunk.getBiomes()[layer];
|
BiomeType[] biomesLayer = localChunk.getBiomes()[layer];
|
||||||
if (biomesLayer == null) {
|
if (biomesLayer == null) {
|
||||||
continue;
|
continue;
|
||||||
@ -199,15 +203,15 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (localChunk.getTiles().size() > 0) {
|
if (localChunk.getTiles().size() > 0) {
|
||||||
localChunk.getTiles().forEach(((blockVector3, tag) -> {
|
localChunk.getTiles().forEach((blockVector3, tag) -> {
|
||||||
try {
|
try {
|
||||||
BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag);
|
BaseBlock block = getWorld().getBlock(blockVector3).toBaseBlock(tag);
|
||||||
getWorld().setBlock(blockVector3, block, noSideEffectSet);
|
getWorld().setBlock(blockVector3, block, getSideEffectSet(SideEffectState.NONE));
|
||||||
} catch (WorldEditException ignored) {
|
} catch (WorldEditException ignored) {
|
||||||
StateWrapper sw = new StateWrapper(tag);
|
StateWrapper sw = new StateWrapper(tag);
|
||||||
sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ());
|
sw.restoreTag(getWorld().getName(), blockVector3.getX(), blockVector3.getY(), blockVector3.getZ());
|
||||||
}
|
}
|
||||||
}));
|
});
|
||||||
}
|
}
|
||||||
if (localChunk.getEntities().size() > 0) {
|
if (localChunk.getEntities().size() > 0) {
|
||||||
localChunk.getEntities().forEach((location, entity) -> getWorld().createEntity(location, entity));
|
localChunk.getEntities().forEach((location, entity) -> getWorld().createEntity(location, entity));
|
||||||
@ -238,6 +242,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
/**
|
/**
|
||||||
* Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails
|
* Set a block to the world. First tries WNA but defaults to normal block setting methods if that fails
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unused")
|
||||||
private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2, boolean edge) {
|
private void setWorldBlock(int x, int y, int z, @NonNull BaseBlock block, @NonNull BlockVector2 blockVector2, boolean edge) {
|
||||||
try {
|
try {
|
||||||
BlockVector3 loc = BlockVector3.at(x, y, z);
|
BlockVector3 loc = BlockVector3.at(x, y, z);
|
||||||
@ -258,17 +263,21 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
}
|
}
|
||||||
SideEffectSet sideEffectSet;
|
SideEffectSet sideEffectSet;
|
||||||
if (lighting) {
|
if (lighting) {
|
||||||
sideEffectSet = edge ? edgeLightingSideEffectSet : lightingSideEffectSet;
|
sideEffectSet = getSideEffectSet(edge ? SideEffectState.EDGE_LIGHTING : SideEffectState.LIGHTING);
|
||||||
} else {
|
} else {
|
||||||
sideEffectSet = edge ? edgeSideEffectSet : noSideEffectSet;
|
sideEffectSet = getSideEffectSet(edge ? SideEffectState.EDGE : SideEffectState.NONE);
|
||||||
}
|
}
|
||||||
getWorld().setBlock(loc, block, sideEffectSet);
|
getWorld().setBlock(loc, block, sideEffectSet);
|
||||||
} catch (WorldEditException ignored) {
|
} catch (WorldEditException ignored) {
|
||||||
// Fallback to not so nice method
|
// Fallback to not so nice method
|
||||||
BlockData blockData = BukkitAdapter.adapt(block);
|
BlockData blockData = BukkitAdapter.adapt(block);
|
||||||
Chunk chunk = getBukkitWorld().getChunkAt(blockVector2.getX(), blockVector2.getZ());
|
Block existing;
|
||||||
|
// Assume a chunk object has been given only when it should have been.
|
||||||
Block existing = chunk.getBlock(x, y, z);
|
if (getChunkObject() instanceof Chunk chunkObject) {
|
||||||
|
existing = chunkObject.getBlock(x & 15, y, z & 15);
|
||||||
|
} else {
|
||||||
|
existing = getBukkitWorld().getBlockAt(x, y, z);
|
||||||
|
}
|
||||||
final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
|
final BlockState existingBaseBlock = BukkitAdapter.adapt(existing.getBlockData());
|
||||||
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
|
if (BukkitBlockUtil.get(existing).equals(existingBaseBlock) && existing.getBlockData().matches(blockData)) {
|
||||||
return;
|
return;
|
||||||
@ -284,7 +293,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
CompoundTag tag = block.getNbtData();
|
CompoundTag tag = block.getNbtData();
|
||||||
StateWrapper sw = new StateWrapper(tag);
|
StateWrapper sw = new StateWrapper(tag);
|
||||||
|
|
||||||
sw.restoreTag(getWorld().getName(), existing.getX(), existing.getY(), existing.getZ());
|
sw.restoreTag(existing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -297,47 +306,48 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEdge(int layer, int x, int y, int z, BlockVector2 blockVector2, LocalChunk localChunk) {
|
private boolean isEdge(int layer, int x, int y, int z, BlockVector2 blockVector2, LocalChunk localChunk) {
|
||||||
if (layer == 0 || layer == localChunk.getBaseblocks().length - 1) {
|
int layerIndex = (layer - localChunk.getMinSection());
|
||||||
|
if (layer == localChunk.getMinSection() || layerIndex == localChunk.getBaseblocks().length - 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (x == 0) {
|
if (x == 0) {
|
||||||
LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() - 1));
|
LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() - 1));
|
||||||
if (localChunkX == null || localChunkX.getBaseblocks()[layer] == null ||
|
if (localChunkX == null || localChunkX.getBaseblocks()[layerIndex] == null ||
|
||||||
localChunkX.getBaseblocks()[layer][ChunkUtil.getJ(15, y, z)] != null) {
|
localChunkX.getBaseblocks()[layerIndex][ChunkUtil.getJ(15, y, z)] != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (x == 15) {
|
} else if (x == 15) {
|
||||||
LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() + 1));
|
LocalChunk localChunkX = getBlockChunks().get(blockVector2.withX(blockVector2.getX() + 1));
|
||||||
if (localChunkX == null || localChunkX.getBaseblocks()[layer] == null ||
|
if (localChunkX == null || localChunkX.getBaseblocks()[layerIndex] == null ||
|
||||||
localChunkX.getBaseblocks()[layer][ChunkUtil.getJ(0, y, z)] != null) {
|
localChunkX.getBaseblocks()[layerIndex][ChunkUtil.getJ(0, y, z)] != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (z == 0) {
|
if (z == 0) {
|
||||||
LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() - 1));
|
LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() - 1));
|
||||||
if (localChunkZ == null || localChunkZ.getBaseblocks()[layer] == null ||
|
if (localChunkZ == null || localChunkZ.getBaseblocks()[layerIndex] == null ||
|
||||||
localChunkZ.getBaseblocks()[layer][ChunkUtil.getJ(x, y, 15)] != null) {
|
localChunkZ.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, y, 15)] != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (z == 15) {
|
} else if (z == 15) {
|
||||||
LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() + 1));
|
LocalChunk localChunkZ = getBlockChunks().get(blockVector2.withZ(blockVector2.getZ() + 1));
|
||||||
if (localChunkZ == null || localChunkZ.getBaseblocks()[layer] == null ||
|
if (localChunkZ == null || localChunkZ.getBaseblocks()[layerIndex] == null ||
|
||||||
localChunkZ.getBaseblocks()[layer][ChunkUtil.getJ(x, y, 0)] != null) {
|
localChunkZ.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, y, 0)] != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (y == 0) {
|
if (y == 0) {
|
||||||
if (localChunk.getBaseblocks()[layer - 1] == null ||
|
if (localChunk.getBaseblocks()[layerIndex - 1] == null ||
|
||||||
localChunk.getBaseblocks()[layer][ChunkUtil.getJ(x, 15, z)] != null) {
|
localChunk.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, 15, z)] != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if (y == 15) {
|
} else if (y == 15) {
|
||||||
if (localChunk.getBaseblocks()[layer + 1] == null ||
|
if (localChunk.getBaseblocks()[layerIndex + 1] == null ||
|
||||||
localChunk.getBaseblocks()[layer][ChunkUtil.getJ(x, 0, z)] != null) {
|
localChunk.getBaseblocks()[layerIndex][ChunkUtil.getJ(x, 0, z)] != null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BaseBlock[] baseBlocks = localChunk.getBaseblocks()[layer];
|
BaseBlock[] baseBlocks = localChunk.getBaseblocks()[layerIndex];
|
||||||
if (x > 0 && baseBlocks[ChunkUtil.getJ(x - 1, y, z)] == null) {
|
if (x > 0 && baseBlocks[ChunkUtil.getJ(x - 1, y, z)] == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -376,4 +386,23 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SideEffectSet getSideEffectSet(SideEffectState state) {
|
||||||
|
if (getSideEffectSet() != null) {
|
||||||
|
return getSideEffectSet();
|
||||||
|
}
|
||||||
|
return switch (state) {
|
||||||
|
case NONE -> NO_SIDE_EFFECT_SET;
|
||||||
|
case EDGE -> EDGE_SIDE_EFFECT_SET;
|
||||||
|
case LIGHTING -> LIGHTING_SIDE_EFFECT_SET;
|
||||||
|
case EDGE_LIGHTING -> EDGE_LIGHTING_SIDE_EFFECT_SET;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private enum SideEffectState {
|
||||||
|
NONE,
|
||||||
|
EDGE,
|
||||||
|
LIGHTING,
|
||||||
|
EDGE_LIGHTING
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -31,6 +31,7 @@ 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;
|
||||||
@ -50,6 +51,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.")
|
||||||
public class GenChunk extends ScopedQueueCoordinator {
|
public class GenChunk extends ScopedQueueCoordinator {
|
||||||
|
|
||||||
public final Biome[] biomes;
|
public final Biome[] biomes;
|
||||||
@ -61,8 +63,14 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
public int chunkZ;
|
public int chunkZ;
|
||||||
private ChunkData chunkData = null;
|
private ChunkData chunkData = null;
|
||||||
|
|
||||||
public GenChunk() {
|
/**
|
||||||
super(null, Location.at("", 0, 0, 0), Location.at("", 15, 255, 15));
|
* @param minY minimum world Y, inclusive
|
||||||
|
* @param maxY maximum world Y, inclusive
|
||||||
|
*
|
||||||
|
* @since 6.6.0
|
||||||
|
*/
|
||||||
|
public GenChunk(int minY, int maxY) {
|
||||||
|
super(null, Location.at("", 0, minY, 0), Location.at("", 15, maxY, 15));
|
||||||
this.biomes = Biome.values();
|
this.biomes = Biome.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +125,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Biome biome = BukkitAdapter.adapt(biomeType);
|
Biome biome = BukkitAdapter.adapt(biomeType);
|
||||||
for (int y = 0; y < 256; y++) {
|
for (int y = getMin().getY(); y <= getMax().getY(); y++) {
|
||||||
for (int x = 0; x < 16; x++) {
|
for (int x = 0; x < 16; x++) {
|
||||||
for (int z = 0; z < 16; z++) {
|
for (int z = 0; z < 16; z++) {
|
||||||
this.biomeGrid.setBiome(x, y, z, biome);
|
this.biomeGrid.setBiome(x, y, z, biome);
|
||||||
@ -130,7 +138,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
public void setCuboid(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockState block) {
|
public void setCuboid(@NonNull Location pos1, @NonNull Location pos2, @NonNull BlockState block) {
|
||||||
if (result != null && pos1.getX() == 0 && pos1.getZ() == 0 && pos2.getX() == 15 && pos2.getZ() == 15) {
|
if (result != null && pos1.getX() == 0 && pos1.getZ() == 0 && pos2.getX() == 15 && pos2.getZ() == 15) {
|
||||||
for (int y = pos1.getY(); y <= pos2.getY(); y++) {
|
for (int y = pos1.getY(); y <= pos2.getY(); y++) {
|
||||||
int layer = y >> 4;
|
int layer = getLayerIndex(y);
|
||||||
BlockState[] data = result[layer];
|
BlockState[] data = result[layer];
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
result[layer] = data = new BlockState[4096];
|
result[layer] = data = new BlockState[4096];
|
||||||
@ -164,7 +172,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
*/
|
*/
|
||||||
public boolean setBiome(int x, int z, @NonNull Biome biome) {
|
public boolean setBiome(int x, int z, @NonNull Biome biome) {
|
||||||
if (this.biomeGrid != null) {
|
if (this.biomeGrid != null) {
|
||||||
for (int y = 0; y < 256; y++) {
|
for (int y = getMin().getY(); y <= getMax().getY(); y++) {
|
||||||
this.setBiome(x, y, z, biome);
|
this.setBiome(x, y, z, biome);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -197,7 +205,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void storeCache(final int x, final int y, final int z, final @NonNull BlockState id) {
|
private void storeCache(final int x, final int y, final int z, final @NonNull BlockState id) {
|
||||||
int i = y >> 4;
|
int i = getLayerIndex(y);
|
||||||
BlockState[] v = this.result[i];
|
BlockState[] v = this.result[i];
|
||||||
if (v == null) {
|
if (v == null) {
|
||||||
this.result[i] = v = new BlockState[4096];
|
this.result[i] = v = new BlockState[4096];
|
||||||
@ -219,7 +227,7 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockState getBlock(int x, int y, int z) {
|
public @Nullable BlockState getBlock(int x, int y, int z) {
|
||||||
int i = y >> 4;
|
int i = getLayerIndex(y);
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
return BukkitBlockUtil.get(chunkData.getType(x, y, z));
|
return BukkitBlockUtil.get(chunkData.getType(x, y, z));
|
||||||
}
|
}
|
||||||
@ -246,16 +254,16 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull Location getMax() {
|
public @NonNull Location getMax() {
|
||||||
return Location.at(getWorld().getName(), 15 + (getX() << 4), 255, 15 + (getZ() << 4));
|
return Location.at(getWorld().getName(), 15 + (getX() << 4), super.getMax().getY(), 15 + (getZ() << 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull Location getMin() {
|
public @NonNull Location getMin() {
|
||||||
return Location.at(getWorld().getName(), getX() << 4, 0, getZ() << 4);
|
return Location.at(getWorld().getName(), getX() << 4, super.getMin().getY(), getZ() << 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NonNull GenChunk clone() {
|
public @NonNull GenChunk clone() {
|
||||||
GenChunk toReturn = new GenChunk();
|
GenChunk toReturn = new GenChunk(getMin().getY(), getMax().getY());
|
||||||
if (this.result != null) {
|
if (this.result != null) {
|
||||||
for (int i = 0; i < this.result.length; i++) {
|
for (int i = 0; i < this.result.length; i++) {
|
||||||
BlockState[] matrix = this.result[i];
|
BlockState[] matrix = this.result[i];
|
||||||
@ -269,4 +277,8 @@ public class GenChunk extends ScopedQueueCoordinator {
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getLayerIndex(int y) {
|
||||||
|
return (y - getMin().getY()) >> 4;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -44,6 +44,7 @@ import org.bukkit.enchantments.Enchantment;
|
|||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -166,13 +167,32 @@ public class StateWrapper {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restore the TileEntity data to the given world at the given coordinates.
|
||||||
|
*
|
||||||
|
* @param worldName World name
|
||||||
|
* @param x x position
|
||||||
|
* @param y y position
|
||||||
|
* @param z z position
|
||||||
|
* @return true if successful
|
||||||
|
*/
|
||||||
public boolean restoreTag(String worldName, int x, int y, int z) {
|
public boolean restoreTag(String worldName, int x, int y, int z) {
|
||||||
if (this.tag == null) {
|
World world = BukkitUtil.getWorld(worldName);
|
||||||
|
if (world == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
World world = BukkitUtil.getWorld(worldName);
|
return restoreTag(world.getBlockAt(x, y, z));
|
||||||
Block block = world.getBlockAt(x, y, z);
|
}
|
||||||
if (block == null) {
|
|
||||||
|
/**
|
||||||
|
* Restore the TileEntity data to the given block
|
||||||
|
*
|
||||||
|
* @param block Block to restore to
|
||||||
|
* @return true if successful
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("deprecation") // #setLine is needed for Spigot compatibility
|
||||||
|
public boolean restoreTag(@NonNull Block block) {
|
||||||
|
if (this.tag == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
org.bukkit.block.BlockState state = block.getState();
|
org.bukkit.block.BlockState state = block.getState();
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -42,6 +42,7 @@ import org.bukkit.inventory.InventoryView;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -50,11 +51,15 @@ import java.util.stream.IntStream;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class BukkitInventoryUtil extends InventoryUtil {
|
public class BukkitInventoryUtil extends InventoryUtil {
|
||||||
|
|
||||||
private static ItemStack getItem(PlotItemStack item) {
|
private static @Nullable ItemStack getItem(PlotItemStack item) {
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
ItemStack stack = new ItemStack(BukkitAdapter.adapt(item.getType()), item.getAmount());
|
Material material = BukkitAdapter.adapt(item.getType());
|
||||||
|
if (material == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ItemStack stack = new ItemStack(material, item.getAmount());
|
||||||
ItemMeta meta = null;
|
ItemMeta meta = null;
|
||||||
if (item.getName() != null) {
|
if (item.getName() != null) {
|
||||||
meta = stack.getItemMeta();
|
meta = stack.getItemMeta();
|
||||||
@ -77,6 +82,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
|
|||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // Paper deprecation
|
||||||
@Override
|
@Override
|
||||||
public void open(PlotInventory inv) {
|
public void open(PlotInventory inv) {
|
||||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||||
@ -103,16 +109,22 @@ public class BukkitInventoryUtil extends InventoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItem(PlotInventory inv, int index, PlotItemStack item) {
|
public boolean setItemChecked(PlotInventory inv, int index, PlotItemStack item) {
|
||||||
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
BukkitPlayer bp = (BukkitPlayer) inv.getPlayer();
|
||||||
InventoryView opened = bp.player.getOpenInventory();
|
InventoryView opened = bp.player.getOpenInventory();
|
||||||
if (!inv.isOpen()) {
|
ItemStack stack = getItem(item);
|
||||||
return;
|
if (stack == null) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
opened.setItem(index, getItem(item));
|
if (!inv.isOpen()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
opened.setItem(index, stack);
|
||||||
bp.player.updateInventory();
|
bp.player.updateInventory();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // Paper deprecation
|
||||||
public PlotItemStack getItem(ItemStack item) {
|
public PlotItemStack getItem(ItemStack item) {
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -145,6 +157,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
|
|||||||
.toArray(PlotItemStack[]::new);
|
.toArray(PlotItemStack[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") // #getTitle is needed for Spigot compatibility
|
||||||
@Override
|
@Override
|
||||||
public boolean isOpen(PlotInventory plotInventory) {
|
public boolean isOpen(PlotInventory plotInventory) {
|
||||||
if (!plotInventory.isOpen()) {
|
if (!plotInventory.isOpen()) {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -40,7 +40,6 @@ import com.plotsquared.core.queue.QueueCoordinator;
|
|||||||
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||||
import com.plotsquared.core.util.ChunkManager;
|
import com.plotsquared.core.util.ChunkManager;
|
||||||
import com.plotsquared.core.util.RegionManager;
|
import com.plotsquared.core.util.RegionManager;
|
||||||
import com.plotsquared.core.util.RegionUtil;
|
|
||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import com.plotsquared.core.util.entity.EntityCategories;
|
import com.plotsquared.core.util.entity.EntityCategories;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
@ -261,7 +260,7 @@ public class BukkitRegionManager extends RegionManager {
|
|||||||
if (checkX2 && checkZ2) {
|
if (checkX2 && checkZ2) {
|
||||||
map.saveRegion(world, xxt2, xxt, zzt2, zzt); //
|
map.saveRegion(world, xxt2, xxt, zzt2, zzt); //
|
||||||
}
|
}
|
||||||
CuboidRegion currentPlotClear = RegionUtil.createRegion(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ());
|
CuboidRegion currentPlotClear = new CuboidRegion(pos1.getBlockVector3(), pos2.getBlockVector3());
|
||||||
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
||||||
AugmentedUtils.bypass(
|
AugmentedUtils.bypass(
|
||||||
ignoreAugment,
|
ignoreAugment,
|
||||||
@ -276,20 +275,16 @@ public class BukkitRegionManager extends RegionManager {
|
|||||||
PlotLoc plotLoc = new PlotLoc(bx + x1, bz + z1);
|
PlotLoc plotLoc = new PlotLoc(bx + x1, bz + z1);
|
||||||
BaseBlock[] ids = map.allBlocks.get(plotLoc);
|
BaseBlock[] ids = map.allBlocks.get(plotLoc);
|
||||||
if (ids != null) {
|
if (ids != null) {
|
||||||
for (int y = 0; y < Math.min(128, ids.length); y++) {
|
int minY = value.getMin().getY();
|
||||||
BaseBlock id = ids[y];
|
for (int yIndex = 0; yIndex < ids.length; yIndex++) {
|
||||||
|
int y = yIndex + minY;
|
||||||
|
BaseBlock id = ids[yIndex];
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
value.setBlock(x1, y, z1, id);
|
value.setBlock(x1, y, z1, id);
|
||||||
} else {
|
} else {
|
||||||
value.setBlock(x1, y, z1, BlockTypes.AIR.getDefaultState());
|
value.setBlock(x1, y, z1, BlockTypes.AIR.getDefaultState());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int y = Math.min(128, ids.length); y < ids.length; y++) {
|
|
||||||
BaseBlock id = ids[y];
|
|
||||||
if (id != null) {
|
|
||||||
value.setBlock(x1, y, z1, id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -297,7 +292,7 @@ public class BukkitRegionManager extends RegionManager {
|
|||||||
}, world.getName(), chunk)
|
}, world.getName(), chunk)
|
||||||
);
|
);
|
||||||
//map.restoreBlocks(worldObj, 0, 0);
|
//map.restoreBlocks(worldObj, 0, 0);
|
||||||
map.restoreEntities(Bukkit.getWorld(world.getName()), 0, 0);
|
map.restoreEntities(Bukkit.getWorld(world.getName()));
|
||||||
});
|
});
|
||||||
regenQueue.setCompleteTask(whenDone);
|
regenQueue.setCompleteTask(whenDone);
|
||||||
queue.setCompleteTask(regenQueue::enqueue);
|
queue.setCompleteTask(regenQueue::enqueue);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -76,7 +76,7 @@ public class BukkitSetupUtils extends SetupUtils {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateGenerators(final boolean force) {
|
public void updateGenerators(final boolean force) {
|
||||||
if (!SetupUtils.generators.isEmpty() && !force) {
|
if (loaded && !SetupUtils.generators.isEmpty() && !force) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String testWorld = "CheckingPlotSquaredGenerator";
|
String testWorld = "CheckingPlotSquaredGenerator";
|
||||||
@ -100,6 +100,7 @@ public class BukkitSetupUtils extends SetupUtils {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -44,7 +44,6 @@ import com.plotsquared.core.util.task.TaskManager;
|
|||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||||
import com.sk89q.worldedit.math.BlockVector2;
|
import com.sk89q.worldedit.math.BlockVector2;
|
||||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
|
||||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||||
import com.sk89q.worldedit.world.block.BlockCategories;
|
import com.sk89q.worldedit.world.block.BlockCategories;
|
||||||
import com.sk89q.worldedit.world.block.BlockState;
|
import com.sk89q.worldedit.world.block.BlockState;
|
||||||
@ -61,7 +60,6 @@ import org.bukkit.Bukkit;
|
|||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
@ -246,7 +244,9 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
final World bukkitWorld = Objects.requireNonNull(getWorld(world));
|
final World bukkitWorld = Objects.requireNonNull(getWorld(world));
|
||||||
// Skip top and bottom block
|
// Skip top and bottom block
|
||||||
int air = 1;
|
int air = 1;
|
||||||
for (int y = bukkitWorld.getMaxHeight() - 1; y >= 0; y--) {
|
int maxY = com.plotsquared.bukkit.util.BukkitWorld.getMaxWorldHeight(bukkitWorld);
|
||||||
|
int minY = com.plotsquared.bukkit.util.BukkitWorld.getMinWorldHeight(bukkitWorld);
|
||||||
|
for (int y = maxY - 1; y >= minY; y--) {
|
||||||
Block block = bukkitWorld.getBlockAt(x, y, z);
|
Block block = bukkitWorld.getBlockAt(x, y, z);
|
||||||
Material type = block.getType();
|
Material type = block.getType();
|
||||||
if (type.isSolid()) {
|
if (type.isSolid()) {
|
||||||
@ -273,7 +273,9 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
final World bukkitWorld = Objects.requireNonNull(getWorld(world));
|
final World bukkitWorld = Objects.requireNonNull(getWorld(world));
|
||||||
// Skip top and bottom block
|
// Skip top and bottom block
|
||||||
int air = 1;
|
int air = 1;
|
||||||
for (int y = bukkitWorld.getMaxHeight() - 1; y >= 0; y--) {
|
int maxY = com.plotsquared.bukkit.util.BukkitWorld.getMaxWorldHeight(bukkitWorld);
|
||||||
|
int minY = com.plotsquared.bukkit.util.BukkitWorld.getMinWorldHeight(bukkitWorld);
|
||||||
|
for (int y = maxY - 1; y >= minY; y--) {
|
||||||
Block block = bukkitWorld.getBlockAt(x, y, z);
|
Block block = bukkitWorld.getBlockAt(x, y, z);
|
||||||
Material type = block.getType();
|
Material type = block.getType();
|
||||||
if (type.isSolid()) {
|
if (type.isSolid()) {
|
||||||
@ -345,13 +347,15 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ());
|
final Block block = world.getBlockAt(location.getX(), location.getY(), location.getZ());
|
||||||
final Material type = block.getType();
|
final Material type = block.getType();
|
||||||
if (type != Material.LEGACY_SIGN && type != Material.LEGACY_WALL_SIGN) {
|
if (type != Material.LEGACY_SIGN && type != Material.LEGACY_WALL_SIGN) {
|
||||||
BlockFace facing = BlockFace.EAST;
|
BlockFace facing = BlockFace.NORTH;
|
||||||
if (world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) {
|
if (!world.getBlockAt(location.getX(), location.getY(), location.getZ() + 1).getType().isSolid()) {
|
||||||
facing = BlockFace.NORTH;
|
if (world.getBlockAt(location.getX() - 1, location.getY(), location.getZ()).getType().isSolid()) {
|
||||||
} else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) {
|
facing = BlockFace.EAST;
|
||||||
facing = BlockFace.WEST;
|
} else if (world.getBlockAt(location.getX() + 1, location.getY(), location.getZ()).getType().isSolid()) {
|
||||||
} else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) {
|
facing = BlockFace.WEST;
|
||||||
facing = BlockFace.SOUTH;
|
} else if (world.getBlockAt(location.getX(), location.getY(), location.getZ() - 1).getType().isSolid()) {
|
||||||
|
facing = BlockFace.SOUTH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (PlotSquared.platform().serverVersion()[1] == 13) {
|
if (PlotSquared.platform().serverVersion()[1] == 13) {
|
||||||
block.setType(Material.valueOf(area.legacySignMaterial()), false);
|
block.setType(Material.valueOf(area.legacySignMaterial()), false);
|
||||||
@ -371,7 +375,7 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER
|
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER
|
||||||
.serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements)));
|
.serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements)));
|
||||||
}
|
}
|
||||||
sign.update(true);
|
sign.update(true, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -382,27 +386,6 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
return new StringComparison<BlockState>().new ComparisonResult(1, state);
|
return new StringComparison<BlockState>().new ComparisonResult(1, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBiomes(
|
|
||||||
final @NonNull String worldName,
|
|
||||||
final @NonNull CuboidRegion region,
|
|
||||||
final @NonNull BiomeType biomeType
|
|
||||||
) {
|
|
||||||
final World world = getWorld(worldName);
|
|
||||||
if (world == null) {
|
|
||||||
LOGGER.warn("An error occurred while setting the biome because the world was null", new RuntimeException());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final Biome biome = BukkitAdapter.adapt(biomeType);
|
|
||||||
for (int x = region.getMinimumPoint().getX(); x <= region.getMaximumPoint().getX(); x++) {
|
|
||||||
for (int z = region.getMinimumPoint().getZ(); z <= region.getMaximumPoint().getZ(); z++) {
|
|
||||||
if (world.getBiome(x, z) != biome) {
|
|
||||||
world.setBiome(x, z, biome);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public com.sk89q.worldedit.world.@NonNull World getWeWorld(final @NonNull String world) {
|
public com.sk89q.worldedit.world.@NonNull World getWeWorld(final @NonNull String world) {
|
||||||
return new BukkitWorld(Bukkit.getWorld(world));
|
return new BukkitWorld(Bukkit.getWorld(world));
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -36,6 +36,18 @@ import java.util.Objects;
|
|||||||
public class BukkitWorld implements World<org.bukkit.World> {
|
public class BukkitWorld implements World<org.bukkit.World> {
|
||||||
|
|
||||||
private static final Map<String, BukkitWorld> worldMap = Maps.newHashMap();
|
private static final Map<String, BukkitWorld> worldMap = Maps.newHashMap();
|
||||||
|
private static final boolean HAS_MIN_Y;
|
||||||
|
|
||||||
|
static {
|
||||||
|
boolean temp;
|
||||||
|
try {
|
||||||
|
org.bukkit.World.class.getMethod("getMinHeight");
|
||||||
|
temp = true;
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
temp = false;
|
||||||
|
}
|
||||||
|
HAS_MIN_Y = temp;
|
||||||
|
}
|
||||||
|
|
||||||
private final org.bukkit.World world;
|
private final org.bukkit.World world;
|
||||||
|
|
||||||
@ -73,6 +85,24 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
|||||||
return bukkitWorld;
|
return bukkitWorld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the min world height from a Bukkit {@link org.bukkit.World}. Inclusive
|
||||||
|
*
|
||||||
|
* @since 6.6.0
|
||||||
|
*/
|
||||||
|
public static int getMinWorldHeight(org.bukkit.World world) {
|
||||||
|
return HAS_MIN_Y ? world.getMinHeight() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the max world height from a Bukkit {@link org.bukkit.World}. Exclusive
|
||||||
|
*
|
||||||
|
* @since 6.6.0
|
||||||
|
*/
|
||||||
|
public static int getMaxWorldHeight(org.bukkit.World world) {
|
||||||
|
return HAS_MIN_Y ? world.getMaxHeight() : 256;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public org.bukkit.World getPlatformWorld() {
|
public org.bukkit.World getPlatformWorld() {
|
||||||
return this.world;
|
return this.world;
|
||||||
@ -83,34 +113,41 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
|||||||
return this.world.getName();
|
return this.world.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMinHeight() {
|
||||||
|
return getMinWorldHeight(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxHeight() {
|
||||||
|
return getMaxWorldHeight(world) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean equals(final Object o) {
|
public boolean equals(final Object o) {
|
||||||
if (o == this) {
|
if (this == o) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!(o instanceof final BukkitWorld other)) {
|
if (o == null || getClass() != o.getClass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!other.canEqual(this)) {
|
final BukkitWorld that = (BukkitWorld) o;
|
||||||
return false;
|
return world.equals(that.world);
|
||||||
}
|
|
||||||
if (!Objects.equals(this.world, other.world)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return world.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated This method is not meant to be invoked or overridden, with no replacement.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.6.0")
|
||||||
protected boolean canEqual(final Object other) {
|
protected boolean canEqual(final Object other) {
|
||||||
return other instanceof BukkitWorld;
|
return other instanceof BukkitWorld;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int hashCode() {
|
|
||||||
final int PRIME = 59;
|
|
||||||
int result = 1;
|
|
||||||
final Object $world = this.world;
|
|
||||||
result = result * PRIME + ($world == null ? 43 : $world.hashCode());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "BukkitWorld(world=" + this.world + ")";
|
return "BukkitWorld(world=" + this.world + ")";
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -70,7 +70,7 @@ public class ContentMap {
|
|||||||
}
|
}
|
||||||
for (int x = x1; x <= x2; x++) {
|
for (int x = x1; x <= x2; x++) {
|
||||||
for (int z = z1; z <= z2; z++) {
|
for (int z = z1; z <= z2; z++) {
|
||||||
saveBlocks(world, 256, x, z, 0, 0);
|
saveBlocks(world, x, z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -92,14 +92,7 @@ public class ContentMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void saveEntitiesIn(Chunk chunk, CuboidRegion region) {
|
void saveEntitiesIn(Chunk chunk, CuboidRegion region, boolean delete) {
|
||||||
saveEntitiesIn(chunk, region, 0, 0, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void saveEntitiesIn(
|
|
||||||
Chunk chunk, CuboidRegion region, int offsetX, int offsetZ,
|
|
||||||
boolean delete
|
|
||||||
) {
|
|
||||||
for (Entity entity : chunk.getEntities()) {
|
for (Entity entity : chunk.getEntities()) {
|
||||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||||
int x = location.getX();
|
int x = location.getX();
|
||||||
@ -111,8 +104,6 @@ public class ContentMap {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
EntityWrapper wrap = new ReplicatingEntityWrapper(entity, (short) 2);
|
EntityWrapper wrap = new ReplicatingEntityWrapper(entity, (short) 2);
|
||||||
wrap.x += offsetX;
|
|
||||||
wrap.z += offsetZ;
|
|
||||||
wrap.saveEntity();
|
wrap.saveEntity();
|
||||||
this.entities.add(wrap);
|
this.entities.add(wrap);
|
||||||
if (delete) {
|
if (delete) {
|
||||||
@ -123,10 +114,10 @@ public class ContentMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void restoreEntities(World world, int xOffset, int zOffset) {
|
void restoreEntities(World world) {
|
||||||
for (EntityWrapper entity : this.entities) {
|
for (EntityWrapper entity : this.entities) {
|
||||||
try {
|
try {
|
||||||
entity.spawn(world, xOffset, zOffset);
|
entity.spawn(world, 0, 0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("Failed to restore entity", e);
|
LOGGER.error("Failed to restore entity", e);
|
||||||
}
|
}
|
||||||
@ -134,15 +125,13 @@ public class ContentMap {
|
|||||||
this.entities.clear();
|
this.entities.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo optimize maxY
|
private void saveBlocks(BukkitWorld world, int x, int z) {
|
||||||
void saveBlocks(BukkitWorld world, int maxY, int x, int z, int offsetX, int offsetZ) {
|
BaseBlock[] ids = new BaseBlock[world.getMaxY() - world.getMinY() + 1];
|
||||||
maxY = Math.min(255, maxY);
|
for (short yIndex = 0; yIndex <= world.getMaxY() - world.getMinY(); yIndex++) {
|
||||||
BaseBlock[] ids = new BaseBlock[maxY + 1];
|
BaseBlock block = world.getFullBlock(BlockVector3.at(x, yIndex + world.getMinY(), z));
|
||||||
for (short y = 0; y <= maxY; y++) {
|
ids[yIndex] = block;
|
||||||
BaseBlock block = world.getFullBlock(BlockVector3.at(x, y, z));
|
|
||||||
ids[y] = block;
|
|
||||||
}
|
}
|
||||||
PlotLoc loc = new PlotLoc(x + offsetX, z + offsetZ);
|
PlotLoc loc = new PlotLoc(x, z);
|
||||||
this.allBlocks.put(loc, ids);
|
this.allBlocks.put(loc, ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -61,6 +61,7 @@ public class UpdateUtility implements Listener {
|
|||||||
internalVersion = PlotSquared.get().getVersion();
|
internalVersion = PlotSquared.get().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
||||||
public void updateChecker() {
|
public void updateChecker() {
|
||||||
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
|
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
|
||||||
try {
|
try {
|
||||||
@ -68,7 +69,7 @@ public class UpdateUtility implements Listener {
|
|||||||
"https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
|
"https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
|
||||||
.openConnection();
|
.openConnection();
|
||||||
connection.setRequestMethod("GET");
|
connection.setRequestMethod("GET");
|
||||||
JsonObject result = (new JsonParser())
|
JsonObject result = new JsonParser()
|
||||||
.parse(new JsonReader(new InputStreamReader(connection.getInputStream())))
|
.parse(new JsonReader(new InputStreamReader(connection.getInputStream())))
|
||||||
.getAsJsonObject();
|
.getAsJsonObject();
|
||||||
spigotVersion = result.get("current_version").getAsString();
|
spigotVersion = result.get("current_version").getAsString();
|
||||||
@ -91,7 +92,7 @@ public class UpdateUtility implements Listener {
|
|||||||
notify = false;
|
notify = false;
|
||||||
LOGGER.info("Congratulations! You are running the latest PlotSquared version");
|
LOGGER.info("Congratulations! You are running the latest PlotSquared version");
|
||||||
}
|
}
|
||||||
}, 0L, Settings.UpdateChecker.POLL_RATE * 60 * 20);
|
}, 0L, (long) Settings.UpdateChecker.POLL_RATE * 60 * 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cancelTask() {
|
private void cancelTask() {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -110,6 +110,11 @@ public class FaweRegionManager extends BukkitRegionManager {
|
|||||||
delegate.setBiome(region, extendBiome, biome, world, whenDone);
|
delegate.setBiome(region, extendBiome, biome, world, whenDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) {
|
||||||
|
delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean copyRegion(
|
public boolean copyRegion(
|
||||||
final @NonNull Location pos1,
|
final @NonNull Location pos1,
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -67,7 +67,7 @@ public class FaweSchematicHandler extends SchematicHandler {
|
|||||||
final PlotPlayer<?> actor,
|
final PlotPlayer<?> actor,
|
||||||
final RunnableVal<Boolean> whenDone
|
final RunnableVal<Boolean> whenDone
|
||||||
) {
|
) {
|
||||||
delegate.paste(schematic, plot, xOffset, yOffset, zOffset, autoHeight, whenDone);
|
delegate.paste(schematic, plot, xOffset, yOffset, zOffset, autoHeight, actor, whenDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -75,6 +75,7 @@ public class FaweSchematicHandler extends SchematicHandler {
|
|||||||
return delegate.save(tag, path);
|
return delegate.save(tag, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("removal") // Just the override
|
||||||
@Override
|
@Override
|
||||||
public void upload(final CompoundTag tag, final UUID uuid, final String file, final RunnableVal<URL> whenDone) {
|
public void upload(final CompoundTag tag, final UUID uuid, final String file, final RunnableVal<URL> whenDone) {
|
||||||
delegate.upload(tag, uuid, file, whenDone);
|
delegate.upload(tag, uuid, file, whenDone);
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -22,7 +22,7 @@ dependencies {
|
|||||||
api(libs.guiceassistedinject) {
|
api(libs.guiceassistedinject) {
|
||||||
exclude("com.google.inject", "guice")
|
exclude("com.google.inject", "guice")
|
||||||
}
|
}
|
||||||
compileOnlyApi(libs.findbugs)
|
api(libs.spotbugs)
|
||||||
|
|
||||||
// Plugins
|
// Plugins
|
||||||
compileOnly(libs.worldeditCore) {
|
compileOnly(libs.worldeditCore) {
|
||||||
@ -40,9 +40,7 @@ dependencies {
|
|||||||
// Other libraries
|
// Other libraries
|
||||||
api(libs.prtree)
|
api(libs.prtree)
|
||||||
api(libs.aopalliance)
|
api(libs.aopalliance)
|
||||||
api(libs.rorledning) {
|
api(libs.cloudServices)
|
||||||
exclude(group = "com.google.guava")
|
|
||||||
}
|
|
||||||
api(libs.arkitektonika)
|
api(libs.arkitektonika)
|
||||||
api(libs.paster)
|
api(libs.paster)
|
||||||
}
|
}
|
||||||
@ -56,3 +54,13 @@ tasks.processResources {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks {
|
||||||
|
withType<Javadoc> {
|
||||||
|
val opt = options as StandardJavadocDocletOptions
|
||||||
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
|
||||||
|
opt.links("https://jd.adventure.kyori.net/api/" + libs.adventure.get().versionConstraint.toString())
|
||||||
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
|
opt.links("https://checkerframework.org/api/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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,10 +25,10 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.core;
|
package com.plotsquared.core;
|
||||||
|
|
||||||
|
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.services.ServicePipeline;
|
|
||||||
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,6 +40,7 @@ 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;
|
||||||
@ -97,6 +98,22 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
*/
|
*/
|
||||||
int[] serverVersion();
|
int[] serverVersion();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the default minimum world height for the version of Minecraft that the server is running.
|
||||||
|
*
|
||||||
|
* @return minimum world height
|
||||||
|
* @since 6.6.0
|
||||||
|
*/
|
||||||
|
int versionMinHeight();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the default maximum world height for the version of Minecraft that the server is running.
|
||||||
|
*
|
||||||
|
* @return maximum world height (inclusive)
|
||||||
|
* @since 6.6.0
|
||||||
|
*/
|
||||||
|
int versionMaxHeight();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the server implementation name and version
|
* Gets the server implementation name and version
|
||||||
*
|
*
|
||||||
@ -273,6 +290,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
* Get the {@link PlotAreaManager} implementation.
|
* Get the {@link PlotAreaManager} implementation.
|
||||||
*
|
*
|
||||||
* @return the PlotAreaManager
|
* @return the PlotAreaManager
|
||||||
|
* @since 6.1.4
|
||||||
*/
|
*/
|
||||||
@NonNull PlotAreaManager plotAreaManager();
|
@NonNull PlotAreaManager plotAreaManager();
|
||||||
|
|
||||||
@ -291,6 +309,15 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
*/
|
*/
|
||||||
@NonNull String pluginsFormatted();
|
@NonNull String pluginsFormatted();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the kind of WorldEdit implementation
|
||||||
|
*
|
||||||
|
* @return worldedit implementations
|
||||||
|
* @since 6.3.0
|
||||||
|
*/
|
||||||
|
@AnnotationHelper.ApiDescription(info = "Internal use only")
|
||||||
|
@NonNull String worldEditImplementations();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the caption maps
|
* Load the caption maps
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -306,7 +306,7 @@ public class PlotSquared {
|
|||||||
*
|
*
|
||||||
* @param version First version
|
* @param version First version
|
||||||
* @param version2 Second version
|
* @param version2 Second version
|
||||||
* @return true if `version` is >= `version2`
|
* @return {@code true} if `version` is >= `version2`
|
||||||
*/
|
*/
|
||||||
public boolean checkVersion(
|
public boolean checkVersion(
|
||||||
final int[] version,
|
final int[] version,
|
||||||
@ -338,10 +338,13 @@ public class PlotSquared {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a global reference to a plot world.
|
* Add a global reference to a plot world.
|
||||||
|
* <p>
|
||||||
|
* You can remove the reference by calling {@link #removePlotArea(PlotArea)}
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param plotArea the {@link PlotArea} to add.
|
* @param plotArea the {@link PlotArea} to add.
|
||||||
* @see #removePlotArea(PlotArea) To remove the reference
|
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public void addPlotArea(final @NonNull PlotArea plotArea) {
|
public void addPlotArea(final @NonNull PlotArea plotArea) {
|
||||||
HashMap<PlotId, Plot> plots;
|
HashMap<PlotId, Plot> plots;
|
||||||
if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) {
|
if (plots_tmp == null || (plots = plots_tmp.remove(plotArea.toString())) == null) {
|
||||||
@ -556,6 +559,7 @@ public class PlotSquared {
|
|||||||
*
|
*
|
||||||
* @param input an array of plots to sort
|
* @param input an array of plots to sort
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
private void sortPlotsByHash(final @NonNull Plot @NonNull [] input) {
|
private void sortPlotsByHash(final @NonNull Plot @NonNull [] input) {
|
||||||
List<Plot>[] bucket = new ArrayList[32];
|
List<Plot>[] bucket = new ArrayList[32];
|
||||||
Arrays.fill(bucket, new ArrayList<>());
|
Arrays.fill(bucket, new ArrayList<>());
|
||||||
@ -696,20 +700,12 @@ public class PlotSquared {
|
|||||||
ArrayList<Plot> toReturn = new ArrayList<>(plots.size());
|
ArrayList<Plot> toReturn = new ArrayList<>(plots.size());
|
||||||
for (PlotArea area : areas) {
|
for (PlotArea area : areas) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case CREATION_DATE:
|
case CREATION_DATE -> toReturn.addAll(sortPlotsByTemp(map.get(area)));
|
||||||
toReturn.addAll(sortPlotsByTemp(map.get(area)));
|
case CREATION_DATE_TIMESTAMP -> toReturn.addAll(sortPlotsByTimestamp(map.get(area)));
|
||||||
break;
|
case DISTANCE_FROM_ORIGIN -> toReturn.addAll(sortPlotsByHash(map.get(area)));
|
||||||
case CREATION_DATE_TIMESTAMP:
|
case LAST_MODIFIED -> toReturn.addAll(sortPlotsByModified(map.get(area)));
|
||||||
toReturn.addAll(sortPlotsByTimestamp(map.get(area)));
|
default -> {
|
||||||
break;
|
}
|
||||||
case DISTANCE_FROM_ORIGIN:
|
|
||||||
toReturn.addAll(sortPlotsByHash(map.get(area)));
|
|
||||||
break;
|
|
||||||
case LAST_MODIFIED:
|
|
||||||
toReturn.addAll(sortPlotsByModified(map.get(area)));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return toReturn;
|
return toReturn;
|
||||||
@ -739,7 +735,7 @@ public class PlotSquared {
|
|||||||
*
|
*
|
||||||
* @param plot the plot to remove
|
* @param plot the plot to remove
|
||||||
* @param callEvent If to call an event about the plot being removed
|
* @param callEvent If to call an event about the plot being removed
|
||||||
* @return true if plot existed | false if it didn't
|
* @return {@code true} if plot existed | {@code false} if it didn't
|
||||||
*/
|
*/
|
||||||
public boolean removePlot(
|
public boolean removePlot(
|
||||||
final @NonNull Plot plot,
|
final @NonNull Plot plot,
|
||||||
@ -893,8 +889,8 @@ public class PlotSquared {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
LOGGER.info("| generator: {}>{}", baseGenerator, areaGen);
|
LOGGER.info("| generator: {}>{}", baseGenerator, areaGen);
|
||||||
LOGGER.info("| plot world: {}", pa);
|
LOGGER.info("| plot world: {}", pa.getClass().getCanonicalName());
|
||||||
LOGGER.info("| manager: {}", pa);
|
LOGGER.info("| manager: {}", pa.getPlotManager().getClass().getCanonicalName());
|
||||||
LOGGER.info("Note: Area created for cluster '{}' (invalid or old configuration?)", name);
|
LOGGER.info("Note: Area created for cluster '{}' (invalid or old configuration?)", name);
|
||||||
areaGen.getPlotGenerator().initialize(pa);
|
areaGen.getPlotGenerator().initialize(pa);
|
||||||
areaGen.augment(pa);
|
areaGen.augment(pa);
|
||||||
@ -910,6 +906,13 @@ public class PlotSquared {
|
|||||||
throw new IllegalArgumentException("Invalid Generator: " + gen_string);
|
throw new IllegalArgumentException("Invalid Generator: " + gen_string);
|
||||||
}
|
}
|
||||||
PlotArea pa = areaGen.getPlotGenerator().getNewPlotArea(world, null, null, null);
|
PlotArea pa = areaGen.getPlotGenerator().getNewPlotArea(world, null, null, null);
|
||||||
|
LOGGER.info("- generator: {}>{}", baseGenerator, areaGen);
|
||||||
|
LOGGER.info("- plot world: {}", pa.getClass().getCanonicalName());
|
||||||
|
LOGGER.info("- plot area manager: {}", pa.getPlotManager().getClass().getCanonicalName());
|
||||||
|
if (!this.worldConfiguration.contains(path)) {
|
||||||
|
this.worldConfiguration.createSection(path);
|
||||||
|
worldSection = this.worldConfiguration.getConfigurationSection(path);
|
||||||
|
}
|
||||||
pa.saveConfiguration(worldSection);
|
pa.saveConfiguration(worldSection);
|
||||||
pa.loadDefaultConfiguration(worldSection);
|
pa.loadDefaultConfiguration(worldSection);
|
||||||
try {
|
try {
|
||||||
@ -917,9 +920,6 @@ public class PlotSquared {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
LOGGER.info("- generator: {}>{}", baseGenerator, areaGen);
|
|
||||||
LOGGER.info("- plot world: {}", pa);
|
|
||||||
LOGGER.info("- plot area manager: {}", pa.getPlotManager());
|
|
||||||
areaGen.getPlotGenerator().initialize(pa);
|
areaGen.getPlotGenerator().initialize(pa);
|
||||||
areaGen.augment(pa);
|
areaGen.augment(pa);
|
||||||
addPlotArea(pa);
|
addPlotArea(pa);
|
||||||
@ -1024,8 +1024,8 @@ public class PlotSquared {
|
|||||||
// save configuration
|
// save configuration
|
||||||
|
|
||||||
final List<String> validArguments = Arrays
|
final List<String> validArguments = Arrays
|
||||||
.asList("s=", "size=", "g=", "gap=", "h=", "height=", "f=", "floor=", "m=", "main=",
|
.asList("s=", "size=", "g=", "gap=", "h=", "height=", "minh=", "minheight=", "maxh=", "maxheight=",
|
||||||
"w=", "wall=", "b=", "border="
|
"f=", "floor=", "m=", "main=", "w=", "wall=", "b=", "border="
|
||||||
);
|
);
|
||||||
|
|
||||||
// Calculate the number of expected arguments
|
// Calculate the number of expected arguments
|
||||||
@ -1104,6 +1104,14 @@ public class PlotSquared {
|
|||||||
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
case "minh", "minheight" -> this.worldConfiguration.set(
|
||||||
|
base + "world.min_gen_height",
|
||||||
|
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||||
|
);
|
||||||
|
case "maxh", "maxheight" -> this.worldConfiguration.set(
|
||||||
|
base + "world.max_gen_height",
|
||||||
|
ConfigurationUtil.INTEGER.parseString(value).shortValue()
|
||||||
|
);
|
||||||
case "f", "floor" -> this.worldConfiguration.set(
|
case "f", "floor" -> this.worldConfiguration.set(
|
||||||
base + "plot.floor",
|
base + "plot.floor",
|
||||||
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString()
|
ConfigurationUtil.BLOCK_BUCKET.parseString(value).toString()
|
||||||
@ -1482,7 +1490,7 @@ public class PlotSquared {
|
|||||||
*
|
*
|
||||||
* @param world World name
|
* @param world World name
|
||||||
* @param chunkCoordinates Chunk coordinates
|
* @param chunkCoordinates Chunk coordinates
|
||||||
* @return True if the chunk uses non-standard generation, false if not
|
* @return {@code true} if the chunk uses non-standard generation, {@code false} if not
|
||||||
*/
|
*/
|
||||||
public boolean isNonStandardGeneration(
|
public boolean isNonStandardGeneration(
|
||||||
final @NonNull String world,
|
final @NonNull String world,
|
||||||
@ -1527,10 +1535,12 @@ public class PlotSquared {
|
|||||||
/**
|
/**
|
||||||
* Get the caption map belonging to a namespace. If none exists, a dummy
|
* Get the caption map belonging to a namespace. If none exists, a dummy
|
||||||
* caption map will be returned.
|
* caption map will be returned.
|
||||||
|
* <p>
|
||||||
|
* You can register a caption map by calling {@link #registerCaptionMap(String, CaptionMap)}
|
||||||
|
* </p>
|
||||||
*
|
*
|
||||||
* @param namespace Namespace
|
* @param namespace Namespace
|
||||||
* @return Map instance
|
* @return Map instance
|
||||||
* @see #registerCaptionMap(String, CaptionMap) To register a caption map
|
|
||||||
*/
|
*/
|
||||||
public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) {
|
public @NonNull CaptionMap getCaptionMap(final @NonNull String namespace) {
|
||||||
return this.captionMaps.computeIfAbsent(
|
return this.captionMaps.computeIfAbsent(
|
||||||
@ -1540,7 +1550,7 @@ public class PlotSquared {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a caption map. The namespace needs be equal to the namespace used for
|
* Register a caption map. The namespace needs to be equal to the namespace used for
|
||||||
* the {@link TranslatableCaption}s inside the map.
|
* the {@link TranslatableCaption}s inside the map.
|
||||||
*
|
*
|
||||||
* @param namespace Namespace
|
* @param namespace Namespace
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -122,7 +122,7 @@ public final class PlotVersion {
|
|||||||
* Compare a given version string with the one cached here.
|
* Compare a given version string with the one cached here.
|
||||||
*
|
*
|
||||||
* @param versionString the version to compare
|
* @param versionString the version to compare
|
||||||
* @return true if the given version is a "later" version
|
* @return {@code true} if the given version is a "later" version
|
||||||
*/
|
*/
|
||||||
public boolean isLaterVersion(final @NonNull String versionString) {
|
public boolean isLaterVersion(final @NonNull String versionString) {
|
||||||
int dash = versionString.indexOf('-');
|
int dash = versionString.indexOf('-');
|
||||||
@ -144,7 +144,7 @@ public final class PlotVersion {
|
|||||||
* Compare a given version with the one cached here.
|
* Compare a given version with the one cached here.
|
||||||
*
|
*
|
||||||
* @param verArray the version to compare
|
* @param verArray the version to compare
|
||||||
* @return true if the given version is a "later" version
|
* @return {@code true} if the given version is a "later" version
|
||||||
*/
|
*/
|
||||||
public boolean isLaterVersion(int[] verArray) {
|
public boolean isLaterVersion(int[] verArray) {
|
||||||
if (verArray[0] > version[0]) {
|
if (verArray[0] > version[0]) {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -88,7 +88,7 @@ public interface BackupManager {
|
|||||||
* Returns true if (potentially) destructive actions should cause
|
* Returns true if (potentially) destructive actions should cause
|
||||||
* PlotSquared to create automatic plot backups
|
* PlotSquared to create automatic plot backups
|
||||||
*
|
*
|
||||||
* @return True if automatic backups are enabled
|
* @return {@code true} if automatic backups are enabled
|
||||||
*/
|
*/
|
||||||
boolean shouldAutomaticallyBackup();
|
boolean shouldAutomaticallyBackup();
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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,7 +29,8 @@ import java.util.Arrays;
|
|||||||
|
|
||||||
public class ArrayUtil {
|
public class ArrayUtil {
|
||||||
|
|
||||||
public static final <T> T[] concatAll(T[] first, T[]... rest) {
|
@SuppressWarnings("unchecked")
|
||||||
|
public static <T> T[] concatAll(T[] first, T[]... rest) {
|
||||||
int totalLength = first.length;
|
int totalLength = first.length;
|
||||||
for (T[] array : rest) {
|
for (T[] array : rest) {
|
||||||
totalLength += array.length;
|
totalLength += array.length;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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,6 +35,7 @@ public class FlatRandomCollection<T> extends RandomCollection<T> {
|
|||||||
|
|
||||||
private final T[] values;
|
private final T[] values;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public FlatRandomCollection(Map<T, Double> weights, Random random) {
|
public FlatRandomCollection(Map<T, Double> weights, Random random) {
|
||||||
super(weights, random);
|
super(weights, random);
|
||||||
int max = 0;
|
int max = 0;
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
@ -241,6 +241,7 @@ public class QuadMap<T> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public void recalculateSkip() {
|
public void recalculateSkip() {
|
||||||
QuadMap<T> map = null;
|
QuadMap<T> map = null;
|
||||||
for (QuadMap<T> current : new QuadMap[]{this.one, this.two, this.three, this.four}) {
|
for (QuadMap<T> current : new QuadMap[]{this.one, this.two, this.three, this.four}) {
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
* | |
|
* | |
|
||||||
* |_|
|
* |_|
|
||||||
* PlotSquared plot management system for Minecraft
|
* PlotSquared plot management system for Minecraft
|
||||||
* Copyright (C) 2021 IntellectualSites
|
* 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
Reference in New Issue
Block a user