mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-04-03 10:06:24 +02:00
Compare commits
No commits in common. "7.3.10" and "v6" have entirely different histories.
19
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
19
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -7,8 +7,8 @@ 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://intellectualsites.gitbook.io/plotsquared/).
|
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://github.com/IntellectualSites/PlotSquared/security/policy) GitHub 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
|
||||||
attributes:
|
attributes:
|
||||||
@ -24,14 +24,17 @@ body:
|
|||||||
- type: dropdown
|
- type: dropdown
|
||||||
attributes:
|
attributes:
|
||||||
label: Server Version
|
label: Server Version
|
||||||
description: Which server version are 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.21.1'
|
- '1.19.3'
|
||||||
- '1.20.6'
|
- '1.19.2'
|
||||||
- '1.20.4'
|
- '1.19.1'
|
||||||
- '1.20'
|
- '1.19'
|
||||||
- '1.19.4'
|
- '1.18.2'
|
||||||
|
- '1.18.1'
|
||||||
|
- '1.17.1'
|
||||||
|
- '1.16.5'
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
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://intellectualsites.gitbook.io/plotsquared/
|
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://intellectualsites.gitbook.io/plotsquared/).
|
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:
|
||||||
|
18
.github/renovate.json
vendored
18
.github/renovate.json
vendored
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
||||||
"extends": [
|
|
||||||
"config:base",
|
|
||||||
":semanticCommitsDisabled"
|
|
||||||
],
|
|
||||||
"automerge": true,
|
|
||||||
"labels": [
|
|
||||||
"dependencies"
|
|
||||||
],
|
|
||||||
"rebaseWhen": "conflicted",
|
|
||||||
"ignoreDeps": [
|
|
||||||
"com.google.code.gson:gson",
|
|
||||||
"com.google.guava:guava",
|
|
||||||
"org.yaml:snakeyaml",
|
|
||||||
"org.apache.logging.log4j:log4j-api"
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
name: Announce release on discord
|
name: Announce release on discord
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [ published ]
|
types: [published]
|
||||||
jobs:
|
jobs:
|
||||||
send_announcement:
|
send_announcement:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@ -11,7 +11,7 @@ jobs:
|
|||||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
DISCORD_USERNAME: PlotSquared Release
|
DISCORD_USERNAME: PlotSquared Release
|
||||||
DISCORD_AVATAR: https://raw.githubusercontent.com/IntellectualSites/Assets/main/plugins/PlotSquared/PlotSquared.png
|
DISCORD_AVATAR: https://raw.githubusercontent.com/IntellectualSites/Assets/main/plugins/PlotSquared/PlotSquared.png
|
||||||
uses: Ilshidur/action-discord@0.3.2
|
uses: Ilshidur/action-discord@08d9328877d6954120eef2b07abbc79249bb6210 # ratchet:Ilshidur/action-discord@0.3.2
|
||||||
with:
|
with:
|
||||||
args: |
|
args: |
|
||||||
"<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>"
|
"<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>"
|
||||||
|
12
.github/workflows/build-pr.yml
vendored
12
.github/workflows/build-pr.yml
vendored
@ -1,21 +1,21 @@
|
|||||||
name: Build PR
|
name: Build PR
|
||||||
on: [ pull_request ]
|
on: [pull_request]
|
||||||
jobs:
|
jobs:
|
||||||
build_pr:
|
build_pr:
|
||||||
if: github.repository_owner == 'IntellectualSites'
|
if: github.repository_owner == 'IntellectualSites'
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: Validate Gradle Wrapper
|
- name: Validate Gradle Wrapper
|
||||||
uses: gradle/actions/wrapper-validation@v4
|
uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6 # v1
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: 21
|
java-version: 17
|
||||||
- name: Clean Build
|
- name: Clean Build
|
||||||
run: ./gradlew clean build
|
run: ./gradlew clean build
|
||||||
|
26
.github/workflows/build.yml
vendored
26
.github/workflows/build.yml
vendored
@ -2,21 +2,21 @@ name: build
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- v6
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
if: github.repository_owner == 'IntellectualSites'
|
if: github.repository_owner == 'IntellectualSites'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: Validate Gradle Wrapper
|
- name: Validate Gradle Wrapper
|
||||||
uses: gradle/actions/wrapper-validation@v4
|
uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6 # v1
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: temurin
|
distribution: temurin
|
||||||
java-version: 21
|
java-version: 17
|
||||||
- name: Clean Build
|
- name: Clean Build
|
||||||
run: ./gradlew clean build
|
run: ./gradlew clean build
|
||||||
- name: Determine release status
|
- name: Determine release status
|
||||||
@ -28,7 +28,7 @@ jobs:
|
|||||||
echo "STATUS=release" >> $GITHUB_ENV
|
echo "STATUS=release" >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
- name: Publish Release
|
- name: Publish Release
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}}
|
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
|
||||||
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
|
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||||
env:
|
env:
|
||||||
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
||||||
@ -36,14 +36,14 @@ jobs:
|
|||||||
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.SIGNING_KEY }}
|
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.SIGNING_KEY }}
|
||||||
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.SIGNING_PASSWORD }}
|
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.SIGNING_PASSWORD }}
|
||||||
- name: Publish Snapshot
|
- name: Publish Snapshot
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS != 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
if: ${{ runner.os == 'Linux' && env.STATUS != 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6' }}
|
||||||
run: ./gradlew publishToSonatype
|
run: ./gradlew publishToSonatype
|
||||||
env:
|
env:
|
||||||
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
||||||
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
|
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
|
||||||
- name: Publish core javadoc
|
- name: Publish core javadoc
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}}
|
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
|
||||||
uses: cpina/github-action-push-to-another-repository@main
|
uses: cpina/github-action-push-to-another-repository@0a14457bb28b04dfa1652e0ffdfda866d2845c73 # main
|
||||||
env:
|
env:
|
||||||
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
||||||
with:
|
with:
|
||||||
@ -52,10 +52,10 @@ jobs:
|
|||||||
destination-repository-name: 'plotsquared-javadocs'
|
destination-repository-name: 'plotsquared-javadocs'
|
||||||
user-email: ${{ secrets.USER_EMAIL }}
|
user-email: ${{ secrets.USER_EMAIL }}
|
||||||
target-branch: main
|
target-branch: main
|
||||||
target-directory: v7/core
|
target-directory: core
|
||||||
- name: Publish bukkit javadoc
|
- name: Publish bukkit javadoc
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}}
|
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
|
||||||
uses: cpina/github-action-push-to-another-repository@main
|
uses: cpina/github-action-push-to-another-repository@0a14457bb28b04dfa1652e0ffdfda866d2845c73 # main
|
||||||
env:
|
env:
|
||||||
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
||||||
with:
|
with:
|
||||||
@ -64,4 +64,4 @@ jobs:
|
|||||||
destination-repository-name: 'plotsquared-javadocs'
|
destination-repository-name: 'plotsquared-javadocs'
|
||||||
user-email: ${{ secrets.USER_EMAIL }}
|
user-email: ${{ secrets.USER_EMAIL }}
|
||||||
target-branch: main
|
target-branch: main
|
||||||
target-directory: v7/bukkit
|
target-directory: bukkit
|
||||||
|
20
.github/workflows/codeql.yml
vendored
20
.github/workflows/codeql.yml
vendored
@ -1,11 +1,8 @@
|
|||||||
name: "CodeQL"
|
name: "CodeQL"
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches: [ main ]
|
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
# The branches below must be a subset of the branches above
|
||||||
branches: [ main ]
|
branches: [v6]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
name: Analyze
|
name: Analyze
|
||||||
@ -17,20 +14,15 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
language: [ 'java' ]
|
language: ['java']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: Setup Java
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: temurin
|
|
||||||
java-version: 21
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v3
|
uses: github/codeql-action/autobuild@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v3
|
uses: github/codeql-action/analyze@32dc499307d133bb5085bae78498c0ac2cf762d5 # v2
|
||||||
|
23
.github/workflows/label-merge-conflicts.yaml
vendored
23
.github/workflows/label-merge-conflicts.yaml
vendored
@ -1,23 +0,0 @@
|
|||||||
name: "Label conflicting PRs"
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
pull_request_target:
|
|
||||||
types: [ synchronize ]
|
|
||||||
pull_request:
|
|
||||||
types: [ synchronize ]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
pull-requests: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
main:
|
|
||||||
if: github.event.pull_request.user.login != 'dependabot[bot]'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Label conflicting PRs
|
|
||||||
uses: eps1lon/actions-label-merge-conflict@v3.0.2
|
|
||||||
with:
|
|
||||||
dirtyLabel: "unresolved-merge-conflict"
|
|
||||||
repoToken: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
commentOnDirty: "Please take a moment and address the merge conflicts of your pull request. Thanks!"
|
|
||||||
continueOnMissingPermissions: true
|
|
8
.github/workflows/release-drafter.yml
vendored
8
.github/workflows/release-drafter.yml
vendored
@ -2,16 +2,16 @@ name: draft release
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- v6
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [ opened, reopened, synchronize ]
|
types: [opened, reopened, synchronize]
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [ opened, reopened, synchronize ]
|
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 }}
|
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@v6
|
- uses: release-drafter/release-drafter@v5
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -137,6 +137,3 @@ docs/
|
|||||||
build/
|
build/
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
# Ignore run folders
|
|
||||||
run-[0-9].[0-9][0-9]/
|
|
||||||
run-[0-9].[0-9][0-9].[0-9]/
|
|
||||||
|
154
.idea/icon.svg
generated
154
.idea/icon.svg
generated
@ -1,144 +1,48 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg
|
<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">
|
||||||
version="1.1"
|
<metadata id="metadata8">
|
||||||
id="svg2"
|
|
||||||
xml:space="preserve"
|
|
||||||
width="512"
|
|
||||||
height="512"
|
|
||||||
viewBox="0 0 512 512.00001"
|
|
||||||
sodipodi:docname="icon.svg"
|
|
||||||
inkscape:version="1.1.2 (b8e25be8, 2022-02-05)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
||||||
<metadata
|
|
||||||
id="metadata8">
|
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work
|
<cc:Work rdf:about="">
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<defs
|
<defs id="defs6">
|
||||||
id="defs6">
|
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
|
||||||
<clipPath
|
<path d="M 0,2500 H 3000 V 0 H 0 Z" id="path16" />
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath18">
|
|
||||||
<path
|
|
||||||
d="M 0,2500 H 3000 V 0 H 0 Z"
|
|
||||||
id="path16" />
|
|
||||||
</clipPath>
|
</clipPath>
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<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" />
|
||||||
pagecolor="#ffffff"
|
<g id="g10" inkscape:groupmode="layer" inkscape:label="PlotSquared" transform="matrix(1.3333333,0,0,-1.3333333,0,3333.3333)">
|
||||||
bordercolor="#666666"
|
<g id="g12">
|
||||||
borderopacity="1"
|
<g id="g14" clip-path="url(#clipPath18)">
|
||||||
objecttolerance="10"
|
<g id="g20" transform="translate(1486.1511,2242.6453)">
|
||||||
gridtolerance="10"
|
<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" />
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1440"
|
|
||||||
inkscape:window-height="900"
|
|
||||||
id="namedview4"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="0.1632"
|
|
||||||
inkscape:cx="1087.6225"
|
|
||||||
inkscape:cy="1666.6666"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:current-layer="g10" />
|
|
||||||
<g
|
|
||||||
id="g10"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
inkscape:label="PlotSquared"
|
|
||||||
transform="matrix(1.3333333,0,0,-1.3333333,0,3333.3333)">
|
|
||||||
<g
|
|
||||||
id="g12"
|
|
||||||
transform="matrix(0.16955078,0,0,0.16955078,-68.456969,2101.8529)">
|
|
||||||
<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>
|
||||||
<g
|
<g id="g24" transform="translate(1201.7948,1741.5303)">
|
||||||
id="g24"
|
<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" />
|
||||||
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>
|
||||||
<g
|
<g id="g28" transform="translate(919.3342,1429.7462)">
|
||||||
id="g28"
|
<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" />
|
||||||
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>
|
||||||
<g
|
<g id="g32" transform="translate(1649.134,1700.6166)">
|
||||||
id="g32"
|
<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" />
|
||||||
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>
|
||||||
<g
|
<g id="g36" transform="translate(1262.7214,1613.126)">
|
||||||
id="g36"
|
<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" />
|
||||||
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>
|
||||||
<g
|
<g id="g40" transform="translate(1966.3174,1675.6364)">
|
||||||
id="g40"
|
<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" />
|
||||||
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>
|
||||||
<g
|
<g id="g44" transform="translate(1499.3971,1669.1094)">
|
||||||
id="g44"
|
<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" />
|
||||||
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>
|
||||||
<g
|
<g id="g48" transform="translate(1748.0469,1601.6797)">
|
||||||
id="g48"
|
<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" />
|
||||||
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>
|
||||||
<g
|
<g id="g52" transform="translate(1262.7214,1613.126)">
|
||||||
id="g52"
|
<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" />
|
||||||
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>
|
||||||
</g>
|
</g>
|
||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
@ -18,23 +18,23 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api(projects.plotsquaredCore)
|
api(projects.plotSquaredCore)
|
||||||
|
|
||||||
// Metrics
|
// Metrics
|
||||||
implementation(libs.bstatsBukkit)
|
implementation("org.bstats:bstats-bukkit")
|
||||||
|
|
||||||
// Paper
|
// Paper
|
||||||
compileOnly(libs.paper)
|
compileOnly("io.papermc.paper:paper-api")
|
||||||
implementation(libs.paperlib)
|
implementation("io.papermc:paperlib")
|
||||||
|
|
||||||
// Plugins
|
// Plugins
|
||||||
compileOnly(libs.worldeditBukkit) {
|
compileOnly(libs.worldeditBukkit) {
|
||||||
exclude(group = "org.bukkit")
|
exclude(group = "org.bukkit")
|
||||||
exclude(group = "org.spigotmc")
|
exclude(group = "org.spigotmc")
|
||||||
}
|
}
|
||||||
compileOnly(libs.faweBukkit) { isTransitive = false }
|
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
|
||||||
testImplementation(libs.faweBukkit) { isTransitive = false }
|
testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
|
||||||
compileOnly(libs.vault) {
|
compileOnly("com.github.MilkBowl:VaultAPI") {
|
||||||
exclude(group = "org.bukkit")
|
exclude(group = "org.bukkit")
|
||||||
}
|
}
|
||||||
compileOnly(libs.placeholderapi)
|
compileOnly(libs.placeholderapi)
|
||||||
@ -44,15 +44,16 @@ dependencies {
|
|||||||
|
|
||||||
// Other libraries
|
// Other libraries
|
||||||
implementation(libs.squirrelid) { isTransitive = false }
|
implementation(libs.squirrelid) { isTransitive = false }
|
||||||
implementation(libs.serverlib)
|
implementation("dev.notmyfault.serverlib:ServerLib")
|
||||||
|
|
||||||
// Our libraries
|
// Our libraries
|
||||||
implementation(libs.arkitektonika)
|
implementation(libs.arkitektonika)
|
||||||
implementation(libs.paster)
|
implementation(libs.http4j)
|
||||||
implementation(libs.informativeAnnotations)
|
implementation("com.intellectualsites.paster:Paster")
|
||||||
|
implementation("com.intellectualsites.informative-annotations:informative-annotations")
|
||||||
|
|
||||||
// Adventure
|
// Adventure
|
||||||
implementation(libs.adventureBukkit)
|
implementation("net.kyori:adventure-platform-bukkit")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.processResources {
|
tasks.processResources {
|
||||||
@ -62,12 +63,10 @@ tasks.processResources {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tasks.named<ShadowJar>("shadowJar") {
|
tasks.named<ShadowJar>("shadowJar") {
|
||||||
dependsOn(":plotsquared-core:shadowJar")
|
|
||||||
dependencies {
|
dependencies {
|
||||||
exclude(dependency("org.checkerframework:"))
|
exclude(dependency("org.checkerframework:"))
|
||||||
}
|
}
|
||||||
|
|
||||||
relocate("net.kyori.option", "com.plotsquared.core.configuration.option")
|
|
||||||
relocate("net.kyori.adventure", "com.plotsquared.core.configuration.adventure")
|
relocate("net.kyori.adventure", "com.plotsquared.core.configuration.adventure")
|
||||||
relocate("net.kyori.examination", "com.plotsquared.core.configuration.examination")
|
relocate("net.kyori.examination", "com.plotsquared.core.configuration.examination")
|
||||||
relocate("io.papermc.lib", "com.plotsquared.bukkit.paperlib")
|
relocate("io.papermc.lib", "com.plotsquared.bukkit.paperlib")
|
||||||
@ -89,7 +88,7 @@ tasks.named<ShadowJar>("shadowJar") {
|
|||||||
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
|
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
|
||||||
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
|
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
|
||||||
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
|
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
|
||||||
relocate("com.intellectualsites.annotations", "com.plotsquared.core.annotations.informative")
|
relocate("com.intellectualsites.informative-annotations", "com.plotsquared.core.annotation.informative")
|
||||||
|
|
||||||
// Get rid of all the libs which are 100% unused.
|
// Get rid of all the libs which are 100% unused.
|
||||||
minimize()
|
minimize()
|
||||||
@ -101,10 +100,10 @@ tasks {
|
|||||||
withType<Javadoc> {
|
withType<Javadoc> {
|
||||||
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
|
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
|
||||||
val opt = options as StandardJavadocDocletOptions
|
val opt = options as StandardJavadocDocletOptions
|
||||||
opt.links("https://jd.papermc.io/paper/1.20/")
|
opt.links("https://jd.papermc.io/paper/1.18/")
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
|
||||||
opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
|
opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
|
||||||
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
|
||||||
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
opt.isLinkSource = true
|
opt.isLinkSource = true
|
||||||
@ -113,6 +112,5 @@ tasks {
|
|||||||
opt.encoding("UTF-8")
|
opt.encoding("UTF-8")
|
||||||
opt.keyWords()
|
opt.keyWords()
|
||||||
opt.addStringOption("-since", isRelease)
|
opt.addStringOption("-since", isRelease)
|
||||||
opt.noTimestamp()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import com.google.inject.Injector;
|
|||||||
import com.google.inject.Key;
|
import com.google.inject.Key;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.google.inject.Stage;
|
import com.google.inject.Stage;
|
||||||
|
import com.google.inject.TypeLiteral;
|
||||||
import com.plotsquared.bukkit.generator.BukkitPlotGenerator;
|
import com.plotsquared.bukkit.generator.BukkitPlotGenerator;
|
||||||
import com.plotsquared.bukkit.inject.BackupModule;
|
import com.plotsquared.bukkit.inject.BackupModule;
|
||||||
import com.plotsquared.bukkit.inject.BukkitModule;
|
import com.plotsquared.bukkit.inject.BukkitModule;
|
||||||
@ -34,10 +35,8 @@ import com.plotsquared.bukkit.listener.BlockEventListener117;
|
|||||||
import com.plotsquared.bukkit.listener.ChunkListener;
|
import com.plotsquared.bukkit.listener.ChunkListener;
|
||||||
import com.plotsquared.bukkit.listener.EntityEventListener;
|
import com.plotsquared.bukkit.listener.EntityEventListener;
|
||||||
import com.plotsquared.bukkit.listener.EntitySpawnListener;
|
import com.plotsquared.bukkit.listener.EntitySpawnListener;
|
||||||
import com.plotsquared.bukkit.listener.HighFreqBlockEventListener;
|
|
||||||
import com.plotsquared.bukkit.listener.PaperListener;
|
import com.plotsquared.bukkit.listener.PaperListener;
|
||||||
import com.plotsquared.bukkit.listener.PlayerEventListener;
|
import com.plotsquared.bukkit.listener.PlayerEventListener;
|
||||||
import com.plotsquared.bukkit.listener.PlayerEventListener1201;
|
|
||||||
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
||||||
import com.plotsquared.bukkit.listener.ServerListener;
|
import com.plotsquared.bukkit.listener.ServerListener;
|
||||||
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
||||||
@ -45,11 +44,11 @@ import com.plotsquared.bukkit.listener.SpigotListener;
|
|||||||
import com.plotsquared.bukkit.listener.WorldEvents;
|
import com.plotsquared.bukkit.listener.WorldEvents;
|
||||||
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
|
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
|
||||||
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
|
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
|
||||||
|
import com.plotsquared.bukkit.player.BukkitPlayer;
|
||||||
import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.plotsquared.bukkit.util.BukkitWorld;
|
import com.plotsquared.bukkit.util.BukkitWorld;
|
||||||
import com.plotsquared.bukkit.util.SetGenCB;
|
import com.plotsquared.bukkit.util.SetGenCB;
|
||||||
import com.plotsquared.bukkit.util.TranslationUpdateManager;
|
|
||||||
import com.plotsquared.bukkit.util.UpdateUtility;
|
import com.plotsquared.bukkit.util.UpdateUtility;
|
||||||
import com.plotsquared.bukkit.util.task.BukkitTaskManager;
|
import com.plotsquared.bukkit.util.task.BukkitTaskManager;
|
||||||
import com.plotsquared.bukkit.util.task.PaperTimeConverter;
|
import com.plotsquared.bukkit.util.task.PaperTimeConverter;
|
||||||
@ -135,14 +134,12 @@ import org.bukkit.generator.ChunkGenerator;
|
|||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.metadata.MetadataValue;
|
import org.bukkit.metadata.MetadataValue;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.incendo.serverlib.ServerLib;
|
import org.incendo.serverlib.ServerLib;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
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;
|
||||||
@ -253,7 +250,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
this.pluginName = getDescription().getName();
|
this.pluginName = getDescription().getName();
|
||||||
|
|
||||||
@ -297,12 +293,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
);
|
);
|
||||||
this.injector.injectMembers(this);
|
this.injector.injectMembers(this);
|
||||||
|
|
||||||
try {
|
|
||||||
this.injector.getInstance(TranslationUpdateManager.class).upgradeTranslationFile();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE);
|
this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE);
|
||||||
|
|
||||||
if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) {
|
if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) {
|
||||||
@ -359,13 +349,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
|
|
||||||
if (Settings.Enabled_Components.EVENTS) {
|
if (Settings.Enabled_Components.EVENTS) {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener.class), this);
|
||||||
if ((serverVersion()[1] == 20 && serverVersion()[2] >= 1) || serverVersion()[1] > 20) {
|
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(PlayerEventListener1201.class), this);
|
|
||||||
}
|
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener.class), this);
|
||||||
if (Settings.HIGH_FREQUENCY_LISTENER) {
|
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(HighFreqBlockEventListener.class), this);
|
|
||||||
}
|
|
||||||
if (serverVersion()[1] >= 17) {
|
if (serverVersion()[1] >= 17) {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener117.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(BlockEventListener117.class), this);
|
||||||
}
|
}
|
||||||
@ -374,7 +358,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
getServer().getPluginManager().registerEvents(injector().getInstance(ServerListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(ServerListener.class), this);
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(EntitySpawnListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(EntitySpawnListener.class), this);
|
||||||
if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) {
|
if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
||||||
} else {
|
} else {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
|
||||||
}
|
}
|
||||||
@ -558,7 +542,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
this.startMetrics();
|
this.startMetrics();
|
||||||
|
|
||||||
if (Settings.Enabled_Components.WORLDS) {
|
if (Settings.Enabled_Components.WORLDS) {
|
||||||
TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(10L));
|
TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(1L));
|
||||||
try {
|
try {
|
||||||
singleWorldListener = injector().getInstance(SingleWorldListener.class);
|
singleWorldListener = injector().getInstance(SingleWorldListener.class);
|
||||||
Bukkit.getPluginManager().registerEvents(singleWorldListener, this);
|
Bukkit.getPluginManager().registerEvents(singleWorldListener, this);
|
||||||
@ -781,14 +765,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
Iterator<Entity> iterator = entities.iterator();
|
Iterator<Entity> iterator = entities.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Entity entity = iterator.next();
|
Entity entity = iterator.next();
|
||||||
//noinspection ConstantValue - getEntitySpawnReason annotated as NotNull, but is not NotNull. lol.
|
|
||||||
if (PaperLib.isPaper() && entity.getEntitySpawnReason() != null && "CUSTOM".equals(entity.getEntitySpawnReason().name())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// Fallback for Spigot not having Entity#getEntitySpawnReason
|
|
||||||
if (entity.getMetadata("ps_custom_spawned").stream().anyMatch(MetadataValue::asBoolean)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch (entity.getType().toString()) {
|
switch (entity.getType().toString()) {
|
||||||
case "EGG":
|
case "EGG":
|
||||||
case "FISHING_HOOK":
|
case "FISHING_HOOK":
|
||||||
@ -822,19 +798,12 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
// Temporarily classify as vehicle
|
// Temporarily classify as vehicle
|
||||||
case "MINECART":
|
case "MINECART":
|
||||||
case "MINECART_CHEST":
|
case "MINECART_CHEST":
|
||||||
case "CHEST_MINECART":
|
|
||||||
case "MINECART_COMMAND":
|
case "MINECART_COMMAND":
|
||||||
case "COMMAND_BLOCK_MINECART":
|
|
||||||
case "MINECART_FURNACE":
|
case "MINECART_FURNACE":
|
||||||
case "FURNACE_MINECART":
|
|
||||||
case "MINECART_HOPPER":
|
case "MINECART_HOPPER":
|
||||||
case "HOPPER_MINECART":
|
|
||||||
case "MINECART_MOB_SPAWNER":
|
case "MINECART_MOB_SPAWNER":
|
||||||
case "SPAWNER_MINECART":
|
|
||||||
case "ENDER_CRYSTAL":
|
case "ENDER_CRYSTAL":
|
||||||
case "MINECART_TNT":
|
case "MINECART_TNT":
|
||||||
case "TNT_MINECART":
|
|
||||||
case "CHEST_BOAT":
|
|
||||||
case "BOAT":
|
case "BOAT":
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
if (Settings.Enabled_Components.KILL_ROAD_VEHICLES) {
|
||||||
com.plotsquared.core.location.Location location = BukkitUtil.adapt(entity.getLocation());
|
com.plotsquared.core.location.Location location = BukkitUtil.adapt(entity.getLocation());
|
||||||
@ -883,7 +852,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
if (livingEntity.isLeashed() && !Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS) {
|
if (livingEntity.isLeashed() && !Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (entity.hasMetadata("keep")) {
|
List<MetadataValue> keep = entity.getMetadata("keep");
|
||||||
|
if (!keep.isEmpty()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1182,7 +1152,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
|
return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull String pluginsFormatted() {
|
public @NonNull String pluginsFormatted() {
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
@ -1199,37 +1168,18 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
.append(" • Load Before: ").append(p.getDescription().getLoadBefore()).append("\n")
|
.append(" • Load Before: ").append(p.getDescription().getLoadBefore()).append("\n")
|
||||||
.append(" • Dependencies: ").append(p.getDescription().getDepend()).append("\n")
|
.append(" • Dependencies: ").append(p.getDescription().getDepend()).append("\n")
|
||||||
.append(" • Soft Dependencies: ").append(p.getDescription().getSoftDepend()).append("\n");
|
.append(" • Soft Dependencies: ").append(p.getDescription().getSoftDepend()).append("\n");
|
||||||
List<RegisteredServiceProvider<?>> providers = Bukkit.getServicesManager().getRegistrations(p);
|
|
||||||
if (!providers.isEmpty()) {
|
|
||||||
msg.append(" • Provided Services: \n");
|
|
||||||
for (RegisteredServiceProvider<?> provider : providers) {
|
|
||||||
msg.append(" • ")
|
|
||||||
.append(provider.getService().getName()).append(" = ")
|
|
||||||
.append(provider.getProvider().getClass().getName())
|
|
||||||
.append(" (priority: ").append(provider.getPriority()).append(")")
|
|
||||||
.append("\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return msg.toString();
|
return msg.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings({"ConstantConditions", "deprecation"}) // Paper deprecation
|
@SuppressWarnings("ConstantConditions")
|
||||||
public @NonNull String worldEditImplementations() {
|
public @NonNull String worldEditImplementations() {
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
|
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
|
||||||
msg.append("FastAsyncWorldEdit: ").append(Bukkit
|
msg.append("FastAsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit").getDescription().getVersion());
|
||||||
.getPluginManager()
|
|
||||||
.getPlugin("FastAsyncWorldEdit")
|
|
||||||
.getDescription()
|
|
||||||
.getVersion());
|
|
||||||
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
||||||
msg.append("AsyncWorldEdit: ").append(Bukkit
|
msg.append("AsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("AsyncWorldEdit").getDescription().getVersion()).append("\n");
|
||||||
.getPluginManager()
|
|
||||||
.getPlugin("AsyncWorldEdit")
|
|
||||||
.getDescription()
|
|
||||||
.getVersion()).append("\n");
|
|
||||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
} else {
|
} else {
|
||||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
@ -1279,13 +1229,15 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull PlatformWorldManager<?> worldManager() {
|
public @NonNull PlatformWorldManager<?> worldManager() {
|
||||||
return this.worldManager;
|
return injector().getInstance(Key.get(new TypeLiteral<PlatformWorldManager<World>>() {
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NonNull
|
@NonNull
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
|
public PlayerManager<? extends PlotPlayer<Player>, ? extends Player> playerManager() {
|
||||||
return this.playerManager;
|
return (PlayerManager<BukkitPlayer, Player>) injector().getInstance(PlayerManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,7 +33,6 @@ import org.bukkit.entity.Ageable;
|
|||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Bat;
|
import org.bukkit.entity.Bat;
|
||||||
import org.bukkit.entity.Boat;
|
import org.bukkit.entity.Boat;
|
||||||
import org.bukkit.entity.Breedable;
|
|
||||||
import org.bukkit.entity.ChestedHorse;
|
import org.bukkit.entity.ChestedHorse;
|
||||||
import org.bukkit.entity.EnderDragon;
|
import org.bukkit.entity.EnderDragon;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@ -75,7 +74,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
private HorseStats horse;
|
private HorseStats horse;
|
||||||
private boolean noGravity;
|
private boolean noGravity;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Deprecation exists since 1.20, while we support 1.16 onwards
|
|
||||||
public ReplicatingEntityWrapper(Entity entity, short depth) {
|
public ReplicatingEntityWrapper(Entity entity, short depth) {
|
||||||
super(entity);
|
super(entity);
|
||||||
|
|
||||||
@ -103,26 +101,50 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.noGravity = true;
|
this.noGravity = true;
|
||||||
}
|
}
|
||||||
switch (entity.getType().toString()) {
|
switch (entity.getType().toString()) {
|
||||||
case "BOAT" -> {
|
case "BOAT":
|
||||||
Boat boat = (Boat) entity;
|
Boat boat = (Boat) entity;
|
||||||
this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
|
this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
|
||||||
return;
|
return;
|
||||||
}
|
case "ARROW":
|
||||||
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL",
|
case "EGG":
|
||||||
"FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "MINECART_MOB_SPAWNER",
|
case "ENDER_CRYSTAL":
|
||||||
"MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION",
|
case "ENDER_PEARL":
|
||||||
"THROWN_EXP_BOTTLE", "WITHER_SKULL", "UNKNOWN", "SPECTRAL_ARROW", "SHULKER_BULLET", "DRAGON_FIREBALL", "AREA_EFFECT_CLOUD",
|
case "ENDER_SIGNAL":
|
||||||
"TRIDENT", "LLAMA_SPIT" -> {
|
case "EXPERIENCE_ORB":
|
||||||
|
case "FALLING_BLOCK":
|
||||||
|
case "FIREBALL":
|
||||||
|
case "FIREWORK":
|
||||||
|
case "FISHING_HOOK":
|
||||||
|
case "LEASH_HITCH":
|
||||||
|
case "LIGHTNING":
|
||||||
|
case "MINECART":
|
||||||
|
case "MINECART_COMMAND":
|
||||||
|
case "MINECART_MOB_SPAWNER":
|
||||||
|
case "MINECART_TNT":
|
||||||
|
case "PLAYER":
|
||||||
|
case "PRIMED_TNT":
|
||||||
|
case "SLIME":
|
||||||
|
case "SMALL_FIREBALL":
|
||||||
|
case "SNOWBALL":
|
||||||
|
case "MINECART_FURNACE":
|
||||||
|
case "SPLASH_POTION":
|
||||||
|
case "THROWN_EXP_BOTTLE":
|
||||||
|
case "WITHER_SKULL":
|
||||||
|
case "UNKNOWN":
|
||||||
|
case "SPECTRAL_ARROW":
|
||||||
|
case "SHULKER_BULLET":
|
||||||
|
case "DRAGON_FIREBALL":
|
||||||
|
case "AREA_EFFECT_CLOUD":
|
||||||
|
case "TRIDENT":
|
||||||
|
case "LLAMA_SPIT":
|
||||||
// Do this stuff later
|
// Do this stuff later
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// MISC //
|
// MISC //
|
||||||
case "DROPPED_ITEM" -> {
|
case "DROPPED_ITEM":
|
||||||
Item item = (Item) entity;
|
Item item = (Item) entity;
|
||||||
this.stack = item.getItemStack();
|
this.stack = item.getItemStack();
|
||||||
return;
|
return;
|
||||||
}
|
case "ITEM_FRAME":
|
||||||
case "ITEM_FRAME" -> {
|
|
||||||
this.x = Math.floor(this.getX());
|
this.x = Math.floor(this.getX());
|
||||||
this.y = Math.floor(this.getY());
|
this.y = Math.floor(this.getY());
|
||||||
this.z = Math.floor(this.getZ());
|
this.z = Math.floor(this.getZ());
|
||||||
@ -130,8 +152,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation());
|
this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation());
|
||||||
this.stack = itemFrame.getItem().clone();
|
this.stack = itemFrame.getItem().clone();
|
||||||
return;
|
return;
|
||||||
}
|
case "PAINTING":
|
||||||
case "PAINTING" -> {
|
|
||||||
this.x = Math.floor(this.getX());
|
this.x = Math.floor(this.getX());
|
||||||
this.y = Math.floor(this.getY());
|
this.y = Math.floor(this.getY());
|
||||||
this.z = Math.floor(this.getZ());
|
this.z = Math.floor(this.getZ());
|
||||||
@ -144,17 +165,20 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
this.dataString = art.name();
|
this.dataString = art.name();
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END MISC //
|
// END MISC //
|
||||||
// INVENTORY HOLDER //
|
// INVENTORY HOLDER //
|
||||||
case "MINECART_CHEST", "MINECART_HOPPER" -> {
|
case "MINECART_CHEST":
|
||||||
|
case "MINECART_HOPPER":
|
||||||
storeInventory((InventoryHolder) entity);
|
storeInventory((InventoryHolder) entity);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// START LIVING ENTITY //
|
// START LIVING ENTITY //
|
||||||
// START AGEABLE //
|
// START AGEABLE //
|
||||||
// START TAMEABLE //
|
// START TAMEABLE //
|
||||||
case "HORSE", "DONKEY", "LLAMA", "MULE", "SKELETON_HORSE" -> {
|
case "HORSE":
|
||||||
|
case "DONKEY":
|
||||||
|
case "LLAMA":
|
||||||
|
case "MULE":
|
||||||
|
case "SKELETON_HORSE":
|
||||||
AbstractHorse horse = (AbstractHorse) entity;
|
AbstractHorse horse = (AbstractHorse) entity;
|
||||||
this.horse = new HorseStats();
|
this.horse = new HorseStats();
|
||||||
this.horse.jump = horse.getJumpStrength();
|
this.horse.jump = horse.getJumpStrength();
|
||||||
@ -166,21 +190,20 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
//this.horse.style = horse.getStyle();
|
//this.horse.style = horse.getStyle();
|
||||||
//this.horse.color = horse.getColor();
|
//this.horse.color = horse.getColor();
|
||||||
storeTameable(horse);
|
storeTameable(horse);
|
||||||
storeBreedable(horse);
|
storeAgeable(horse);
|
||||||
storeLiving(horse);
|
storeLiving(horse);
|
||||||
storeInventory(horse);
|
storeInventory(horse);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END INVENTORY HOLDER //
|
// END INVENTORY HOLDER //
|
||||||
case "WOLF", "OCELOT" -> {
|
case "WOLF":
|
||||||
|
case "OCELOT":
|
||||||
storeTameable((Tameable) entity);
|
storeTameable((Tameable) entity);
|
||||||
storeBreedable((Breedable) entity);
|
storeAgeable((Ageable) entity);
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END TAMEABLE //
|
// END TAMEABLE //
|
||||||
//todo fix sheep
|
//todo fix sheep
|
||||||
case "SHEEP" -> {
|
case "SHEEP":
|
||||||
Sheep sheep = (Sheep) entity;
|
Sheep sheep = (Sheep) entity;
|
||||||
if (sheep.isSheared()) {
|
if (sheep.isSheared()) {
|
||||||
this.dataByte = (byte) 1;
|
this.dataByte = (byte) 1;
|
||||||
@ -188,23 +211,26 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.dataByte = (byte) 0;
|
this.dataByte = (byte) 0;
|
||||||
}
|
}
|
||||||
this.dataByte2 = sheep.getColor().getDyeData();
|
this.dataByte2 = sheep.getColor().getDyeData();
|
||||||
storeBreedable(sheep);
|
storeAgeable(sheep);
|
||||||
storeLiving(sheep);
|
storeLiving(sheep);
|
||||||
return;
|
return;
|
||||||
}
|
case "VILLAGER":
|
||||||
case "VILLAGER", "CHICKEN", "COW", "MUSHROOM_COW", "PIG", "TURTLE", "POLAR_BEAR" -> {
|
case "CHICKEN":
|
||||||
storeBreedable((Breedable) entity);
|
case "COW":
|
||||||
|
case "MUSHROOM_COW":
|
||||||
|
case "PIG":
|
||||||
|
case "TURTLE":
|
||||||
|
case "POLAR_BEAR":
|
||||||
|
storeAgeable((Ageable) entity);
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
case "RABBIT":
|
||||||
case "RABBIT" -> {
|
|
||||||
this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType());
|
this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType());
|
||||||
storeBreedable((Breedable) entity);
|
storeAgeable((Ageable) entity);
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END AGEABLE //
|
// END AGEABLE //
|
||||||
case "ARMOR_STAND" -> {
|
case "ARMOR_STAND":
|
||||||
ArmorStand stand = (ArmorStand) entity;
|
ArmorStand stand = (ArmorStand) entity;
|
||||||
this.inventory =
|
this.inventory =
|
||||||
new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(),
|
new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(),
|
||||||
@ -212,30 +238,37 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
stand.getBoots().clone()};
|
stand.getBoots().clone()};
|
||||||
storeLiving(stand);
|
storeLiving(stand);
|
||||||
this.stand = new ArmorStandStats();
|
this.stand = new ArmorStandStats();
|
||||||
|
|
||||||
EulerAngle head = stand.getHeadPose();
|
EulerAngle head = stand.getHeadPose();
|
||||||
this.stand.head[0] = (float) head.getX();
|
this.stand.head[0] = (float) head.getX();
|
||||||
this.stand.head[1] = (float) head.getY();
|
this.stand.head[1] = (float) head.getY();
|
||||||
this.stand.head[2] = (float) head.getZ();
|
this.stand.head[2] = (float) head.getZ();
|
||||||
|
|
||||||
EulerAngle body = stand.getBodyPose();
|
EulerAngle body = stand.getBodyPose();
|
||||||
this.stand.body[0] = (float) body.getX();
|
this.stand.body[0] = (float) body.getX();
|
||||||
this.stand.body[1] = (float) body.getY();
|
this.stand.body[1] = (float) body.getY();
|
||||||
this.stand.body[2] = (float) body.getZ();
|
this.stand.body[2] = (float) body.getZ();
|
||||||
|
|
||||||
EulerAngle leftLeg = stand.getLeftLegPose();
|
EulerAngle leftLeg = stand.getLeftLegPose();
|
||||||
this.stand.leftLeg[0] = (float) leftLeg.getX();
|
this.stand.leftLeg[0] = (float) leftLeg.getX();
|
||||||
this.stand.leftLeg[1] = (float) leftLeg.getY();
|
this.stand.leftLeg[1] = (float) leftLeg.getY();
|
||||||
this.stand.leftLeg[2] = (float) leftLeg.getZ();
|
this.stand.leftLeg[2] = (float) leftLeg.getZ();
|
||||||
|
|
||||||
EulerAngle rightLeg = stand.getRightLegPose();
|
EulerAngle rightLeg = stand.getRightLegPose();
|
||||||
this.stand.rightLeg[0] = (float) rightLeg.getX();
|
this.stand.rightLeg[0] = (float) rightLeg.getX();
|
||||||
this.stand.rightLeg[1] = (float) rightLeg.getY();
|
this.stand.rightLeg[1] = (float) rightLeg.getY();
|
||||||
this.stand.rightLeg[2] = (float) rightLeg.getZ();
|
this.stand.rightLeg[2] = (float) rightLeg.getZ();
|
||||||
|
|
||||||
EulerAngle leftArm = stand.getLeftArmPose();
|
EulerAngle leftArm = stand.getLeftArmPose();
|
||||||
this.stand.leftArm[0] = (float) leftArm.getX();
|
this.stand.leftArm[0] = (float) leftArm.getX();
|
||||||
this.stand.leftArm[1] = (float) leftArm.getY();
|
this.stand.leftArm[1] = (float) leftArm.getY();
|
||||||
this.stand.leftArm[2] = (float) leftArm.getZ();
|
this.stand.leftArm[2] = (float) leftArm.getZ();
|
||||||
|
|
||||||
EulerAngle rightArm = stand.getRightArmPose();
|
EulerAngle rightArm = stand.getRightArmPose();
|
||||||
this.stand.rightArm[0] = (float) rightArm.getX();
|
this.stand.rightArm[0] = (float) rightArm.getX();
|
||||||
this.stand.rightArm[1] = (float) rightArm.getY();
|
this.stand.rightArm[1] = (float) rightArm.getY();
|
||||||
this.stand.rightArm[2] = (float) rightArm.getZ();
|
this.stand.rightArm[2] = (float) rightArm.getZ();
|
||||||
|
|
||||||
if (stand.hasArms()) {
|
if (stand.hasArms()) {
|
||||||
this.stand.arms = true;
|
this.stand.arms = true;
|
||||||
}
|
}
|
||||||
@ -249,38 +282,53 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.stand.small = true;
|
this.stand.small = true;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
case "ENDERMITE":
|
||||||
case "ENDERMITE" -> {
|
|
||||||
return;
|
return;
|
||||||
}
|
case "BAT":
|
||||||
case "BAT" -> {
|
|
||||||
if (((Bat) entity).isAwake()) {
|
if (((Bat) entity).isAwake()) {
|
||||||
this.dataByte = (byte) 1;
|
this.dataByte = (byte) 1;
|
||||||
} else {
|
} else {
|
||||||
this.dataByte = (byte) 0;
|
this.dataByte = (byte) 0;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
case "ENDER_DRAGON":
|
||||||
case "ENDER_DRAGON" -> {
|
|
||||||
EnderDragon entity1 = (EnderDragon) entity;
|
EnderDragon entity1 = (EnderDragon) entity;
|
||||||
this.dataByte = (byte) entity1.getPhase().ordinal();
|
this.dataByte = (byte) entity1.getPhase().ordinal();
|
||||||
return;
|
return;
|
||||||
}
|
case "SKELETON":
|
||||||
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN",
|
case "WITHER_SKELETON":
|
||||||
"ZOMBIFIED_PIGLIN", "PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH",
|
case "GUARDIAN":
|
||||||
"GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN" -> {
|
case "ELDER_GUARDIAN":
|
||||||
|
case "GHAST":
|
||||||
|
case "MAGMA_CUBE":
|
||||||
|
case "SQUID":
|
||||||
|
case "PIG_ZOMBIE":
|
||||||
|
case "HOGLIN":
|
||||||
|
case "ZOMBIFIED_PIGLIN":
|
||||||
|
case "PIGLIN":
|
||||||
|
case "PIGLIN_BRUTE":
|
||||||
|
case "ZOMBIE":
|
||||||
|
case "WITHER":
|
||||||
|
case "WITCH":
|
||||||
|
case "SPIDER":
|
||||||
|
case "CAVE_SPIDER":
|
||||||
|
case "SILVERFISH":
|
||||||
|
case "GIANT":
|
||||||
|
case "ENDERMAN":
|
||||||
|
case "CREEPER":
|
||||||
|
case "BLAZE":
|
||||||
|
case "SHULKER":
|
||||||
|
case "SNOWMAN":
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
case "IRON_GOLEM":
|
||||||
case "IRON_GOLEM" -> {
|
|
||||||
if (((IronGolem) entity).isPlayerCreated()) {
|
if (((IronGolem) entity).isPlayerCreated()) {
|
||||||
this.dataByte = (byte) 1;
|
this.dataByte = (byte) 1;
|
||||||
} else {
|
} else {
|
||||||
this.dataByte = (byte) 0;
|
this.dataByte = (byte) 0;
|
||||||
}
|
}
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
}
|
// END LIVING //
|
||||||
// END LIVING //
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -383,11 +431,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use {@link #restoreBreedable(Breedable)} instead
|
|
||||||
* @since 7.1.0
|
|
||||||
*/
|
|
||||||
@Deprecated(forRemoval = true, since = "7.1.0")
|
|
||||||
private void restoreAgeable(Ageable entity) {
|
private void restoreAgeable(Ageable entity) {
|
||||||
if (!this.aged.adult) {
|
if (!this.aged.adult) {
|
||||||
entity.setBaby();
|
entity.setBaby();
|
||||||
@ -398,11 +441,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use {@link #storeBreedable(Breedable)} instead
|
|
||||||
* @since 7.1.0
|
|
||||||
*/
|
|
||||||
@Deprecated(forRemoval = true, since = "7.1.0")
|
|
||||||
public void storeAgeable(Ageable aged) {
|
public void storeAgeable(Ageable aged) {
|
||||||
this.aged = new AgeableStats();
|
this.aged = new AgeableStats();
|
||||||
this.aged.age = aged.getAge();
|
this.aged.age = aged.getAge();
|
||||||
@ -410,29 +448,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.aged.adult = aged.isAdult();
|
this.aged.adult = aged.isAdult();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @since 7.1.0
|
|
||||||
*/
|
|
||||||
private void restoreBreedable(Breedable entity) {
|
|
||||||
if (!this.aged.adult) {
|
|
||||||
entity.setBaby();
|
|
||||||
}
|
|
||||||
entity.setAgeLock(this.aged.locked);
|
|
||||||
if (this.aged.age > 0) {
|
|
||||||
entity.setAge(this.aged.age);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @since 7.1.0
|
|
||||||
*/
|
|
||||||
private void storeBreedable(Breedable breedable) {
|
|
||||||
this.aged = new AgeableStats();
|
|
||||||
this.aged.age = breedable.getAge();
|
|
||||||
this.aged.locked = breedable.getAgeLock();
|
|
||||||
this.aged.adult = breedable.isAdult();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void storeTameable(Tameable tamed) {
|
public void storeTameable(Tameable tamed) {
|
||||||
this.tamed = new TameableStats();
|
this.tamed = new TameableStats();
|
||||||
this.tamed.owner = tamed.getOwner();
|
this.tamed.owner = tamed.getOwner();
|
||||||
@ -450,15 +465,20 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
Entity entity;
|
Entity entity;
|
||||||
switch (this.getType().toString()) {
|
switch (this.getType().toString()) {
|
||||||
case "DROPPED_ITEM" -> {
|
case "DROPPED_ITEM":
|
||||||
return world.dropItem(location, this.stack);
|
return world.dropItem(location, this.stack);
|
||||||
}
|
case "PLAYER":
|
||||||
case "PLAYER", "LEASH_HITCH" -> {
|
case "LEASH_HITCH":
|
||||||
return null;
|
return null;
|
||||||
}
|
case "ITEM_FRAME":
|
||||||
case "ITEM_FRAME" -> entity = world.spawn(location, ItemFrame.class);
|
entity = world.spawn(location, ItemFrame.class);
|
||||||
case "PAINTING" -> entity = world.spawn(location, Painting.class);
|
break;
|
||||||
default -> entity = world.spawnEntity(location, this.getType());
|
case "PAINTING":
|
||||||
|
entity = world.spawn(location, Painting.class);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
entity = world.spawnEntity(location, this.getType());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (this.depth == 0) {
|
if (this.depth == 0) {
|
||||||
return entity;
|
return entity;
|
||||||
@ -486,46 +506,72 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
entity.setGravity(false);
|
entity.setGravity(false);
|
||||||
}
|
}
|
||||||
switch (entity.getType().toString()) {
|
switch (entity.getType().toString()) {
|
||||||
case "BOAT" -> {
|
case "BOAT":
|
||||||
Boat boat = (Boat) entity;
|
Boat boat = (Boat) entity;
|
||||||
boat.setWoodType(TreeSpecies.values()[dataByte]);
|
boat.setWoodType(TreeSpecies.values()[dataByte]);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "SLIME":
|
||||||
case "SLIME" -> {
|
|
||||||
((Slime) entity).setSize(this.dataByte);
|
((Slime) entity).setSize(this.dataByte);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ARROW":
|
||||||
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK",
|
case "EGG":
|
||||||
"FIREBALL", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND",
|
case "ENDER_CRYSTAL":
|
||||||
"MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL",
|
case "ENDER_PEARL":
|
||||||
"SPLASH_POTION", "THROWN_EXP_BOTTLE", "SPECTRAL_ARROW", "SHULKER_BULLET", "AREA_EFFECT_CLOUD",
|
case "ENDER_SIGNAL":
|
||||||
"DRAGON_FIREBALL", "WITHER_SKULL", "MINECART_FURNACE", "LLAMA_SPIT", "TRIDENT", "UNKNOWN" -> {
|
case "DROPPED_ITEM":
|
||||||
|
case "EXPERIENCE_ORB":
|
||||||
|
case "FALLING_BLOCK":
|
||||||
|
case "FIREBALL":
|
||||||
|
case "FIREWORK":
|
||||||
|
case "FISHING_HOOK":
|
||||||
|
case "LEASH_HITCH":
|
||||||
|
case "LIGHTNING":
|
||||||
|
case "MINECART":
|
||||||
|
case "MINECART_COMMAND":
|
||||||
|
case "MINECART_MOB_SPAWNER":
|
||||||
|
case "MINECART_TNT":
|
||||||
|
case "PLAYER":
|
||||||
|
case "PRIMED_TNT":
|
||||||
|
case "SMALL_FIREBALL":
|
||||||
|
case "SNOWBALL":
|
||||||
|
case "SPLASH_POTION":
|
||||||
|
case "THROWN_EXP_BOTTLE":
|
||||||
|
case "SPECTRAL_ARROW":
|
||||||
|
case "SHULKER_BULLET":
|
||||||
|
case "AREA_EFFECT_CLOUD":
|
||||||
|
case "DRAGON_FIREBALL":
|
||||||
|
case "WITHER_SKULL":
|
||||||
|
case "MINECART_FURNACE":
|
||||||
|
case "LLAMA_SPIT":
|
||||||
|
case "TRIDENT":
|
||||||
|
case "UNKNOWN":
|
||||||
// Do this stuff later
|
// Do this stuff later
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// MISC //
|
// MISC //
|
||||||
case "ITEM_FRAME" -> {
|
case "ITEM_FRAME":
|
||||||
ItemFrame itemframe = (ItemFrame) entity;
|
ItemFrame itemframe = (ItemFrame) entity;
|
||||||
itemframe.setRotation(Rotation.values()[this.dataByte]);
|
itemframe.setRotation(Rotation.values()[this.dataByte]);
|
||||||
itemframe.setItem(this.stack);
|
itemframe.setItem(this.stack);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "PAINTING":
|
||||||
case "PAINTING" -> {
|
|
||||||
Painting painting = (Painting) entity;
|
Painting painting = (Painting) entity;
|
||||||
painting.setFacingDirection(BlockFace.values()[this.dataByte], true);
|
painting.setFacingDirection(BlockFace.values()[this.dataByte], true);
|
||||||
painting.setArt(Art.getByName(this.dataString), true);
|
painting.setArt(Art.getByName(this.dataString), true);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END MISC //
|
// END MISC //
|
||||||
// INVENTORY HOLDER //
|
// INVENTORY HOLDER //
|
||||||
case "MINECART_CHEST", "MINECART_HOPPER" -> {
|
case "MINECART_CHEST":
|
||||||
|
case "MINECART_HOPPER":
|
||||||
restoreInventory((InventoryHolder) entity);
|
restoreInventory((InventoryHolder) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// START LIVING ENTITY //
|
// START LIVING ENTITY //
|
||||||
// START AGEABLE //
|
// START AGEABLE //
|
||||||
// START TAMEABLE //
|
// START TAMEABLE //
|
||||||
case "HORSE", "LLAMA", "SKELETON_HORSE", "DONKEY", "MULE" -> {
|
case "HORSE":
|
||||||
|
case "LLAMA":
|
||||||
|
case "SKELETON_HORSE":
|
||||||
|
case "DONKEY":
|
||||||
|
case "MULE":
|
||||||
AbstractHorse horse = (AbstractHorse) entity;
|
AbstractHorse horse = (AbstractHorse) entity;
|
||||||
horse.setJumpStrength(this.horse.jump);
|
horse.setJumpStrength(this.horse.jump);
|
||||||
if (horse instanceof ChestedHorse) {
|
if (horse instanceof ChestedHorse) {
|
||||||
@ -536,20 +582,19 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
//horse.setStyle(this.horse.style);
|
//horse.setStyle(this.horse.style);
|
||||||
//horse.setColor(this.horse.color);
|
//horse.setColor(this.horse.color);
|
||||||
restoreTameable(horse);
|
restoreTameable(horse);
|
||||||
restoreBreedable(horse);
|
restoreAgeable(horse);
|
||||||
restoreLiving(horse);
|
restoreLiving(horse);
|
||||||
restoreInventory(horse);
|
restoreInventory(horse);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END INVENTORY HOLDER //
|
// END INVENTORY HOLDER //
|
||||||
case "WOLF", "OCELOT" -> {
|
case "WOLF":
|
||||||
|
case "OCELOT":
|
||||||
restoreTameable((Tameable) entity);
|
restoreTameable((Tameable) entity);
|
||||||
restoreBreedable((Breedable) entity);
|
restoreAgeable((Ageable) entity);
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END AGEABLE //
|
// END AGEABLE //
|
||||||
case "SHEEP" -> {
|
case "SHEEP":
|
||||||
Sheep sheep = (Sheep) entity;
|
Sheep sheep = (Sheep) entity;
|
||||||
if (this.dataByte == 1) {
|
if (this.dataByte == 1) {
|
||||||
sheep.setSheared(true);
|
sheep.setSheared(true);
|
||||||
@ -557,25 +602,28 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
if (this.dataByte2 != 0) {
|
if (this.dataByte2 != 0) {
|
||||||
sheep.setColor(DyeColor.getByDyeData(this.dataByte2));
|
sheep.setColor(DyeColor.getByDyeData(this.dataByte2));
|
||||||
}
|
}
|
||||||
restoreBreedable(sheep);
|
restoreAgeable(sheep);
|
||||||
restoreLiving(sheep);
|
restoreLiving(sheep);
|
||||||
return sheep;
|
return sheep;
|
||||||
}
|
case "VILLAGER":
|
||||||
case "VILLAGER", "CHICKEN", "COW", "TURTLE", "POLAR_BEAR", "MUSHROOM_COW", "PIG" -> {
|
case "CHICKEN":
|
||||||
restoreBreedable((Breedable) entity);
|
case "COW":
|
||||||
|
case "TURTLE":
|
||||||
|
case "POLAR_BEAR":
|
||||||
|
case "MUSHROOM_COW":
|
||||||
|
case "PIG":
|
||||||
|
restoreAgeable((Ageable) entity);
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END AGEABLE //
|
// END AGEABLE //
|
||||||
case "RABBIT" -> {
|
case "RABBIT":
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]);
|
((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]);
|
||||||
}
|
}
|
||||||
restoreBreedable((Breedable) entity);
|
restoreAgeable((Ageable) entity);
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ARMOR_STAND":
|
||||||
case "ARMOR_STAND" -> {
|
|
||||||
// CHECK positions
|
// CHECK positions
|
||||||
ArmorStand stand = (ArmorStand) entity;
|
ArmorStand stand = (ArmorStand) entity;
|
||||||
if (this.inventory[0] != null) {
|
if (this.inventory[0] != null) {
|
||||||
@ -645,38 +693,56 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
restoreLiving(stand);
|
restoreLiving(stand);
|
||||||
return stand;
|
return stand;
|
||||||
}
|
case "BAT":
|
||||||
case "BAT" -> {
|
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((Bat) entity).setAwake(true);
|
((Bat) entity).setAwake(true);
|
||||||
}
|
}
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ENDER_DRAGON":
|
||||||
case "ENDER_DRAGON" -> {
|
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]);
|
((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]);
|
||||||
}
|
}
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ENDERMITE":
|
||||||
case "ENDERMITE", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", "PIGLIN", "ZOMBIFIED_PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SNOWMAN", "SHULKER", "GUARDIAN", "ELDER_GUARDIAN", "SKELETON", "WITHER_SKELETON" -> {
|
case "GHAST":
|
||||||
|
case "MAGMA_CUBE":
|
||||||
|
case "SQUID":
|
||||||
|
case "PIG_ZOMBIE":
|
||||||
|
case "HOGLIN":
|
||||||
|
case "PIGLIN":
|
||||||
|
case "ZOMBIFIED_PIGLIN":
|
||||||
|
case "PIGLIN_BRUTE":
|
||||||
|
case "ZOMBIE":
|
||||||
|
case "WITHER":
|
||||||
|
case "WITCH":
|
||||||
|
case "SPIDER":
|
||||||
|
case "CAVE_SPIDER":
|
||||||
|
case "SILVERFISH":
|
||||||
|
case "GIANT":
|
||||||
|
case "ENDERMAN":
|
||||||
|
case "CREEPER":
|
||||||
|
case "BLAZE":
|
||||||
|
case "SNOWMAN":
|
||||||
|
case "SHULKER":
|
||||||
|
case "GUARDIAN":
|
||||||
|
case "ELDER_GUARDIAN":
|
||||||
|
case "SKELETON":
|
||||||
|
case "WITHER_SKELETON":
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "IRON_GOLEM":
|
||||||
case "IRON_GOLEM" -> {
|
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((IronGolem) entity).setPlayerCreated(true);
|
((IronGolem) entity).setPlayerCreated(true);
|
||||||
}
|
}
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
if (Settings.DEBUG) {
|
if (Settings.DEBUG) {
|
||||||
LOGGER.info("Could not identify entity: {}", entity.getType());
|
LOGGER.info("Could not identify entity: {}", entity.getType());
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END LIVING
|
// END LIVING
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,9 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
|
|||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.location.UncheckedWorldLocation;
|
import com.plotsquared.core.location.UncheckedWorldLocation;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
import org.bukkit.generator.LimitedRegion;
|
import org.bukkit.generator.LimitedRegion;
|
||||||
import org.bukkit.generator.WorldInfo;
|
import org.bukkit.generator.WorldInfo;
|
||||||
@ -46,6 +47,17 @@ final class BlockStatePopulator extends BlockPopulator {
|
|||||||
this.plotGenerator = plotGenerator;
|
this.plotGenerator = plotGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link BlockStatePopulator#BlockStatePopulator(IndependentPlotGenerator)} as plotAreManager is unused
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||||
|
public BlockStatePopulator(
|
||||||
|
final @NonNull IndependentPlotGenerator plotGenerator,
|
||||||
|
final @NonNull PlotAreaManager plotAreaManager
|
||||||
|
) {
|
||||||
|
this.plotGenerator = plotGenerator;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void populate(
|
public void populate(
|
||||||
@NonNull final WorldInfo worldInfo,
|
@NonNull final WorldInfo worldInfo,
|
||||||
@ -68,7 +80,7 @@ final class BlockStatePopulator extends BlockPopulator {
|
|||||||
worldInfo.getMaxHeight(),
|
worldInfo.getMaxHeight(),
|
||||||
(chunkZ << 4) + 15
|
(chunkZ << 4) + 15
|
||||||
);
|
);
|
||||||
ZeroedDelegateScopedQueueCoordinator offsetChunkQueue = new ZeroedDelegateScopedQueueCoordinator(wrapped, min, max);
|
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(wrapped, min, max);
|
||||||
this.plotGenerator.populateChunk(offsetChunkQueue, area);
|
this.plotGenerator.populateChunk(offsetChunkQueue, area);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,47 +22,28 @@ import com.plotsquared.bukkit.queue.GenChunk;
|
|||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.plotsquared.bukkit.util.BukkitWorld;
|
import com.plotsquared.bukkit.util.BukkitWorld;
|
||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.generator.ClassicPlotWorld;
|
|
||||||
import com.plotsquared.core.generator.GeneratorWrapper;
|
import com.plotsquared.core.generator.GeneratorWrapper;
|
||||||
import com.plotsquared.core.generator.IndependentPlotGenerator;
|
import com.plotsquared.core.generator.IndependentPlotGenerator;
|
||||||
import com.plotsquared.core.generator.SingleWorldGenerator;
|
import com.plotsquared.core.generator.SingleWorldGenerator;
|
||||||
import com.plotsquared.core.location.ChunkWrapper;
|
import com.plotsquared.core.location.ChunkWrapper;
|
||||||
import com.plotsquared.core.location.UncheckedWorldLocation;
|
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||||
import com.plotsquared.core.util.ChunkManager;
|
import com.plotsquared.core.util.ChunkManager;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
|
||||||
import com.sk89q.worldedit.math.BlockVector2;
|
import com.sk89q.worldedit.math.BlockVector2;
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.bukkit.HeightMap;
|
|
||||||
import org.bukkit.NamespacedKey;
|
|
||||||
import org.bukkit.Registry;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.generator.BiomeProvider;
|
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
import org.bukkit.generator.ChunkGenerator;
|
import org.bukkit.generator.ChunkGenerator;
|
||||||
import org.bukkit.generator.WorldInfo;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static java.util.function.Predicate.not;
|
|
||||||
|
|
||||||
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
|
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final boolean PAPER_ASYNC_SAFE = true;
|
public final boolean PAPER_ASYNC_SAFE = true;
|
||||||
|
|
||||||
@ -71,15 +52,9 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
private final ChunkGenerator platformGenerator;
|
private final ChunkGenerator platformGenerator;
|
||||||
private final boolean full;
|
private final boolean full;
|
||||||
private final String levelName;
|
private final String levelName;
|
||||||
private final boolean useNewGenerationMethods;
|
|
||||||
private final BiomeProvider biomeProvider;
|
|
||||||
private List<BlockPopulator> populators;
|
private List<BlockPopulator> populators;
|
||||||
private boolean loaded = false;
|
private boolean loaded = false;
|
||||||
|
|
||||||
private PlotArea lastPlotArea;
|
|
||||||
private int lastChunkX = Integer.MIN_VALUE;
|
|
||||||
private int lastChunkZ = Integer.MIN_VALUE;
|
|
||||||
|
|
||||||
public BukkitPlotGenerator(
|
public BukkitPlotGenerator(
|
||||||
final @NonNull String name,
|
final @NonNull String name,
|
||||||
final @NonNull IndependentPlotGenerator generator,
|
final @NonNull IndependentPlotGenerator generator,
|
||||||
@ -97,23 +72,18 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator));
|
this.populators.add(new LegacyBlockStatePopulator(this.plotGenerator));
|
||||||
}
|
}
|
||||||
this.full = true;
|
this.full = true;
|
||||||
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
|
|
||||||
this.biomeProvider = new BukkitPlotBiomeProvider();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public BukkitPlotGenerator(final String world, final ChunkGenerator cg, final @NonNull PlotAreaManager plotAreaManager) {
|
public BukkitPlotGenerator(final String world, final ChunkGenerator cg, final @NonNull PlotAreaManager plotAreaManager) {
|
||||||
if (cg instanceof BukkitPlotGenerator) {
|
if (cg instanceof BukkitPlotGenerator) {
|
||||||
throw new IllegalArgumentException("ChunkGenerator: " + cg
|
throw new IllegalArgumentException("ChunkGenerator: " + cg.getClass().getName()
|
||||||
.getClass()
|
+ " is already a BukkitPlotGenerator!");
|
||||||
.getName() + " is already a BukkitPlotGenerator!");
|
|
||||||
}
|
}
|
||||||
this.plotAreaManager = plotAreaManager;
|
this.plotAreaManager = plotAreaManager;
|
||||||
this.levelName = world;
|
this.levelName = world;
|
||||||
this.full = false;
|
this.full = false;
|
||||||
this.platformGenerator = cg;
|
this.platformGenerator = cg;
|
||||||
this.plotGenerator = new DelegatePlotGenerator(cg, world);
|
this.plotGenerator = new DelegatePlotGenerator(cg, world);
|
||||||
this.useNewGenerationMethods = PlotSquared.platform().serverVersion()[1] >= 19;
|
|
||||||
this.biomeProvider = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -141,7 +111,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
try {
|
try {
|
||||||
checkLoaded(world);
|
checkLoaded(world);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("Error attempting to load world into PlotSquared.", e);
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
ArrayList<BlockPopulator> toAdd = new ArrayList<>();
|
ArrayList<BlockPopulator> toAdd = new ArrayList<>();
|
||||||
List<BlockPopulator> existing = world.getPopulators();
|
List<BlockPopulator> existing = world.getPopulators();
|
||||||
@ -158,7 +128,6 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
return toAdd;
|
return toAdd;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extracted to synchronized method for thread-safety, preventing multiple internal world load calls
|
|
||||||
private synchronized void checkLoaded(@NonNull World world) {
|
private synchronized void checkLoaded(@NonNull World world) {
|
||||||
// Do not attempt to load configurations until WorldEdit has a platform ready.
|
// Do not attempt to load configurations until WorldEdit has a platform ready.
|
||||||
if (!PlotSquared.get().isWeInitialised()) {
|
if (!PlotSquared.get().isWeInitialised()) {
|
||||||
@ -184,7 +153,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Kept for compatibility with <=1.17.1
|
@SuppressWarnings("deprecation")
|
||||||
private void setSpawnLimits(@NonNull World world, int limit) {
|
private void setSpawnLimits(@NonNull World world, int limit) {
|
||||||
world.setAmbientSpawnLimit(limit);
|
world.setAmbientSpawnLimit(limit);
|
||||||
world.setAnimalSpawnLimit(limit);
|
world.setAnimalSpawnLimit(limit);
|
||||||
@ -192,118 +161,17 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
world.setWaterAnimalSpawnLimit(limit);
|
world.setWaterAnimalSpawnLimit(limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void generateNoise(
|
|
||||||
@NotNull final WorldInfo worldInfo,
|
|
||||||
@NotNull final Random random,
|
|
||||||
final int chunkX,
|
|
||||||
final int chunkZ,
|
|
||||||
@NotNull final ChunkData chunkData
|
|
||||||
) {
|
|
||||||
if (this.platformGenerator != this) {
|
|
||||||
this.platformGenerator.generateNoise(worldInfo, random, chunkX, chunkZ, chunkData);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int minY = chunkData.getMinHeight();
|
|
||||||
int maxY = chunkData.getMaxHeight();
|
|
||||||
GenChunk result = new GenChunk(minY, maxY);
|
|
||||||
// Set the chunk location
|
|
||||||
result.setChunk(new ChunkWrapper(worldInfo.getName(), chunkX, chunkZ));
|
|
||||||
// Set the result data
|
|
||||||
result.setChunkData(chunkData);
|
|
||||||
result.result = null;
|
|
||||||
|
|
||||||
// Catch any exceptions (as exceptions usually thrown)
|
|
||||||
try {
|
|
||||||
generate(BlockVector2.at(chunkX, chunkZ), worldInfo.getName(), result, false);
|
|
||||||
} catch (Throwable e) {
|
|
||||||
LOGGER.error("Error attempting to generate chunk.", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void generateSurface(
|
|
||||||
@NotNull final WorldInfo worldInfo,
|
|
||||||
@NotNull final Random random,
|
|
||||||
final int chunkX,
|
|
||||||
final int chunkZ,
|
|
||||||
@NotNull final ChunkData chunkData
|
|
||||||
) {
|
|
||||||
if (platformGenerator != this) {
|
|
||||||
platformGenerator.generateSurface(worldInfo, random, chunkX, chunkZ, chunkData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void generateBedrock(
|
|
||||||
@NotNull final WorldInfo worldInfo,
|
|
||||||
@NotNull final Random random,
|
|
||||||
final int chunkX,
|
|
||||||
final int chunkZ,
|
|
||||||
@NotNull final ChunkData chunkData
|
|
||||||
) {
|
|
||||||
if (platformGenerator != this) {
|
|
||||||
platformGenerator.generateBedrock(worldInfo, random, chunkX, chunkZ, chunkData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void generateCaves(
|
|
||||||
@NotNull final WorldInfo worldInfo,
|
|
||||||
@NotNull final Random random,
|
|
||||||
final int chunkX,
|
|
||||||
final int chunkZ,
|
|
||||||
@NotNull final ChunkData chunkData
|
|
||||||
) {
|
|
||||||
if (platformGenerator != this) {
|
|
||||||
platformGenerator.generateCaves(worldInfo, random, chunkX, chunkZ, chunkData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable BiomeProvider getDefaultBiomeProvider(@NotNull final WorldInfo worldInfo) {
|
|
||||||
if (platformGenerator != this) {
|
|
||||||
return platformGenerator.getDefaultBiomeProvider(worldInfo);
|
|
||||||
}
|
|
||||||
return biomeProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getBaseHeight(
|
|
||||||
@NotNull final WorldInfo worldInfo,
|
|
||||||
@NotNull final Random random,
|
|
||||||
final int x,
|
|
||||||
final int z,
|
|
||||||
@NotNull final HeightMap heightMap
|
|
||||||
) {
|
|
||||||
PlotArea area = getPlotArea(worldInfo.getName(), x, z);
|
|
||||||
if (area instanceof ClassicPlotWorld cpw) {
|
|
||||||
// Default to plot height being the heighest point before decoration (i.e. roads, walls etc.)
|
|
||||||
return cpw.PLOT_HEIGHT;
|
|
||||||
}
|
|
||||||
return super.getBaseHeight(worldInfo, random, x, z, heightMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The entire method is deprecated, but kept for compatibility with versions lower than or equal to 1.16.2.
|
* The entire method is deprecated, but kept for compatibility with versions lower than or equal to 1.16.2.
|
||||||
* The method will be removed in future versions, because WorldEdit and FastAsyncWorldEdit only support the latest point
|
* The method will be removed in future versions, because WorldEdit and FastAsyncWorldEdit only support the latest point
|
||||||
* release.
|
* release.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation") // The entire method is deprecated, but kept for compatibility with <=1.16.2
|
@Deprecated(forRemoval = true, since = "6.11.0")
|
||||||
@Override
|
@Override
|
||||||
@Deprecated(since = "7.0.0")
|
|
||||||
public @NonNull ChunkData generateChunkData(
|
public @NonNull ChunkData generateChunkData(
|
||||||
@NonNull World world, @NonNull Random random, int x, int z, @NonNull BiomeGrid biome
|
@NonNull World world, @NonNull Random random, int x, int z,
|
||||||
|
@NonNull BiomeGrid biome
|
||||||
) {
|
) {
|
||||||
if (useNewGenerationMethods) {
|
|
||||||
if (this.platformGenerator != this) {
|
|
||||||
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
|
|
||||||
} else {
|
|
||||||
// Throw exception to be caught by the server that indicates the new generation API is being used.
|
|
||||||
throw new UnsupportedOperationException("Using new generation methods. This method is unsupported.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int minY = BukkitWorld.getMinWorldHeight(world);
|
int minY = BukkitWorld.getMinWorldHeight(world);
|
||||||
int maxY = BukkitWorld.getMaxWorldHeight(world);
|
int maxY = BukkitWorld.getMaxWorldHeight(world);
|
||||||
GenChunk result = new GenChunk(minY, maxY);
|
GenChunk result = new GenChunk(minY, maxY);
|
||||||
@ -313,6 +181,7 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
|
for (int chunkZ = 0; chunkZ < 16; chunkZ++) {
|
||||||
for (int y = minY; y < maxY; y++) {
|
for (int y = minY; y < maxY; y++) {
|
||||||
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
|
biome.setBiome(chunkX, y, chunkZ, Biome.PLAINS);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -332,32 +201,35 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
if (this.platformGenerator != this) {
|
if (this.platformGenerator != this) {
|
||||||
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
|
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
|
||||||
} else {
|
} else {
|
||||||
generate(BlockVector2.at(x, z), world.getName(), result, true);
|
generate(BlockVector2.at(x, z), world, result);
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOGGER.error("Error attempting to load world into PlotSquared.", e);
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
// Return the result data
|
// Return the result data
|
||||||
return result.getChunkData();
|
return result.getChunkData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generate(BlockVector2 loc, String world, ZeroedDelegateScopedQueueCoordinator result, boolean biomes) {
|
private void generate(BlockVector2 loc, World world, ScopedQueueCoordinator result) {
|
||||||
// Load if improperly loaded
|
// Load if improperly loaded
|
||||||
if (!this.loaded) {
|
if (!this.loaded) {
|
||||||
synchronized (this) {
|
checkLoaded(world);
|
||||||
PlotSquared.get().loadWorld(world, this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Process the chunk
|
// Process the chunk
|
||||||
if (ChunkManager.preProcessChunk(loc, result)) {
|
if (ChunkManager.preProcessChunk(loc, result)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlotArea area = getPlotArea(world, loc.getX(), loc.getZ());
|
PlotArea area = this.plotAreaManager.getPlotArea(world.getName(), null);
|
||||||
|
if (area == null && (area = this.plotAreaManager.getPlotArea(this.levelName, null)) == null) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Cannot regenerate chunk that does not belong to a plot area." + " Location: " + loc
|
||||||
|
+ ", world: " + world);
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
this.plotGenerator.generateChunk(result, area, biomes);
|
this.plotGenerator.generateChunk(result, area);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
// Recover from generator error
|
// Recover from generator error
|
||||||
LOGGER.error("Error attempting to generate chunk.", e);
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
ChunkManager.postProcessChunk(loc, result);
|
ChunkManager.postProcessChunk(loc, result);
|
||||||
}
|
}
|
||||||
@ -411,63 +283,4 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
return this.levelName;
|
return this.levelName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized PlotArea getPlotArea(String name, int chunkX, int chunkZ) {
|
|
||||||
// Load if improperly loaded
|
|
||||||
if (!this.loaded) {
|
|
||||||
PlotSquared.get().loadWorld(name, this);
|
|
||||||
// Do not set loaded to true as we want to ensure spawn limits are set when "loading" is actually able to be
|
|
||||||
// completed properly.
|
|
||||||
}
|
|
||||||
if (lastPlotArea != null && name.equals(this.levelName) && chunkX == lastChunkX && chunkZ == lastChunkZ) {
|
|
||||||
return lastPlotArea;
|
|
||||||
}
|
|
||||||
BlockVector3 loc = BlockVector3.at(chunkX << 4, 0, chunkZ << 4);
|
|
||||||
if (lastPlotArea != null && lastPlotArea.getRegion().contains(loc) && lastPlotArea.getRegion().contains(loc)) {
|
|
||||||
return lastPlotArea;
|
|
||||||
}
|
|
||||||
PlotArea area = UncheckedWorldLocation.at(name, loc).getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
throw new IllegalStateException(String.format(
|
|
||||||
"Cannot generate chunk that does not belong to a plot area. World: %s",
|
|
||||||
name
|
|
||||||
));
|
|
||||||
}
|
|
||||||
this.lastChunkX = chunkX;
|
|
||||||
this.lastChunkZ = chunkZ;
|
|
||||||
return this.lastPlotArea = area;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Biome provider should never need to be accessed outside of this class.
|
|
||||||
*/
|
|
||||||
private final class BukkitPlotBiomeProvider extends BiomeProvider {
|
|
||||||
|
|
||||||
private static final List<Biome> BIOMES;
|
|
||||||
|
|
||||||
static {
|
|
||||||
Set<Biome> disabledBiomes = EnumSet.of(Biome.CUSTOM);
|
|
||||||
if (PlotSquared.platform().serverVersion()[1] <= 19) {
|
|
||||||
final Biome cherryGrove = Registry.BIOME.get(NamespacedKey.minecraft("cherry_grove"));
|
|
||||||
if (cherryGrove != null) {
|
|
||||||
disabledBiomes.add(cherryGrove);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIOMES = Arrays.stream(Biome.values())
|
|
||||||
.filter(not(disabledBiomes::contains))
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull Biome getBiome(@NotNull final WorldInfo worldInfo, final int x, final int y, final int z) {
|
|
||||||
PlotArea area = getPlotArea(worldInfo.getName(), x >> 4, z >> 4);
|
|
||||||
return BukkitAdapter.adapt(plotGenerator.getBiome(area, x, y, z));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull List<Biome> getBiomes(@NotNull final WorldInfo worldInfo) {
|
|
||||||
return BIOMES; // Allow all biomes
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,10 +24,9 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
|
|||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.PlotId;
|
import com.plotsquared.core.plot.PlotId;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
@ -50,11 +49,6 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
|||||||
public void initialize(PlotArea area) {
|
public void initialize(PlotArea area) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BiomeType getBiome(final PlotArea settings, final int x, final int y, final int z) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return this.chunkGenerator.getClass().getName();
|
return this.chunkGenerator.getClass().getName();
|
||||||
@ -66,7 +60,7 @@ final class DelegatePlotGenerator extends IndependentPlotGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateChunk(final ZeroedDelegateScopedQueueCoordinator result, PlotArea settings, boolean biomes) {
|
public void generateChunk(final ScopedQueueCoordinator result, PlotArea settings) {
|
||||||
World world = BukkitUtil.getWorld(this.world);
|
World world = BukkitUtil.getWorld(this.world);
|
||||||
Location min = result.getMin();
|
Location min = result.getMin();
|
||||||
int chunkX = min.getX() >> 4;
|
int chunkX = min.getX() >> 4;
|
||||||
|
@ -26,7 +26,7 @@ import com.plotsquared.core.location.UncheckedWorldLocation;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||||
import com.plotsquared.core.queue.QueueCoordinator;
|
import com.plotsquared.core.queue.QueueCoordinator;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||||
import com.sk89q.worldedit.util.SideEffectSet;
|
import com.sk89q.worldedit.util.SideEffectSet;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
@ -65,7 +65,7 @@ final class LegacyBlockStatePopulator extends BlockPopulator {
|
|||||||
queue.setChunkObject(source);
|
queue.setChunkObject(source);
|
||||||
Location min = UncheckedWorldLocation.at(world.getName(), chunkMinX, world.getMinHeight(), chunkMinZ);
|
Location min = UncheckedWorldLocation.at(world.getName(), chunkMinX, world.getMinHeight(), chunkMinZ);
|
||||||
Location max = UncheckedWorldLocation.at(world.getName(), chunkMinX + 15, world.getMaxHeight(), chunkMinZ + 15);
|
Location max = UncheckedWorldLocation.at(world.getName(), chunkMinX + 15, world.getMaxHeight(), chunkMinZ + 15);
|
||||||
ZeroedDelegateScopedQueueCoordinator offsetChunkQueue = new ZeroedDelegateScopedQueueCoordinator(queue, min, max);
|
ScopedQueueCoordinator offsetChunkQueue = new ScopedQueueCoordinator(queue, min, max);
|
||||||
this.plotGenerator.populateChunk(offsetChunkQueue, area);
|
this.plotGenerator.populateChunk(offsetChunkQueue, area);
|
||||||
queue.enqueue();
|
queue.enqueue();
|
||||||
}
|
}
|
||||||
|
@ -23,13 +23,13 @@ import com.google.inject.Provides;
|
|||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.google.inject.assistedinject.FactoryModuleBuilder;
|
import com.google.inject.assistedinject.FactoryModuleBuilder;
|
||||||
import com.plotsquared.bukkit.BukkitPlatform;
|
import com.plotsquared.bukkit.BukkitPlatform;
|
||||||
import com.plotsquared.bukkit.listener.ServerListener;
|
|
||||||
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
||||||
import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
||||||
import com.plotsquared.bukkit.queue.BukkitChunkCoordinator;
|
import com.plotsquared.bukkit.queue.BukkitChunkCoordinator;
|
||||||
import com.plotsquared.bukkit.queue.BukkitQueueCoordinator;
|
import com.plotsquared.bukkit.queue.BukkitQueueCoordinator;
|
||||||
import com.plotsquared.bukkit.schematic.BukkitSchematicHandler;
|
import com.plotsquared.bukkit.schematic.BukkitSchematicHandler;
|
||||||
import com.plotsquared.bukkit.util.BukkitChunkManager;
|
import com.plotsquared.bukkit.util.BukkitChunkManager;
|
||||||
|
import com.plotsquared.bukkit.util.BukkitEconHandler;
|
||||||
import com.plotsquared.bukkit.util.BukkitInventoryUtil;
|
import com.plotsquared.bukkit.util.BukkitInventoryUtil;
|
||||||
import com.plotsquared.bukkit.util.BukkitRegionManager;
|
import com.plotsquared.bukkit.util.BukkitRegionManager;
|
||||||
import com.plotsquared.bukkit.util.BukkitSetupUtils;
|
import com.plotsquared.bukkit.util.BukkitSetupUtils;
|
||||||
@ -47,9 +47,6 @@ import com.plotsquared.core.inject.factory.ChunkCoordinatorBuilderFactory;
|
|||||||
import com.plotsquared.core.inject.factory.ChunkCoordinatorFactory;
|
import com.plotsquared.core.inject.factory.ChunkCoordinatorFactory;
|
||||||
import com.plotsquared.core.inject.factory.HybridPlotWorldFactory;
|
import com.plotsquared.core.inject.factory.HybridPlotWorldFactory;
|
||||||
import com.plotsquared.core.inject.factory.ProgressSubscriberFactory;
|
import com.plotsquared.core.inject.factory.ProgressSubscriberFactory;
|
||||||
import com.plotsquared.core.player.OfflinePlotPlayer;
|
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
|
||||||
import com.plotsquared.core.plot.world.DefaultPlotAreaManager;
|
import com.plotsquared.core.plot.world.DefaultPlotAreaManager;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.plot.world.SinglePlotAreaManager;
|
import com.plotsquared.core.plot.world.SinglePlotAreaManager;
|
||||||
@ -75,8 +72,6 @@ import org.bukkit.command.ConsoleCommandSender;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
public class BukkitModule extends AbstractModule {
|
public class BukkitModule extends AbstractModule {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitModule.class.getSimpleName());
|
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitModule.class.getSimpleName());
|
||||||
@ -133,64 +128,21 @@ public class BukkitModule extends AbstractModule {
|
|||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
@NonNull EconHandler provideEconHandler() {
|
@NonNull EconHandler provideEconHandler() {
|
||||||
if (!Settings.Enabled_Components.ECONOMY || !Bukkit.getPluginManager().isPluginEnabled("Vault")) {
|
if (!Settings.Enabled_Components.ECONOMY) {
|
||||||
return EconHandler.nullEconHandler();
|
return EconHandler.nullEconHandler();
|
||||||
}
|
}
|
||||||
// Guice eagerly initializes singletons, so we need to bring the laziness ourselves
|
if (Bukkit.getPluginManager().isPluginEnabled("Vault")) {
|
||||||
return new LazyEconHandler();
|
try {
|
||||||
}
|
BukkitEconHandler econHandler = new BukkitEconHandler();
|
||||||
|
if (!econHandler.init()) {
|
||||||
private static final class LazyEconHandler extends EconHandler implements ServerListener.MutableEconHandler {
|
LOGGER.warn("Economy is enabled but no plugin is providing an economy service. Falling back...");
|
||||||
private volatile EconHandler implementation;
|
return EconHandler.nullEconHandler();
|
||||||
|
}
|
||||||
public void setImplementation(EconHandler econHandler) {
|
return econHandler;
|
||||||
this.implementation = econHandler;
|
} catch (final Exception ignored) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return EconHandler.nullEconHandler();
|
||||||
@Override
|
|
||||||
public boolean init() {
|
|
||||||
return get().init();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getBalance(final PlotPlayer<?> player) {
|
|
||||||
return get().getBalance(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void withdrawMoney(final PlotPlayer<?> player, final double amount) {
|
|
||||||
get().withdrawMoney(player, amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void depositMoney(final PlotPlayer<?> player, final double amount) {
|
|
||||||
get().depositMoney(player, amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void depositMoney(final OfflinePlotPlayer player, final double amount) {
|
|
||||||
get().depositMoney(player, amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isEnabled(final PlotArea plotArea) {
|
|
||||||
return get().isEnabled(plotArea);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NonNull String format(final double balance) {
|
|
||||||
return get().format(balance);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isSupported() {
|
|
||||||
return get().isSupported();
|
|
||||||
}
|
|
||||||
|
|
||||||
private EconHandler get() {
|
|
||||||
return Objects.requireNonNull(this.implementation, "EconHandler not ready yet.");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import com.plotsquared.bukkit.util.BukkitUtil;
|
|||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
|
import com.plotsquared.core.database.DBFunc;
|
||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
@ -32,7 +33,6 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.BlockBurnFlag;
|
import com.plotsquared.core.plot.flag.implementations.BlockBurnFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.BlockIgnitionFlag;
|
import com.plotsquared.core.plot.flag.implementations.BlockIgnitionFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.BreakFlag;
|
import com.plotsquared.core.plot.flag.implementations.BreakFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ConcreteHardenFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.CoralDryFlag;
|
import com.plotsquared.core.plot.flag.implementations.CoralDryFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.CropGrowFlag;
|
import com.plotsquared.core.plot.flag.implementations.CropGrowFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag;
|
import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag;
|
||||||
@ -47,6 +47,7 @@ import com.plotsquared.core.plot.flag.implementations.LeafDecayFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.LiquidFlowFlag;
|
import com.plotsquared.core.plot.flag.implementations.LiquidFlowFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MycelGrowFlag;
|
import com.plotsquared.core.plot.flag.implementations.MycelGrowFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.PlaceFlag;
|
import com.plotsquared.core.plot.flag.implementations.PlaceFlag;
|
||||||
|
import com.plotsquared.core.plot.flag.implementations.RedstoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.SnowFormFlag;
|
import com.plotsquared.core.plot.flag.implementations.SnowFormFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.SnowMeltFlag;
|
import com.plotsquared.core.plot.flag.implementations.SnowMeltFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.SoilDryFlag;
|
import com.plotsquared.core.plot.flag.implementations.SoilDryFlag;
|
||||||
@ -60,11 +61,11 @@ import com.plotsquared.core.util.task.TaskTime;
|
|||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.block.BlockType;
|
import com.sk89q.worldedit.world.block.BlockType;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Tag;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
@ -89,9 +90,11 @@ 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.BlockMultiPlaceEvent;
|
||||||
|
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;
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
import org.bukkit.event.block.BlockRedstoneEvent;
|
||||||
import org.bukkit.event.block.BlockSpreadEvent;
|
import org.bukkit.event.block.BlockSpreadEvent;
|
||||||
import org.bukkit.event.block.CauldronLevelChangeEvent;
|
import org.bukkit.event.block.CauldronLevelChangeEvent;
|
||||||
import org.bukkit.event.block.EntityBlockFormEvent;
|
import org.bukkit.event.block.EntityBlockFormEvent;
|
||||||
@ -106,13 +109,27 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import static org.bukkit.Tag.CORALS;
|
import java.util.UUID;
|
||||||
import static org.bukkit.Tag.CORAL_BLOCKS;
|
import java.util.stream.Collectors;
|
||||||
import static org.bukkit.Tag.WALL_CORALS;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class BlockEventListener implements Listener {
|
public class BlockEventListener implements Listener {
|
||||||
|
|
||||||
|
private static final Set<Material> PISTONS = Set.of(
|
||||||
|
Material.PISTON,
|
||||||
|
Material.STICKY_PISTON
|
||||||
|
);
|
||||||
|
private static final Set<Material> PHYSICS_BLOCKS = Set.of(
|
||||||
|
Material.TURTLE_EGG,
|
||||||
|
Material.TURTLE_SPAWN_EGG
|
||||||
|
);
|
||||||
|
private static final Set<Material> SNOW = Stream.of(Material.values()) // needed as Tag.SNOW isn't present in 1.16.5
|
||||||
|
.filter(material -> material.name().contains("SNOW"))
|
||||||
|
.filter(Material::isBlock)
|
||||||
|
.collect(Collectors.toUnmodifiableSet());
|
||||||
|
|
||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
private final WorldEdit worldEdit;
|
private final WorldEdit worldEdit;
|
||||||
|
|
||||||
@ -141,6 +158,111 @@ public class BlockEventListener implements Listener {
|
|||||||
}, TaskTime.ticks(3L));
|
}, TaskTime.ticks(3L));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onRedstoneEvent(BlockRedstoneEvent event) {
|
||||||
|
Block block = event.getBlock();
|
||||||
|
Location location = BukkitUtil.adapt(block.getLocation());
|
||||||
|
PlotArea area = location.getPlotArea();
|
||||||
|
if (area == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot plot = location.getOwnedPlot();
|
||||||
|
if (plot == null) {
|
||||||
|
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, RedstoneFlag.class, false)) {
|
||||||
|
event.setNewCurrent(0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!plot.getFlag(RedstoneFlag.class)) {
|
||||||
|
event.setNewCurrent(0);
|
||||||
|
plot.debug("Redstone event was cancelled because redstone = false");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Settings.Redstone.DISABLE_OFFLINE) {
|
||||||
|
boolean disable = false;
|
||||||
|
if (!DBFunc.SERVER.equals(plot.getOwner())) {
|
||||||
|
if (plot.isMerged()) {
|
||||||
|
disable = true;
|
||||||
|
for (UUID owner : plot.getOwners()) {
|
||||||
|
if (PlotSquared.platform().playerManager().getPlayerIfExists(owner) != null) {
|
||||||
|
disable = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
disable = PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwnerAbs()) == null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (disable) {
|
||||||
|
for (UUID trusted : plot.getTrusted()) {
|
||||||
|
if (PlotSquared.platform().playerManager().getPlayerIfExists(trusted) != null) {
|
||||||
|
disable = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (disable) {
|
||||||
|
event.setNewCurrent(0);
|
||||||
|
plot.debug("Redstone event was cancelled because no trusted player was in the plot");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Settings.Redstone.DISABLE_UNOCCUPIED) {
|
||||||
|
for (final PlotPlayer<?> player : PlotSquared.platform().playerManager().getPlayers()) {
|
||||||
|
if (plot.equals(player.getCurrentPlot())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
event.setNewCurrent(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
|
public void onPhysicsEvent(BlockPhysicsEvent event) {
|
||||||
|
Block block = event.getBlock();
|
||||||
|
Location location = BukkitUtil.adapt(block.getLocation());
|
||||||
|
PlotArea area = location.getPlotArea();
|
||||||
|
if (area == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Plot plot = area.getOwnedPlotAbs(location);
|
||||||
|
if (plot == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.getChangedType().hasGravity() && plot.getFlag(DisablePhysicsFlag.class)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
sendBlockChange(event.getBlock().getLocation(), event.getBlock().getBlockData());
|
||||||
|
plot.debug("Prevented block physics and resent block change because disable-physics = true");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.getChangedType() == Material.COMPARATOR) {
|
||||||
|
if (!plot.getFlag(RedstoneFlag.class)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
plot.debug("Prevented comparator update because redstone = false");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (PHYSICS_BLOCKS.contains(event.getChangedType())) {
|
||||||
|
if (plot.getFlag(DisablePhysicsFlag.class)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
plot.debug("Prevented block physics because disable-physics = true");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) {
|
||||||
|
if (PISTONS.contains(block.getType())) {
|
||||||
|
org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData();
|
||||||
|
final BlockFace facing = piston.getFacing();
|
||||||
|
location = location.add(facing.getModX(), facing.getModY(), facing.getModZ());
|
||||||
|
Plot newPlot = area.getOwnedPlotAbs(location);
|
||||||
|
if (!plot.equals(newPlot)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
plot.debug("Prevented piston update because of invalid edge piston detection");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void blockCreate(BlockPlaceEvent event) {
|
public void blockCreate(BlockPlaceEvent event) {
|
||||||
Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
||||||
@ -160,10 +282,7 @@ public class BlockEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -180,10 +299,7 @@ public class BlockEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
plot.debug(player.getName() + " could not place " + event.getBlock().getType()
|
plot.debug(player.getName() + " could not place " + event.getBlock().getType()
|
||||||
@ -210,10 +326,7 @@ public class BlockEventListener implements Listener {
|
|||||||
} else if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
} else if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -235,10 +348,7 @@ public class BlockEventListener implements Listener {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -267,10 +377,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
@ -296,10 +403,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -432,25 +536,19 @@ public class BlockEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) {
|
if (SNOW.contains(event.getNewState().getType())) {
|
||||||
if (!plot.getFlag(SnowFormFlag.class)) {
|
if (!plot.getFlag(SnowFormFlag.class)) {
|
||||||
plot.debug("Snow could not form because snow-form = false");
|
plot.debug("Snow could not form because snow-form = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) {
|
if (Tag.ICE.isTagged(event.getNewState().getType())) {
|
||||||
if (!plot.getFlag(IceFormFlag.class)) {
|
if (!plot.getFlag(IceFormFlag.class)) {
|
||||||
plot.debug("Ice could not form because ice-form = false");
|
plot.debug("Ice could not form because ice-form = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (event.getNewState().getType().toString().endsWith("CONCRETE")) {
|
|
||||||
if (!plot.getFlag(ConcreteHardenFlag.class)) {
|
|
||||||
plot.debug("Concrete powder could not harden because concrete-harden = false");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@ -470,9 +568,9 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Class<? extends BooleanFlag<?>> flag;
|
Class<? extends BooleanFlag<?>> flag;
|
||||||
if (org.bukkit.Tag.SNOW.isTagged(event.getNewState().getType())) {
|
if (SNOW.contains(event.getNewState().getType())) {
|
||||||
flag = SnowFormFlag.class;
|
flag = SnowFormFlag.class;
|
||||||
} else if (org.bukkit.Tag.ICE.isTagged(event.getNewState().getType())) {
|
} else if (Tag.ICE.isTagged(event.getNewState().getType())) {
|
||||||
flag = IceFormFlag.class;
|
flag = IceFormFlag.class;
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
@ -525,11 +623,7 @@ public class BlockEventListener implements Listener {
|
|||||||
BlockBreakEvent call = new BlockBreakEvent(block, player);
|
BlockBreakEvent call = new BlockBreakEvent(block, player);
|
||||||
Bukkit.getServer().getPluginManager().callEvent(call);
|
Bukkit.getServer().getPluginManager().callEvent(call);
|
||||||
if (!call.isCancelled()) {
|
if (!call.isCancelled()) {
|
||||||
if (Settings.Flags.INSTABREAK_CONSIDER_TOOL) {
|
event.getBlock().breakNaturally();
|
||||||
block.breakNaturally(event.getItemInHand());
|
|
||||||
} else {
|
|
||||||
block.breakNaturally();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// == rather than <= as we only care about the "ground level" not being destroyed
|
// == rather than <= as we only care about the "ground level" not being destroyed
|
||||||
@ -582,14 +676,14 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Material blockType = block.getType();
|
Material blockType = block.getType();
|
||||||
if (org.bukkit.Tag.ICE.isTagged(blockType)) {
|
if (Tag.ICE.isTagged(blockType)) {
|
||||||
if (!plot.getFlag(IceMeltFlag.class)) {
|
if (!plot.getFlag(IceMeltFlag.class)) {
|
||||||
plot.debug("Ice could not melt because ice-melt = false");
|
plot.debug("Ice could not melt because ice-melt = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (org.bukkit.Tag.SNOW.isTagged(blockType)) {
|
if (SNOW.contains(blockType)) {
|
||||||
if (!plot.getFlag(SnowMeltFlag.class)) {
|
if (!plot.getFlag(SnowMeltFlag.class)) {
|
||||||
plot.debug("Snow could not melt because snow-melt = false");
|
plot.debug("Snow could not melt because snow-melt = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -603,7 +697,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (CORAL_BLOCKS.isTagged(blockType) || CORALS.isTagged(blockType) || WALL_CORALS.isTagged(blockType)) {
|
if (Tag.CORAL_BLOCKS.isTagged(blockType) || Tag.CORALS.isTagged(blockType) || Tag.WALL_CORALS.isTagged(blockType)) {
|
||||||
if (!plot.getFlag(CoralDryFlag.class)) {
|
if (!plot.getFlag(CoralDryFlag.class)) {
|
||||||
plot.debug("Coral could not dry because coral-dry = false");
|
plot.debug("Coral could not dry because coral-dry = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -628,9 +722,7 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block.getBlockData() instanceof Farmland farmland && event
|
if (block.getBlockData() instanceof Farmland farmland && event.getNewState().getBlockData() instanceof Farmland newFarmland) {
|
||||||
.getNewState()
|
|
||||||
.getBlockData() instanceof Farmland newFarmland) {
|
|
||||||
int currentMoisture = farmland.getMoisture();
|
int currentMoisture = farmland.getMoisture();
|
||||||
int newMoisture = newFarmland.getMoisture();
|
int newMoisture = newFarmland.getMoisture();
|
||||||
|
|
||||||
@ -693,10 +785,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (toPlot != null) {
|
if (toPlot != null) {
|
||||||
if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(
|
if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(toPlot, toArea.getOwnedPlot(fromLocation))) {
|
||||||
toPlot,
|
|
||||||
toArea.getOwnedPlot(fromLocation)
|
|
||||||
)) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -712,10 +801,7 @@ public class BlockEventListener implements Listener {
|
|||||||
toPlot.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 (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(
|
} else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(null, toArea.getOwnedPlot(fromLocation))) {
|
||||||
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();
|
||||||
@ -985,7 +1071,6 @@ public class BlockEventListener implements Listener {
|
|||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plot.debug("Explosion was cancelled because explosion = false");
|
plot.debug("Explosion was cancelled because explosion = false");
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
event.blockList().removeIf(blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.adapt(blox.getLocation()))));
|
event.blockList().removeIf(blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.adapt(blox.getLocation()))));
|
||||||
}
|
}
|
||||||
@ -1039,10 +1124,7 @@ public class BlockEventListener implements Listener {
|
|||||||
)) {
|
)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1052,10 +1134,7 @@ public class BlockEventListener implements Listener {
|
|||||||
)) {
|
)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1063,10 +1142,7 @@ public class BlockEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1192,20 +1268,16 @@ public class BlockEventListener implements Listener {
|
|||||||
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
|
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
|
if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,6 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
|
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.SculkSensorInteractFlag;
|
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.PlotFlagUtil;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -93,16 +92,12 @@ public class BlockEventListener117 implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(
|
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) || plot != null && !plot.getFlag(
|
||||||
area,
|
MiscInteractFlag.class)) {
|
||||||
MiscInteractFlag.class,
|
|
||||||
true
|
|
||||||
) || plot != null && (!plot.getFlag(MiscInteractFlag.class) || !plot.getFlag(SculkSensorInteractFlag.class))) {
|
|
||||||
if (plotPlayer != null) {
|
if (plotPlayer != null) {
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (!plot.isAdded(plotPlayer.getUUID())) {
|
if (!plot.isAdded(plotPlayer.getUUID())) {
|
||||||
plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because both " +
|
plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because misc-interact = false");
|
||||||
"sculk-sensor-interact and misc-interact = false");
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,15 +108,13 @@ public class BlockEventListener117 implements Listener {
|
|||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (itemThrower == null && (itemThrower = item.getOwner()) == null) {
|
if (itemThrower == null && (itemThrower = item.getOwner()) == null) {
|
||||||
plot.debug(
|
plot.debug(
|
||||||
"A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " +
|
"A thrown item couldn't trigger sculk sensors because misc-interact = false and the item's owner could not be resolved.");
|
||||||
"misc-interact = false and the item's owner could not be resolved.");
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!plot.isAdded(itemThrower)) {
|
if (!plot.isAdded(itemThrower)) {
|
||||||
if (!plot.isAdded(itemThrower)) {
|
if (!plot.isAdded(itemThrower)) {
|
||||||
plot.debug("A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " +
|
plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false");
|
||||||
"misc-interact = false");
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -140,6 +133,7 @@ public class BlockEventListener117 implements Listener {
|
|||||||
if (area == null) {
|
if (area == null) {
|
||||||
for (int i = blocks.size() - 1; i >= 0; i--) {
|
for (int i = blocks.size() - 1; i >= 0; i--) {
|
||||||
Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
|
Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
|
||||||
|
blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
|
||||||
if (blockLocation.isPlotArea()) {
|
if (blockLocation.isPlotArea()) {
|
||||||
blocks.remove(i);
|
blocks.remove(i);
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,6 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||||
import com.plotsquared.core.util.ReflectionUtils;
|
|
||||||
import com.plotsquared.core.util.ReflectionUtils.RefClass;
|
import com.plotsquared.core.util.ReflectionUtils.RefClass;
|
||||||
import com.plotsquared.core.util.ReflectionUtils.RefField;
|
import com.plotsquared.core.util.ReflectionUtils.RefField;
|
||||||
import com.plotsquared.core.util.ReflectionUtils.RefMethod;
|
import com.plotsquared.core.util.ReflectionUtils.RefMethod;
|
||||||
@ -65,11 +64,9 @@ public class ChunkListener implements Listener {
|
|||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
private final int version;
|
private final int version;
|
||||||
|
|
||||||
private RefMethod methodSetUnsaved;
|
|
||||||
private RefMethod methodGetHandleChunk;
|
private RefMethod methodGetHandleChunk;
|
||||||
private RefMethod methodGetHandleWorld;
|
private RefMethod methodGetHandleWorld;
|
||||||
private RefField mustNotSave;
|
private RefField mustSave;
|
||||||
private Object objChunkStatusFull = null;
|
|
||||||
/*
|
/*
|
||||||
private RefMethod methodGetFullChunk;
|
private RefMethod methodGetFullChunk;
|
||||||
private RefMethod methodGetBukkitChunk;
|
private RefMethod methodGetBukkitChunk;
|
||||||
@ -82,6 +79,7 @@ public class ChunkListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
private Chunk lastChunk;
|
private Chunk lastChunk;
|
||||||
private boolean ignoreUnload = false;
|
private boolean ignoreUnload = false;
|
||||||
|
private boolean isTrueForNotSave = true;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ChunkListener(final @NonNull PlotAreaManager plotAreaManager) {
|
public ChunkListener(final @NonNull PlotAreaManager plotAreaManager) {
|
||||||
@ -92,27 +90,22 @@ public class ChunkListener implements Listener {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
RefClass classCraftWorld = getRefClass("{cb}.CraftWorld");
|
RefClass classCraftWorld = getRefClass("{cb}.CraftWorld");
|
||||||
|
this.methodGetHandleWorld = classCraftWorld.getMethod("getHandle");
|
||||||
RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
||||||
ReflectionUtils.RefClass classChunkAccess = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
|
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle");
|
||||||
this.methodSetUnsaved = classChunkAccess.getMethod("a", boolean.class);
|
|
||||||
try {
|
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle");
|
|
||||||
} catch (NoSuchMethodException ignored) {
|
|
||||||
try {
|
|
||||||
RefClass classChunkStatus = getRefClass("net.minecraft.world.level.chunk.ChunkStatus");
|
|
||||||
this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null);
|
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle", classChunkStatus.getRealClass());
|
|
||||||
} catch (NoSuchMethodException ex) {
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
if (version < 17) {
|
if (version < 17) {
|
||||||
RefClass classChunk = getRefClass("{nms}.Chunk");
|
RefClass classChunk = getRefClass("{nms}.Chunk");
|
||||||
this.mustNotSave = classChunk.getField("mustNotSave");
|
if (version == 13) {
|
||||||
|
this.mustSave = classChunk.getField("mustSave");
|
||||||
|
this.isTrueForNotSave = false;
|
||||||
|
} else {
|
||||||
|
this.mustSave = classChunk.getField("mustNotSave");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
||||||
this.mustNotSave = classChunk.getField("mustNotSave");
|
this.mustSave = classChunk.getField("mustNotSave");
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (NoSuchFieldException e) {
|
} catch (NoSuchFieldException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -174,13 +167,10 @@ public class ChunkListener implements Listener {
|
|||||||
if (safe && shouldSave(world, chunk.getX(), chunk.getZ())) {
|
if (safe && shouldSave(world, chunk.getX(), chunk.getZ())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Object c = objChunkStatusFull != null
|
Object c = this.methodGetHandleChunk.of(chunk).call();
|
||||||
? this.methodGetHandleChunk.of(chunk).call(objChunkStatusFull)
|
RefField.RefExecutor field = this.mustSave.of(c);
|
||||||
: this.methodGetHandleChunk.of(chunk).call();
|
if ((Boolean) field.get() != isTrueForNotSave) {
|
||||||
RefField.RefExecutor field = this.mustNotSave.of(c);
|
field.set(isTrueForNotSave);
|
||||||
methodSetUnsaved.of(c).call(false);
|
|
||||||
if (!((Boolean) field.get())) {
|
|
||||||
field.set(true);
|
|
||||||
if (chunk.isLoaded()) {
|
if (chunk.isLoaded()) {
|
||||||
ignoreUnload = true;
|
ignoreUnload = true;
|
||||||
chunk.unload(false);
|
chunk.unload(false);
|
||||||
@ -244,8 +234,7 @@ public class ChunkListener implements Listener {
|
|||||||
Chunk chunk = event.getChunk();
|
Chunk chunk = event.getChunk();
|
||||||
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
||||||
String world = chunk.getWorld().getName();
|
String world = chunk.getWorld().getName();
|
||||||
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(
|
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(world)) {
|
||||||
world)) {
|
|
||||||
if (unloadChunk(world, chunk, true)) {
|
if (unloadChunk(world, chunk, true)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.bukkit.listener;
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.bukkit.BukkitPlatform;
|
|
||||||
import com.plotsquared.bukkit.player.BukkitPlayer;
|
import com.plotsquared.bukkit.player.BukkitPlayer;
|
||||||
import com.plotsquared.bukkit.util.BukkitEntityUtil;
|
import com.plotsquared.bukkit.util.BukkitEntityUtil;
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
@ -36,13 +35,11 @@ import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.EntityChangeBlockFlag;
|
import com.plotsquared.core.plot.flag.implementations.EntityChangeBlockFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ExplosionFlag;
|
import com.plotsquared.core.plot.flag.implementations.ExplosionFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.InvincibleFlag;
|
import com.plotsquared.core.plot.flag.implementations.InvincibleFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ProjectileChangeBlockFlag;
|
|
||||||
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.PlotFlagUtil;
|
import com.plotsquared.core.util.PlotFlagUtil;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.block.BlockType;
|
import com.sk89q.worldedit.world.block.BlockType;
|
||||||
import io.papermc.lib.PaperLib;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -56,7 +53,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
import org.bukkit.entity.TNTPrimed;
|
import org.bukkit.entity.TNTPrimed;
|
||||||
import org.bukkit.entity.Vehicle;
|
import org.bukkit.entity.Vehicle;
|
||||||
import org.bukkit.event.Cancellable;
|
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -81,43 +77,52 @@ import java.util.List;
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class EntityEventListener implements Listener {
|
public class EntityEventListener implements Listener {
|
||||||
|
|
||||||
private final BukkitPlatform platform;
|
|
||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
private final EventDispatcher eventDispatcher;
|
private final EventDispatcher eventDispatcher;
|
||||||
private float lastRadius;
|
private float lastRadius;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public EntityEventListener(
|
public EntityEventListener(
|
||||||
final @NonNull BukkitPlatform platform,
|
|
||||||
final @NonNull PlotAreaManager plotAreaManager,
|
final @NonNull PlotAreaManager plotAreaManager,
|
||||||
final @NonNull EventDispatcher eventDispatcher
|
final @NonNull EventDispatcher eventDispatcher
|
||||||
) {
|
) {
|
||||||
this.platform = platform;
|
|
||||||
this.plotAreaManager = plotAreaManager;
|
this.plotAreaManager = plotAreaManager;
|
||||||
this.eventDispatcher = eventDispatcher;
|
this.eventDispatcher = eventDispatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
|
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
|
||||||
onEntityDamageByEntityCommon(event.getCombuster(), event.getEntity(), EntityDamageEvent.DamageCause.FIRE_TICK, event);
|
EntityDamageByEntityEvent eventChange =
|
||||||
|
new EntityDamageByEntityEvent(
|
||||||
|
event.getCombuster(),
|
||||||
|
event.getEntity(),
|
||||||
|
EntityDamageEvent.DamageCause.FIRE_TICK,
|
||||||
|
event.getDuration()
|
||||||
|
);
|
||||||
|
onEntityDamageByEntityEvent(eventChange);
|
||||||
|
if (eventChange.isCancelled()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
|
public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent event) {
|
||||||
onEntityDamageByEntityCommon(event.getDamager(), event.getEntity(), event.getCause(), event);
|
Entity damager = event.getDamager();
|
||||||
}
|
|
||||||
|
|
||||||
private void onEntityDamageByEntityCommon(
|
|
||||||
final Entity damager,
|
|
||||||
final Entity victim,
|
|
||||||
final EntityDamageEvent.DamageCause cause,
|
|
||||||
final Cancellable event
|
|
||||||
) {
|
|
||||||
Location location = BukkitUtil.adapt(damager.getLocation());
|
Location location = BukkitUtil.adapt(damager.getLocation());
|
||||||
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!BukkitEntityUtil.entityDamage(damager, victim, cause)) {
|
Entity victim = event.getEntity();
|
||||||
|
/*
|
||||||
|
if (victim.getType().equals(EntityType.ITEM_FRAME)) {
|
||||||
|
Plot plot = BukkitUtil.getLocation(victim).getPlot();
|
||||||
|
if (plot != null && !plot.isAdded(damager.getUniqueId())) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if (!BukkitEntityUtil.entityDamage(damager, victim, event.getCause())) {
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
if (victim instanceof Ageable ageable) {
|
if (victim instanceof Ageable ageable) {
|
||||||
if (ageable.getAge() == -24000) {
|
if (ageable.getAge() == -24000) {
|
||||||
@ -138,55 +143,56 @@ public class EntityEventListener implements Listener {
|
|||||||
if (area == null) {
|
if (area == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Armour-stands are handled elsewhere and should not be handled by area-wide entity-spawn options
|
|
||||||
if (entity.getType() == EntityType.ARMOR_STAND) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
|
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
|
||||||
switch (reason.toString()) {
|
switch (reason.toString()) {
|
||||||
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
case "DISPENSE_EGG":
|
||||||
|
case "EGG":
|
||||||
|
case "OCELOT_BABY":
|
||||||
|
case "SPAWNER_EGG":
|
||||||
if (!area.isSpawnEggs()) {
|
if (!area.isSpawnEggs()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL",
|
case "REINFORCEMENTS":
|
||||||
"TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN", "NETHER_PORTAL",
|
case "NATURAL":
|
||||||
"FROZEN", "SPELL", "DEFAULT" -> {
|
case "MOUNT":
|
||||||
|
case "PATROL":
|
||||||
|
case "RAID":
|
||||||
|
case "SHEARED":
|
||||||
|
case "SILVERFISH_BLOCK":
|
||||||
|
case "ENDER_PEARL":
|
||||||
|
case "TRAP":
|
||||||
|
case "VILLAGE_DEFENSE":
|
||||||
|
case "VILLAGE_INVASION":
|
||||||
|
case "BEEHIVE":
|
||||||
|
case "CHUNK_GEN":
|
||||||
if (!area.isMobSpawning()) {
|
if (!area.isMobSpawning()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "BREEDING", "DUPLICATION" -> {
|
case "BREEDING":
|
||||||
if (!area.isSpawnBreeding()) {
|
if (!area.isSpawnBreeding()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "CUSTOM" -> {
|
case "BUILD_IRONGOLEM":
|
||||||
if (!area.isSpawnCustom()) {
|
case "BUILD_SNOWMAN":
|
||||||
|
case "BUILD_WITHER":
|
||||||
|
case "CUSTOM":
|
||||||
|
if (!area.isSpawnCustom() && entity.getType() != EntityType.ARMOR_STAND) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// No need to clutter metadata if running paper
|
break;
|
||||||
if (!PaperLib.isPaper()) {
|
case "SPAWNER":
|
||||||
entity.setMetadata("ps_custom_spawned", new FixedMetadataValue(this.platform, true));
|
|
||||||
}
|
|
||||||
return; // Don't cancel if mob spawning is disabled
|
|
||||||
}
|
|
||||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER" -> {
|
|
||||||
if (!area.isSpawnCustom()) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "SPAWNER" -> {
|
|
||||||
if (!area.isMobSpawnerSpawning()) {
|
if (!area.isMobSpawnerSpawning()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
Plot plot = area.getOwnedPlotAbs(location);
|
Plot plot = area.getOwnedPlotAbs(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
@ -364,13 +370,13 @@ public class EntityEventListener implements Listener {
|
|||||||
if (shooter instanceof Player) {
|
if (shooter instanceof Player) {
|
||||||
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
|
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (area.isRoadFlags() && !area.getRoadFlag(ProjectileChangeBlockFlag.class) && !pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.isAdded(pp.getUUID()) || plot.getFlag(ProjectileChangeBlockFlag.class) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
entity.remove();
|
entity.remove();
|
||||||
|
@ -120,15 +120,9 @@ public class EntitySpawnListener implements Listener {
|
|||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (!location.isPlotArea() || area == null) {
|
if (!location.isPlotArea()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (PaperLib.isPaper()) {
|
|
||||||
//noinspection ConstantValue - getEntitySpawnReason annotated as NotNull, but is not NotNull. lol.
|
|
||||||
if (area.isSpawnCustom() && entity.getEntitySpawnReason() != null && "CUSTOM".equals(entity.getEntitySpawnReason().name())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Plot plot = location.getOwnedPlotAbs();
|
Plot plot = location.getOwnedPlotAbs();
|
||||||
EntityType type = entity.getType();
|
EntityType type = entity.getType();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
@ -154,7 +148,7 @@ public class EntitySpawnListener implements Listener {
|
|||||||
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
if (type == EntityType.ENDER_CRYSTAL || type == EntityType.ARMOR_STAND) {
|
if (type == EntityType.ENDER_CRYSTAL) {
|
||||||
if (BukkitEntityUtil.checkEntity(entity, plot)) {
|
if (BukkitEntityUtil.checkEntity(entity, plot)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
@ -1,201 +0,0 @@
|
|||||||
/*
|
|
||||||
* PlotSquared, a land and world management plugin for Minecraft.
|
|
||||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
|
||||||
* Copyright (C) IntellectualSites team and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.plotsquared.bukkit.listener;
|
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
|
||||||
import com.plotsquared.bukkit.player.BukkitPlayer;
|
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
import com.plotsquared.core.configuration.Settings;
|
|
||||||
import com.plotsquared.core.database.DBFunc;
|
|
||||||
import com.plotsquared.core.location.Location;
|
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
|
||||||
import com.plotsquared.core.plot.Plot;
|
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.DisablePhysicsFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.RedstoneFlag;
|
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
|
||||||
import com.plotsquared.core.util.task.TaskTime;
|
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.BlockFace;
|
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
|
||||||
import org.bukkit.event.block.BlockRedstoneEvent;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
public class HighFreqBlockEventListener implements Listener {
|
|
||||||
|
|
||||||
private static final Set<Material> PISTONS = Set.of(
|
|
||||||
Material.PISTON,
|
|
||||||
Material.STICKY_PISTON
|
|
||||||
);
|
|
||||||
private static final Set<Material> PHYSICS_BLOCKS = Set.of(
|
|
||||||
Material.TURTLE_EGG,
|
|
||||||
Material.TURTLE_SPAWN_EGG
|
|
||||||
);
|
|
||||||
|
|
||||||
private final PlotAreaManager plotAreaManager;
|
|
||||||
private final WorldEdit worldEdit;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public HighFreqBlockEventListener(final @NonNull PlotAreaManager plotAreaManager, final @NonNull WorldEdit worldEdit) {
|
|
||||||
this.plotAreaManager = plotAreaManager;
|
|
||||||
this.worldEdit = worldEdit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendBlockChange(final org.bukkit.Location bloc, final BlockData data) {
|
|
||||||
TaskManager.runTaskLater(() -> {
|
|
||||||
String world = bloc.getWorld().getName();
|
|
||||||
int x = bloc.getBlockX();
|
|
||||||
int z = bloc.getBlockZ();
|
|
||||||
int distance = Bukkit.getViewDistance() * 16;
|
|
||||||
|
|
||||||
for (final PlotPlayer<?> player : PlotSquared.platform().playerManager().getPlayers()) {
|
|
||||||
Location location = player.getLocation();
|
|
||||||
if (location.getWorldName().equals(world)) {
|
|
||||||
if (16 * Math.abs(location.getX() - x) / 16 > distance || 16 * Math.abs(location.getZ() - z) / 16 > distance) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
((BukkitPlayer) player).player.sendBlockChange(bloc, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, TaskTime.ticks(3L));
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onRedstoneEvent(BlockRedstoneEvent event) {
|
|
||||||
Block block = event.getBlock();
|
|
||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = location.getOwnedPlot();
|
|
||||||
if (plot == null) {
|
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, RedstoneFlag.class, false)) {
|
|
||||||
event.setNewCurrent(0);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!plot.getFlag(RedstoneFlag.class)) {
|
|
||||||
event.setNewCurrent(0);
|
|
||||||
plot.debug("Redstone event was cancelled because redstone = false");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (Settings.Redstone.DISABLE_OFFLINE) {
|
|
||||||
boolean disable = false;
|
|
||||||
if (!DBFunc.SERVER.equals(plot.getOwner())) {
|
|
||||||
if (plot.isMerged()) {
|
|
||||||
disable = true;
|
|
||||||
for (UUID owner : plot.getOwners()) {
|
|
||||||
if (PlotSquared.platform().playerManager().getPlayerIfExists(owner) != null) {
|
|
||||||
disable = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
disable = PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwnerAbs()) == null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (disable) {
|
|
||||||
for (UUID trusted : plot.getTrusted()) {
|
|
||||||
if (PlotSquared.platform().playerManager().getPlayerIfExists(trusted) != null) {
|
|
||||||
disable = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (disable) {
|
|
||||||
event.setNewCurrent(0);
|
|
||||||
plot.debug("Redstone event was cancelled because no trusted player was in the plot");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (Settings.Redstone.DISABLE_UNOCCUPIED) {
|
|
||||||
for (final PlotPlayer<?> player : PlotSquared.platform().playerManager().getPlayers()) {
|
|
||||||
if (plot.equals(player.getCurrentPlot())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
event.setNewCurrent(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
|
||||||
public void onPhysicsEvent(BlockPhysicsEvent event) {
|
|
||||||
Block block = event.getBlock();
|
|
||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = area.getOwnedPlotAbs(location);
|
|
||||||
if (plot == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.getChangedType().hasGravity() && plot.getFlag(DisablePhysicsFlag.class)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
sendBlockChange(event.getBlock().getLocation(), event.getBlock().getBlockData());
|
|
||||||
plot.debug("Prevented block physics and resent block change because disable-physics = true");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.getChangedType() == Material.COMPARATOR) {
|
|
||||||
if (!plot.getFlag(RedstoneFlag.class)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
plot.debug("Prevented comparator update because redstone = false");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (PHYSICS_BLOCKS.contains(event.getChangedType())) {
|
|
||||||
if (plot.getFlag(DisablePhysicsFlag.class)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
plot.debug("Prevented block physics because disable-physics = true");
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (Settings.Redstone.DETECT_INVALID_EDGE_PISTONS) {
|
|
||||||
if (PISTONS.contains(block.getType())) {
|
|
||||||
org.bukkit.block.data.Directional piston = (org.bukkit.block.data.Directional) block.getBlockData();
|
|
||||||
final BlockFace facing = piston.getFacing();
|
|
||||||
location = location.add(facing.getModX(), facing.getModY(), facing.getModZ());
|
|
||||||
Plot newPlot = area.getOwnedPlotAbs(location);
|
|
||||||
if (plot.equals(newPlot)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!plot.isMerged() || !plot.getConnectedPlots().contains(newPlot)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
plot.debug("Prevented piston update because of invalid edge piston detection");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.bukkit.listener;
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
import com.destroystokyo.paper.event.block.BeaconEffectEvent;
|
import com.destroystokyo.paper.event.block.BeaconEffectEvent;
|
||||||
import com.destroystokyo.paper.event.block.BlockDestroyEvent;
|
|
||||||
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
||||||
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
|
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
|
||||||
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
|
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
|
||||||
@ -41,15 +40,11 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.flag.FlagContainer;
|
import com.plotsquared.core.plot.flag.FlagContainer;
|
||||||
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.FishingFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.TileDropFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.PlotFlagUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.TileState;
|
import org.bukkit.block.TileState;
|
||||||
@ -86,19 +81,6 @@ public class PaperListener implements Listener {
|
|||||||
this.plotAreaManager = plotAreaManager;
|
this.plotAreaManager = plotAreaManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
|
||||||
public void onBlockDestroy(final BlockDestroyEvent event) {
|
|
||||||
Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = area.getPlot(location);
|
|
||||||
if (plot != null) {
|
|
||||||
event.setWillDrop(plot.getFlag(TileDropFlag.class));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onEntityPathfind(EntityPathfindEvent event) {
|
public void onEntityPathfind(EntityPathfindEvent event) {
|
||||||
if (!Settings.Paper_Components.ENTITY_PATHING) {
|
if (!Settings.Paper_Components.ENTITY_PATHING) {
|
||||||
@ -140,7 +122,7 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
Slime slime = event.getEntity();
|
Slime slime = event.getEntity();
|
||||||
|
|
||||||
Block b = slime.getTargetBlockExact(4);
|
Block b = slime.getTargetBlock(4);
|
||||||
if (b == null) {
|
if (b == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -182,57 +164,71 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
Location location = BukkitUtil.adapt(event.getSpawnLocation());
|
Location location = BukkitUtil.adapt(event.getSpawnLocation());
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (!location.isPlotArea()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Armour-stands are handled elsewhere and should not be handled by area-wide entity-spawn options
|
//If entities are spawning... the chunk should be loaded?
|
||||||
if (event.getType() == EntityType.ARMOR_STAND) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// If entities are spawning... the chunk should be loaded?
|
|
||||||
Entity[] entities = event.getSpawnLocation().getChunk().getEntities();
|
Entity[] entities = event.getSpawnLocation().getChunk().getEntities();
|
||||||
if (entities.length >= Settings.Chunk_Processor.MAX_ENTITIES) {
|
if (entities.length > Settings.Chunk_Processor.MAX_ENTITIES) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CreatureSpawnEvent.SpawnReason reason = event.getReason();
|
CreatureSpawnEvent.SpawnReason reason = event.getReason();
|
||||||
switch (reason.toString()) {
|
switch (reason.toString()) {
|
||||||
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
case "DISPENSE_EGG":
|
||||||
|
case "EGG":
|
||||||
|
case "OCELOT_BABY":
|
||||||
|
case "SPAWNER_EGG":
|
||||||
if (!area.isSpawnEggs()) {
|
if (!area.isSpawnEggs()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> {
|
case "REINFORCEMENTS":
|
||||||
|
case "NATURAL":
|
||||||
|
case "MOUNT":
|
||||||
|
case "PATROL":
|
||||||
|
case "RAID":
|
||||||
|
case "SHEARED":
|
||||||
|
case "SILVERFISH_BLOCK":
|
||||||
|
case "ENDER_PEARL":
|
||||||
|
case "TRAP":
|
||||||
|
case "VILLAGE_DEFENSE":
|
||||||
|
case "VILLAGE_INVASION":
|
||||||
|
case "BEEHIVE":
|
||||||
|
case "CHUNK_GEN":
|
||||||
if (!area.isMobSpawning()) {
|
if (!area.isMobSpawning()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "BREEDING" -> {
|
case "BREEDING":
|
||||||
if (!area.isSpawnBreeding()) {
|
if (!area.isSpawnBreeding()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
case "BUILD_IRONGOLEM":
|
||||||
if (!area.isSpawnCustom()) {
|
case "BUILD_SNOWMAN":
|
||||||
|
case "BUILD_WITHER":
|
||||||
|
case "CUSTOM":
|
||||||
|
if (!area.isSpawnCustom() && event.getType() != EntityType.ARMOR_STAND) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "SPAWNER" -> {
|
case "SPAWNER":
|
||||||
if (!area.isMobSpawnerSpawning()) {
|
if (!area.isMobSpawnerSpawning()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlotAbs();
|
Plot plot = location.getOwnedPlotAbs();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
@ -306,7 +302,7 @@ public class PaperListener implements Listener {
|
|||||||
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
|
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
|
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
event.setBuild(false);
|
event.setBuild(false);
|
||||||
@ -343,10 +339,7 @@ public class PaperListener implements Listener {
|
|||||||
)) {
|
)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -355,28 +348,17 @@ public class PaperListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (entity.getType().equals(EntityType.FISHING_HOOK)) {
|
|
||||||
if (plot.getFlag(FishingFlag.class)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!plot.getFlag(ProjectilesFlag.class)) {
|
if (!plot.getFlag(ProjectilesFlag.class)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -464,11 +446,9 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean getBooleanFlagValue(
|
private boolean getBooleanFlagValue(@NonNull FlagContainer container,
|
||||||
@NonNull FlagContainer container,
|
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
||||||
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
boolean defaultValue) {
|
||||||
boolean defaultValue
|
|
||||||
) {
|
|
||||||
BooleanFlag<?> flag = container.getFlag(flagClass);
|
BooleanFlag<?> flag = container.getFlag(flagClass);
|
||||||
return flag == null ? defaultValue : flag.getValue();
|
return flag == null ? defaultValue : flag.getValue();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* PlotSquared, a land and world management plugin for Minecraft.
|
||||||
|
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||||
|
* Copyright (C) IntellectualSites team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
|
import com.plotsquared.core.configuration.Settings;
|
||||||
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
|
import com.plotsquared.core.location.Location;
|
||||||
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
import org.bukkit.block.Banner;
|
||||||
|
import org.bukkit.block.Beacon;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
|
import org.bukkit.block.CommandBlock;
|
||||||
|
import org.bukkit.block.Comparator;
|
||||||
|
import org.bukkit.block.Conduit;
|
||||||
|
import org.bukkit.block.Container;
|
||||||
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.block.DaylightDetector;
|
||||||
|
import org.bukkit.block.EnchantingTable;
|
||||||
|
import org.bukkit.block.EndGateway;
|
||||||
|
import org.bukkit.block.EnderChest;
|
||||||
|
import org.bukkit.block.Jukebox;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.block.Skull;
|
||||||
|
import org.bukkit.block.Structure;
|
||||||
|
import org.bukkit.block.data.type.Bed;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated P2 effectively no longer supports 1.13
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.10.4")
|
||||||
|
public class PaperListener113 extends PaperListener {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public PaperListener113(@NonNull PlotAreaManager plotAreaManager) {
|
||||||
|
super(plotAreaManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onBlockPlace(BlockPlaceEvent event) {
|
||||||
|
if (!Settings.Paper_Components.TILE_ENTITY_CHECK || !Settings.Enabled_Components.CHUNK_PROCESSOR) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BlockState state = event.getBlock().getState(false);
|
||||||
|
if (!(state instanceof Banner || state instanceof Beacon || state instanceof Bed || state instanceof CommandBlock
|
||||||
|
|| state instanceof Comparator || state instanceof Conduit || state instanceof Container || state instanceof CreatureSpawner
|
||||||
|
|| state instanceof DaylightDetector || state instanceof EnchantingTable || state instanceof EnderChest || state instanceof EndGateway
|
||||||
|
|| state instanceof Jukebox || state instanceof Sign || state instanceof Skull || state instanceof Structure)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
||||||
|
final PlotArea plotArea = location.getPlotArea();
|
||||||
|
if (plotArea == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final int tileEntityCount = event.getBlock().getChunk().getTileEntities(false).length;
|
||||||
|
if (tileEntityCount >= Settings.Chunk_Processor.MAX_TILES) {
|
||||||
|
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
|
||||||
|
plotPlayer.sendMessage(
|
||||||
|
TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
||||||
|
Template.of("amount", String.valueOf(Settings.Chunk_Processor.MAX_TILES))
|
||||||
|
);
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.setBuild(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -50,7 +50,6 @@ import com.plotsquared.core.plot.flag.implementations.DenyPortalsFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.DenyTeleportFlag;
|
import com.plotsquared.core.plot.flag.implementations.DenyTeleportFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag;
|
import com.plotsquared.core.plot.flag.implementations.DropProtectionFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.HangingBreakFlag;
|
import com.plotsquared.core.plot.flag.implementations.HangingBreakFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.HangingPlaceFlag;
|
import com.plotsquared.core.plot.flag.implementations.HangingPlaceFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.HostileInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.HostileInteractFlag;
|
||||||
@ -61,7 +60,6 @@ import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.PlayerInteractFlag;
|
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.TileDropFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.UntrustedVisitFlag;
|
import com.plotsquared.core.plot.flag.implementations.UntrustedVisitFlag;
|
||||||
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;
|
||||||
@ -79,17 +77,15 @@ import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
|||||||
import com.sk89q.worldedit.world.block.BlockType;
|
import com.sk89q.worldedit.world.block.BlockType;
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.FluidCollisionMode;
|
import org.bukkit.FluidCollisionMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.Tag;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.Sign;
|
|
||||||
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;
|
||||||
@ -108,7 +104,6 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
|
||||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||||
import org.bukkit.event.entity.EntityPlaceEvent;
|
import org.bukkit.event.entity.EntityPlaceEvent;
|
||||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
||||||
@ -179,98 +174,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
Material.WRITABLE_BOOK,
|
Material.WRITABLE_BOOK,
|
||||||
Material.WRITTEN_BOOK
|
Material.WRITTEN_BOOK
|
||||||
);
|
);
|
||||||
private static final Set<String> DYES;
|
|
||||||
static {
|
|
||||||
Set<String> mutableDyes = new HashSet<>(Set.of(
|
|
||||||
"WHITE_DYE",
|
|
||||||
"LIGHT_GRAY_DYE",
|
|
||||||
"GRAY_DYE",
|
|
||||||
"BLACK_DYE",
|
|
||||||
"BROWN_DYE",
|
|
||||||
"RED_DYE",
|
|
||||||
"ORANGE_DYE",
|
|
||||||
"YELLOW_DYE",
|
|
||||||
"LIME_DYE",
|
|
||||||
"GREEN_DYE",
|
|
||||||
"CYAN_DYE",
|
|
||||||
"LIGHT_BLUE_DYE",
|
|
||||||
"BLUE_DYE",
|
|
||||||
"PURPLE_DYE",
|
|
||||||
"MAGENTA_DYE",
|
|
||||||
"PINK_DYE",
|
|
||||||
"GLOW_INK_SAC"
|
|
||||||
));
|
|
||||||
int[] version = PlotSquared.platform().serverVersion();
|
|
||||||
if (version[1] >= 20) {
|
|
||||||
mutableDyes.add("HONEYCOMB");
|
|
||||||
}
|
|
||||||
DYES = Set.copyOf(mutableDyes);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final Set<String> INTERACTABLE_MATERIALS;
|
|
||||||
|
|
||||||
static {
|
|
||||||
// @formatter:off
|
|
||||||
// "temporary" fix for https://hub.spigotmc.org/jira/browse/SPIGOT-7813
|
|
||||||
// can (and should) be removed when 1.21 support is dropped
|
|
||||||
// List of all interactable 1.21 materials
|
|
||||||
INTERACTABLE_MATERIALS = Material.CHEST.isInteractable() ? null : Set.of(
|
|
||||||
"REDSTONE_ORE", "DEEPSLATE_REDSTONE_ORE", "CHISELED_BOOKSHELF", "DECORATED_POT", "CHEST", "CRAFTING_TABLE",
|
|
||||||
"FURNACE", "JUKEBOX", "OAK_FENCE", "SPRUCE_FENCE", "BIRCH_FENCE", "JUNGLE_FENCE", "ACACIA_FENCE", "CHERRY_FENCE",
|
|
||||||
"DARK_OAK_FENCE", "MANGROVE_FENCE", "BAMBOO_FENCE", "CRIMSON_FENCE", "WARPED_FENCE", "PUMPKIN",
|
|
||||||
"NETHER_BRICK_FENCE", "ENCHANTING_TABLE", "DRAGON_EGG", "ENDER_CHEST", "COMMAND_BLOCK", "BEACON", "ANVIL",
|
|
||||||
"CHIPPED_ANVIL", "DAMAGED_ANVIL", "LIGHT", "REPEATING_COMMAND_BLOCK", "CHAIN_COMMAND_BLOCK", "SHULKER_BOX",
|
|
||||||
"WHITE_SHULKER_BOX", "ORANGE_SHULKER_BOX", "MAGENTA_SHULKER_BOX", "LIGHT_BLUE_SHULKER_BOX", "YELLOW_SHULKER_BOX",
|
|
||||||
"LIME_SHULKER_BOX", "PINK_SHULKER_BOX", "GRAY_SHULKER_BOX", "LIGHT_GRAY_SHULKER_BOX", "CYAN_SHULKER_BOX",
|
|
||||||
"PURPLE_SHULKER_BOX", "BLUE_SHULKER_BOX", "BROWN_SHULKER_BOX", "GREEN_SHULKER_BOX", "RED_SHULKER_BOX",
|
|
||||||
"BLACK_SHULKER_BOX", "REPEATER", "COMPARATOR", "HOPPER", "DISPENSER", "DROPPER", "LECTERN", "LEVER",
|
|
||||||
"DAYLIGHT_DETECTOR", "TRAPPED_CHEST", "TNT", "NOTE_BLOCK", "STONE_BUTTON", "POLISHED_BLACKSTONE_BUTTON",
|
|
||||||
"OAK_BUTTON", "SPRUCE_BUTTON", "BIRCH_BUTTON", "JUNGLE_BUTTON", "ACACIA_BUTTON", "CHERRY_BUTTON",
|
|
||||||
"DARK_OAK_BUTTON", "MANGROVE_BUTTON", "BAMBOO_BUTTON", "CRIMSON_BUTTON", "WARPED_BUTTON", "IRON_DOOR", "OAK_DOOR",
|
|
||||||
"SPRUCE_DOOR", "BIRCH_DOOR", "JUNGLE_DOOR", "ACACIA_DOOR", "CHERRY_DOOR", "DARK_OAK_DOOR", "MANGROVE_DOOR",
|
|
||||||
"BAMBOO_DOOR", "CRIMSON_DOOR", "WARPED_DOOR", "COPPER_DOOR", "EXPOSED_COPPER_DOOR", "WEATHERED_COPPER_DOOR",
|
|
||||||
"OXIDIZED_COPPER_DOOR", "WAXED_COPPER_DOOR", "WAXED_EXPOSED_COPPER_DOOR", "WAXED_WEATHERED_COPPER_DOOR",
|
|
||||||
"WAXED_OXIDIZED_COPPER_DOOR", "IRON_TRAPDOOR", "OAK_TRAPDOOR", "SPRUCE_TRAPDOOR", "BIRCH_TRAPDOOR",
|
|
||||||
"JUNGLE_TRAPDOOR", "ACACIA_TRAPDOOR", "CHERRY_TRAPDOOR", "DARK_OAK_TRAPDOOR", "MANGROVE_TRAPDOOR",
|
|
||||||
"BAMBOO_TRAPDOOR", "CRIMSON_TRAPDOOR", "WARPED_TRAPDOOR", "COPPER_TRAPDOOR", "EXPOSED_COPPER_TRAPDOOR",
|
|
||||||
"WEATHERED_COPPER_TRAPDOOR", "OXIDIZED_COPPER_TRAPDOOR", "WAXED_COPPER_TRAPDOOR", "WAXED_EXPOSED_COPPER_TRAPDOOR",
|
|
||||||
"WAXED_WEATHERED_COPPER_TRAPDOOR", "WAXED_OXIDIZED_COPPER_TRAPDOOR", "OAK_FENCE_GATE", "SPRUCE_FENCE_GATE",
|
|
||||||
"BIRCH_FENCE_GATE", "JUNGLE_FENCE_GATE", "ACACIA_FENCE_GATE", "CHERRY_FENCE_GATE", "DARK_OAK_FENCE_GATE",
|
|
||||||
"MANGROVE_FENCE_GATE", "BAMBOO_FENCE_GATE", "CRIMSON_FENCE_GATE", "WARPED_FENCE_GATE", "STRUCTURE_BLOCK",
|
|
||||||
"JIGSAW", "OAK_SIGN", "SPRUCE_SIGN", "BIRCH_SIGN", "JUNGLE_SIGN", "ACACIA_SIGN", "CHERRY_SIGN", "DARK_OAK_SIGN",
|
|
||||||
"MANGROVE_SIGN", "BAMBOO_SIGN", "CRIMSON_SIGN", "WARPED_SIGN", "OAK_HANGING_SIGN", "SPRUCE_HANGING_SIGN",
|
|
||||||
"BIRCH_HANGING_SIGN", "JUNGLE_HANGING_SIGN", "ACACIA_HANGING_SIGN", "CHERRY_HANGING_SIGN",
|
|
||||||
"DARK_OAK_HANGING_SIGN", "MANGROVE_HANGING_SIGN", "BAMBOO_HANGING_SIGN", "CRIMSON_HANGING_SIGN",
|
|
||||||
"WARPED_HANGING_SIGN", "CAKE", "WHITE_BED", "ORANGE_BED", "MAGENTA_BED", "LIGHT_BLUE_BED", "YELLOW_BED",
|
|
||||||
"LIME_BED", "PINK_BED", "GRAY_BED", "LIGHT_GRAY_BED", "CYAN_BED", "PURPLE_BED", "BLUE_BED", "BROWN_BED",
|
|
||||||
"GREEN_BED", "RED_BED", "BLACK_BED", "CRAFTER", "BREWING_STAND", "CAULDRON", "FLOWER_POT", "LOOM", "COMPOSTER",
|
|
||||||
"BARREL", "SMOKER", "BLAST_FURNACE", "CARTOGRAPHY_TABLE", "FLETCHING_TABLE", "GRINDSTONE", "SMITHING_TABLE",
|
|
||||||
"STONECUTTER", "BELL", "CAMPFIRE", "SOUL_CAMPFIRE", "BEE_NEST", "BEEHIVE", "RESPAWN_ANCHOR", "CANDLE",
|
|
||||||
"WHITE_CANDLE", "ORANGE_CANDLE", "MAGENTA_CANDLE", "LIGHT_BLUE_CANDLE", "YELLOW_CANDLE", "LIME_CANDLE",
|
|
||||||
"PINK_CANDLE", "GRAY_CANDLE", "LIGHT_GRAY_CANDLE", "CYAN_CANDLE", "PURPLE_CANDLE", "BLUE_CANDLE", "BROWN_CANDLE",
|
|
||||||
"GREEN_CANDLE", "RED_CANDLE", "BLACK_CANDLE", "VAULT", "MOVING_PISTON", "REDSTONE_WIRE", "OAK_WALL_SIGN",
|
|
||||||
"SPRUCE_WALL_SIGN", "BIRCH_WALL_SIGN", "ACACIA_WALL_SIGN", "CHERRY_WALL_SIGN", "JUNGLE_WALL_SIGN",
|
|
||||||
"DARK_OAK_WALL_SIGN", "MANGROVE_WALL_SIGN", "BAMBOO_WALL_SIGN", "OAK_WALL_HANGING_SIGN",
|
|
||||||
"SPRUCE_WALL_HANGING_SIGN", "BIRCH_WALL_HANGING_SIGN", "ACACIA_WALL_HANGING_SIGN",
|
|
||||||
"CHERRY_WALL_HANGING_SIGN", "JUNGLE_WALL_HANGING_SIGN", "DARK_OAK_WALL_HANGING_SIGN",
|
|
||||||
"MANGROVE_WALL_HANGING_SIGN", "CRIMSON_WALL_HANGING_SIGN", "WARPED_WALL_HANGING_SIGN", "BAMBOO_WALL_HANGING_SIGN",
|
|
||||||
"WATER_CAULDRON", "LAVA_CAULDRON", "POWDER_SNOW_CAULDRON", "POTTED_TORCHFLOWER", "POTTED_OAK_SAPLING",
|
|
||||||
"POTTED_SPRUCE_SAPLING", "POTTED_BIRCH_SAPLING", "POTTED_JUNGLE_SAPLING", "POTTED_ACACIA_SAPLING",
|
|
||||||
"POTTED_CHERRY_SAPLING", "POTTED_DARK_OAK_SAPLING", "POTTED_MANGROVE_PROPAGULE", "POTTED_FERN",
|
|
||||||
"POTTED_DANDELION", "POTTED_POPPY", "POTTED_BLUE_ORCHID", "POTTED_ALLIUM", "POTTED_AZURE_BLUET",
|
|
||||||
"POTTED_RED_TULIP", "POTTED_ORANGE_TULIP", "POTTED_WHITE_TULIP", "POTTED_PINK_TULIP", "POTTED_OXEYE_DAISY",
|
|
||||||
"POTTED_CORNFLOWER", "POTTED_LILY_OF_THE_VALLEY", "POTTED_WITHER_ROSE", "POTTED_RED_MUSHROOM",
|
|
||||||
"POTTED_BROWN_MUSHROOM", "POTTED_DEAD_BUSH", "POTTED_CACTUS", "POTTED_BAMBOO", "SWEET_BERRY_BUSH",
|
|
||||||
"CRIMSON_WALL_SIGN", "WARPED_WALL_SIGN", "POTTED_CRIMSON_FUNGUS", "POTTED_WARPED_FUNGUS", "POTTED_CRIMSON_ROOTS",
|
|
||||||
"POTTED_WARPED_ROOTS", "CANDLE_CAKE", "WHITE_CANDLE_CAKE", "ORANGE_CANDLE_CAKE", "MAGENTA_CANDLE_CAKE",
|
|
||||||
"LIGHT_BLUE_CANDLE_CAKE", "YELLOW_CANDLE_CAKE", "LIME_CANDLE_CAKE", "PINK_CANDLE_CAKE", "GRAY_CANDLE_CAKE",
|
|
||||||
"LIGHT_GRAY_CANDLE_CAKE", "CYAN_CANDLE_CAKE", "PURPLE_CANDLE_CAKE", "BLUE_CANDLE_CAKE", "BROWN_CANDLE_CAKE",
|
|
||||||
"GREEN_CANDLE_CAKE", "RED_CANDLE_CAKE", "BLACK_CANDLE_CAKE", "CAVE_VINES", "CAVE_VINES_PLANT",
|
|
||||||
"POTTED_AZALEA_BUSH", "POTTED_FLOWERING_AZALEA_BUSH"
|
|
||||||
);
|
|
||||||
// @formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
private final EventDispatcher eventDispatcher;
|
private final EventDispatcher eventDispatcher;
|
||||||
private final WorldEdit worldEdit;
|
private final WorldEdit worldEdit;
|
||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
@ -303,53 +206,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
this.plotListener = plotListener;
|
this.plotListener = plotListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
|
|
||||||
public void onBlockBreak(final BlockBreakEvent event) {
|
|
||||||
Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = area.getPlot(location);
|
|
||||||
if (plot != null) {
|
|
||||||
event.setDropItems(plot.getFlag(TileDropFlag.class));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onPlayerDyeSign(PlayerInteractEvent event) {
|
|
||||||
ItemStack itemStack = event.getItem();
|
|
||||||
if (itemStack == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Block block = event.getClickedBlock();
|
|
||||||
if (block != null && block.getState() instanceof Sign) {
|
|
||||||
if (DYES.contains(itemStack.getType().toString())) {
|
|
||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = location.getOwnedPlot();
|
|
||||||
if (plot == null) {
|
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)
|
|
||||||
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (plot.isAdded(event.getPlayer().getUniqueId())) {
|
|
||||||
return; // allow for added players
|
|
||||||
}
|
|
||||||
if (!plot.getFlag(EditSignFlag.class)
|
|
||||||
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString())) {
|
|
||||||
plot.debug(event.getPlayer().getName() + " could not color the sign because of edit-sign = false");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler(ignoreCancelled = true)
|
||||||
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
||||||
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
|
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
|
||||||
@ -416,7 +272,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
Plot plot = plotPlayer.getCurrentPlot();
|
Plot plot = plotPlayer.getCurrentPlot();
|
||||||
// Check WorldEdit
|
// Check WorldEdit
|
||||||
switch (parts[0]) {
|
switch (parts[0]) {
|
||||||
case "up", "worldedit:up" -> {
|
case "up":
|
||||||
|
case "worldedit:up":
|
||||||
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !plotPlayer.hasPermission(
|
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !plotPlayer.hasPermission(
|
||||||
Permission.PERMISSION_ADMIN_BUILD_OTHER,
|
Permission.PERMISSION_ADMIN_BUILD_OTHER,
|
||||||
true
|
true
|
||||||
@ -424,7 +281,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (plot == null && !area.isRoadFlags()) {
|
if (plot == null && !area.isRoadFlags()) {
|
||||||
return;
|
return;
|
||||||
@ -512,7 +368,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onConnect(PlayerJoinEvent event) {
|
public void onConnect(PlayerJoinEvent event) {
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
PlotSquared.platform().playerManager().removePlayer(player.getUniqueId());
|
PlotSquared.platform().playerManager().removePlayer(player.getUniqueId());
|
||||||
@ -543,15 +398,11 @@ public class PlayerEventListener implements Listener {
|
|||||||
&& PremiumVerification.isPremium() && UpdateUtility.hasUpdate) {
|
&& PremiumVerification.isPremium() && UpdateUtility.hasUpdate) {
|
||||||
Caption boundary = TranslatableCaption.of("update.update_boundary");
|
Caption boundary = TranslatableCaption.of("update.update_boundary");
|
||||||
Caption updateNotification = TranslatableCaption.of("update.update_notification");
|
Caption updateNotification = TranslatableCaption.of("update.update_notification");
|
||||||
|
Template internalVersion = Template.of("p2version", UpdateUtility.internalVersion.versionString());
|
||||||
|
Template spigotVersion = Template.of("spigotversion", UpdateUtility.spigotVersion);
|
||||||
|
Template downloadUrl = Template.of("downloadurl", "https://www.spigotmc.org/resources/77506/updates");
|
||||||
pp.sendMessage(boundary);
|
pp.sendMessage(boundary);
|
||||||
pp.sendMessage(
|
pp.sendMessage(updateNotification, internalVersion, spigotVersion, downloadUrl);
|
||||||
updateNotification,
|
|
||||||
TagResolver.builder()
|
|
||||||
.tag("p2version", Tag.inserting(Component.text(UpdateUtility.internalVersion.versionString())))
|
|
||||||
.tag("spigotversion", Tag.inserting(Component.text(UpdateUtility.spigotVersion)))
|
|
||||||
.tag("downloadurl", Tag.preProcessParsed("https://www.spigotmc.org/resources/77506/updates"))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
pp.sendMessage(boundary);
|
pp.sendMessage(boundary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -598,12 +449,12 @@ public class PlayerEventListener implements Listener {
|
|||||||
// to is identical to the plot's home location, and untrusted-visit is true
|
// to is identical to the plot's home location, and untrusted-visit is true
|
||||||
// i.e. untrusted-visit can override deny-teleport
|
// i.e. untrusted-visit can override deny-teleport
|
||||||
// this is acceptable, because otherwise it wouldn't make sense to have both flags set
|
// this is acceptable, because otherwise it wouldn't make sense to have both flags set
|
||||||
if (result || (plot.getFlag(UntrustedVisitFlag.class) && plot.getHomeSynchronous().equals(BukkitUtil.adaptComplete(to)))) {
|
if (!result && !(plot.getFlag(UntrustedVisitFlag.class) && plot
|
||||||
plotListener.plotEntry(pp, plot);
|
.getHomeSynchronous()
|
||||||
} else {
|
.equals(BukkitUtil.adaptComplete(to)))) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("deny.no_enter"),
|
TranslatableCaption.of("deny.no_enter"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
|
Template.of("plot", plot.toString())
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -613,19 +464,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
playerMove(event);
|
playerMove(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onWorldChanged(PlayerChangedWorldEvent event) {
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
|
||||||
if (this.worldEdit != null) {
|
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_WORLDEDIT_BYPASS)) {
|
|
||||||
if (pp.getAttribute("worldedit")) {
|
|
||||||
pp.removeAttribute("worldedit");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void vehicleMove(VehicleMoveEvent event)
|
public void vehicleMove(VehicleMoveEvent event)
|
||||||
throws IllegalAccessException {
|
throws IllegalAccessException {
|
||||||
@ -729,14 +567,10 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (now == null) {
|
if (now == null) {
|
||||||
try (final MetaDataAccess<Boolean> kickAccess =
|
try (final MetaDataAccess<Boolean> kickAccess =
|
||||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
||||||
false)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
|
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
|
||||||
@ -754,7 +588,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
} else if (!plotListener.plotEntry(pp, now) && this.tmpTeleport) {
|
} else if (!plotListener.plotEntry(pp, now) && this.tmpTeleport) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("deny.no_enter"),
|
TranslatableCaption.of("deny.no_enter"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(now.toString())))
|
Template.of("plot", now.toString())
|
||||||
);
|
);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
to.setX(from.getBlockX());
|
to.setX(from.getBlockX());
|
||||||
@ -764,7 +598,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
this.tmpTeleport = true;
|
this.tmpTeleport = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int border = area.getBorder(true);
|
int border = area.getBorder();
|
||||||
int x1;
|
int x1;
|
||||||
if (x2 > border && this.tmpTeleport) {
|
if (x2 > border && this.tmpTeleport) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
@ -823,14 +657,10 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
try (final MetaDataAccess<Boolean> kickAccess =
|
try (final MetaDataAccess<Boolean> kickAccess =
|
||||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
||||||
false)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_EXIT_DENIED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_EXIT_DENIED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
|
if (lastPlot.equals(BukkitUtil.adapt(from).getPlot())) {
|
||||||
@ -848,7 +678,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
} else if (!plotListener.plotEntry(pp, plot) && this.tmpTeleport) {
|
} else if (!plotListener.plotEntry(pp, plot) && this.tmpTeleport) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("deny.no_enter"),
|
TranslatableCaption.of("deny.no_enter"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
|
Template.of("plot", plot.toString())
|
||||||
);
|
);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
player.teleport(from);
|
player.teleport(from);
|
||||||
@ -859,7 +689,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
this.tmpTeleport = true;
|
this.tmpTeleport = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int border = area.getBorder(true);
|
int border = area.getBorder();
|
||||||
int z1;
|
int z1;
|
||||||
if (z2 > border && this.tmpTeleport) {
|
if (z2 > border && this.tmpTeleport) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
@ -890,7 +720,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onChat(AsyncPlayerChatEvent event) {
|
public void onChat(AsyncPlayerChatEvent event) {
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
return;
|
return;
|
||||||
@ -933,38 +762,84 @@ public class PlayerEventListener implements Listener {
|
|||||||
PlotId id = plot.getId();
|
PlotId id = plot.getId();
|
||||||
String worldName = plot.getWorldName();
|
String worldName = plot.getWorldName();
|
||||||
Caption msg = TranslatableCaption.of("chat.plot_chat_format");
|
Caption msg = TranslatableCaption.of("chat.plot_chat_format");
|
||||||
TagResolver.Builder builder = TagResolver.builder();
|
Template msgTemplate;
|
||||||
builder.tag("world", Tag.inserting(Component.text(worldName)));
|
Template worldNameTemplate = Template.of("world", worldName);
|
||||||
builder.tag("plot_id", Tag.inserting(Component.text(id.toString())));
|
Template plotTemplate = Template.of("plot_id", id.toString());
|
||||||
builder.tag("sender", Tag.inserting(Component.text(sender)));
|
Template senderTemplate = Template.of("sender", sender);
|
||||||
|
// If we do/don't want colour, we need to be careful about how to go about it, as players could attempt either <gold></gold> or &6 etc.
|
||||||
|
// In both cases, we want to use a Component Template to ensure that the player cannot use any placeholders in their message on purpose
|
||||||
|
// or accidentally, as component templates are done at the end. We also need to deserialize from legacy color codes to a Component if
|
||||||
|
// allowing colour.
|
||||||
if (plotPlayer.hasPermission("plots.chat.color")) {
|
if (plotPlayer.hasPermission("plots.chat.color")) {
|
||||||
builder.tag("msg", Tag.inserting(MiniMessage.miniMessage().deserialize(
|
msgTemplate = Template
|
||||||
message,
|
.of(
|
||||||
TagResolver.resolver(StandardTags.color(), StandardTags.gradient(),
|
"msg",
|
||||||
StandardTags.rainbow(), StandardTags.decorations()
|
BukkitUtil.LEGACY_COMPONENT_SERIALIZER.deserialize(ChatColor.translateAlternateColorCodes(
|
||||||
)
|
'&',
|
||||||
)));
|
message
|
||||||
|
))
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
builder.tag("msg", Tag.inserting(Component.text(message)));
|
msgTemplate = Template.of("msg", BukkitUtil.MINI_MESSAGE.deserialize(
|
||||||
|
ChatColor.stripColor(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(Component.text(message)))));
|
||||||
}
|
}
|
||||||
for (PlotPlayer<?> receiver : plotRecipients) {
|
for (PlotPlayer<?> receiver : plotRecipients) {
|
||||||
receiver.sendMessage(msg, builder.build());
|
receiver.sendMessage(msg, worldNameTemplate, msgTemplate, plotTemplate, senderTemplate);
|
||||||
}
|
}
|
||||||
if (!spies.isEmpty()) {
|
if (!spies.isEmpty()) {
|
||||||
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
|
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
|
||||||
|
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
|
||||||
|
Template spysenderTemplate = Template.of("sender", sender);
|
||||||
|
Template spymessageTemplate = Template.of("msg", Component.text(message));
|
||||||
for (PlotPlayer<?> player : spies) {
|
for (PlotPlayer<?> player : spies) {
|
||||||
player.sendMessage(spymsg, builder.tag("message", Tag.inserting(Component.text(message))).build());
|
player.sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate, spymessageTemplate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Settings.Chat.LOG_PLOTCHAT_TO_CONSOLE) {
|
if (Settings.Chat.LOG_PLOTCHAT_TO_CONSOLE) {
|
||||||
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
|
Caption spymsg = TranslatableCaption.of("chat.plot_chat_spy_format");
|
||||||
ConsolePlayer.getConsole().sendMessage(
|
Template plotidTemplate = Template.of("plot_id", id.getX() + ";" + id.getY());
|
||||||
spymsg,
|
Template spysenderTemplate = Template.of("sender", sender);
|
||||||
builder.tag("message", Tag.inserting(Component.text(message))).build()
|
Template spymessageTemplate = Template.of("msg", Component.text(message));
|
||||||
|
ConsolePlayer.getConsole().sendMessage(spymsg, worldNameTemplate, plotidTemplate, spysenderTemplate,
|
||||||
|
spymessageTemplate
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
|
public void onWorldChanged(PlayerChangedWorldEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||||
|
// Delete last location
|
||||||
|
Plot plot;
|
||||||
|
try (final MetaDataAccess<Plot> lastPlotAccess =
|
||||||
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LAST_PLOT)) {
|
||||||
|
plot = lastPlotAccess.remove();
|
||||||
|
}
|
||||||
|
try (final MetaDataAccess<Location> lastLocationAccess =
|
||||||
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_LOCATION)) {
|
||||||
|
lastLocationAccess.remove();
|
||||||
|
}
|
||||||
|
if (plot != null) {
|
||||||
|
plotListener.plotExit(pp, plot);
|
||||||
|
}
|
||||||
|
if (this.worldEdit != null) {
|
||||||
|
if (!pp.hasPermission(Permission.PERMISSION_WORLDEDIT_BYPASS)) {
|
||||||
|
if (pp.getAttribute("worldedit")) {
|
||||||
|
pp.removeAttribute("worldedit");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Location location = pp.getLocation();
|
||||||
|
PlotArea area = location.getPlotArea();
|
||||||
|
if (location.isPlotArea()) {
|
||||||
|
plot = location.getPlot();
|
||||||
|
if (plot != null) {
|
||||||
|
plotListener.plotEntry(pp, plot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onInventoryClick(InventoryClickEvent event) {
|
public void onInventoryClick(InventoryClickEvent event) {
|
||||||
@ -1070,10 +945,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
cancelled = true;
|
cancelled = true;
|
||||||
}
|
}
|
||||||
@ -1081,10 +953,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
cancelled = true;
|
cancelled = true;
|
||||||
}
|
}
|
||||||
@ -1094,10 +963,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
cancelled = true;
|
cancelled = true;
|
||||||
}
|
}
|
||||||
@ -1136,10 +1002,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
)) {
|
)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1155,10 +1018,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission("plots.admin.interact.unowned")) {
|
if (!pp.hasPermission("plots.admin.interact.unowned")) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1173,10 +1033,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
plot.debug(pp.getName() + " could not interact with " + entity.getType()
|
plot.debug(pp.getName() + " could not interact with " + entity.getType()
|
||||||
@ -1187,7 +1044,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onCancelledInteract(PlayerInteractEvent event) {
|
public void onCancelledInteract(PlayerInteractEvent event) {
|
||||||
if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
|
if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -1241,18 +1097,18 @@ public class PlayerEventListener implements Listener {
|
|||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
Location location = BukkitUtil.adapt(block.getLocation());
|
||||||
Action action = event.getAction();
|
Action action = event.getAction();
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case PHYSICAL -> {
|
case PHYSICAL: {
|
||||||
eventType = PlayerBlockEventType.TRIGGER_PHYSICAL;
|
eventType = PlayerBlockEventType.TRIGGER_PHYSICAL;
|
||||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo rearrange the right click code. it is all over the place.
|
//todo rearrange the right click code. it is all over the place.
|
||||||
case RIGHT_CLICK_BLOCK -> {
|
case RIGHT_CLICK_BLOCK: {
|
||||||
Material blockType = block.getType();
|
Material blockType = block.getType();
|
||||||
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
||||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||||
|
|
||||||
if (INTERACTABLE_MATERIALS != null ? INTERACTABLE_MATERIALS.contains(blockType.name()) : blockType.isInteractable()) {
|
if (blockType.isInteractable()) {
|
||||||
if (!player.isSneaking()) {
|
if (!player.isSneaking()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1269,16 +1125,21 @@ public class PlayerEventListener implements Listener {
|
|||||||
|
|
||||||
// in the following, lb needs to have the material of the item in hand i.e. type
|
// in the following, lb needs to have the material of the item in hand i.e. type
|
||||||
switch (type.toString()) {
|
switch (type.toString()) {
|
||||||
case "REDSTONE", "STRING", "PUMPKIN_SEEDS", "MELON_SEEDS", "COCOA_BEANS", "WHEAT_SEEDS", "BEETROOT_SEEDS",
|
case "REDSTONE":
|
||||||
"SWEET_BERRIES", "GLOW_BERRIES" -> {
|
case "STRING":
|
||||||
|
case "PUMPKIN_SEEDS":
|
||||||
|
case "MELON_SEEDS":
|
||||||
|
case "COCOA_BEANS":
|
||||||
|
case "WHEAT_SEEDS":
|
||||||
|
case "BEETROOT_SEEDS":
|
||||||
|
case "SWEET_BERRIES":
|
||||||
|
case "GLOW_BERRIES":
|
||||||
return;
|
return;
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
//eventType = PlayerBlockEventType.PLACE_BLOCK;
|
//eventType = PlayerBlockEventType.PLACE_BLOCK;
|
||||||
if (type.isBlock()) {
|
if (type.isBlock()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (PaperLib.isPaper()) {
|
if (PaperLib.isPaper()) {
|
||||||
if (MaterialTags.SPAWN_EGGS.isTagged(type) || Material.EGG.equals(type)) {
|
if (MaterialTags.SPAWN_EGGS.isTagged(type) || Material.EGG.equals(type)) {
|
||||||
@ -1292,14 +1153,14 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (type.isEdible()) {
|
if (type.isEdible()) {
|
||||||
//Allow all players to eat while also allowing the block place event to be fired
|
//Allow all players to eat while also allowing the block place event ot be fired
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (type == Material.ARMOR_STAND) {
|
if (type == Material.ARMOR_STAND) {
|
||||||
location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation());
|
location = BukkitUtil.adapt(block.getRelative(event.getBlockFace()).getLocation());
|
||||||
eventType = PlayerBlockEventType.PLACE_MISC;
|
eventType = PlayerBlockEventType.PLACE_MISC;
|
||||||
}
|
}
|
||||||
if (org.bukkit.Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
|
if (Tag.ITEMS_BOATS.isTagged(type) || MINECARTS.contains(type)) {
|
||||||
eventType = PlayerBlockEventType.PLACE_VEHICLE;
|
eventType = PlayerBlockEventType.PLACE_VEHICLE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1311,8 +1172,9 @@ public class PlayerEventListener implements Listener {
|
|||||||
eventType = PlayerBlockEventType.READ;
|
eventType = PlayerBlockEventType.READ;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case LEFT_CLICK_BLOCK -> {
|
case LEFT_CLICK_BLOCK: {
|
||||||
Material blockType = block.getType();
|
Material blockType = block.getType();
|
||||||
|
|
||||||
// todo: when the code above is rearranged, it would be great to beautify this as well.
|
// todo: when the code above is rearranged, it would be great to beautify this as well.
|
||||||
@ -1323,10 +1185,10 @@ public class PlayerEventListener implements Listener {
|
|||||||
|
|
||||||
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
||||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
default -> {
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
||||||
if (event.getMaterial() == Material.getMaterial(this.worldEdit.getConfiguration().wandItem)) {
|
if (event.getMaterial() == Material.getMaterial(this.worldEdit.getConfiguration().wandItem)) {
|
||||||
@ -1398,7 +1260,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
@ -1407,10 +1269,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
@ -1419,10 +1278,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
@ -1469,7 +1325,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
@ -1478,10 +1334,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.isAdded(plotPlayer.getUUID())) {
|
} else if (!plot.isAdded(plotPlayer.getUUID())) {
|
||||||
@ -1490,10 +1343,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
@ -1525,10 +1375,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1537,10 +1384,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1551,10 +1395,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BUILD_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BUILD_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1583,10 +1424,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1594,10 +1432,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1608,10 +1443,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
plot.debug(p.getName()
|
plot.debug(p.getName()
|
||||||
@ -1632,10 +1464,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1644,10 +1473,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
plot.debug(player.getName()
|
plot.debug(player.getName()
|
||||||
@ -1679,10 +1505,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1690,10 +1513,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1751,10 +1571,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_INTERACT_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_INTERACT_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1778,10 +1595,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
)) {
|
)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -1790,10 +1604,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -1807,10 +1618,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
plot.debug(pp.getName()
|
plot.debug(pp.getName()
|
||||||
@ -1980,9 +1788,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerTakeLecternBook(PlayerTakeLecternBookEvent event) {
|
public void onPlayerTakeLecternBook(PlayerTakeLecternBookEvent event) {
|
||||||
Player player = event.getPlayer();
|
Location location = BukkitUtil.adapt(event.getPlayer().getLocation());
|
||||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
|
||||||
Location location = pp.getLocation();
|
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
return;
|
return;
|
||||||
@ -1994,11 +1800,9 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!plot.isAdded(pp.getUUID())) {
|
if (plot.getFlag(LecternReadBookFlag.class)) {
|
||||||
if (plot.getFlag(LecternReadBookFlag.class)) {
|
plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true");
|
||||||
plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true");
|
event.setCancelled(true);
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
/*
|
|
||||||
* PlotSquared, a land and world management plugin for Minecraft.
|
|
||||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
|
||||||
* Copyright (C) IntellectualSites team and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.plotsquared.bukkit.listener;
|
|
||||||
|
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
|
||||||
import com.plotsquared.core.location.Location;
|
|
||||||
import com.plotsquared.core.permissions.Permission;
|
|
||||||
import com.plotsquared.core.plot.Plot;
|
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.EditSignFlag;
|
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
|
||||||
import org.bukkit.block.Sign;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.player.PlayerSignOpenEvent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* For events since 1.20.1
|
|
||||||
* @since 7.2.1
|
|
||||||
*/
|
|
||||||
public class PlayerEventListener1201 implements Listener {
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
|
||||||
@SuppressWarnings({"removal", "UnstableApiUsage"}) // thanks Paper, thanks Spigot
|
|
||||||
public void onPlayerSignOpenEvent(PlayerSignOpenEvent event) {
|
|
||||||
Sign sign = event.getSign();
|
|
||||||
Location location = BukkitUtil.adapt(sign.getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = location.getOwnedPlot();
|
|
||||||
if (plot == null) {
|
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, EditSignFlag.class, false)
|
|
||||||
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD.toString())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (plot.isAdded(event.getPlayer().getUniqueId())) {
|
|
||||||
return; // allow for added players
|
|
||||||
}
|
|
||||||
if (!plot.getFlag(EditSignFlag.class)
|
|
||||||
&& !event.getPlayer().hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER.toString())) {
|
|
||||||
plot.debug(event.getPlayer().getName() + " could not edit the sign because of edit-sign = false");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -28,14 +28,11 @@ 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.FishingFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.PlotFlagUtil;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Projectile;
|
import org.bukkit.entity.Projectile;
|
||||||
@ -113,10 +110,7 @@ public class ProjectileEventListener implements Listener {
|
|||||||
)) {
|
)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -125,28 +119,17 @@ public class ProjectileEventListener implements Listener {
|
|||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (entity.getType().equals(EntityType.FISHING_HOOK)) {
|
|
||||||
if (plot.getFlag(FishingFlag.class)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!plot.getFlag(ProjectilesFlag.class)) {
|
if (!plot.getFlag(ProjectilesFlag.class)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -194,8 +177,7 @@ public class ProjectileEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(
|
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(
|
||||||
ProjectilesFlag.class) || (entity.getType().equals(EntityType.FISHING_HOOK) && plot.getFlag(
|
ProjectilesFlag.class)) {
|
||||||
FishingFlag.class))) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
entity.remove();
|
entity.remove();
|
||||||
|
@ -21,14 +21,9 @@ package com.plotsquared.bukkit.listener;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.bukkit.BukkitPlatform;
|
import com.plotsquared.bukkit.BukkitPlatform;
|
||||||
import com.plotsquared.bukkit.placeholder.MVdWPlaceholders;
|
import com.plotsquared.bukkit.placeholder.MVdWPlaceholders;
|
||||||
import com.plotsquared.bukkit.util.BukkitEconHandler;
|
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.player.ConsolePlayer;
|
import com.plotsquared.core.player.ConsolePlayer;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -37,8 +32,6 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
|||||||
|
|
||||||
public class ServerListener implements Listener {
|
public class ServerListener implements Listener {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + ServerListener.class.getSimpleName());
|
|
||||||
|
|
||||||
private final BukkitPlatform plugin;
|
private final BukkitPlatform plugin;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@ -52,29 +45,6 @@ public class ServerListener implements Listener {
|
|||||||
new MVdWPlaceholders(this.plugin, this.plugin.placeholderRegistry());
|
new MVdWPlaceholders(this.plugin, this.plugin.placeholderRegistry());
|
||||||
ConsolePlayer.getConsole().sendMessage(TranslatableCaption.of("placeholder.hooked"));
|
ConsolePlayer.getConsole().sendMessage(TranslatableCaption.of("placeholder.hooked"));
|
||||||
}
|
}
|
||||||
if (Settings.Enabled_Components.ECONOMY && Bukkit.getPluginManager().isPluginEnabled("Vault")) {
|
|
||||||
EconHandler econHandler = new BukkitEconHandler();
|
|
||||||
try {
|
|
||||||
if (!econHandler.init()) {
|
|
||||||
LOGGER.warn("Economy is enabled but no plugin is providing an economy service. Falling back...");
|
|
||||||
econHandler = EconHandler.nullEconHandler();
|
|
||||||
}
|
|
||||||
} catch (final Exception ignored) {
|
|
||||||
econHandler = EconHandler.nullEconHandler();
|
|
||||||
}
|
|
||||||
if (PlotSquared.platform().econHandler() instanceof MutableEconHandler meh) {
|
|
||||||
meh.setImplementation(econHandler);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal use only. Required to implement lazy econ loading using Guice.
|
|
||||||
*
|
|
||||||
* @since 7.2.0
|
|
||||||
*/
|
|
||||||
public interface MutableEconHandler {
|
|
||||||
void setImplementation(EconHandler econHandler);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,39 +31,45 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.world.ChunkEvent;
|
import org.bukkit.event.world.ChunkEvent;
|
||||||
import org.bukkit.event.world.ChunkLoadEvent;
|
import org.bukkit.event.world.ChunkLoadEvent;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
|
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
|
||||||
|
|
||||||
public class SingleWorldListener implements Listener {
|
public class SingleWorldListener implements Listener {
|
||||||
|
|
||||||
private final Method methodSetUnsaved;
|
private final Method methodGetHandleChunk;
|
||||||
private Method methodGetHandleChunk;
|
private Field shouldSave = null;
|
||||||
private Object objChunkStatusFull = null;
|
|
||||||
|
|
||||||
public SingleWorldListener() throws Exception {
|
public SingleWorldListener() throws Exception {
|
||||||
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
||||||
ReflectionUtils.RefClass classChunkAccess = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
|
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod();
|
||||||
this.methodSetUnsaved = classChunkAccess.getMethod("a", boolean.class).getRealMethod();
|
|
||||||
try {
|
try {
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod();
|
if (PlotSquared.platform().serverVersion()[1] < 17) {
|
||||||
} catch (NoSuchMethodException ignored) {
|
ReflectionUtils.RefClass classChunk = getRefClass("{nms}.Chunk");
|
||||||
try {
|
if (PlotSquared.platform().serverVersion()[1] == 13) {
|
||||||
ReflectionUtils.RefClass classChunkStatus = getRefClass("net.minecraft.world.level.chunk.ChunkStatus");
|
this.shouldSave = classChunk.getField("mustSave").getRealField();
|
||||||
this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null);
|
} else {
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle", classChunkStatus.getRealClass()).getRealMethod();
|
this.shouldSave = classChunk.getField("s").getRealField();
|
||||||
} catch (NoSuchMethodException ex) {
|
}
|
||||||
throw new RuntimeException(ex);
|
} else if (PlotSquared.platform().serverVersion()[1] == 17) {
|
||||||
|
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
||||||
|
this.shouldSave = classChunk.getField("r").getRealField();
|
||||||
|
} else if (PlotSquared.platform().serverVersion()[1] == 18) {
|
||||||
|
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
|
||||||
|
this.shouldSave = classChunk.getField("b").getRealField();
|
||||||
}
|
}
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void markChunkAsClean(Chunk chunk) {
|
public void markChunkAsClean(Chunk chunk) {
|
||||||
try {
|
try {
|
||||||
Object nmsChunk = objChunkStatusFull != null
|
Object nmsChunk = methodGetHandleChunk.invoke(chunk);
|
||||||
? this.methodGetHandleChunk.invoke(chunk, objChunkStatusFull)
|
if (shouldSave != null) {
|
||||||
: this.methodGetHandleChunk.invoke(chunk);
|
this.shouldSave.set(nmsChunk, false);
|
||||||
methodSetUnsaved.invoke(nmsChunk, false);
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -79,12 +85,7 @@ public class SingleWorldListener implements Listener {
|
|||||||
if (!SinglePlotArea.isSinglePlotWorld(name)) {
|
if (!SinglePlotArea.isSinglePlotWorld(name)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int x = event.getChunk().getX();
|
|
||||||
int z = event.getChunk().getZ();
|
|
||||||
if (x < 16 && x > -16 && z < 16 && z > -16) {
|
|
||||||
// Allow spawn to generate
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
markChunkAsClean(event.getChunk());
|
markChunkAsClean(event.getChunk());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +96,7 @@ public class SingleWorldListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onChunkLoad(ChunkLoadEvent event) {
|
public void onChunkLoad(ChunkLoadEvent event) {
|
||||||
// disable this for now, should address https://github.com/IntellectualSites/PlotSquared/issues/4413
|
handle(event);
|
||||||
// handle(event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* PlotSquared, a land and world management plugin for Minecraft.
|
||||||
|
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||||
|
* Copyright (C) IntellectualSites team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.plotsquared.bukkit.managers;
|
||||||
|
|
||||||
|
/*
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
import se.hyperver.hyperverse.Hyperverse;
|
||||||
|
import se.hyperver.hyperverse.world.WorldConfiguration;
|
||||||
|
import se.hyperver.hyperverse.world.WorldConfigurationBuilder;
|
||||||
|
import se.hyperver.hyperverse.world.WorldFeatures;
|
||||||
|
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
|
||||||
|
repository.
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class HyperverseWorldManager extends BukkitWorldManager {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable World handleWorldCreation(@NonNull String worldName, @Nullable String generator) {
|
||||||
|
// First let Bukkit register the world
|
||||||
|
this.setGenerator(worldName, generator);
|
||||||
|
// Create the world
|
||||||
|
final WorldConfigurationBuilder worldConfigurationBuilder = WorldConfiguration.builder()
|
||||||
|
.setName(worldName).setType(WorldType.OVER_WORLD);
|
||||||
|
if (generator != null) {
|
||||||
|
worldConfigurationBuilder.setGenerator(generator).setWorldFeatures(WorldFeatures.FLATLAND);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return Hyperverse.getApi().createWorld(worldConfigurationBuilder.createWorldConfiguration())
|
||||||
|
.getBukkitWorld();
|
||||||
|
} catch (final Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "bukkit-hyperverse";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
@ -52,7 +52,7 @@ public class MVdWPlaceholders {
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
||||||
this.addPlaceholder(event.placeholder());
|
this.addPlaceholder(event.getPlaceholder());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
||||||
|
@ -20,8 +20,6 @@ package com.plotsquared.bukkit.placeholder;
|
|||||||
|
|
||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
|
||||||
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
import me.clip.placeholderapi.PlaceholderAPIPlugin;
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -85,20 +83,6 @@ public class PAPIPlaceholders extends PlaceholderExpansion {
|
|||||||
return String.valueOf(pl.getPlotCount(identifier));
|
return String.valueOf(pl.getPlotCount(identifier));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (identifier.startsWith("base_plot_count_")) {
|
|
||||||
identifier = identifier.substring("base_plot_count_".length());
|
|
||||||
if (identifier.isEmpty()) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
return String.valueOf(PlotQuery.newQuery()
|
|
||||||
.ownedBy(pl)
|
|
||||||
.inWorld(identifier)
|
|
||||||
.whereBasePlot()
|
|
||||||
.thatPasses(plot -> !DoneFlag.isDone(plot))
|
|
||||||
.count());
|
|
||||||
}
|
|
||||||
|
|
||||||
// PlotSquared placeholders
|
// PlotSquared placeholders
|
||||||
return PlotSquared.platform().placeholderRegistry().getPlaceholderValue(identifier, pl);
|
return PlotSquared.platform().placeholderRegistry().getPlaceholderValue(identifier, pl);
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ public class BukkitOfflinePlayer implements OfflinePlotPlayer {
|
|||||||
*/
|
*/
|
||||||
public BukkitOfflinePlayer(
|
public BukkitOfflinePlayer(
|
||||||
final @NonNull OfflinePlayer player, final @NonNull
|
final @NonNull OfflinePlayer player, final @NonNull
|
||||||
PermissionHandler permissionHandler
|
PermissionHandler permissionHandler
|
||||||
) {
|
) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.permissionProfile = permissionHandler.getPermissionProfile(this)
|
this.permissionProfile = permissionHandler.getPermissionProfile(this)
|
||||||
|
@ -32,7 +32,6 @@ import com.plotsquared.core.plot.PlotWeather;
|
|||||||
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.WorldUtil;
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.extension.platform.Actor;
|
import com.sk89q.worldedit.extension.platform.Actor;
|
||||||
import com.sk89q.worldedit.world.item.ItemType;
|
import com.sk89q.worldedit.world.item.ItemType;
|
||||||
@ -41,7 +40,6 @@ import io.papermc.lib.PaperLib;
|
|||||||
import net.kyori.adventure.audience.Audience;
|
import net.kyori.adventure.audience.Audience;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.SoundCategory;
|
|
||||||
import org.bukkit.WeatherType;
|
import org.bukkit.WeatherType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
@ -53,6 +51,7 @@ import org.bukkit.potion.PotionEffectType;
|
|||||||
import org.checkerframework.checker.index.qual.NonNegative;
|
import org.checkerframework.checker.index.qual.NonNegative;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -72,11 +71,31 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
* @param eventDispatcher EventDispatcher instance
|
* @param eventDispatcher EventDispatcher instance
|
||||||
* @param player Bukkit player instance
|
* @param player Bukkit player instance
|
||||||
* @param permissionHandler PermissionHandler instance
|
* @param permissionHandler PermissionHandler instance
|
||||||
|
*
|
||||||
|
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
||||||
|
* This method will be made private in a future release.
|
||||||
*/
|
*/
|
||||||
BukkitPlayer(
|
@Deprecated(forRemoval = true, since = "6.10.9")
|
||||||
final @NonNull PlotAreaManager plotAreaManager,
|
public BukkitPlayer(
|
||||||
final @NonNull EventDispatcher eventDispatcher,
|
final @NonNull PlotAreaManager plotAreaManager, final @NonNull EventDispatcher eventDispatcher,
|
||||||
final @NonNull Player player,
|
final @NonNull Player player, final @NonNull PermissionHandler permissionHandler
|
||||||
|
) {
|
||||||
|
this(plotAreaManager, eventDispatcher, player, false, permissionHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param plotAreaManager PlotAreaManager instance
|
||||||
|
* @param eventDispatcher EventDispatcher instance
|
||||||
|
* @param player Bukkit player instance
|
||||||
|
* @param permissionHandler PermissionHandler instance
|
||||||
|
*
|
||||||
|
* @deprecated Please do not use this method. Instead use {@link BukkitUtil#adapt(Player)}, as it caches player objects.
|
||||||
|
* This method will be made private in a future release.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.10.9")
|
||||||
|
public BukkitPlayer(
|
||||||
|
final @NonNull PlotAreaManager plotAreaManager, final @NonNull
|
||||||
|
EventDispatcher eventDispatcher, final @NonNull Player player,
|
||||||
final boolean realPlayer,
|
final boolean realPlayer,
|
||||||
final @NonNull PermissionHandler permissionHandler
|
final @NonNull PermissionHandler permissionHandler
|
||||||
) {
|
) {
|
||||||
@ -121,9 +140,6 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canTeleport(final @NonNull Location location) {
|
public boolean canTeleport(final @NonNull Location location) {
|
||||||
if (!WorldUtil.isValidLocation(location)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
final org.bukkit.Location to = BukkitUtil.adapt(location);
|
final org.bukkit.Location to = BukkitUtil.adapt(location);
|
||||||
final org.bukkit.Location from = player.getLocation();
|
final org.bukkit.Location from = player.getLocation();
|
||||||
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
|
PlayerTeleportEvent event = new PlayerTeleportEvent(player, from, to);
|
||||||
@ -162,7 +178,6 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
}
|
}
|
||||||
final String[] nodes = stub.split("\\.");
|
final String[] nodes = stub.split("\\.");
|
||||||
final StringBuilder n = new StringBuilder();
|
final StringBuilder n = new StringBuilder();
|
||||||
// Wildcard check from less specific permission to more specific permission
|
|
||||||
for (int i = 0; i < (nodes.length - 1); i++) {
|
for (int i = 0; i < (nodes.length - 1); i++) {
|
||||||
n.append(nodes[i]).append(".");
|
n.append(nodes[i]).append(".");
|
||||||
if (!stub.equals(n + Permission.PERMISSION_STAR.toString())) {
|
if (!stub.equals(n + Permission.PERMISSION_STAR.toString())) {
|
||||||
@ -171,11 +186,9 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Wildcard check for the full permission
|
|
||||||
if (hasPermission(stub + ".*")) {
|
if (hasPermission(stub + ".*")) {
|
||||||
return Integer.MAX_VALUE;
|
return Integer.MAX_VALUE;
|
||||||
}
|
}
|
||||||
// Permission value cache for iterative check
|
|
||||||
int max = 0;
|
int max = 0;
|
||||||
if (CHECK_EFFECTIVE) {
|
if (CHECK_EFFECTIVE) {
|
||||||
boolean hasAny = false;
|
boolean hasAny = false;
|
||||||
@ -183,10 +196,6 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
final Set<PermissionAttachmentInfo> effective = player.getEffectivePermissions();
|
final Set<PermissionAttachmentInfo> effective = player.getEffectivePermissions();
|
||||||
if (!effective.isEmpty()) {
|
if (!effective.isEmpty()) {
|
||||||
for (PermissionAttachmentInfo attach : effective) {
|
for (PermissionAttachmentInfo attach : effective) {
|
||||||
// Ignore all "false" permissions
|
|
||||||
if (!attach.getValue()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
String permStr = attach.getPermission();
|
String permStr = attach.getPermission();
|
||||||
if (permStr.startsWith(stubPlus)) {
|
if (permStr.startsWith(stubPlus)) {
|
||||||
hasAny = true;
|
hasAny = true;
|
||||||
@ -225,7 +234,7 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void teleport(final @NonNull Location location, final @NonNull TeleportCause cause) {
|
public void teleport(final @NonNull Location location, final @NonNull TeleportCause cause) {
|
||||||
if (!WorldUtil.isValidLocation(location)) {
|
if (Math.abs(location.getX()) >= 30000000 || Math.abs(location.getZ()) >= 30000000) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final org.bukkit.Location bukkitLocation =
|
final org.bukkit.Location bukkitLocation =
|
||||||
@ -313,21 +322,18 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
@Override
|
@Override
|
||||||
public void playMusic(final @NonNull Location location, final @NonNull ItemType id) {
|
public void playMusic(final @NonNull Location location, final @NonNull ItemType id) {
|
||||||
if (id == ItemTypes.AIR) {
|
if (id == ItemTypes.AIR) {
|
||||||
if (PlotSquared.platform().serverVersion()[1] >= 19) {
|
// Let's just stop all the discs because why not?
|
||||||
player.stopSound(SoundCategory.MUSIC);
|
for (final Sound sound : Arrays.stream(Sound.values())
|
||||||
return;
|
.filter(sound -> sound.name().contains("DISC")).toList()) {
|
||||||
|
player.stopSound(sound);
|
||||||
}
|
}
|
||||||
// 1.18 and downwards require a specific Sound to stop (even tho the packet does not??)
|
// this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, Material.AIR);
|
||||||
for (final Sound sound : Sound.values()) {
|
} else {
|
||||||
if (sound.name().startsWith("MUSIC_DISC")) {
|
// this.player.playEffect(BukkitUtil.getLocation(location), Effect.RECORD_PLAY, id.to(Material.class));
|
||||||
this.player.stopSound(sound, SoundCategory.MUSIC);
|
this.player.playSound(BukkitUtil.adapt(location),
|
||||||
}
|
Sound.valueOf(BukkitAdapter.adapt(id).name()), Float.MAX_VALUE, 1f
|
||||||
}
|
);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
this.player.playSound(BukkitUtil.adapt(location), Sound.valueOf(BukkitAdapter.adapt(id).name()),
|
|
||||||
SoundCategory.MUSIC, Float.MAX_VALUE, 1f
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Needed for Spigot compatibility
|
@SuppressWarnings("deprecation") // Needed for Spigot compatibility
|
||||||
|
@ -54,6 +54,7 @@ public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
|
|||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public BukkitPlayer getPlayer(final @NonNull Player object) {
|
public BukkitPlayer getPlayer(final @NonNull Player object) {
|
||||||
if (object.getUniqueId().version() == 2) { // not a real player
|
if (object.getUniqueId().version() == 2) { // not a real player
|
||||||
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, object, false, this.permissionHandler);
|
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, object, false, this.permissionHandler);
|
||||||
@ -65,12 +66,13 @@ public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public @NonNull BukkitPlayer createPlayer(final @NonNull UUID uuid) {
|
public @NonNull BukkitPlayer createPlayer(final @NonNull UUID uuid) {
|
||||||
final Player player = Bukkit.getPlayer(uuid);
|
final Player player = Bukkit.getPlayer(uuid);
|
||||||
if (player == null || !player.isOnline()) {
|
if (player == null || !player.isOnline()) {
|
||||||
throw new NoSuchPlayerException(uuid);
|
throw new NoSuchPlayerException(uuid);
|
||||||
}
|
}
|
||||||
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, false, this.permissionHandler);
|
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, this.permissionHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -270,7 +270,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
|
|||||||
if (getChunkObject() instanceof Chunk chunkObject) {
|
if (getChunkObject() instanceof Chunk chunkObject) {
|
||||||
existing = chunkObject.getBlock(x & 15, y, z & 15);
|
existing = chunkObject.getBlock(x & 15, y, z & 15);
|
||||||
} else {
|
} else {
|
||||||
existing = getBukkitWorld().getBlockAt(x, y, z);
|
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)) {
|
||||||
|
@ -24,7 +24,7 @@ import com.plotsquared.bukkit.util.BukkitBlockUtil;
|
|||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.plotsquared.core.location.ChunkWrapper;
|
import com.plotsquared.core.location.ChunkWrapper;
|
||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||||
import com.plotsquared.core.util.ChunkUtil;
|
import com.plotsquared.core.util.ChunkUtil;
|
||||||
import com.plotsquared.core.util.PatternUtil;
|
import com.plotsquared.core.util.PatternUtil;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
@ -44,11 +44,8 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
|
||||||
* Internal use only. Subject to changes at any time.
|
|
||||||
*/
|
|
||||||
@DoNotUse
|
@DoNotUse
|
||||||
public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
public class GenChunk extends ScopedQueueCoordinator {
|
||||||
|
|
||||||
public final Biome[] biomes;
|
public final Biome[] biomes;
|
||||||
public BlockState[][] result;
|
public BlockState[][] result;
|
||||||
@ -62,6 +59,7 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
|||||||
/**
|
/**
|
||||||
* @param minY minimum world Y, inclusive
|
* @param minY minimum world Y, inclusive
|
||||||
* @param maxY maximum world Y, inclusive
|
* @param maxY maximum world Y, inclusive
|
||||||
|
*
|
||||||
* @since 6.6.0
|
* @since 6.6.0
|
||||||
*/
|
*/
|
||||||
public GenChunk(int minY, int maxY) {
|
public GenChunk(int minY, int maxY) {
|
||||||
@ -109,9 +107,9 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
|||||||
*/
|
*/
|
||||||
public void setChunk(@NonNull ChunkWrapper wrap) {
|
public void setChunk(@NonNull ChunkWrapper wrap) {
|
||||||
chunk = null;
|
chunk = null;
|
||||||
world = wrap.world();
|
world = wrap.world;
|
||||||
chunkX = wrap.x();
|
chunkX = wrap.x;
|
||||||
chunkZ = wrap.z();
|
chunkZ = wrap.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -18,8 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.schematic;
|
package com.plotsquared.bukkit.schematic;
|
||||||
|
|
||||||
import com.destroystokyo.paper.profile.PlayerProfile;
|
|
||||||
import com.destroystokyo.paper.profile.ProfileProperty;
|
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.sk89q.jnbt.ByteTag;
|
import com.sk89q.jnbt.ByteTag;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
@ -30,22 +28,16 @@ import com.sk89q.jnbt.Tag;
|
|||||||
import com.sk89q.worldedit.blocks.BaseItemStack;
|
import com.sk89q.worldedit.blocks.BaseItemStack;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.item.ItemType;
|
import com.sk89q.worldedit.world.item.ItemType;
|
||||||
import io.papermc.lib.PaperLib;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.DyeColor;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Banner;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Container;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.block.Skull;
|
import org.bukkit.block.Skull;
|
||||||
import org.bukkit.block.banner.Pattern;
|
|
||||||
import org.bukkit.block.banner.PatternType;
|
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@ -54,15 +46,20 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class StateWrapper {
|
public class StateWrapper {
|
||||||
|
|
||||||
public CompoundTag tag;
|
public org.bukkit.block.BlockState state = null;
|
||||||
|
public CompoundTag tag = null;
|
||||||
|
|
||||||
private boolean paperErrorTextureSent = false;
|
/**
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + StateWrapper.class.getSimpleName());
|
* @deprecated in favour of using WE methods for obtaining NBT, specifically by obtaining a
|
||||||
|
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||||
|
public StateWrapper(org.bukkit.block.BlockState state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
public StateWrapper(CompoundTag tag) {
|
public StateWrapper(CompoundTag tag) {
|
||||||
this.tag = tag;
|
this.tag = tag;
|
||||||
@ -240,64 +237,15 @@ public class StateWrapper {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
String player = skullOwner.getString("Name");
|
String player = skullOwner.getString("Name");
|
||||||
|
if (player == null || player.isEmpty()) {
|
||||||
if (player != null && !player.isEmpty()) {
|
|
||||||
try {
|
|
||||||
skull.setOwningPlayer(Bukkit.getOfflinePlayer(player));
|
|
||||||
skull.update(true);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
final CompoundTag properties = (CompoundTag) skullOwner.getValue().get("Properties");
|
|
||||||
if (properties == null) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final ListTag textures = properties.getListTag("textures");
|
try {
|
||||||
if (textures.getValue().isEmpty()) {
|
skull.setOwningPlayer(Bukkit.getOfflinePlayer(player));
|
||||||
return false;
|
skull.update(true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
final CompoundTag textureCompound = (CompoundTag) textures.getValue().get(0);
|
|
||||||
if (textureCompound == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
String textureValue = textureCompound.getString("Value");
|
|
||||||
if (textureValue == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!PaperLib.isPaper()) {
|
|
||||||
if (!paperErrorTextureSent) {
|
|
||||||
paperErrorTextureSent = true;
|
|
||||||
LOGGER.error("Failed to populate skull data in your road schematic - This is a Spigot limitation.");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
final PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID());
|
|
||||||
profile.setProperty(new ProfileProperty("textures", textureValue));
|
|
||||||
skull.setPlayerProfile(profile);
|
|
||||||
skull.update(true);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case "banner" -> {
|
|
||||||
if (state instanceof Banner banner) {
|
|
||||||
List<Tag> patterns = this.tag.getListTag("Patterns").getValue();
|
|
||||||
if (patterns == null || patterns.isEmpty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
banner.setPatterns(patterns.stream().map(t -> (CompoundTag) t).map(compoundTag -> {
|
|
||||||
DyeColor color = DyeColor.getByWoolData((byte) compoundTag.getInt("Color"));
|
|
||||||
PatternType patternType = PatternType.getByIdentifier(compoundTag.getString("Pattern"));
|
|
||||||
if (color == null || patternType == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new Pattern(color, patternType);
|
|
||||||
}).filter(Objects::nonNull).toList());
|
|
||||||
banner.update(true);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -306,6 +254,26 @@ public class StateWrapper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a CompoundTag of the contents of a block's inventory (chest, furnace, etc.).
|
||||||
|
*
|
||||||
|
* @deprecated in favour of using WorldEdit methods for obtaining NBT, specifically by obtaining a
|
||||||
|
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||||
|
public CompoundTag getTag() {
|
||||||
|
if (this.tag != null) {
|
||||||
|
return this.tag;
|
||||||
|
}
|
||||||
|
if (this.state instanceof InventoryHolder inv) {
|
||||||
|
ItemStack[] contents = inv.getInventory().getContents();
|
||||||
|
Map<String, Tag> values = new HashMap<>();
|
||||||
|
values.put("Items", new ListTag(CompoundTag.class, serializeInventory(contents)));
|
||||||
|
return new CompoundTag(values);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
String tileid = this.tag.getString("id").toLowerCase();
|
String tileid = this.tag.getString("id").toLowerCase();
|
||||||
if (tileid.startsWith("minecraft:")) {
|
if (tileid.startsWith("minecraft:")) {
|
||||||
|
@ -42,9 +42,7 @@ import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
|||||||
import com.plotsquared.core.util.EntityUtil;
|
import com.plotsquared.core.util.EntityUtil;
|
||||||
import com.plotsquared.core.util.entity.EntityCategories;
|
import com.plotsquared.core.util.entity.EntityCategories;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.bukkit.entity.Arrow;
|
import org.bukkit.entity.Arrow;
|
||||||
import org.bukkit.entity.Creature;
|
import org.bukkit.entity.Creature;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@ -181,10 +179,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -196,10 +191,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_DESTROY + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_DESTROY + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plot.debug(player.getName()
|
plot.debug(player.getName()
|
||||||
@ -220,10 +212,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plot.debug(player.getName() + " could not attack " + entityType
|
plot.debug(player.getName() + " could not attack " + entityType
|
||||||
@ -244,10 +233,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plot.debug(player.getName() + " could not attack " + entityType
|
plot.debug(player.getName() + " could not attack " + entityType
|
||||||
@ -260,10 +246,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plot.getFlag(PvpFlag.class) && !plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
if (!plot.getFlag(PvpFlag.class) && !plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
plot.debug(player.getName() + " could not attack " + entityType
|
plot.debug(player.getName() + " could not attack " + entityType
|
||||||
+ " because pve = false");
|
+ " because pve = false");
|
||||||
@ -277,10 +260,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_PVP + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVP + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -297,10 +277,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plot.debug(player.getName() + " could not attack " + entityType
|
plot.debug(player.getName() + " could not attack " + entityType
|
||||||
@ -322,10 +299,7 @@ public class BukkitEntityUtil {
|
|||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_ADMIN_PVE + "." + stub)
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_ADMIN_PVE + "." + stub))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plot.debug(player.getName() + " could not attack " + entityType
|
plot.debug(player.getName() + " could not attack " + entityType
|
||||||
|
@ -44,7 +44,6 @@ import java.util.stream.IntStream;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class BukkitInventoryUtil extends InventoryUtil {
|
public class BukkitInventoryUtil extends InventoryUtil {
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
private static @Nullable ItemStack getItem(PlotItemStack item) {
|
private static @Nullable ItemStack getItem(PlotItemStack item) {
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -57,7 +56,7 @@ public class BukkitInventoryUtil extends InventoryUtil {
|
|||||||
ItemMeta meta = null;
|
ItemMeta meta = null;
|
||||||
if (item.getName() != null) {
|
if (item.getName() != null) {
|
||||||
meta = stack.getItemMeta();
|
meta = stack.getItemMeta();
|
||||||
Component nameComponent = BukkitUtil.MINI_MESSAGE.deserialize(item.getName());
|
Component nameComponent = BukkitUtil.MINI_MESSAGE.parse(item.getName());
|
||||||
meta.setDisplayName(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(nameComponent));
|
meta.setDisplayName(BukkitUtil.LEGACY_COMPONENT_SERIALIZER.serialize(nameComponent));
|
||||||
}
|
}
|
||||||
if (item.getLore() != null) {
|
if (item.getLore() != null) {
|
||||||
|
@ -30,7 +30,7 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.PlotManager;
|
import com.plotsquared.core.plot.PlotManager;
|
||||||
import com.plotsquared.core.queue.GlobalBlockQueue;
|
import com.plotsquared.core.queue.GlobalBlockQueue;
|
||||||
import com.plotsquared.core.queue.QueueCoordinator;
|
import com.plotsquared.core.queue.QueueCoordinator;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ScopedQueueCoordinator;
|
||||||
import com.plotsquared.core.util.ChunkManager;
|
import com.plotsquared.core.util.ChunkManager;
|
||||||
import com.plotsquared.core.util.RegionManager;
|
import com.plotsquared.core.util.RegionManager;
|
||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
@ -70,7 +70,7 @@ public class BukkitRegionManager extends RegionManager {
|
|||||||
@Inject
|
@Inject
|
||||||
public BukkitRegionManager(
|
public BukkitRegionManager(
|
||||||
@NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull
|
@NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull
|
||||||
ProgressSubscriberFactory subscriberFactory
|
ProgressSubscriberFactory subscriberFactory
|
||||||
) {
|
) {
|
||||||
super(worldUtil, blockQueue, subscriberFactory);
|
super(worldUtil, blockQueue, subscriberFactory);
|
||||||
this.blockQueue = blockQueue;
|
this.blockQueue = blockQueue;
|
||||||
@ -257,9 +257,9 @@ public class BukkitRegionManager extends RegionManager {
|
|||||||
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
map.saveEntitiesOut(Bukkit.getWorld(world.getName()).getChunkAt(x, z), currentPlotClear);
|
||||||
AugmentedUtils.bypass(
|
AugmentedUtils.bypass(
|
||||||
ignoreAugment,
|
ignoreAugment,
|
||||||
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ZeroedDelegateScopedQueueCoordinator>() {
|
() -> ChunkManager.setChunkInPlotArea(null, new RunnableVal<ScopedQueueCoordinator>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(ZeroedDelegateScopedQueueCoordinator value) {
|
public void run(ScopedQueueCoordinator value) {
|
||||||
Location min = value.getMin();
|
Location min = value.getMin();
|
||||||
int bx = min.getX();
|
int bx = min.getX();
|
||||||
int bz = min.getZ();
|
int bz = min.getZ();
|
||||||
|
@ -67,7 +67,6 @@ public class BukkitSetupUtils extends SetupUtils {
|
|||||||
this.worldFile = worldFile;
|
this.worldFile = worldFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
@Override
|
@Override
|
||||||
public void updateGenerators(final boolean force) {
|
public void updateGenerators(final boolean force) {
|
||||||
if (loaded && !SetupUtils.generators.isEmpty() && !force) {
|
if (loaded && !SetupUtils.generators.isEmpty() && !force) {
|
||||||
@ -125,7 +124,7 @@ public class BukkitSetupUtils extends SetupUtils {
|
|||||||
public String setupWorld(PlotAreaBuilder builder) {
|
public String setupWorld(PlotAreaBuilder builder) {
|
||||||
this.updateGenerators(false);
|
this.updateGenerators(false);
|
||||||
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
||||||
new ConfigurationNode[0] : builder.settingsNodesWrapper().settingsNodes();
|
new ConfigurationNode[0] : builder.settingsNodesWrapper().getSettingsNodes();
|
||||||
String world = builder.worldName();
|
String world = builder.worldName();
|
||||||
PlotAreaType type = builder.plotAreaType();
|
PlotAreaType type = builder.plotAreaType();
|
||||||
String worldPath = "worlds." + builder.worldName();
|
String worldPath = "worlds." + builder.worldName();
|
||||||
|
@ -45,7 +45,7 @@ import com.sk89q.worldedit.world.block.BlockTypes;
|
|||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
@ -333,7 +333,7 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void setSign(
|
public void setSign(
|
||||||
final @NonNull Location location, final @NonNull Caption[] lines,
|
final @NonNull Location location, final @NonNull Caption[] lines,
|
||||||
final @NonNull TagResolver... replacements
|
final @NonNull Template... replacements
|
||||||
) {
|
) {
|
||||||
ensureLoaded(location.getWorldName(), location.getX(), location.getZ(), chunk -> {
|
ensureLoaded(location.getWorldName(), location.getX(), location.getZ(), chunk -> {
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
@ -366,9 +366,8 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
final org.bukkit.block.BlockState blockstate = block.getState();
|
final org.bukkit.block.BlockState blockstate = block.getState();
|
||||||
if (blockstate instanceof final Sign sign) {
|
if (blockstate instanceof final Sign sign) {
|
||||||
for (int i = 0; i < lines.length; i++) {
|
for (int i = 0; i < lines.length; i++) {
|
||||||
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER.serialize(
|
sign.setLine(i, LEGACY_COMPONENT_SERIALIZER
|
||||||
MINI_MESSAGE.deserialize(lines[i].getComponent(LocaleHolder.console()), replacements)
|
.serialize(MINI_MESSAGE.parse(lines[i].getComponent(LocaleHolder.console()), replacements)));
|
||||||
));
|
|
||||||
}
|
}
|
||||||
sign.update(true, false);
|
sign.update(true, false);
|
||||||
}
|
}
|
||||||
|
@ -23,15 +23,11 @@ import com.plotsquared.core.location.World;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.lang.ref.SoftReference;
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class BukkitWorld implements World<org.bukkit.World> {
|
public class BukkitWorld implements World<org.bukkit.World> {
|
||||||
|
|
||||||
// Upon world unload we should probably have the P2 BukkitWorld be GCed relatively eagerly, thus freeing the bukkit world.
|
private static final Map<String, BukkitWorld> worldMap = Maps.newHashMap();
|
||||||
// We also want to avoid circumstances where a bukkit world has been GCed, but a P2 BukkitWorld has not
|
|
||||||
private static final Map<String, WeakReference<BukkitWorld>> worldMap = Maps.newHashMap();
|
|
||||||
private static final boolean HAS_MIN_Y;
|
private static final boolean HAS_MIN_Y;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -45,11 +41,10 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
|||||||
HAS_MIN_Y = temp;
|
HAS_MIN_Y = temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We want to allow GC to remove bukkit worlds, but not too eagerly
|
private final org.bukkit.World world;
|
||||||
private final SoftReference<org.bukkit.World> world;
|
|
||||||
|
|
||||||
private BukkitWorld(final org.bukkit.World world) {
|
private BukkitWorld(final org.bukkit.World world) {
|
||||||
this.world = new SoftReference<>(world);
|
this.world = world;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -73,13 +68,12 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
|||||||
* @return World instance
|
* @return World instance
|
||||||
*/
|
*/
|
||||||
public static @NonNull BukkitWorld of(final org.bukkit.World world) {
|
public static @NonNull BukkitWorld of(final org.bukkit.World world) {
|
||||||
WeakReference<BukkitWorld> bukkitWorldRef = worldMap.get(world.getName());
|
BukkitWorld bukkitWorld = worldMap.get(world.getName());
|
||||||
BukkitWorld bukkitWorld;
|
if (bukkitWorld != null && bukkitWorld.getPlatformWorld().equals(world)) {
|
||||||
if (bukkitWorldRef != null && (bukkitWorld = bukkitWorldRef.get()) != null && world.equals(bukkitWorld.world.get())) {
|
|
||||||
return bukkitWorld;
|
return bukkitWorld;
|
||||||
}
|
}
|
||||||
bukkitWorld = new BukkitWorld(world);
|
bukkitWorld = new BukkitWorld(world);
|
||||||
worldMap.put(world.getName(), new WeakReference<>(bukkitWorld));
|
worldMap.put(world.getName(), bukkitWorld);
|
||||||
return bukkitWorld;
|
return bukkitWorld;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,26 +97,22 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public org.bukkit.World getPlatformWorld() {
|
public org.bukkit.World getPlatformWorld() {
|
||||||
org.bukkit.World world = this.world.get();
|
return this.world;
|
||||||
if (world == null) {
|
|
||||||
throw new IllegalStateException("Bukkit platform world was unloaded from memory");
|
|
||||||
}
|
|
||||||
return world;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull String getName() {
|
public @NonNull String getName() {
|
||||||
return this.getPlatformWorld().getName();
|
return this.world.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMinHeight() {
|
public int getMinHeight() {
|
||||||
return getMinWorldHeight(getPlatformWorld());
|
return getMinWorldHeight(world);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxHeight() {
|
public int getMaxHeight() {
|
||||||
return getMaxWorldHeight(getPlatformWorld()) - 1;
|
return getMaxWorldHeight(world) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -142,6 +132,14 @@ public class BukkitWorld implements World<org.bukkit.World> {
|
|||||||
return world.hashCode();
|
return world.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated This method is not meant to be invoked or overridden, with no replacement.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.6.0")
|
||||||
|
protected boolean canEqual(final Object other) {
|
||||||
|
return other instanceof BukkitWorld;
|
||||||
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "BukkitWorld(world=" + this.world + ")";
|
return "BukkitWorld(world=" + this.world + ")";
|
||||||
}
|
}
|
||||||
|
@ -1,98 +0,0 @@
|
|||||||
/*
|
|
||||||
* PlotSquared, a land and world management plugin for Minecraft.
|
|
||||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
|
||||||
* Copyright (C) IntellectualSites team and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.plotsquared.bukkit.util;
|
|
||||||
|
|
||||||
import com.intellectualsites.annotations.NotPublic;
|
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a helper class which replaces older syntax no longer supported by MiniMessage with replacements in messages_%.json.
|
|
||||||
* MiniMessage changed the syntax between major releases. To warrant a smooth upgrade, we attempt to replace any occurrences
|
|
||||||
* while loading PlotSquared.
|
|
||||||
*
|
|
||||||
* @since 7.0.0
|
|
||||||
*/
|
|
||||||
@NotPublic
|
|
||||||
public class TranslationUpdateManager {
|
|
||||||
|
|
||||||
public static void upgradeTranslationFile() throws IOException {
|
|
||||||
String suggestCommand = "suggest_command";
|
|
||||||
String suggestCommandReplacement = "run_command";
|
|
||||||
String minHeight = "minHeight";
|
|
||||||
String minheightReplacement = "minheight";
|
|
||||||
String maxHeight = "maxHeight";
|
|
||||||
String maxheightReplacement = "maxheight";
|
|
||||||
String usedGrants = "usedGrants";
|
|
||||||
String usedGrantsReplacement = "used_grants";
|
|
||||||
String remainingGrants = "remainingGrants";
|
|
||||||
String remainingGrantsReplacement = "remaining_grants";
|
|
||||||
String minimumRadius = "minimumRadius";
|
|
||||||
String minimumRadiusReplacement = "minimum_radius";
|
|
||||||
String maximumMoves = "maximumMoves";
|
|
||||||
String maximumMovesReplacement = "maximum_moves";
|
|
||||||
String userMove = "userMove";
|
|
||||||
String userMoveReplacement = "user_move";
|
|
||||||
|
|
||||||
// tag opening / closing characters are important, as the locale keys exist as well, which should not be replaced
|
|
||||||
String listInfoUnknown = "<info.unknown>";
|
|
||||||
String listInfoUnknownReplacement = "<unknown>";
|
|
||||||
String listInfoServer = "<info.server>";
|
|
||||||
String listInfoServerReplacement = "<server>";
|
|
||||||
String listInfoEveryone = "<info.everyone>";
|
|
||||||
String listInfoEveryoneReplacement = "<everyone>";
|
|
||||||
|
|
||||||
try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) {
|
|
||||||
paths
|
|
||||||
.filter(Files::isRegularFile)
|
|
||||||
.filter(p -> p.getFileName().toString().matches("messages_[a-z]{2}\\.json"))
|
|
||||||
.forEach(p -> {
|
|
||||||
replaceInFile(p, suggestCommand, suggestCommandReplacement);
|
|
||||||
replaceInFile(p, minHeight, minheightReplacement);
|
|
||||||
replaceInFile(p, maxHeight, maxheightReplacement);
|
|
||||||
replaceInFile(p, usedGrants, usedGrantsReplacement);
|
|
||||||
replaceInFile(p, remainingGrants, remainingGrantsReplacement);
|
|
||||||
replaceInFile(p, minimumRadius, minimumRadiusReplacement);
|
|
||||||
replaceInFile(p, maximumMoves, maximumMovesReplacement);
|
|
||||||
replaceInFile(p, userMove, userMoveReplacement);
|
|
||||||
replaceInFile(p, listInfoUnknown, listInfoUnknownReplacement);
|
|
||||||
replaceInFile(p, listInfoServer, listInfoServerReplacement);
|
|
||||||
replaceInFile(p, listInfoEveryone, listInfoEveryoneReplacement);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void replaceInFile(Path path, String searchText, String replacementText) {
|
|
||||||
try {
|
|
||||||
String content = Files.readString(path);
|
|
||||||
if (content.contains(searchText)) {
|
|
||||||
content = content.replaceAll(searchText, replacementText);
|
|
||||||
Files.writeString(path, content);
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -35,7 +35,7 @@ import org.bukkit.scheduler.BukkitTask;
|
|||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.URI;
|
import java.net.URL;
|
||||||
|
|
||||||
public class UpdateUtility implements Listener {
|
public class UpdateUtility implements Listener {
|
||||||
|
|
||||||
@ -54,14 +54,12 @@ public class UpdateUtility implements Listener {
|
|||||||
internalVersion = PlotSquared.get().getVersion();
|
internalVersion = PlotSquared.get().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"deprecation", "DefaultCharset"})
|
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
||||||
// 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 {
|
||||||
HttpsURLConnection connection = (HttpsURLConnection) URI.create(
|
HttpsURLConnection connection = (HttpsURLConnection) new URL(
|
||||||
"https://api.spigotmc.org/simple/0.2/index.php?action=getResource&id=77506")
|
"https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
|
||||||
.toURL()
|
|
||||||
.openConnection();
|
.openConnection();
|
||||||
connection.setRequestMethod("GET");
|
connection.setRequestMethod("GET");
|
||||||
JsonObject result = new JsonParser()
|
JsonObject result = new JsonParser()
|
||||||
|
@ -37,9 +37,7 @@ import com.sk89q.worldedit.regions.CuboidRegion;
|
|||||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class FaweRegionManager extends BukkitRegionManager {
|
public class FaweRegionManager extends BukkitRegionManager {
|
||||||
@ -61,10 +59,7 @@ public class FaweRegionManager extends BukkitRegionManager {
|
|||||||
@Nullable PlotPlayer<?> actor,
|
@Nullable PlotPlayer<?> actor,
|
||||||
@Nullable QueueCoordinator queue
|
@Nullable QueueCoordinator queue
|
||||||
) {
|
) {
|
||||||
return delegate.setCuboids(
|
return delegate.setCuboids(area, regions, blocks, minY, maxY, queue.getCompleteTask());
|
||||||
area, regions, blocks, minY, maxY,
|
|
||||||
Objects.requireNonNullElseGet(queue, area::getQueue).getCompleteTask()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -99,6 +94,11 @@ public class FaweRegionManager extends BukkitRegionManager {
|
|||||||
delegate.swap(pos1, pos2, swapPos, whenDone);
|
delegate.swap(pos1, pos2, swapPos, whenDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, String world, Runnable whenDone) {
|
||||||
|
delegate.setBiome(region, extendBiome, biome, world, whenDone);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) {
|
public void setBiome(CuboidRegion region, int extendBiome, BiomeType biome, PlotArea area, Runnable whenDone) {
|
||||||
delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone);
|
delegate.setBiome(region, extendBiome, biome, area.getWorldName(), whenDone);
|
||||||
@ -116,7 +116,7 @@ public class FaweRegionManager extends BukkitRegionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean regenerateRegion(final @NotNull Location pos1, final @NotNull Location pos2, boolean ignore, final Runnable whenDone) {
|
public boolean regenerateRegion(final Location pos1, final Location pos2, boolean ignore, final Runnable whenDone) {
|
||||||
return delegate.regenerateRegion(pos1, pos2, ignore, whenDone);
|
return delegate.regenerateRegion(pos1, pos2, ignore, whenDone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,8 +111,8 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
|||||||
try (final PreparedStatement statement = getConnection()
|
try (final PreparedStatement statement = getConnection()
|
||||||
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
||||||
for (final UUIDMapping mapping : uuidWrappers) {
|
for (final UUIDMapping mapping : uuidWrappers) {
|
||||||
statement.setString(1, mapping.uuid().toString());
|
statement.setString(1, mapping.getUuid().toString());
|
||||||
statement.setString(2, mapping.username());
|
statement.setString(2, mapping.getUsername());
|
||||||
statement.executeUpdate();
|
statement.executeUpdate();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
@ -4,16 +4,16 @@ api-version: "1.13"
|
|||||||
version: "${version}"
|
version: "${version}"
|
||||||
load: STARTUP
|
load: STARTUP
|
||||||
description: "Easy, yet powerful Plot World generation and management."
|
description: "Easy, yet powerful Plot World generation and management."
|
||||||
authors: [ Citymonstret, Empire92, MattBDev, dordsor21, NotMyFault, SirYwell ]
|
authors: [Citymonstret, Empire92, MattBDev, dordsor21, NotMyFault, SirYwell]
|
||||||
website: https://www.spigotmc.org/resources/77506/
|
website: https://www.spigotmc.org/resources/77506/
|
||||||
softdepend: [ Vault, PlaceholderAPI, Essentials, LuckPerms, BungeePerms, MVdWPlaceholderAPI ]
|
softdepend: [Vault, PlaceholderAPI, Essentials, LuckPerms, BungeePerms, MVdWPlaceholderAPI]
|
||||||
loadbefore: [ MultiWorld, Multiverse-Core ]
|
loadbefore: [MultiWorld, Multiverse-Core]
|
||||||
depend: [ WorldEdit ]
|
depend: [WorldEdit]
|
||||||
database: false
|
database: false
|
||||||
commands:
|
commands:
|
||||||
plots:
|
plots:
|
||||||
description: Plot command.
|
description: Plot command.
|
||||||
aliases: [ p,plot,ps,plotsquared,p2,2,plotme ]
|
aliases: [p,plot,ps,plotsquared,p2,2,plotme]
|
||||||
permission: plots.use
|
permission: plots.use
|
||||||
permission-message: "You are lacking the permission node 'plots.use'"
|
permission-message: "You are lacking the permission node 'plots.use'"
|
||||||
permissions:
|
permissions:
|
||||||
|
76
CODE_OF_CONDUCT.md
Normal file
76
CODE_OF_CONDUCT.md
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as
|
||||||
|
contributors and maintainers pledge to making participation in our project and
|
||||||
|
our community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||||
|
level of experience, education, socio-economic status, nationality, personal
|
||||||
|
appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment
|
||||||
|
include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
|
advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic
|
||||||
|
address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable
|
||||||
|
behavior and are expected to take appropriate and fair corrective action in
|
||||||
|
response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or
|
||||||
|
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||||
|
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||||
|
permanently any contributor for other behaviors that they deem inappropriate,
|
||||||
|
threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces
|
||||||
|
when an individual is representing the project or its community. Examples of
|
||||||
|
representing a project or community include using an official project e-mail
|
||||||
|
address, posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event. Representation of a project may be
|
||||||
|
further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting the project team at contact<at>intellectualsites.com. All
|
||||||
|
complaints will be reviewed and investigated and will result in a response that
|
||||||
|
is deemed necessary and appropriate to the circumstances. The project team is
|
||||||
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||||
|
Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||||
|
faith may face temporary or permanent repercussions as determined by other
|
||||||
|
members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||||
|
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see
|
||||||
|
https://www.contributor-covenant.org/faq
|
@ -2,18 +2,18 @@ import java.time.format.DateTimeFormatter
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Expected everywhere.
|
// Expected everywhere.
|
||||||
compileOnlyApi(libs.checkerqual)
|
compileOnlyApi("org.checkerframework:checker-qual")
|
||||||
|
|
||||||
// Minecraft expectations
|
// Minecraft expectations
|
||||||
compileOnlyApi(libs.gson)
|
compileOnlyApi("com.google.code.gson:gson")
|
||||||
compileOnly(libs.guava)
|
compileOnly("com.google.guava:guava")
|
||||||
|
|
||||||
// Platform expectations
|
// Platform expectations
|
||||||
compileOnlyApi(libs.snakeyaml)
|
compileOnlyApi("org.yaml:snakeyaml")
|
||||||
|
|
||||||
// Adventure
|
// Adventure
|
||||||
api(libs.adventureApi)
|
api("net.kyori:adventure-api")
|
||||||
api(libs.adventureMiniMessage)
|
api("net.kyori:adventure-text-minimessage")
|
||||||
|
|
||||||
// Guice
|
// Guice
|
||||||
api(libs.guice) {
|
api(libs.guice) {
|
||||||
@ -31,19 +31,19 @@ dependencies {
|
|||||||
exclude(group = "dummypermscompat")
|
exclude(group = "dummypermscompat")
|
||||||
}
|
}
|
||||||
testImplementation(libs.worldeditCore)
|
testImplementation(libs.worldeditCore)
|
||||||
compileOnly(libs.faweBukkit) { isTransitive = false }
|
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
|
||||||
testImplementation(libs.faweCore) { isTransitive = false }
|
testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
compileOnlyApi(libs.log4j)
|
compileOnlyApi("org.apache.logging.log4j:log4j-api")
|
||||||
|
|
||||||
// Other libraries
|
// Other libraries
|
||||||
api(libs.prtree)
|
api(libs.prtree)
|
||||||
api(libs.aopalliance)
|
api(libs.aopalliance)
|
||||||
api(libs.cloudServices)
|
api(libs.cloudServices)
|
||||||
api(libs.arkitektonika)
|
api(libs.arkitektonika)
|
||||||
api(libs.paster)
|
api("com.intellectualsites.paster:Paster")
|
||||||
api(libs.informativeAnnotations)
|
api("com.intellectualsites.informative-annotations:informative-annotations")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.processResources {
|
tasks.processResources {
|
||||||
@ -57,8 +57,8 @@ tasks.processResources {
|
|||||||
|
|
||||||
doLast {
|
doLast {
|
||||||
copy {
|
copy {
|
||||||
from(layout.buildDirectory.file("$rootDir/LICENSE"))
|
from(File("$rootDir/LICENSE"))
|
||||||
into(layout.buildDirectory.dir("resources/main"))
|
into("$buildDir/resources/main/")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,16 +68,15 @@ tasks {
|
|||||||
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
|
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
|
||||||
val opt = options as StandardJavadocDocletOptions
|
val opt = options as StandardJavadocDocletOptions
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
|
||||||
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
|
||||||
opt.links("https://jd.advntr.dev/text-minimessage/4.14.0/")
|
|
||||||
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
|
opt.links("https://javadoc.io/doc/com.intellectualsites.informative-annotations/informative-annotations/latest/")
|
||||||
opt.isLinkSource = true
|
opt.isLinkSource = true
|
||||||
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
||||||
opt.isUse = true
|
opt.isUse = true
|
||||||
opt.encoding("UTF-8")
|
opt.encoding("UTF-8")
|
||||||
opt.keyWords()
|
opt.keyWords()
|
||||||
opt.addStringOption("-since", isRelease)
|
opt.addStringOption("-since", isRelease)
|
||||||
opt.noTimestamp()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ import com.plotsquared.core.util.ChunkManager;
|
|||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.SchematicHandler;
|
import com.plotsquared.core.util.SchematicHandler;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
@ -145,7 +145,7 @@ public class PlotAPI {
|
|||||||
*/
|
*/
|
||||||
public void sendConsoleMessage(
|
public void sendConsoleMessage(
|
||||||
final @NonNull String message,
|
final @NonNull String message,
|
||||||
final @NonNull TagResolver @NonNull ... replacements
|
final @NonNull Template @NonNull ... replacements
|
||||||
) {
|
) {
|
||||||
ConsolePlayer.getConsole().sendMessage(StaticCaption.of(message), replacements);
|
ConsolePlayer.getConsole().sendMessage(StaticCaption.of(message), replacements);
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ public class PlotAPI {
|
|||||||
*/
|
*/
|
||||||
public void sendConsoleMessage(
|
public void sendConsoleMessage(
|
||||||
final @NonNull Caption caption,
|
final @NonNull Caption caption,
|
||||||
final @NonNull TagResolver @NonNull ... replacements
|
final @NonNull Template @NonNull ... replacements
|
||||||
) {
|
) {
|
||||||
ConsolePlayer.getConsole().sendMessage(caption, replacements);
|
ConsolePlayer.getConsole().sendMessage(caption, replacements);
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ import java.io.InputStream;
|
|||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
import java.net.URI;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -210,10 +210,9 @@ public class PlotSquared {
|
|||||||
try {
|
try {
|
||||||
URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation();
|
URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation();
|
||||||
this.jarFile = new File(
|
this.jarFile = new File(
|
||||||
URI.create(
|
new URL(logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file"))
|
||||||
logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file"))
|
.toURI().getPath());
|
||||||
.getPath());
|
} catch (MalformedURLException | URISyntaxException | SecurityException e) {
|
||||||
} catch (URISyntaxException | SecurityException e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
|
this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
|
||||||
if (!this.jarFile.exists()) {
|
if (!this.jarFile.exists()) {
|
||||||
@ -271,11 +270,7 @@ public class PlotSquared {
|
|||||||
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
|
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
|
||||||
} else {
|
} else {
|
||||||
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
||||||
captionMap = this.captionLoader.loadOrCreateSingle(this.platform
|
captionMap = this.captionLoader.loadOrCreateSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName));
|
||||||
.getDirectory()
|
|
||||||
.toPath()
|
|
||||||
.resolve("lang")
|
|
||||||
.resolve(fileName));
|
|
||||||
}
|
}
|
||||||
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
||||||
LOGGER.info(
|
LOGGER.info(
|
||||||
@ -795,9 +790,7 @@ public class PlotSquared {
|
|||||||
if (world.equals("CheckingPlotSquaredGenerator")) {
|
if (world.equals("CheckingPlotSquaredGenerator")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!this.getPlotAreaManager().addWorld(world)) {
|
this.getPlotAreaManager().addWorld(world);
|
||||||
return;
|
|
||||||
}
|
|
||||||
Set<String> worlds;
|
Set<String> worlds;
|
||||||
if (this.worldConfiguration.contains("worlds")) {
|
if (this.worldConfiguration.contains("worlds")) {
|
||||||
worlds = this.worldConfiguration.getConfigurationSection("worlds").getKeys(false);
|
worlds = this.worldConfiguration.getConfigurationSection("worlds").getKeys(false);
|
||||||
@ -1016,7 +1009,7 @@ public class PlotSquared {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup the configuration for a plot world based on world arguments.
|
* Setup the configuration for a plot world based on world arguments.
|
||||||
* <p>
|
*
|
||||||
*
|
*
|
||||||
* <i>e.g. /mv create <world> normal -g PlotSquared:<args></i>
|
* <i>e.g. /mv create <world> normal -g PlotSquared:<args></i>
|
||||||
*
|
*
|
||||||
@ -1282,7 +1275,7 @@ public class PlotSquared {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up the database connection.
|
* Setup the database connection.
|
||||||
*/
|
*/
|
||||||
public void setupDatabase() {
|
public void setupDatabase() {
|
||||||
try {
|
try {
|
||||||
|
@ -200,7 +200,7 @@ public class PlayerBackupProfile implements BackupProfile {
|
|||||||
if (value) {
|
if (value) {
|
||||||
future.complete(null);
|
future.complete(null);
|
||||||
} else {
|
} else {
|
||||||
future.completeExceptionally(new RuntimeException(MINI_MESSAGE.escapeTags(
|
future.completeExceptionally(new RuntimeException(MINI_MESSAGE.stripTokens(
|
||||||
TranslatableCaption
|
TranslatableCaption
|
||||||
.of("schematics.schematic_paste_failed")
|
.of("schematics.schematic_paste_failed")
|
||||||
.getComponent(ConsolePlayer.getConsole()))));
|
.getComponent(ConsolePlayer.getConsole()))));
|
||||||
|
@ -24,14 +24,13 @@ import com.google.inject.Inject;
|
|||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
|
import com.plotsquared.core.configuration.caption.Templates;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.inject.factory.PlayerBackupProfileFactory;
|
import com.plotsquared.core.inject.factory.PlayerBackupProfileFactory;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
@ -101,7 +100,7 @@ public class SimpleBackupManager implements BackupManager {
|
|||||||
if (player != null) {
|
if (player != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_automatic_started"),
|
TranslatableCaption.of("backups.backup_automatic_started"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
profile.createBackup().whenComplete((backup, throwable) -> {
|
profile.createBackup().whenComplete((backup, throwable) -> {
|
||||||
@ -109,7 +108,7 @@ public class SimpleBackupManager implements BackupManager {
|
|||||||
if (player != null) {
|
if (player != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_automatic_failure"),
|
TranslatableCaption.of("backups.backup_automatic_failure"),
|
||||||
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
|
Templates.of("reason", throwable.getMessage())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
@ -136,9 +135,13 @@ public class SimpleBackupManager implements BackupManager {
|
|||||||
return this.backupLimit;
|
return this.backupLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
private record PlotCacheKey(
|
private static final class PlotCacheKey {
|
||||||
Plot plot
|
|
||||||
) {
|
private final Plot plot;
|
||||||
|
|
||||||
|
private PlotCacheKey(Plot plot) {
|
||||||
|
this.plot = plot;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(final Object o) {
|
public boolean equals(final Object o) {
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.core.command;
|
package com.plotsquared.core.command;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.database.DBFunc;
|
import com.plotsquared.core.database.DBFunc;
|
||||||
@ -31,9 +30,7 @@ import com.plotsquared.core.util.PlayerManager;
|
|||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -74,7 +71,7 @@ public class Add extends Command {
|
|||||||
checkTrue(
|
checkTrue(
|
||||||
args.length == 1,
|
args.length == 1,
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>")))
|
Template.of("value", "/plot add <player | *>")
|
||||||
);
|
);
|
||||||
final CompletableFuture<Boolean> future = new CompletableFuture<>();
|
final CompletableFuture<Boolean> future = new CompletableFuture<>();
|
||||||
PlayerManager.getUUIDsFromString(args[0], (uuids, throwable) -> {
|
PlayerManager.getUUIDsFromString(args[0], (uuids, throwable) -> {
|
||||||
@ -84,7 +81,7 @@ public class Add extends Command {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
future.completeExceptionally(throwable);
|
future.completeExceptionally(throwable);
|
||||||
@ -92,7 +89,7 @@ public class Add extends Command {
|
|||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
checkTrue(!uuids.isEmpty(), TranslatableCaption.of("errors.invalid_player"),
|
checkTrue(!uuids.isEmpty(), TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
Iterator<UUID> iterator = uuids.iterator();
|
Iterator<UUID> iterator = uuids.iterator();
|
||||||
int size = plot.getTrusted().size() + plot.getMembers().size();
|
int size = plot.getTrusted().size() + plot.getMembers().size();
|
||||||
@ -102,14 +99,7 @@ public class Add extends Command {
|
|||||||
Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
|
Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
PlotSquared
|
Template.of("value", PlayerManager.resolveName(uuid).getComponent(player))
|
||||||
.platform()
|
|
||||||
.playerManager()
|
|
||||||
.getUsernameCaption(uuid)
|
|
||||||
.thenApply(caption -> TagResolver.resolver(
|
|
||||||
"value",
|
|
||||||
Tag.inserting(caption.toComponent(player))
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
continue;
|
continue;
|
||||||
@ -117,11 +107,7 @@ public class Add extends Command {
|
|||||||
if (plot.isOwner(uuid)) {
|
if (plot.isOwner(uuid)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("member.already_added"),
|
TranslatableCaption.of("member.already_added"),
|
||||||
PlotSquared.platform().playerManager().getUsernameCaption(uuid)
|
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
|
||||||
.thenApply(caption -> TagResolver.resolver(
|
|
||||||
"player",
|
|
||||||
Tag.inserting(caption.toComponent(player))
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
continue;
|
continue;
|
||||||
@ -129,11 +115,7 @@ public class Add extends Command {
|
|||||||
if (plot.getMembers().contains(uuid)) {
|
if (plot.getMembers().contains(uuid)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("member.already_added"),
|
TranslatableCaption.of("member.already_added"),
|
||||||
PlotSquared.platform().playerManager().getUsernameCaption(uuid)
|
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
|
||||||
.thenApply(caption -> TagResolver.resolver(
|
|
||||||
"player",
|
|
||||||
Tag.inserting(caption.toComponent(player))
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
continue;
|
continue;
|
||||||
@ -146,7 +128,7 @@ public class Add extends Command {
|
|||||||
if (localAddSize >= maxAddSize) {
|
if (localAddSize >= maxAddSize) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("members.plot_max_members_added"),
|
TranslatableCaption.of("members.plot_max_members_added"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(localAddSize)))
|
Template.of("amount", String.valueOf(localAddSize))
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -93,10 +91,7 @@ public class Alias extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_SET))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ALIAS_SET)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,10 +107,7 @@ public class Alias extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ALIAS_REMOVE))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ALIAS_REMOVE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -156,16 +148,13 @@ public class Alias extends SubCommand {
|
|||||||
.anyMatch()) {
|
.anyMatch()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("alias.alias_is_taken"),
|
TranslatableCaption.of("alias.alias_is_taken"),
|
||||||
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
|
Template.of("alias", alias)
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Settings.UUID.OFFLINE) {
|
if (Settings.UUID.OFFLINE) {
|
||||||
plot.setAlias(alias);
|
plot.setAlias(alias);
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("alias.alias_set_to"), Template.of("alias", alias));
|
||||||
TranslatableCaption.of("alias.alias_set_to"),
|
|
||||||
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlotSquared.get().getImpromptuUUIDPipeline().getSingle(alias, ((uuid, throwable) -> {
|
PlotSquared.get().getImpromptuUUIDPipeline().getSingle(alias, ((uuid, throwable) -> {
|
||||||
@ -174,13 +163,13 @@ public class Alias extends SubCommand {
|
|||||||
} else if (uuid != null) {
|
} else if (uuid != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("alias.alias_is_taken"),
|
TranslatableCaption.of("alias.alias_is_taken"),
|
||||||
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
|
Template.of("alias", alias)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
plot.setAlias(alias);
|
plot.setAlias(alias);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("alias.alias_set_to"),
|
TranslatableCaption.of("alias.alias_set_to"),
|
||||||
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
|
Template.of("alias", alias)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
@ -192,7 +181,7 @@ public class Alias extends SubCommand {
|
|||||||
if (!plot.getAlias().isEmpty()) {
|
if (!plot.getAlias().isEmpty()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("alias.alias_removed"),
|
TranslatableCaption.of("alias.alias_removed"),
|
||||||
TagResolver.resolver("alias", Tag.inserting(Component.text(alias)))
|
Template.of("alias", alias)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -24,6 +24,7 @@ import com.plotsquared.core.configuration.ConfigurationSection;
|
|||||||
import com.plotsquared.core.configuration.ConfigurationUtil;
|
import com.plotsquared.core.configuration.ConfigurationUtil;
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.CaptionHolder;
|
import com.plotsquared.core.configuration.caption.CaptionHolder;
|
||||||
|
import com.plotsquared.core.configuration.caption.Templates;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.configuration.file.YamlConfiguration;
|
import com.plotsquared.core.configuration.file.YamlConfiguration;
|
||||||
import com.plotsquared.core.events.TeleportCause;
|
import com.plotsquared.core.events.TeleportCause;
|
||||||
@ -68,9 +69,7 @@ import com.sk89q.worldedit.math.BlockVector3;
|
|||||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||||
import com.sk89q.worldedit.regions.Region;
|
import com.sk89q.worldedit.regions.Region;
|
||||||
import com.sk89q.worldedit.world.World;
|
import com.sk89q.worldedit.world.World;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -142,17 +141,14 @@ public class Area extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
if (!player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_AREA_CREATE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("single.single_area_needs_name"),
|
TranslatableCaption.of("single.single_area_needs_name"),
|
||||||
TagResolver.resolver("command", Tag.inserting(Component.text("/plot area single <name>")))
|
Template.of("command", "/plot area single <name>")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -283,7 +279,7 @@ public class Area extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.error_create"),
|
TranslatableCaption.of("errors.error_create"),
|
||||||
TagResolver.resolver("world", Tag.inserting(Component.text(hybridPlotWorld.getWorldName())))
|
Template.of("world", hybridPlotWorld.getWorldName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -294,10 +290,7 @@ public class Area extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
if (!player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_CREATE))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_AREA_CREATE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -305,10 +298,7 @@ public class Area extends SubCommand {
|
|||||||
case 1:
|
case 1:
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot area create [world[:id]] [<modifier>=<value>]..."))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
case 2:
|
case 2:
|
||||||
@ -322,11 +312,7 @@ public class Area extends SubCommand {
|
|||||||
if (area == null) {
|
if (area == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text(
|
|
||||||
"/plot area create [world[:id]] [<modifier>=<value>]..."))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -337,18 +323,12 @@ public class Area extends SubCommand {
|
|||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("set.set_attribute"),
|
TranslatableCaption.of("set.set_attribute"),
|
||||||
TagResolver.builder()
|
Template.of("attribute", "area_pos1"),
|
||||||
.tag("attribute", Tag.inserting(Component.text("area_pos1")))
|
Template.of("value", location.getX() + "," + location.getZ())
|
||||||
.tag("value", Tag.inserting(
|
|
||||||
Component.text(location.getX())
|
|
||||||
.append(Component.text(","))
|
|
||||||
.append(Component.text(location.getZ()))
|
|
||||||
))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("area.set_pos2"),
|
TranslatableCaption.of("area.set_pos2"),
|
||||||
TagResolver.resolver("command", Tag.inserting(Component.text("/plot area create pos2")))
|
Template.of("command", "/plot area create pos2")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -362,11 +342,7 @@ public class Area extends SubCommand {
|
|||||||
if (area == null) {
|
if (area == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Templates.of("value", "/plot area create [world[:id]] [<modifier>=<value>]...")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text(
|
|
||||||
"/plot area create [world[:id]] [<modifier>=<value>]..."))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -393,10 +369,7 @@ public class Area extends SubCommand {
|
|||||||
if (!areas.isEmpty()) {
|
if (!areas.isEmpty()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_intersection"),
|
TranslatableCaption.of("cluster.cluster_intersection"),
|
||||||
TagResolver.resolver(
|
Template.of("cluster", areas.iterator().next().toString())
|
||||||
"cluster",
|
|
||||||
Tag.inserting(areas.iterator().next())
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -422,7 +395,8 @@ public class Area extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("setup.setup_finished"));
|
player.sendMessage(TranslatableCaption.of("setup.setup_finished"));
|
||||||
if (area.getTerrain() != PlotAreaTerrainType.ALL) {
|
if (area.getTerrain() != PlotAreaTerrainType.ALL) {
|
||||||
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(world));
|
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(world));
|
||||||
queue.setChunkConsumer(chunk -> AugmentedUtils.generateChunk(
|
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(
|
||||||
|
null,
|
||||||
world,
|
world,
|
||||||
chunk.getX(),
|
chunk.getX(),
|
||||||
chunk.getZ(),
|
chunk.getZ(),
|
||||||
@ -434,7 +408,7 @@ public class Area extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.error_create"),
|
TranslatableCaption.of("errors.error_create"),
|
||||||
TagResolver.resolver("world", Tag.inserting(Component.text(area.getWorldName())))
|
Template.of("world", area.getWorldName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -468,7 +442,7 @@ public class Area extends SubCommand {
|
|||||||
if (other != null && Objects.equals(pa.getId(), other.getId())) {
|
if (other != null && Objects.equals(pa.getId(), other.getId())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("setup.setup_world_taken"),
|
TranslatableCaption.of("setup.setup_world_taken"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(pa.getId())))
|
Template.of("value", pa.toString())
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -483,13 +457,8 @@ public class Area extends SubCommand {
|
|||||||
if (pair.length != 2) {
|
if (pair.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||||
TagResolver.builder()
|
Template.of("value1,", getCommandString()),
|
||||||
.tag("value1", Tag.inserting(Component.text(getCommandString())))
|
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
|
||||||
.tag(
|
|
||||||
"value2",
|
|
||||||
Tag.inserting(Component.text("create [world[:id]] [<modifier>=<value>]..."))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -525,14 +494,8 @@ public class Area extends SubCommand {
|
|||||||
default -> {
|
default -> {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||||
TagResolver.builder()
|
Template.of("value1", getCommandString()),
|
||||||
.tag("value1", Tag.inserting(Component.text(getCommandString())))
|
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
|
||||||
.tag(
|
|
||||||
"value2",
|
|
||||||
Tag.inserting(Component.text(
|
|
||||||
" create [world[:id]] [<modifier>=<value>]..."))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -542,7 +505,7 @@ public class Area extends SubCommand {
|
|||||||
if (this.worldUtil.isWorld(pa.getWorldName())) {
|
if (this.worldUtil.isWorld(pa.getWorldName())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("setup.setup_world_taken"),
|
TranslatableCaption.of("setup.setup_world_taken"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(pa.getWorldName())))
|
Template.of("value", pa.getWorldName())
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -563,7 +526,7 @@ public class Area extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.error_create"),
|
TranslatableCaption.of("errors.error_create"),
|
||||||
TagResolver.resolver("world", Tag.inserting(Component.text(pa.getWorldName())))
|
Template.of("world", pa.getWorldName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -582,18 +545,12 @@ public class Area extends SubCommand {
|
|||||||
if (pa.getId() == null) {
|
if (pa.getId() == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
|
Template.of("value", getUsage())
|
||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||||
TagResolver.builder()
|
Template.of("value1", getCommandString()),
|
||||||
.tag("value1", Tag.inserting(Component.text(getCommandString())))
|
Template.of("value2", " create [world[:id]] [<modifier>=<value>]...")
|
||||||
.tag(
|
|
||||||
"value2",
|
|
||||||
Tag.inserting(Component.text(
|
|
||||||
" create [world[:id]] [<modifier>=<value>]..."))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -610,7 +567,7 @@ public class Area extends SubCommand {
|
|||||||
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put("area_create_area", pa);
|
metaData.computeIfAbsent(player.getUUID(), missingUUID -> new HashMap<>()).put("area_create_area", pa);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("single.get_position"),
|
TranslatableCaption.of("single.get_position"),
|
||||||
TagResolver.resolver("command", Tag.inserting(Component.text(getCommandString())))
|
Template.of("command", getCommandString())
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -620,10 +577,7 @@ public class Area extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_INFO)) {
|
if (!player.hasPermission(Permission.PERMISSION_AREA_INFO)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_INFO))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_AREA_INFO)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -634,20 +588,15 @@ public class Area extends SubCommand {
|
|||||||
default -> {
|
default -> {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||||
TagResolver.builder()
|
Template.of("value1", getCommandString()),
|
||||||
.tag("value1", Tag.inserting(Component.text(getCommandString())))
|
Template.of("value2", " info [area]")
|
||||||
.tag("value2", Tag.inserting(Component.text(" info [area]")))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("errors.not_valid_plot_world"), Template.of("value", args[1]));
|
||||||
TranslatableCaption.of("errors.not_valid_plot_world"),
|
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||||
}
|
}
|
||||||
@ -671,35 +620,42 @@ public class Area extends SubCommand {
|
|||||||
percent = claimed == 0 ? 0 : 100d * claimed / Integer.MAX_VALUE;
|
percent = claimed == 0 ? 0 : 100d * claimed / Integer.MAX_VALUE;
|
||||||
region = "N/A";
|
region = "N/A";
|
||||||
}
|
}
|
||||||
TagResolver resolver = TagResolver.builder()
|
Template headerTemplate = Template.of(
|
||||||
.tag(
|
"header",
|
||||||
"header",
|
TranslatableCaption.of("info.plot_info_header").getComponent(player)
|
||||||
Tag.inserting(TranslatableCaption.of("info.plot_info_header").toComponent(player))
|
);
|
||||||
)
|
Template nameTemplate = Template.of("name", name);
|
||||||
.tag("name", Tag.inserting(Component.text(name)))
|
Template typeTemplate = Template.of("type", area.getType().name());
|
||||||
.tag("type", Tag.inserting(Component.text(area.getType().name())))
|
Template terrainTemplate = Template.of("terrain", area.getTerrain().name());
|
||||||
.tag("terrain", Tag.inserting(Component.text(area.getTerrain().name())))
|
Template usageTemplate = Template.of("usage", String.format("%.2f", percent));
|
||||||
.tag("usage", Tag.inserting(Component.text(String.format("%.2f", percent))))
|
Template claimedTemplate = Template.of("claimed", String.valueOf(claimed));
|
||||||
.tag("claimed", Tag.inserting(Component.text(claimed)))
|
Template clustersTemplate = Template.of("clusters", String.valueOf(clusters));
|
||||||
.tag("clusters", Tag.inserting(Component.text(clusters)))
|
Template regionTemplate = Template.of("region", region);
|
||||||
.tag("region", Tag.inserting(Component.text(region)))
|
Template generatorTemplate = Template.of("generator", generator);
|
||||||
.tag("generator", Tag.inserting(Component.text(generator)))
|
Template footerTemplate = Template.of(
|
||||||
.tag(
|
"footer",
|
||||||
"footer",
|
TranslatableCaption.of("info.plot_info_footer").getComponent(player)
|
||||||
Tag.inserting(TranslatableCaption.of("info.plot_info_footer").toComponent(player))
|
);
|
||||||
)
|
player.sendMessage(
|
||||||
.build();
|
TranslatableCaption.of("info.area_info_format"),
|
||||||
player.sendMessage(TranslatableCaption.of("info.area_info_format"), resolver);
|
headerTemplate,
|
||||||
|
nameTemplate,
|
||||||
|
typeTemplate,
|
||||||
|
terrainTemplate,
|
||||||
|
usageTemplate,
|
||||||
|
claimedTemplate,
|
||||||
|
clustersTemplate,
|
||||||
|
regionTemplate,
|
||||||
|
generatorTemplate,
|
||||||
|
footerTemplate
|
||||||
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "l", "list" -> {
|
case "l", "list" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_LIST)) {
|
if (!player.hasPermission(Permission.PERMISSION_AREA_LIST)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_LIST))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_AREA_LIST)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -716,10 +672,8 @@ public class Area extends SubCommand {
|
|||||||
default:
|
default:
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
TranslatableCaption.of("commandconfig.command_syntax_extended"),
|
||||||
TagResolver.builder()
|
Template.of("value1", getCommandString()),
|
||||||
.tag("value1", Tag.inserting(Component.text(getCommandString())))
|
Template.of("value2", " list [#]")
|
||||||
.tag("value2", Tag.inserting(Component.text(" list [#]")))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -745,27 +699,37 @@ public class Area extends SubCommand {
|
|||||||
percent = claimed == 0 ? 0 : (double) claimed / Short.MAX_VALUE * Short.MAX_VALUE;
|
percent = claimed == 0 ? 0 : (double) claimed / Short.MAX_VALUE * Short.MAX_VALUE;
|
||||||
region = "N/A";
|
region = "N/A";
|
||||||
}
|
}
|
||||||
Component tooltip = MINI_MESSAGE.deserialize(
|
Template claimedTemplate = Template.of("claimed", String.valueOf(claimed));
|
||||||
TranslatableCaption.of("info.area_list_tooltip").getComponent(player),
|
Template usageTemplate = Template.of("usage", String.format("%.2f", percent) + "%");
|
||||||
TagResolver.builder()
|
Template clustersTemplate = Template.of("clusters", String.valueOf(clusters));
|
||||||
.tag("claimed", Tag.inserting(Component.text(claimed)))
|
Template regionTemplate = Template.of("region", region);
|
||||||
.tag("usage", Tag.inserting(Component.text(String.format("%.2f", percent) + "%")))
|
Template generatorTemplate = Template.of("generator", generator);
|
||||||
.tag("clusters", Tag.inserting(Component.text(clusters)))
|
String tooltip = MINI_MESSAGE.serialize(MINI_MESSAGE
|
||||||
.tag("region", Tag.inserting(Component.text(region)))
|
.parse(
|
||||||
.tag("generator", Tag.inserting(Component.text(generator)))
|
TranslatableCaption.of("info.area_list_tooltip").getComponent(player),
|
||||||
.build()
|
claimedTemplate,
|
||||||
);
|
usageTemplate,
|
||||||
TagResolver resolver = TagResolver.builder()
|
clustersTemplate,
|
||||||
.tag("hover_info", Tag.inserting(tooltip))
|
regionTemplate,
|
||||||
.tag("command_tp", Tag.preProcessParsed("/plot area tp " + name))
|
generatorTemplate
|
||||||
.tag("command_info", Tag.preProcessParsed("/plot area info " + name))
|
));
|
||||||
.tag("number", Tag.inserting(Component.text(i)))
|
Template tooltipTemplate = Template.of("hover_info", tooltip);
|
||||||
.tag("area_name", Tag.inserting(Component.text(name)))
|
Template visitcmdTemplate = Template.of("command_tp", "/plot area tp " + area);
|
||||||
.tag("area_type", Tag.inserting(Component.text(area.getType().name())))
|
Template infocmdTemplate = Template.of("command_info", "/plot area info " + area);
|
||||||
.tag("area_terrain", Tag.inserting(Component.text(area.getTerrain().name())))
|
Template numberTemplate = Template.of("number", String.valueOf(i));
|
||||||
.build();
|
Template nameTemplate = Template.of("area_name", name);
|
||||||
|
Template typeTemplate = Template.of("area_type", area.getType().name());
|
||||||
|
Template terrainTemplate = Template.of("area_terrain", area.getTerrain().name());
|
||||||
caption.set(TranslatableCaption.of("info.area_list_item"));
|
caption.set(TranslatableCaption.of("info.area_list_item"));
|
||||||
caption.setTagResolvers(resolver);
|
caption.setTemplates(
|
||||||
|
tooltipTemplate,
|
||||||
|
visitcmdTemplate,
|
||||||
|
numberTemplate,
|
||||||
|
nameTemplate,
|
||||||
|
typeTemplate,
|
||||||
|
terrainTemplate,
|
||||||
|
infocmdTemplate
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}, "/plot area list", TranslatableCaption.of("list.area_list_header_paged"));
|
}, "/plot area list", TranslatableCaption.of("list.area_list_header_paged"));
|
||||||
return true;
|
return true;
|
||||||
@ -774,10 +738,7 @@ public class Area extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_REGEN)) {
|
if (!player.hasPermission(Permission.PERMISSION_AREA_REGEN)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_REGEN))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_AREA_REGEN)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -789,12 +750,13 @@ public class Area extends SubCommand {
|
|||||||
if (area.getType() != PlotAreaType.PARTIAL) {
|
if (area.getType() != PlotAreaType.PARTIAL) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("single.delete_world_region"),
|
TranslatableCaption.of("single.delete_world_region"),
|
||||||
TagResolver.resolver("world", Tag.inserting(Component.text(area.getWorldName())))
|
Template.of("world", area.getWorldName())
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName()));
|
QueueCoordinator queue = blockQueue.getNewQueue(worldUtil.getWeWorld(area.getWorldName()));
|
||||||
queue.setChunkConsumer(chunk -> AugmentedUtils.generateChunk(
|
queue.setChunkConsumer(chunk -> AugmentedUtils.generate(
|
||||||
|
null,
|
||||||
area.getWorldName(),
|
area.getWorldName(),
|
||||||
chunk.getX(),
|
chunk.getX(),
|
||||||
chunk.getZ(),
|
chunk.getZ(),
|
||||||
@ -809,23 +771,20 @@ public class Area extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_TP)) {
|
if (!player.hasPermission(Permission.PERMISSION_AREA_TP)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AREA_TP))
|
Template.of("node", String.valueOf(Permission.PERMISSION_AREA_TP))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot area tp [area]")))
|
Template.of("value", "/plot area tp [area]")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PlotArea area = this.plotAreaManager.getPlotAreaByString(args[1]);
|
PlotArea area = this.plotAreaManager.getPlotAreaByString(args[1]);
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("errors.not_valid_plot_world"), Template.of("value", args[1]));
|
||||||
TranslatableCaption.of("errors.not_valid_plot_world"),
|
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
|
|
||||||
);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Location center;
|
Location center;
|
||||||
|
@ -35,7 +35,6 @@ 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.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.services.plots.AutoQuery;
|
|
||||||
import com.plotsquared.core.services.plots.AutoService;
|
import com.plotsquared.core.services.plots.AutoService;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
@ -44,9 +43,7 @@ import com.plotsquared.core.util.task.AutoClaimFinishTask;
|
|||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import io.leangen.geantyref.TypeToken;
|
import io.leangen.geantyref.TypeToken;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
@ -112,13 +109,13 @@ public class Auto extends SubCommand {
|
|||||||
if (diff < 0 && grantedPlots < sizeX * sizeZ) {
|
if (diff < 0 && grantedPlots < sizeX * sizeZ) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(diff + grantedPlots)))
|
Template.of("amount", String.valueOf(diff + grantedPlots))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
} else if (diff >= 0 && grantedPlots + diff < sizeX * sizeZ) {
|
} else if (diff >= 0 && grantedPlots + diff < sizeX * sizeZ) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(diff + grantedPlots)))
|
Template.of("amount", String.valueOf(diff + grantedPlots))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@ -130,16 +127,15 @@ public class Auto extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_granted_plot"),
|
TranslatableCaption.of("economy.removed_granted_plot"),
|
||||||
TagResolver.builder()
|
Template.of("usedGrants", String.valueOf(grantedPlots - left)),
|
||||||
.tag("used_grants", Tag.inserting(Component.text(grantedPlots - left)))
|
Template.of("remainingGrants", String.valueOf(left))
|
||||||
.tag("remaining_grants", Tag.inserting(Component.text(left)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
|
Template.of("amount", String.valueOf(player.getAllowedPlots())
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -218,7 +214,7 @@ public class Auto extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
|
Template.of("value", getUsage())
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -241,7 +237,7 @@ public class Auto extends SubCommand {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Auto claim")))
|
Template.of("value", "Auto claim")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -252,14 +248,14 @@ public class Auto extends SubCommand {
|
|||||||
if (!force && mega && !player.hasPermission(Permission.PERMISSION_AUTO_MEGA)) {
|
if (!force && mega && !player.hasPermission(Permission.PERMISSION_AUTO_MEGA)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AUTO_MEGA))
|
Template.of("node", String.valueOf(Permission.PERMISSION_AUTO_MEGA))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
|
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots_num"),
|
TranslatableCaption.of("permission.cant_claim_more_plots_num"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Claim.MAX_AUTO_AREA)))
|
Template.of("amount", String.valueOf(Settings.Claim.MAX_AUTO_AREA))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -277,10 +273,8 @@ public class Auto extends SubCommand {
|
|||||||
if (!plotarea.hasSchematic(schematic)) {
|
if (!plotarea.hasSchematic(schematic)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("schematics.schematic_invalid_named"),
|
TranslatableCaption.of("schematics.schematic_invalid_named"),
|
||||||
TagResolver.builder()
|
Template.of("schemname", schematic),
|
||||||
.tag("schemname", Tag.inserting(Component.text(schematic)))
|
Template.of("reason", "non-existent")
|
||||||
.tag("reason", Tag.inserting(Component.text("non-existent")))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -289,20 +283,17 @@ public class Auto extends SubCommand {
|
|||||||
) && !player.hasPermission("plots.admin.command.schematic")) {
|
) && !player.hasPermission("plots.admin.command.schematic")) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.claim.%s0")))
|
Template.of("node", "plots.claim.%s0")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.econHandler != null && plotarea.useEconomy() && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) {
|
if (this.econHandler != null && plotarea.useEconomy()) {
|
||||||
PlotExpression costExp = plotarea.getPrices().get("claim");
|
PlotExpression costExp = plotarea.getPrices().get("claim");
|
||||||
PlotExpression mergeCostExp = plotarea.getPrices().get("merge");
|
|
||||||
int size = sizeX * sizeZ;
|
|
||||||
double mergeCost = size <= 1 || mergeCostExp == null ? 0d : mergeCostExp.evaluate(size);
|
|
||||||
double cost = costExp.evaluate(Settings.Limit.GLOBAL ?
|
double cost = costExp.evaluate(Settings.Limit.GLOBAL ?
|
||||||
player.getPlotCount() :
|
player.getPlotCount() :
|
||||||
player.getPlotCount(plotarea.getWorldName()));
|
player.getPlotCount(plotarea.getWorldName()));
|
||||||
cost = size * cost + mergeCost;
|
cost = (sizeX * sizeZ) * cost;
|
||||||
if (cost > 0d) {
|
if (cost > 0d) {
|
||||||
if (!this.econHandler.isSupported()) {
|
if (!this.econHandler.isSupported()) {
|
||||||
player.sendMessage(TranslatableCaption.of("economy.vault_or_consumer_null"));
|
player.sendMessage(TranslatableCaption.of("economy.vault_or_consumer_null"));
|
||||||
@ -311,26 +302,21 @@ public class Auto extends SubCommand {
|
|||||||
if (!force && this.econHandler.getMoney(player) < cost) {
|
if (!force && this.econHandler.getMoney(player) < cost) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.cannot_afford_plot"),
|
TranslatableCaption.of("economy.cannot_afford_plot"),
|
||||||
TagResolver.builder()
|
Template.of("money", this.econHandler.format(cost)),
|
||||||
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
|
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
|
||||||
.tag(
|
|
||||||
"balance",
|
|
||||||
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player))))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.econHandler.withdrawMoney(player, cost);
|
this.econHandler.withdrawMoney(player, cost);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_balance"),
|
TranslatableCaption.of("economy.removed_balance"),
|
||||||
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
|
Template.of("money", this.econHandler.format(cost))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Plot> plots = this.servicePipeline
|
List<Plot> plots = this.servicePipeline
|
||||||
.pump(new AutoQuery(player, null, sizeX, sizeZ, plotarea))
|
.pump(new AutoService.AutoQuery(player, null, sizeX, sizeZ, plotarea))
|
||||||
.through(AutoService.class)
|
.through(AutoService.class)
|
||||||
.getResult();
|
.getResult();
|
||||||
|
|
||||||
@ -358,7 +344,7 @@ public class Auto extends SubCommand {
|
|||||||
if (!force && mergeEvent.getEventResult() == Result.DENY) {
|
if (!force && mergeEvent.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Auto merge")))
|
Template.of("value", "Auto merge")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -68,7 +66,7 @@ public final class Backup extends Command {
|
|||||||
private static boolean sendMessage(PlotPlayer<?> player) {
|
private static boolean sendMessage(PlotPlayer<?> player) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot backup <save | list | load>")))
|
Template.of("value", "/plot backup <save | list | load>")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -136,44 +134,33 @@ public final class Backup extends Command {
|
|||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_unowned").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_unowned").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
||||||
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
||||||
} else if (plot.isMerged()) {
|
} else if (plot.isMerged()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_merged").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_merged").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BACKUP_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BACKUP_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final BackupProfile backupProfile = Objects.requireNonNull(this.backupManager.getProfile(plot));
|
final BackupProfile backupProfile = Objects.requireNonNull(this.backupManager.getProfile(plot));
|
||||||
if (backupProfile instanceof NullBackupProfile) {
|
if (backupProfile instanceof NullBackupProfile) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver(
|
Template.of("plot", TranslatableCaption.of("generic.generic_other").getComponent(player))
|
||||||
"plot", Tag.inserting(TranslatableCaption
|
|
||||||
.of("generic.generic_other")
|
|
||||||
.toComponent(player))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
backupProfile.createBackup().whenComplete((backup, throwable) -> {
|
backupProfile.createBackup().whenComplete((backup, throwable) -> {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_save_failed"),
|
TranslatableCaption.of("backups.backup_save_failed"),
|
||||||
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
|
Template.of("reason", throwable.getMessage())
|
||||||
);
|
);
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
} else {
|
} else {
|
||||||
@ -200,64 +187,49 @@ public final class Backup extends Command {
|
|||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_unowned").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_unowned").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else if (plot.isMerged()) {
|
} else if (plot.isMerged()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_merged").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_merged").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
||||||
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
||||||
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BACKUP_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BACKUP_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final BackupProfile backupProfile = Objects.requireNonNull(this.backupManager.getProfile(plot));
|
final BackupProfile backupProfile = Objects.requireNonNull(this.backupManager.getProfile(plot));
|
||||||
if (backupProfile instanceof NullBackupProfile) {
|
if (backupProfile instanceof NullBackupProfile) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_other").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_other").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
backupProfile.listBackups().whenComplete((backups, throwable) -> {
|
backupProfile.listBackups().whenComplete((backups, throwable) -> {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_list_failed"),
|
TranslatableCaption.of("backups.backup_list_failed"),
|
||||||
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
|
Template.of("reason", throwable.getMessage())
|
||||||
);
|
);
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_list_header"),
|
TranslatableCaption.of("backups.backup_list_header"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toCommaSeparatedString())))
|
Template.of("plot", plot.getId().toCommaSeparatedString())
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < backups.size(); i++) {
|
for (int i = 0; i < backups.size(); i++) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_list_entry"),
|
TranslatableCaption.of("backups.backup_list_entry"),
|
||||||
TagResolver.builder()
|
Template.of("number", Integer.toString(i + 1)),
|
||||||
.tag("number", Tag.inserting(Component.text(i + 1)))
|
Template.of("value", DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.ofInstant(
|
||||||
.tag(
|
Instant.ofEpochMilli(backups.get(i).getCreationTime()),
|
||||||
"value",
|
ZoneId.systemDefault()
|
||||||
Tag.inserting(Component.text(DateTimeFormatter.RFC_1123_DATE_TIME.format(
|
)))
|
||||||
ZonedDateTime.ofInstant(
|
|
||||||
Instant.ofEpochMilli(backups.get(i).getCreationTime()),
|
|
||||||
ZoneId.systemDefault()
|
|
||||||
))))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
@ -285,31 +257,24 @@ public final class Backup extends Command {
|
|||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_unowned").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_unowned").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else if (plot.isMerged()) {
|
} else if (plot.isMerged()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_merged").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_merged").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
||||||
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
||||||
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_BACKUP_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_ADMIN_BACKUP_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
} else if (args.length == 0) {
|
} else if (args.length == 0) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Usage: /plot backup save/list/load")))
|
Template.of("value", "Usage: /plot backup save/list/load")
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final int number;
|
final int number;
|
||||||
@ -318,7 +283,7 @@ public final class Backup extends Command {
|
|||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("invalid.not_a_number"),
|
TranslatableCaption.of("invalid.not_a_number"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -326,27 +291,23 @@ public final class Backup extends Command {
|
|||||||
if (backupProfile instanceof NullBackupProfile) {
|
if (backupProfile instanceof NullBackupProfile) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(
|
Template.of("plot", TranslatableCaption.of("generic.generic_other").getComponent(player))
|
||||||
TranslatableCaption.of("generic.generic_other").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
backupProfile.listBackups().whenComplete((backups, throwable) -> {
|
backupProfile.listBackups().whenComplete((backups, throwable) -> {
|
||||||
if (throwable != null) {
|
if (throwable != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_load_failure"),
|
TranslatableCaption.of("backups.backup_load_failure"),
|
||||||
TagResolver.resolver("reason", Tag.inserting(Component.text(throwable.getMessage())))
|
Template.of("reason", throwable.getMessage())
|
||||||
);
|
);
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
} else {
|
} else {
|
||||||
if (number < 1 || number > backups.size()) {
|
if (number < 1 || number > backups.size()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver(
|
Template.of(
|
||||||
"plot",
|
"plot",
|
||||||
Tag.inserting(TranslatableCaption
|
TranslatableCaption.of("generic.generic_invalid_choice").getComponent(player)
|
||||||
.of("generic.generic_invalid_choice")
|
|
||||||
.toComponent(player))
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@ -356,11 +317,9 @@ public final class Backup extends Command {
|
|||||||
.exists(backup.getFile())) {
|
.exists(backup.getFile())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_impossible"),
|
TranslatableCaption.of("backups.backup_impossible"),
|
||||||
TagResolver.resolver(
|
Template.of(
|
||||||
"plot",
|
"plot",
|
||||||
Tag.inserting(TranslatableCaption
|
TranslatableCaption.of("generic.generic_invalid_choice").getComponent(player)
|
||||||
.of("generic.generic_invalid_choice")
|
|
||||||
.toComponent(player))
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@ -370,10 +329,7 @@ public final class Backup extends Command {
|
|||||||
if (error != null) {
|
if (error != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("backups.backup_load_failure"),
|
TranslatableCaption.of("backups.backup_load_failure"),
|
||||||
TagResolver.resolver(
|
Template.of("reason", error.getMessage())
|
||||||
"reason",
|
|
||||||
Tag.inserting(Component.text(error.getMessage()))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(TranslatableCaption.of("backups.backup_load_success"));
|
player.sendMessage(TranslatableCaption.of("backups.backup_load_success"));
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.core.command;
|
package com.plotsquared.core.command;
|
||||||
|
|
||||||
import com.plotsquared.core.configuration.caption.StaticCaption;
|
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
@ -26,9 +25,7 @@ import com.plotsquared.core.util.StringMan;
|
|||||||
import com.sk89q.worldedit.command.util.SuggestionHelper;
|
import com.sk89q.worldedit.command.util.SuggestionHelper;
|
||||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||||
import com.sk89q.worldedit.world.biome.BiomeTypes;
|
import com.sk89q.worldedit.world.biome.BiomeTypes;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -50,13 +47,16 @@ public class Biome extends SetCommand {
|
|||||||
} catch (final Exception ignore) {
|
} catch (final Exception ignore) {
|
||||||
}
|
}
|
||||||
if (biome == null) {
|
if (biome == null) {
|
||||||
String separator = TranslatableCaption.of("blocklist.block_list_separator").getComponent(player);
|
String biomes = StringMan.join(
|
||||||
|
BiomeType.REGISTRY.values(),
|
||||||
|
MINI_MESSAGE.serialize(MINI_MESSAGE.parse(TranslatableCaption
|
||||||
|
.of("blocklist.block_list_separator")
|
||||||
|
.getComponent(player)))
|
||||||
|
);
|
||||||
player.sendMessage(TranslatableCaption.of("biome.need_biome"));
|
player.sendMessage(TranslatableCaption.of("biome.need_biome"));
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
StaticCaption.of(
|
TranslatableCaption.of("commandconfig.subcommand_set_options_header"),
|
||||||
TranslatableCaption.of("commandconfig.subcommand_set_options_header_only").getComponent(player)
|
Template.of("values", biomes)
|
||||||
+ StringMan.join(BiomeType.REGISTRY.values(), separator)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ public class Biome extends SetCommand {
|
|||||||
plot.removeRunning();
|
plot.removeRunning();
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("biome.biome_set_to"),
|
TranslatableCaption.of("biome.biome_set_to"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(value.toLowerCase())))
|
Template.of("value", value.toLowerCase())
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
|
@ -21,9 +21,8 @@ package com.plotsquared.core.command;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.core.PlotSquared;
|
import com.plotsquared.core.PlotSquared;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.events.PlayerBuyPlotEvent;
|
import com.plotsquared.core.events.PlotFlagRemoveEvent;
|
||||||
import com.plotsquared.core.events.Result;
|
import com.plotsquared.core.events.Result;
|
||||||
import com.plotsquared.core.player.OfflinePlotPlayer;
|
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
@ -33,9 +32,7 @@ import com.plotsquared.core.util.EconHandler;
|
|||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -87,66 +84,53 @@ public class Buy extends Command {
|
|||||||
checkTrue(
|
checkTrue(
|
||||||
player.getPlotCount() + plots.size() <= player.getAllowedPlots(),
|
player.getPlotCount() + plots.size() <= player.getAllowedPlots(),
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
|
Template.of("amount", String.valueOf(player.getAllowedPlots()))
|
||||||
);
|
);
|
||||||
double priceFlag = plot.getFlag(PriceFlag.class);
|
double price = plot.getFlag(PriceFlag.class);
|
||||||
if (priceFlag <= 0) {
|
if (price <= 0) {
|
||||||
throw new CommandException(TranslatableCaption.of("economy.not_for_sale"));
|
throw new CommandException(TranslatableCaption.of("economy.not_for_sale"));
|
||||||
}
|
}
|
||||||
checkTrue(
|
checkTrue(
|
||||||
this.econHandler.isSupported(),
|
this.econHandler.isSupported(),
|
||||||
TranslatableCaption.of("economy.vault_or_consumer_null")
|
TranslatableCaption.of("economy.vault_or_consumer_null")
|
||||||
);
|
);
|
||||||
|
checkTrue(
|
||||||
PlayerBuyPlotEvent event = this.eventDispatcher.callPlayerBuyPlot(player, plot, priceFlag);
|
this.econHandler.getMoney(player) >= price,
|
||||||
if (event.getEventResult() == Result.DENY) {
|
TranslatableCaption.of("economy.cannot_afford_plot"),
|
||||||
throw new CommandException(TranslatableCaption.of("economy.cannot_buy_blocked"));
|
Template.of("money", this.econHandler.format(price)),
|
||||||
}
|
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
|
||||||
|
);
|
||||||
double price = event.getEventResult() == Result.FORCE ? 0 : event.price();
|
|
||||||
if (this.econHandler.getMoney(player) < price) {
|
|
||||||
throw new CommandException(
|
|
||||||
TranslatableCaption.of("economy.cannot_afford_plot"),
|
|
||||||
TagResolver.builder()
|
|
||||||
.tag("money", Tag.inserting(Component.text(this.econHandler.format(price))))
|
|
||||||
.tag("balance", Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(player)))))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
this.econHandler.withdrawMoney(player, price);
|
this.econHandler.withdrawMoney(player, price);
|
||||||
// Failure
|
// Failure
|
||||||
// Success
|
// Success
|
||||||
confirm.run(this, () -> {
|
confirm.run(this, () -> {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_balance"),
|
TranslatableCaption.of("economy.removed_balance"),
|
||||||
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
|
Template.of("money", this.econHandler.format(price))
|
||||||
);
|
);
|
||||||
|
|
||||||
OfflinePlotPlayer previousOwner = PlotSquared.platform().playerManager().getOfflinePlayer(plot.getOwnerAbs());
|
this.econHandler.depositMoney(PlotSquared.platform().playerManager().getOfflinePlayer(plot.getOwnerAbs()), price);
|
||||||
this.econHandler.depositMoney(previousOwner, price);
|
|
||||||
|
|
||||||
PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwnerAbs());
|
PlotPlayer<?> owner = PlotSquared.platform().playerManager().getPlayerIfExists(plot.getOwnerAbs());
|
||||||
if (owner != null) {
|
if (owner != null) {
|
||||||
owner.sendMessage(
|
owner.sendMessage(
|
||||||
TranslatableCaption.of("economy.plot_sold"),
|
TranslatableCaption.of("economy.plot_sold"),
|
||||||
TagResolver.builder()
|
Template.of("plot", plot.getId().toString()),
|
||||||
.tag("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("player", player.getName()),
|
||||||
.tag("player", Tag.inserting(Component.text(player.getName())))
|
Template.of("price", this.econHandler.format(price))
|
||||||
.tag("price", Tag.inserting(Component.text(this.econHandler.format(price))))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(PriceFlag.class);
|
PlotFlag<?, ?> plotFlag = plot.getFlagContainer().getFlag(PriceFlag.class);
|
||||||
if (this.eventDispatcher.callFlagRemove(plotFlag, plot).getEventResult() != Result.DENY) {
|
PlotFlagRemoveEvent event = this.eventDispatcher.callFlagRemove(plotFlag, plot);
|
||||||
plot.removeFlag(plotFlag);
|
if (event.getEventResult() != Result.DENY) {
|
||||||
|
plot.removeFlag(event.getFlag());
|
||||||
}
|
}
|
||||||
plot.setOwner(player.getUUID());
|
plot.setOwner(player.getUUID());
|
||||||
plot.getPlotModificationManager().setSign(player.getName());
|
plot.getPlotModificationManager().setSign(player.getName());
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("working.claimed"),
|
TranslatableCaption.of("working.claimed"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
this.eventDispatcher.callPostPlayerBuyPlot(player, previousOwner, plot, price);
|
|
||||||
whenDone.run(Buy.this, CommandResult.SUCCESS);
|
whenDone.run(Buy.this, CommandResult.SUCCESS);
|
||||||
}, () -> {
|
}, () -> {
|
||||||
this.econHandler.depositMoney(player, price);
|
this.econHandler.depositMoney(player, price);
|
||||||
|
@ -29,10 +29,7 @@ import com.plotsquared.core.plot.flag.implementations.HostileCapFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.MiscCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.MiscCapFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MobCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.MobCapFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.ComponentLike;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import static com.plotsquared.core.util.entity.EntityCategories.CAP_ANIMAL;
|
import static com.plotsquared.core.util.entity.EntityCategories.CAP_ANIMAL;
|
||||||
import static com.plotsquared.core.util.entity.EntityCategories.CAP_ENTITY;
|
import static com.plotsquared.core.util.entity.EntityCategories.CAP_ENTITY;
|
||||||
@ -56,7 +53,7 @@ public class Caps extends SubCommand {
|
|||||||
if (!plot.isAdded(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_CAPS_OTHER)) {
|
if (!plot.isAdded(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_CAPS_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_CAPS_OTHER))
|
Template.of("node", String.valueOf(Permission.PERMISSION_ADMIN_CAPS_OTHER))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -83,17 +80,15 @@ public class Caps extends SubCommand {
|
|||||||
final int current = countedEntities[type];
|
final int current = countedEntities[type];
|
||||||
final int max = plot.getFlag(capFlag);
|
final int max = plot.getFlag(capFlag);
|
||||||
final String percentage = String.format("%.1f", 100 * ((float) current / max));
|
final String percentage = String.format("%.1f", 100 * ((float) current / max));
|
||||||
ComponentLike maxBeautified = max >= Integer.MAX_VALUE
|
String maxBeautified = max >= Integer.MAX_VALUE
|
||||||
? TranslatableCaption.of("info.infinite").toComponent(player)
|
? TranslatableCaption.of("info.infinite").getComponent(player)
|
||||||
: Component.text(max);
|
: String.valueOf(max);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("info.plot_caps_format"),
|
TranslatableCaption.of("info.plot_caps_format"),
|
||||||
TagResolver.builder()
|
Template.of("cap", name),
|
||||||
.tag("cap", Tag.inserting(Component.text(name)))
|
Template.of("current", String.valueOf(current)),
|
||||||
.tag("current", Tag.inserting(Component.text(current)))
|
Template.of("limit", maxBeautified),
|
||||||
.tag("limit", Tag.inserting(maxBeautified))
|
Template.of("percentage", percentage)
|
||||||
.tag("percentage", Tag.inserting(Component.text(percentage)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
54
Core/src/main/java/com/plotsquared/core/command/Chat.java
Normal file
54
Core/src/main/java/com/plotsquared/core/command/Chat.java
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* PlotSquared, a land and world management plugin for Minecraft.
|
||||||
|
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||||
|
* Copyright (C) IntellectualSites team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.plotsquared.core.command;
|
||||||
|
|
||||||
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated In favor of "/plot toggle chat" and
|
||||||
|
* scheduled for removal within the next major release.
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.0.0")
|
||||||
|
@CommandDeclaration(command = "chat",
|
||||||
|
usage = "/plot chat",
|
||||||
|
permission = "plots.chat",
|
||||||
|
category = CommandCategory.CHAT,
|
||||||
|
requiredType = RequiredType.PLAYER)
|
||||||
|
public class Chat extends SubCommand {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||||
|
PlotArea area = player.getPlotAreaAbs();
|
||||||
|
check(area, TranslatableCaption.of("errors.not_in_plot_world"));
|
||||||
|
player.sendMessage(
|
||||||
|
TranslatableCaption.of("errors.deprecated_commands"),
|
||||||
|
Template.of("replacement", "/plot toggle chat")
|
||||||
|
);
|
||||||
|
if (player.getPlotAreaAbs().isForcingPlotChat()) {
|
||||||
|
player.sendMessage(TranslatableCaption.of("chat.plot_chat_forced"));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
MainCommand.getInstance().toggle.chat(this, player, args, null, null);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -37,9 +37,7 @@ import com.plotsquared.core.util.EconHandler;
|
|||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.PlotExpression;
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
@ -83,7 +81,7 @@ public class Claim extends SubCommand {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Claim")))
|
Template.of("value", "Claim")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -102,14 +100,14 @@ public class Claim extends SubCommand {
|
|||||||
if (grants <= 0) {
|
if (grants <= 0) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(grants)))
|
Template.of("amount", String.valueOf(grants))
|
||||||
);
|
);
|
||||||
metaDataAccess.remove();
|
metaDataAccess.remove();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
|
Template.of("amount", String.valueOf(player.getAllowedPlots()))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -124,10 +122,8 @@ public class Claim extends SubCommand {
|
|||||||
if (!area.hasSchematic(schematic)) {
|
if (!area.hasSchematic(schematic)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("schematics.schematic_invalid_named"),
|
TranslatableCaption.of("schematics.schematic_invalid_named"),
|
||||||
TagResolver.builder()
|
Template.of("schemname", schematic),
|
||||||
.tag("schemname", Tag.inserting(Component.text(schematic)))
|
Template.of("reason", "non-existent")
|
||||||
.tag("reason", Tag.inserting(Component.text("non-existent")))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLAIM_SCHEMATIC
|
if (!player.hasPermission(Permission.PERMISSION_CLAIM_SCHEMATIC
|
||||||
@ -136,12 +132,12 @@ public class Claim extends SubCommand {
|
|||||||
) && !force) {
|
) && !force) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_schematic_permission"),
|
TranslatableCaption.of("permission.no_schematic_permission"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(schematic)))
|
Template.of("value", schematic)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.econHandler.isEnabled(area) && !force && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) {
|
if (this.econHandler.isEnabled(area) && !force) {
|
||||||
PlotExpression costExr = area.getPrices().get("claim");
|
PlotExpression costExr = area.getPrices().get("claim");
|
||||||
double cost = costExr.evaluate(currentPlots);
|
double cost = costExr.evaluate(currentPlots);
|
||||||
if (cost > 0d) {
|
if (cost > 0d) {
|
||||||
@ -152,28 +148,16 @@ public class Claim extends SubCommand {
|
|||||||
if (this.econHandler.getMoney(player) < cost) {
|
if (this.econHandler.getMoney(player) < cost) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.cannot_afford_plot"),
|
TranslatableCaption.of("economy.cannot_afford_plot"),
|
||||||
TagResolver.builder()
|
Template.of("money", this.econHandler.format(cost)),
|
||||||
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
|
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
|
||||||
.tag(
|
|
||||||
"balance",
|
|
||||||
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(
|
|
||||||
player))))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.econHandler.withdrawMoney(player, cost);
|
this.econHandler.withdrawMoney(player, cost);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_balance"),
|
TranslatableCaption.of("economy.removed_balance"),
|
||||||
TagResolver.builder()
|
Template.of("money", this.econHandler.format(cost)),
|
||||||
.tag("money", Tag.inserting(Component.text(this.econHandler.format(cost))))
|
Template.of("balance", this.econHandler.format(this.econHandler.getMoney(player)))
|
||||||
.tag(
|
|
||||||
"balance",
|
|
||||||
Tag.inserting(Component.text(this.econHandler.format(this.econHandler.getMoney(
|
|
||||||
player))))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -185,15 +169,13 @@ public class Claim extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_granted_plot"),
|
TranslatableCaption.of("economy.removed_granted_plot"),
|
||||||
TagResolver.builder()
|
Template.of("usedGrants", String.valueOf((grants - 1))),
|
||||||
.tag("used_grants", Tag.inserting(Component.text(grants - 1)))
|
Template.of("remainingGrants", String.valueOf(grants))
|
||||||
.tag("remaining_grants", Tag.inserting(Component.text(grants)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
int border = area.getBorder(false);
|
int border = area.getBorder();
|
||||||
if (border != Integer.MAX_VALUE && plot.getDistanceFromOrigin() > border && !force) {
|
if (border != Integer.MAX_VALUE && plot.getDistanceFromOrigin() > border && !force) {
|
||||||
player.sendMessage(TranslatableCaption.of("border.denied"));
|
player.sendMessage(TranslatableCaption.of("border.denied"));
|
||||||
return false;
|
return false;
|
||||||
@ -214,7 +196,7 @@ public class Claim extends SubCommand {
|
|||||||
if (mergeEvent.getEventResult() == Result.DENY) {
|
if (mergeEvent.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Auto merge on claim")))
|
Template.of("value", "Auto merge on claim")
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (plot.getPlotModificationManager().autoMerge(
|
if (plot.getPlotModificationManager().autoMerge(
|
||||||
|
@ -35,9 +35,7 @@ import com.plotsquared.core.util.EventDispatcher;
|
|||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@ -80,7 +78,7 @@ public class Clear extends Command {
|
|||||||
if (eventResult == Result.DENY) {
|
if (eventResult == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Clear")))
|
Template.of("value", "Clear")
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(true);
|
return CompletableFuture.completedFuture(true);
|
||||||
}
|
}
|
||||||
@ -107,36 +105,35 @@ public class Clear extends Command {
|
|||||||
}
|
}
|
||||||
BackupManager.backup(player, plot, () -> {
|
BackupManager.backup(player, plot, () -> {
|
||||||
final long start = System.currentTimeMillis();
|
final long start = System.currentTimeMillis();
|
||||||
boolean result = plot.getPlotModificationManager().clear(true, false, player, () -> TaskManager.runTask(() -> {
|
boolean result = plot.getPlotModificationManager().clear(true, false, player, () -> {
|
||||||
plot.removeRunning();
|
TaskManager.runTask(() -> {
|
||||||
// If the state changes, then mark it as no longer done
|
plot.removeRunning();
|
||||||
if (DoneFlag.isDone(plot)) {
|
// If the state changes, then mark it as no longer done
|
||||||
PlotFlag<?, ?> plotFlag =
|
if (DoneFlag.isDone(plot)) {
|
||||||
plot.getFlagContainer().getFlag(DoneFlag.class);
|
PlotFlag<?, ?> plotFlag =
|
||||||
PlotFlagRemoveEvent event = this.eventDispatcher
|
plot.getFlagContainer().getFlag(DoneFlag.class);
|
||||||
.callFlagRemove(plotFlag, plot);
|
PlotFlagRemoveEvent event = this.eventDispatcher
|
||||||
if (event.getEventResult() != Result.DENY) {
|
.callFlagRemove(plotFlag, plot);
|
||||||
plot.removeFlag(event.getFlag());
|
if (event.getEventResult() != Result.DENY) {
|
||||||
|
plot.removeFlag(event.getFlag());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
if (!plot.getFlag(AnalysisFlag.class).isEmpty()) {
|
||||||
if (!plot.getFlag(AnalysisFlag.class).isEmpty()) {
|
PlotFlag<?, ?> plotFlag =
|
||||||
PlotFlag<?, ?> plotFlag =
|
plot.getFlagContainer().getFlag(AnalysisFlag.class);
|
||||||
plot.getFlagContainer().getFlag(AnalysisFlag.class);
|
PlotFlagRemoveEvent event = this.eventDispatcher
|
||||||
PlotFlagRemoveEvent event = this.eventDispatcher
|
.callFlagRemove(plotFlag, plot);
|
||||||
.callFlagRemove(plotFlag, plot);
|
if (event.getEventResult() != Result.DENY) {
|
||||||
if (event.getEventResult() != Result.DENY) {
|
plot.removeFlag(event.getFlag());
|
||||||
plot.removeFlag(event.getFlag());
|
}
|
||||||
}
|
}
|
||||||
}
|
player.sendMessage(
|
||||||
player.sendMessage(
|
TranslatableCaption.of("working.clearing_done"),
|
||||||
TranslatableCaption.of("working.clearing_done"),
|
Template.of("amount", String.valueOf(System.currentTimeMillis() - start)),
|
||||||
TagResolver.builder()
|
Template.of("plot", plot.getId().toString())
|
||||||
.tag("amount", Tag.inserting(Component.text(System.currentTimeMillis() - start)))
|
);
|
||||||
.tag("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
});
|
||||||
.build()
|
});
|
||||||
);
|
|
||||||
this.eventDispatcher.callPostPlotClear(player, plot);
|
|
||||||
}));
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
|
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
|
||||||
} else {
|
} else {
|
||||||
|
@ -32,26 +32,19 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.PlotCluster;
|
import com.plotsquared.core.plot.PlotCluster;
|
||||||
import com.plotsquared.core.plot.PlotId;
|
import com.plotsquared.core.plot.PlotId;
|
||||||
import com.plotsquared.core.util.ComponentHelper;
|
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
|
||||||
import net.kyori.adventure.text.format.Style;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
@CommandDeclaration(command = "cluster",
|
@CommandDeclaration(command = "cluster",
|
||||||
aliases = "clusters",
|
aliases = "clusters",
|
||||||
@ -60,39 +53,36 @@ import java.util.stream.Stream;
|
|||||||
permission = "plots.cluster")
|
permission = "plots.cluster")
|
||||||
public class Cluster extends SubCommand {
|
public class Cluster extends SubCommand {
|
||||||
|
|
||||||
private static final Component[] AVAILABLE_ARGS = Stream.of(
|
|
||||||
"list", "create", "delete", "resize", "invite", "kick", "leave", "helpers", "tp", "sethome"
|
|
||||||
).map(s -> Component.text(s).style(Style.style(NamedTextColor.DARK_AQUA))).toArray(Component[]::new);
|
|
||||||
private static final Component SEPARATOR = Component.text(", ").style(Style.style(NamedTextColor.GRAY));
|
|
||||||
|
|
||||||
// list, create, delete, resize, invite, kick, leave, helpers, tp, sethome
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
public boolean onCommand(PlotPlayer<?> player, String[] args) {
|
||||||
|
|
||||||
|
// list, create, delete, resize, invite, kick, leave, helpers, tp, sethome
|
||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
// return arguments
|
// return arguments
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_available_args"),
|
TranslatableCaption.of("cluster.cluster_available_args"),
|
||||||
TagResolver.resolver("list", Tag.inserting(ComponentHelper.join(AVAILABLE_ARGS, SEPARATOR)))
|
Template.of(
|
||||||
|
"list",
|
||||||
|
"<dark_aqua>list</dark_aqua><gray>, </gray><dark_aqua>create</dark_aqua><gray>, </gray><dark_aqua>delete</dark_aqua><gray>, </gray><dark_aqua>resize</dark_aqua><gray>, </gray><dark_aqua>invite</dark_aqua><gray>, </gray><dark_aqua>kick</dark_aqua><gray>, </gray><dark_aqua>leave</dark_aqua><gray>, </gray><dark_aqua>members</dark_aqua><gray>, </gray><dark_aqua>info</dark_aqua><gray>, </gray><dark_aqua>tp</dark_aqua><gray>, </gray><dark_aqua>sethome</dark_aqua>"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String sub = args[0].toLowerCase();
|
String sub = args[0].toLowerCase();
|
||||||
switch (sub) {
|
switch (sub) {
|
||||||
case "l", "list" -> {
|
case "l":
|
||||||
|
case "list": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LIST)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LIST)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_LIST))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_LIST)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 1) {
|
if (args.length != 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster list")))
|
Template.of("value", "/plot cluster list")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -104,7 +94,7 @@ public class Cluster extends SubCommand {
|
|||||||
Set<PlotCluster> clusters = area.getClusters();
|
Set<PlotCluster> clusters = area.getClusters();
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_list_heading"),
|
TranslatableCaption.of("cluster.cluster_list_heading"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(clusters.size())))
|
Template.of("amount", clusters.size() + "")
|
||||||
);
|
);
|
||||||
for (PlotCluster cluster : clusters) {
|
for (PlotCluster cluster : clusters) {
|
||||||
// Ignore unmanaged clusters
|
// Ignore unmanaged clusters
|
||||||
@ -112,35 +102,33 @@ public class Cluster extends SubCommand {
|
|||||||
if (player.getUUID().equals(cluster.owner)) {
|
if (player.getUUID().equals(cluster.owner)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_list_element_owner"),
|
TranslatableCaption.of("cluster.cluster_list_element_owner"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
|
Template.of("cluster", name)
|
||||||
);
|
);
|
||||||
} else if (cluster.helpers.contains(player.getUUID())) {
|
} else if (cluster.helpers.contains(player.getUUID())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_list_element_helpers"),
|
TranslatableCaption.of("cluster.cluster_list_element_helpers"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
|
Template.of("cluster", name)
|
||||||
);
|
);
|
||||||
} else if (cluster.invited.contains(player.getUUID())) {
|
} else if (cluster.invited.contains(player.getUUID())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_list_element_invited"),
|
TranslatableCaption.of("cluster.cluster_list_element_invited"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(name)))
|
Template.of("cluster", name)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_list_element"),
|
TranslatableCaption.of("cluster.cluster_list_element"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.toString())))
|
Template.of("cluster", cluster.toString())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "c", "create" -> {
|
case "c":
|
||||||
|
case "create": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_CREATE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_CREATE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_CREATE))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_CREATE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -152,10 +140,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (args.length != 4) {
|
if (args.length != 4) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot cluster create <name> <id-bot> <id-top>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot cluster create <name> <id-bot> <id-top>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -165,7 +150,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (currentClusters >= player.getAllowedPlots()) {
|
if (currentClusters >= player.getAllowedPlots()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_clusters"),
|
TranslatableCaption.of("permission.cant_claim_more_clusters"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
|
Template.of("amount", String.valueOf(player.getAllowedPlots()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
PlotId pos1;
|
PlotId pos1;
|
||||||
@ -183,7 +168,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (area.getCluster(name) != null) {
|
if (area.getCluster(name) != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("alias.alias_is_taken"),
|
TranslatableCaption.of("alias.alias_is_taken"),
|
||||||
TagResolver.resolver("alias", Tag.inserting(Component.text(name)))
|
Template.of("alias", name)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -197,7 +182,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (cluster != null) {
|
if (cluster != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_intersection"),
|
TranslatableCaption.of("cluster.cluster_intersection"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
|
Template.of("cluster", cluster.getName())
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -205,7 +190,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!area.contains(pos1) || !area.contains(pos2)) {
|
if (!area.contains(pos1) || !area.contains(pos2)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_outside"),
|
TranslatableCaption.of("cluster.cluster_outside"),
|
||||||
TagResolver.resolver("area", Tag.inserting(Component.text(area.toString())))
|
Template.of("area", String.valueOf(area))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -217,10 +202,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!plot.isOwner(uuid)) {
|
if (!plot.isOwner(uuid)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_CREATE_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_CREATE_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -242,10 +224,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (current + cluster.getArea() > allowed) {
|
if (current + cluster.getArea() > allowed) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_SIZE + "." + (current + cluster.getArea()))
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_CLUSTER_SIZE + "." + (current + cluster.getArea())))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -264,25 +243,24 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_created"),
|
TranslatableCaption.of("cluster.cluster_created"),
|
||||||
TagResolver.resolver("name", Tag.inserting(Component.text(name)))
|
Template.of("name", name)
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "disband", "del", "delete" -> {
|
case "disband":
|
||||||
|
case "del":
|
||||||
|
case "delete": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_DELETE))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_DELETE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 1 && args.length != 2) {
|
if (args.length != 1 && args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster delete [name]")))
|
Template.of("value", "/plot cluster delete [name]")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -297,7 +275,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (cluster == null) {
|
if (cluster == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
|
Template.of("cluster", args[1])
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -312,36 +290,31 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE_OTHER)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_DELETE_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_DELETE_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBFunc.delete(cluster);
|
DBFunc.delete(cluster);
|
||||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_deleted"), TagResolver.resolver(
|
player.sendMessage(TranslatableCaption.of("cluster.cluster_deleted"), Template.of(
|
||||||
"cluster",
|
"cluster",
|
||||||
Tag.inserting(Component.text(cluster.toString()))
|
String.valueOf(cluster)
|
||||||
));
|
));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "res", "resize" -> {
|
case "res":
|
||||||
|
case "resize": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 3) {
|
if (args.length != 3) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster resize [name]")))
|
Template.of("value", "/plot cluster resize [name]")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -374,10 +347,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_OTHER)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_OTHER))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -387,12 +357,13 @@ public class Cluster extends SubCommand {
|
|||||||
if (intersect != null) {
|
if (intersect != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_intersection"),
|
TranslatableCaption.of("cluster.cluster_intersection"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(intersect.getName())))
|
Template.of("cluster", intersect.getName())
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Set<Plot> existing = area.getPlotSelectionOwned(cluster.getP1(), cluster.getP2());
|
Set<Plot> existing = area.getPlotSelectionOwned(cluster.getP1(), cluster.getP2());
|
||||||
Set<Plot> newPlots = area.getPlotSelectionOwned(pos1, pos2);
|
Set<Plot> newPlots = area.getPlotSelectionOwned(pos1, pos2);
|
||||||
|
// Set<Plot> removed = (HashSet<Plot>) existing.clone();
|
||||||
Set<Plot> removed = new HashSet<>(existing);
|
Set<Plot> removed = new HashSet<>(existing);
|
||||||
|
|
||||||
removed.removeAll(newPlots);
|
removed.removeAll(newPlots);
|
||||||
@ -401,10 +372,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -414,10 +382,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -437,9 +402,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (current + cluster.getArea() > allowed) {
|
if (current + cluster.getArea() > allowed) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(
|
Template.of("node", Permission.PERMISSION_CLUSTER + "." + (current + cluster.getArea()))
|
||||||
Permission.PERMISSION_CLUSTER + "." + (current + cluster.getArea())
|
|
||||||
)))
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -448,21 +411,20 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_resized"));
|
player.sendMessage(TranslatableCaption.of("cluster.cluster_resized"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "add", "inv", "invite" -> {
|
case "add":
|
||||||
|
case "inv":
|
||||||
|
case "invite": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", String.valueOf(Permission.PERMISSION_CLUSTER_INVITE))
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_INVITE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster invite <player>")))
|
Template.of("value", "/plot cluster invite <player>")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -480,10 +442,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE_OTHER)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_INVITE_OTHER.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_INVITE_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -496,7 +455,7 @@ public class Cluster extends SubCommand {
|
|||||||
} else if (throwable != null) {
|
} else if (throwable != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
|
Template.of("value", args[1])
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (!cluster.isAdded(uuid)) {
|
if (!cluster.isAdded(uuid)) {
|
||||||
@ -508,7 +467,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (otherPlayer != null) {
|
if (otherPlayer != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_invited"),
|
TranslatableCaption.of("cluster.cluster_invited"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
|
Template.of("cluster", cluster.getName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -517,21 +476,20 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "k", "remove", "kick" -> {
|
case "k":
|
||||||
|
case "remove":
|
||||||
|
case "kick": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_KICK.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_KICK)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster kick <player>")))
|
Template.of("value", "/plot cluster kick <player>")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -548,10 +506,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK_OTHER)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_KICK_OTHER.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_KICK_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -564,7 +519,7 @@ public class Cluster extends SubCommand {
|
|||||||
} else if (throwable != null) {
|
} else if (throwable != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
|
Template.of("value", args[1])
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// Can't kick if the player is yourself, the owner, or not added to the cluster
|
// Can't kick if the player is yourself, the owner, or not added to the cluster
|
||||||
@ -572,7 +527,7 @@ public class Cluster extends SubCommand {
|
|||||||
|| !cluster.isAdded(uuid)) {
|
|| !cluster.isAdded(uuid)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cannot_kick_player"),
|
TranslatableCaption.of("cluster.cannot_kick_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(cluster.getName())))
|
Template.of("value", cluster.getName())
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (cluster.helpers.contains(uuid)) {
|
if (cluster.helpers.contains(uuid)) {
|
||||||
@ -587,7 +542,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (player2 != null) {
|
if (player2 != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_removed"),
|
TranslatableCaption.of("cluster.cluster_removed"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
|
Template.of("cluster", cluster.getName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
removePlayerPlots(cluster, uuid, player2.getLocation().getWorldName());
|
removePlayerPlots(cluster, uuid, player2.getLocation().getWorldName());
|
||||||
@ -597,21 +552,19 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "quit", "leave" -> {
|
case "quit":
|
||||||
|
case "leave": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LEAVE)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LEAVE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_LEAVE.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_LEAVE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 1 && args.length != 2) {
|
if (args.length != 1 && args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster leave [name]")))
|
Template.of("value", "/plot cluster leave [name]")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -625,7 +578,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (cluster == null) {
|
if (cluster == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
|
Template.of("cluster", args[1])
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -653,29 +606,23 @@ public class Cluster extends SubCommand {
|
|||||||
DBFunc.removeInvited(cluster, uuid);
|
DBFunc.removeInvited(cluster, uuid);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_removed"),
|
TranslatableCaption.of("cluster.cluster_removed"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(cluster.getName())))
|
Template.of("cluster", cluster.getName())
|
||||||
);
|
);
|
||||||
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
|
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "members" -> {
|
case "members": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_HELPERS)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_HELPERS)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_HELPERS.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_CLUSTER_HELPERS.toString()))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 3) {
|
if (args.length != 3) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot cluster members <add | remove> <player>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot cluster members <add | remove> <player>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -696,7 +643,7 @@ public class Cluster extends SubCommand {
|
|||||||
} else if (throwable != null) {
|
} else if (throwable != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[2])))
|
Template.of("value", args[2])
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (args[1].equalsIgnoreCase("add")) {
|
if (args[1].equalsIgnoreCase("add")) {
|
||||||
@ -710,30 +657,27 @@ public class Cluster extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(
|
Template.of("value", "/plot cluster members <add | remove> <player>")
|
||||||
"/plot cluster members <add | remove> <player>"
|
|
||||||
)))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "spawn", "home", "tp" -> {
|
case "spawn":
|
||||||
|
case "home":
|
||||||
|
case "tp": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_TP.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_TP)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster tp <name>")))
|
Template.of("value", "/plot cluster tp <name>")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -746,7 +690,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (cluster == null) {
|
if (cluster == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
|
Template.of("cluster", args[1])
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -755,10 +699,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP_OTHER)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_TP_OTHER.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_TP_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -767,21 +708,21 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_teleporting"));
|
player.sendMessage(TranslatableCaption.of("cluster.cluster_teleporting"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "i", "info", "show", "information" -> {
|
case "i":
|
||||||
|
case "info":
|
||||||
|
case "show":
|
||||||
|
case "information": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INFO)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INFO)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_TP.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_TP)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 1 && args.length != 2) {
|
if (args.length != 1 && args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster info [name]")))
|
Template.of("value", "/plot cluster info [name]")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
PlotArea area = player.getApplicablePlotArea();
|
PlotArea area = player.getApplicablePlotArea();
|
||||||
@ -795,7 +736,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (cluster == null) {
|
if (cluster == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
TranslatableCaption.of("cluster.invalid_cluster_name"),
|
||||||
TagResolver.resolver("cluster", Tag.inserting(Component.text(args[1])))
|
Template.of("cluster", args[1])
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -814,36 +755,47 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
||||||
} else {
|
} else {
|
||||||
final String owner;
|
final String owner;
|
||||||
owner = Objects.requireNonNullElse(username, "unknown");
|
if (username == null) {
|
||||||
|
owner = "unknown";
|
||||||
|
} else {
|
||||||
|
owner = username;
|
||||||
|
}
|
||||||
String name = cluster.getName();
|
String name = cluster.getName();
|
||||||
String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + (
|
String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + (
|
||||||
cluster.getP2().getY() - cluster.getP1().getY() + 1);
|
cluster.getP2().getY() - cluster.getP1().getY() + 1);
|
||||||
String rights = cluster.isAdded(player.getUUID()) + "";
|
String rights = cluster.isAdded(player.getUUID()) + "";
|
||||||
Caption message = TranslatableCaption.of("cluster.cluster_info");
|
Caption message = TranslatableCaption.of("cluster.cluster_info");
|
||||||
TagResolver resolver = TagResolver.builder()
|
Template idTemplate = Template.of("id", id);
|
||||||
.tag("id", Tag.inserting(Component.text(id)))
|
Template ownerTemplate = Template.of("owner", owner);
|
||||||
.tag("owner", Tag.inserting(Component.text(owner)))
|
Template nameTemplate = Template.of("name", name);
|
||||||
.tag("name", Tag.inserting(Component.text(name)))
|
Template sizeTemplate = Template.of("size", size);
|
||||||
.tag("size", Tag.inserting(Component.text(size)))
|
Template rightsTemplate = Template.of("rights", rights);
|
||||||
.tag("rights", Tag.inserting(Component.text(rights)))
|
player.sendMessage(
|
||||||
.build();
|
message,
|
||||||
player.sendMessage(message, resolver);
|
idTemplate,
|
||||||
|
ownerTemplate,
|
||||||
|
nameTemplate,
|
||||||
|
sizeTemplate,
|
||||||
|
rightsTemplate
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "sh", "setspawn", "sethome" -> {
|
case "sh":
|
||||||
|
case "setspawn":
|
||||||
|
case "sethome": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME))
|
Template.of("node", Permission.PERMISSION_CLUSTER_SETHOME.toString())
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length != 1 && args.length != 2) {
|
if (args.length != 1 && args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot cluster sethome")))
|
Template.of("value", "/plot cluster sethome")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -860,10 +812,7 @@ public class Cluster extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME_OTHER)) {
|
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_CLUSTER_SETHOME_OTHER.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME_OTHER)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -882,7 +831,10 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("cluster.cluster_available_args"),
|
TranslatableCaption.of("cluster.cluster_available_args"),
|
||||||
TagResolver.resolver("list", Tag.inserting(ComponentHelper.join(AVAILABLE_ARGS, SEPARATOR)))
|
Template.of(
|
||||||
|
"list",
|
||||||
|
"<dark_aqua>list</dark_aqua><gray>, </gray><dark_aqua>create</dark_aqua><gray>, </gray><dark_aqua>delete</dark_aqua><gray>, </gray><dark_aqua>resize</dark_aqua><gray>, </gray><dark_aqua>invite</dark_aqua><gray>, </gray><dark_aqua>kick</dark_aqua><gray>, </gray><dark_aqua>leave</dark_aqua><gray>, </gray><dark_aqua>members</dark_aqua><gray>, </gray><dark_aqua>info</dark_aqua><gray>, </gray><dark_aqua>tp</dark_aqua><gray>, </gray><dark_aqua>sethome</dark_aqua>"
|
||||||
|
)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,7 @@ import com.plotsquared.core.player.PlayerMetaDataKeys;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import com.plotsquared.core.util.task.TaskTime;
|
import com.plotsquared.core.util.task.TaskTime;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
public class CmdConfirm {
|
public class CmdConfirm {
|
||||||
@ -54,11 +52,9 @@ public class CmdConfirm {
|
|||||||
if (commandStr != null) {
|
if (commandStr != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("confirm.requires_confirm"),
|
TranslatableCaption.of("confirm.requires_confirm"),
|
||||||
TagResolver.builder()
|
Template.of("command", commandStr),
|
||||||
.tag("command", Tag.inserting(Component.text(commandStr)))
|
Template.of("timeout", String.valueOf(Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS)),
|
||||||
.tag("timeout", Tag.inserting(Component.text(Settings.Confirmation.CONFIRMATION_TIMEOUT_SECONDS)))
|
Template.of("value", "/plot confirm")
|
||||||
.tag("value", Tag.inserting(Component.text("/plot confirm")))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
TaskManager.runTaskLater(() -> {
|
TaskManager.runTaskLater(() -> {
|
||||||
|
@ -29,10 +29,8 @@ import com.plotsquared.core.util.StringComparison;
|
|||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
@ -257,14 +255,10 @@ public abstract class Command {
|
|||||||
max = c.size();
|
max = c.size();
|
||||||
}
|
}
|
||||||
// Send the header
|
// Send the header
|
||||||
player.sendMessage(
|
Template curTemplate = Template.of("cur", String.valueOf(page + 1));
|
||||||
header,
|
Template maxTemplate = Template.of("max", String.valueOf(totalPages + 1));
|
||||||
TagResolver.builder()
|
Template amountTemplate = Template.of("amount", String.valueOf(c.size()));
|
||||||
.tag("cur", Tag.inserting(Component.text(page + 1)))
|
player.sendMessage(header, curTemplate, maxTemplate, amountTemplate);
|
||||||
.tag("max", Tag.inserting(Component.text(totalPages + 1)))
|
|
||||||
.tag("amount", Tag.inserting(Component.text(c.size())))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
// Send the page content
|
// Send the page content
|
||||||
List<T> subList = c.subList(page * size, max);
|
List<T> subList = c.subList(page * size, max);
|
||||||
int i = page * size;
|
int i = page * size;
|
||||||
@ -272,24 +266,13 @@ public abstract class Command {
|
|||||||
i++;
|
i++;
|
||||||
final CaptionHolder msg = new CaptionHolder();
|
final CaptionHolder msg = new CaptionHolder();
|
||||||
add.run(i, obj, msg);
|
add.run(i, obj, msg);
|
||||||
player.sendMessage(msg.get(), msg.getTagResolvers());
|
player.sendMessage(msg.get(), msg.getTemplates());
|
||||||
}
|
}
|
||||||
// Send the footer
|
// Send the footer
|
||||||
player.sendMessage(
|
Template command1 = Template.of("command1", baseCommand + " " + page);
|
||||||
TranslatableCaption.of("list.page_turn"),
|
Template command2 = Template.of("command2", baseCommand + " " + (page + 2));
|
||||||
TagResolver.builder()
|
Template clickable = Template.of("clickable", TranslatableCaption.of("list.clickable").getComponent(player));
|
||||||
.tag("cur", Tag.inserting(Component.text(page + 1)))
|
player.sendMessage(TranslatableCaption.of("list.page_turn"), command1, command2, clickable);
|
||||||
.tag(
|
|
||||||
"command1",
|
|
||||||
Tag.preProcessParsed(baseCommand + " " + page)
|
|
||||||
)
|
|
||||||
.tag("command2", Tag.preProcessParsed(baseCommand + " " + (page + 2)))
|
|
||||||
.tag(
|
|
||||||
"clickable",
|
|
||||||
Tag.inserting(TranslatableCaption.of("list.clickable").toComponent(player))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -341,7 +324,7 @@ public abstract class Command {
|
|||||||
if (commands.isEmpty()) {
|
if (commands.isEmpty()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.did_you_mean"),
|
TranslatableCaption.of("commandconfig.did_you_mean"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(MainCommand.getInstance().help.getUsage())))
|
Template.of("value", MainCommand.getInstance().help.getUsage())
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
@ -362,7 +345,7 @@ public abstract class Command {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.did_you_mean"),
|
TranslatableCaption.of("commandconfig.did_you_mean"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(cmd.getUsage())))
|
Template.of("value", cmd.getUsage())
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
@ -397,7 +380,7 @@ public abstract class Command {
|
|||||||
// TODO improve or remove the Argument system
|
// TODO improve or remove the Argument system
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(StringMan.join(fullSplit, " "))))
|
Template.of("value", StringMan.join(fullSplit, " "))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -486,7 +469,7 @@ public abstract class Command {
|
|||||||
if (message) {
|
if (message) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(getPermission())))
|
Template.of("node", getPermission())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -511,7 +494,7 @@ public abstract class Command {
|
|||||||
public void sendUsage(PlotPlayer<?> player) {
|
public void sendUsage(PlotPlayer<?> player) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(getUsage())))
|
Template.of("value", getUsage())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,10 +542,9 @@ public abstract class Command {
|
|||||||
|
|
||||||
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 0 -> {
|
case 0:
|
||||||
return this.allCommands;
|
return this.allCommands;
|
||||||
}
|
case 1:
|
||||||
case 1 -> {
|
|
||||||
String arg = args[0].toLowerCase();
|
String arg = args[0].toLowerCase();
|
||||||
if (space) {
|
if (space) {
|
||||||
Command cmd = getCommand(arg);
|
Command cmd = getCommand(arg);
|
||||||
@ -581,15 +563,13 @@ public abstract class Command {
|
|||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
}
|
}
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
Command cmd = getCommand(args[0]);
|
Command cmd = getCommand(args[0]);
|
||||||
if (cmd != null) {
|
if (cmd != null) {
|
||||||
return cmd.tab(player, Arrays.copyOfRange(args, 1, args.length), space);
|
return cmd.tab(player, Arrays.copyOfRange(args, 1, args.length), space);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -618,13 +598,13 @@ public abstract class Command {
|
|||||||
return this.getFullId().hashCode();
|
return this.getFullId().hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkTrue(boolean mustBeTrue, Caption message, TagResolver... args) {
|
public void checkTrue(boolean mustBeTrue, Caption message, Template... args) {
|
||||||
if (!mustBeTrue) {
|
if (!mustBeTrue) {
|
||||||
throw new CommandException(message, args);
|
throw new CommandException(message, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T> T check(T object, Caption message, TagResolver... args) {
|
public <T> T check(T object, Caption message, Template... args) {
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
throw new CommandException(message, args);
|
throw new CommandException(message, args);
|
||||||
}
|
}
|
||||||
@ -640,10 +620,10 @@ public abstract class Command {
|
|||||||
|
|
||||||
public static class CommandException extends RuntimeException {
|
public static class CommandException extends RuntimeException {
|
||||||
|
|
||||||
|
private final Template[] args;
|
||||||
private final Caption message;
|
private final Caption message;
|
||||||
private final TagResolver[] args;
|
|
||||||
|
|
||||||
public CommandException(final @Nullable Caption message, final TagResolver... args) {
|
public CommandException(final @Nullable Caption message, final Template... args) {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.args = args;
|
this.args = args;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
package com.plotsquared.core.command;
|
package com.plotsquared.core.command;
|
||||||
|
|
||||||
import com.plotsquared.core.configuration.caption.Caption;
|
import com.plotsquared.core.configuration.caption.Caption;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,7 +34,7 @@ public interface CommandCaller {
|
|||||||
* @param caption Caption to send
|
* @param caption Caption to send
|
||||||
* @param replacements Variable replacements
|
* @param replacements Variable replacements
|
||||||
*/
|
*/
|
||||||
void sendMessage(@NonNull Caption caption, @NonNull TagResolver... replacements);
|
void sendMessage(@NonNull Caption caption, @NonNull Template... replacements);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check the player's permissions. <i>Will be cached if permission caching is enabled.</i>
|
* Check the player's permissions. <i>Will be cached if permission caching is enabled.</i>
|
||||||
|
@ -22,10 +22,7 @@ import com.plotsquared.core.configuration.caption.Caption;
|
|||||||
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CommandCategory.
|
* CommandCategory.
|
||||||
@ -83,7 +80,7 @@ public enum CommandCategory implements Caption {
|
|||||||
// TODO this method shouldn't be invoked
|
// TODO this method shouldn't be invoked
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String toString() {
|
public String toString() {
|
||||||
return this.caption.getComponent(LocaleHolder.console());
|
return this.caption.getComponent(LocaleHolder.console());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,11 +90,6 @@ public enum CommandCategory implements Caption {
|
|||||||
return this.caption.getComponent(localeHolder);
|
return this.caption.getComponent(localeHolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NonNull Component toComponent(@NonNull final LocaleHolder localeHolder) {
|
|
||||||
return MiniMessage.miniMessage().deserialize(getComponent(localeHolder));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a player has access to this command category
|
* Checks if a player has access to this command category
|
||||||
*
|
*
|
||||||
@ -109,5 +101,4 @@ public enum CommandCategory implements Caption {
|
|||||||
return !MainCommand.getInstance().getCommands(this, player).isEmpty();
|
return !MainCommand.getInstance().getCommands(this, player).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,7 @@ import com.plotsquared.core.plot.comment.CommentInbox;
|
|||||||
import com.plotsquared.core.plot.comment.CommentManager;
|
import com.plotsquared.core.plot.comment.CommentManager;
|
||||||
import com.plotsquared.core.plot.comment.PlotComment;
|
import com.plotsquared.core.plot.comment.PlotComment;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -46,10 +44,8 @@ public class Comment extends SubCommand {
|
|||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_syntax"),
|
TranslatableCaption.of("comment.comment_syntax"),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot comment [X;Z]"),
|
||||||
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
|
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
|
||||||
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -68,10 +64,8 @@ public class Comment extends SubCommand {
|
|||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_syntax"),
|
TranslatableCaption.of("comment.comment_syntax"),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot comment [X;Z]"),
|
||||||
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
|
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
|
||||||
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -82,10 +76,8 @@ public class Comment extends SubCommand {
|
|||||||
if (inbox == null) {
|
if (inbox == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_syntax"),
|
TranslatableCaption.of("comment.comment_syntax"),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot comment [X;Z]"),
|
||||||
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
|
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
|
||||||
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -105,10 +97,8 @@ public class Comment extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("comment.no_plot_inbox"));
|
player.sendMessage(TranslatableCaption.of("comment.no_plot_inbox"));
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_syntax"),
|
TranslatableCaption.of("comment.comment_syntax"),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot comment [X;Z]"),
|
||||||
.tag("command", Tag.inserting(Component.text("/plot comment [X;Z]")))
|
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), "|"))
|
||||||
.tag("list", Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), "|"))))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,7 @@ import com.plotsquared.core.util.MathMan;
|
|||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import com.plotsquared.core.util.task.TaskTime;
|
import com.plotsquared.core.util.task.TaskTime;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -70,9 +68,7 @@ public class Condense extends SubCommand {
|
|||||||
if (args.length != 2 && args.length != 3) {
|
if (args.length != 2 && args.length != 3) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(
|
Template.of("value", "/plot condense <area> <start | stop | info> [radius]")
|
||||||
"/plot condense <area> <start | stop | info> [radius]"
|
|
||||||
)))
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -86,10 +82,7 @@ public class Condense extends SubCommand {
|
|||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot condense" + area + " start <radius>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot condense" + area + " start " + "<radius>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -188,10 +181,8 @@ public class Condense extends SubCommand {
|
|||||||
if (result.get()) {
|
if (result.get()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("condense.moving"),
|
TranslatableCaption.of("condense.moving"),
|
||||||
TagResolver.builder()
|
Template.of("origin", String.valueOf(origin)),
|
||||||
.tag("origin", Tag.inserting(Component.text(origin.toString())))
|
Template.of("possible", String.valueOf(possible))
|
||||||
.tag("possible", Tag.inserting(Component.text(possible.toString())))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
TaskManager.runTaskLater(task, TaskTime.ticks(1L));
|
TaskManager.runTaskLater(task, TaskTime.ticks(1L));
|
||||||
}
|
}
|
||||||
@ -211,7 +202,7 @@ public class Condense extends SubCommand {
|
|||||||
if (i >= free.size()) {
|
if (i >= free.size()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("condense.skipping"),
|
TranslatableCaption.of("condense.skipping"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(origin.toString())))
|
Template.of("plot", String.valueOf(origin))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,10 +223,7 @@ public class Condense extends SubCommand {
|
|||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot condense " + area + " info <radius>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot condense " + area + " info <radius>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -256,20 +244,20 @@ public class Condense extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("condense.default_eval"));
|
player.sendMessage(TranslatableCaption.of("condense.default_eval"));
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("condense.minimum_radius"),
|
TranslatableCaption.of("condense.minimum_radius"),
|
||||||
TagResolver.resolver("minimum_radius", Tag.inserting(Component.text(minimumRadius)))
|
Template.of("minimumRadius", String.valueOf(minimumRadius))
|
||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("condense.maximum_moved"),
|
TranslatableCaption.of("condense.minimum_radius"),
|
||||||
TagResolver.resolver("maximum_moves", Tag.inserting(Component.text(maxMove)))
|
Template.of("maxMove", String.valueOf(maxMove))
|
||||||
);
|
);
|
||||||
player.sendMessage(TranslatableCaption.of("condense.input_eval"));
|
player.sendMessage(TranslatableCaption.of("condense.input_eval"));
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("condense.input_radius"),
|
TranslatableCaption.of("condense.input_radius"),
|
||||||
TagResolver.resolver("radius", Tag.inserting(Component.text(radius)))
|
Template.of("radius", String.valueOf(radius))
|
||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("condense.estimated_moves"),
|
TranslatableCaption.of("condense.estimated_moves"),
|
||||||
TagResolver.resolver("user_move", Tag.inserting(Component.text(userMove)))
|
Template.of("userMove", String.valueOf(userMove))
|
||||||
);
|
);
|
||||||
player.sendMessage(TranslatableCaption.of("condense.eta"));
|
player.sendMessage(TranslatableCaption.of("condense.eta"));
|
||||||
player.sendMessage(TranslatableCaption.of("condense.radius_measured"));
|
player.sendMessage(TranslatableCaption.of("condense.radius_measured"));
|
||||||
@ -278,10 +266,7 @@ public class Condense extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot condense " + area.getWorldName() + " <start | stop | info> [radius]")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot condense " + area.getWorldName() + " <start | stop | info> [radius]"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@CommandDeclaration(command = "continue",
|
@CommandDeclaration(command = "continue",
|
||||||
@ -57,9 +55,7 @@ public class Continue extends SubCommand {
|
|||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_CONTINUE)) {
|
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_CONTINUE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(
|
Template.of("node", TranslatableCaption.of("permission.no_plot_perms").getComponent(player))
|
||||||
TranslatableCaption.of("permission.no_plot_perms").toComponent(player)
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -72,7 +68,7 @@ public class Continue extends SubCommand {
|
|||||||
< player.getPlotCount() + size)) {
|
< player.getPlotCount() + size)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
TranslatableCaption.of("permission.cant_claim_more_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(player.getAllowedPlots())))
|
Template.of("amount", String.valueOf(player.getAllowedPlots()))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -86,7 +82,7 @@ public class Continue extends SubCommand {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Done flag removal")))
|
Template.of("value", "Done flag removal")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -23,9 +23,7 @@ import com.plotsquared.core.location.Location;
|
|||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
@CommandDeclaration(command = "copy",
|
@CommandDeclaration(command = "copy",
|
||||||
permission = "plots.copy",
|
permission = "plots.copy",
|
||||||
@ -50,7 +48,7 @@ public class Copy extends SubCommand {
|
|||||||
if (args.length != 1) {
|
if (args.length != 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot copy <X;Z>")))
|
Template.of("value", "/plot copy <X;Z>")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -69,12 +67,8 @@ public class Copy extends SubCommand {
|
|||||||
|
|
||||||
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
|
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
|
||||||
if (result) {
|
if (result) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("move.copy_success"), Template.of("origin", String.valueOf(plot1)),
|
||||||
TranslatableCaption.of("move.copy_success"),
|
Template.of("target", String.valueOf(plot2))
|
||||||
TagResolver.builder()
|
|
||||||
.tag("origin", Tag.inserting(Component.text(plot1.toString())))
|
|
||||||
.tag("target", Tag.inserting(Component.text(plot2.toString())))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(TranslatableCaption.of("move.requires_unowned"));
|
player.sendMessage(TranslatableCaption.of("move.requires_unowned"));
|
||||||
|
@ -25,9 +25,7 @@ import com.plotsquared.core.generator.HybridUtils;
|
|||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@CommandDeclaration(command = "createroadschematic",
|
@CommandDeclaration(command = "createroadschematic",
|
||||||
@ -63,7 +61,7 @@ public class CreateRoadSchematic extends SubCommand {
|
|||||||
this.hybridUtils.setupRoadSchematic(plot);
|
this.hybridUtils.setupRoadSchematic(plot);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("schematics.schematic_road_created"),
|
TranslatableCaption.of("schematics.schematic_road_created"),
|
||||||
TagResolver.resolver("command", Tag.inserting(Component.text("/plot debugroadregen")))
|
Template.of("command", "/plot debugroadregen")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -40,9 +40,7 @@ import com.plotsquared.core.util.EventDispatcher;
|
|||||||
import com.plotsquared.core.util.FileUtils;
|
import com.plotsquared.core.util.FileUtils;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -103,10 +101,7 @@ public class DatabaseCommand extends SubCommand {
|
|||||||
if (args.length < 1) {
|
if (args.length < 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot database [area] <sqlite | mysql | import>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot database [area] <sqlite | mysql | import>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -121,7 +116,7 @@ public class DatabaseCommand extends SubCommand {
|
|||||||
if (args.length < 1) {
|
if (args.length < 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot database [area] <sqlite|mysql|import>")))
|
Template.of("value", "/plot database [area] <sqlite|mysql|import>")
|
||||||
);
|
);
|
||||||
player.sendMessage(TranslatableCaption.of("database.arg"));
|
player.sendMessage(TranslatableCaption.of("database.arg"));
|
||||||
return false;
|
return false;
|
||||||
@ -134,10 +129,7 @@ public class DatabaseCommand extends SubCommand {
|
|||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot database import <sqlite file> [prefix]")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot database import <sqlite file> [prefix]"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -148,7 +140,7 @@ public class DatabaseCommand extends SubCommand {
|
|||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("database.does_not_exist"),
|
TranslatableCaption.of("database.does_not_exist"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(file.toString())))
|
Template.of("value", String.valueOf(file))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -192,10 +184,8 @@ public class DatabaseCommand extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("database.skipping_duplicated_plot"),
|
TranslatableCaption.of("database.skipping_duplicated_plot"),
|
||||||
TagResolver.builder()
|
Template.of("plot", String.valueOf(plot)),
|
||||||
.tag("plot", Tag.inserting(Component.text(plot.toString())))
|
Template.of("id", String.valueOf(plot.temp))
|
||||||
.tag("id", Tag.inserting(Component.text(plot.temp)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -29,12 +29,12 @@ 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.entity.EntityCategory;
|
import com.plotsquared.core.util.entity.EntityCategory;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import com.plotsquared.core.uuid.UUIDMapping;
|
import com.plotsquared.core.uuid.UUIDMapping;
|
||||||
import com.sk89q.worldedit.world.entity.EntityType;
|
import com.sk89q.worldedit.world.entity.EntityType;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -68,10 +68,7 @@ public class Debug extends SubCommand {
|
|||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot debug <loadedchunks | player | debug-players | entitytypes | msg>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot debug <player | debug-players | entitytypes | msg>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
@ -84,11 +81,21 @@ public class Debug extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (args.length > 0 && "loadedchunks".equalsIgnoreCase(args[0])) {
|
||||||
|
final long start = System.currentTimeMillis();
|
||||||
|
player.sendMessage(TranslatableCaption.of("debug.fetching_loaded_chunks"));
|
||||||
|
TaskManager.runTaskAsync(() -> player.sendMessage(StaticCaption
|
||||||
|
.of("Loaded chunks: " + this.worldUtil
|
||||||
|
.getChunkChunks(player.getLocation().getWorldName())
|
||||||
|
.size() + " (" + (System.currentTimeMillis()
|
||||||
|
- start) + "ms) using thread: " + Thread.currentThread().getName())));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
if (args.length > 0 && "uuids".equalsIgnoreCase(args[0])) {
|
if (args.length > 0 && "uuids".equalsIgnoreCase(args[0])) {
|
||||||
final Collection<UUIDMapping> mappings = PlotSquared.get().getImpromptuUUIDPipeline().getAllImmediately();
|
final Collection<UUIDMapping> mappings = PlotSquared.get().getImpromptuUUIDPipeline().getAllImmediately();
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debug.cached_uuids"),
|
TranslatableCaption.of("debug.cached_uuids"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(mappings.size())))
|
Template.of("value", String.valueOf(mappings.size()))
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -97,7 +104,7 @@ public class Debug extends SubCommand {
|
|||||||
for (final PlotPlayer<?> pp : PlotPlayer.getDebugModePlayers()) {
|
for (final PlotPlayer<?> pp : PlotPlayer.getDebugModePlayers()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debug.player_in_debugmode_list"),
|
TranslatableCaption.of("debug.player_in_debugmode_list"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(pp.getName())))
|
Template.of("value", pp.getName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -107,11 +114,10 @@ public class Debug extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("debug.entity_categories"));
|
player.sendMessage(TranslatableCaption.of("debug.entity_categories"));
|
||||||
EntityCategory.REGISTRY.forEach(category -> {
|
EntityCategory.REGISTRY.forEach(category -> {
|
||||||
final StringBuilder builder =
|
final StringBuilder builder =
|
||||||
new StringBuilder("<gray>-</gray> <gold>").append(category.getId()).append("</gold><gray>: <gold>");
|
new StringBuilder("§7- §6").append(category.getId()).append("§7: §6");
|
||||||
for (final EntityType entityType : category.getAll()) {
|
for (final EntityType entityType : category.getAll()) {
|
||||||
builder.append(entityType.getId()).append(" ");
|
builder.append(entityType.getId()).append(" ");
|
||||||
}
|
}
|
||||||
builder.append("</gold>");
|
|
||||||
player.sendMessage(StaticCaption.of("<prefix>" + builder));
|
player.sendMessage(StaticCaption.of("<prefix>" + builder));
|
||||||
});
|
});
|
||||||
EntityType.REGISTRY.values().stream().sorted(Comparator.comparing(EntityType::getId))
|
EntityType.REGISTRY.values().stream().sorted(Comparator.comparing(EntityType::getId))
|
||||||
@ -131,53 +137,28 @@ public class Debug extends SubCommand {
|
|||||||
.getCaptionMap(TranslatableCaption.DEFAULT_NAMESPACE)
|
.getCaptionMap(TranslatableCaption.DEFAULT_NAMESPACE)
|
||||||
.getCaptions();
|
.getCaptions();
|
||||||
TextComponent.Builder information = Component.text();
|
TextComponent.Builder information = Component.text();
|
||||||
Component header = TranslatableCaption.of("debug.debug_header").toComponent(player)
|
Component header = MINI_MESSAGE.parse(TranslatableCaption.of("debug.debug_header").getComponent(player) + "\n");
|
||||||
.append(Component.newline());
|
|
||||||
String line = TranslatableCaption.of("debug.debug_line").getComponent(player) + "\n";
|
String line = TranslatableCaption.of("debug.debug_line").getComponent(player) + "\n";
|
||||||
String section = TranslatableCaption.of("debug.debug_section").getComponent(player) + "\n";
|
String section = TranslatableCaption.of("debug.debug_section").getComponent(player) + "\n";
|
||||||
information.append(header);
|
information.append(header);
|
||||||
information.append(MINI_MESSAGE.deserialize(
|
information.append(MINI_MESSAGE.parse(section, Template.of("val", "PlotArea")));
|
||||||
section,
|
|
||||||
TagResolver.resolver("val", Tag.inserting(Component.text("PlotArea")))
|
|
||||||
));
|
|
||||||
information.append(MINI_MESSAGE
|
information.append(MINI_MESSAGE
|
||||||
.deserialize(
|
.parse(
|
||||||
line,
|
line,
|
||||||
TagResolver.builder()
|
Template.of("var", "Plot Worlds"),
|
||||||
.tag("var", Tag.inserting(Component.text("Plot Worlds")))
|
Template.of("val", StringMan.join(this.plotAreaManager.getAllPlotAreas(), ", "))
|
||||||
.tag(
|
|
||||||
"val",
|
|
||||||
Tag.inserting(Component.text(StringMan.join(
|
|
||||||
this.plotAreaManager.getAllPlotAreas(),
|
|
||||||
", "
|
|
||||||
)))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
));
|
));
|
||||||
information.append(
|
information.append(
|
||||||
MINI_MESSAGE.deserialize(
|
MINI_MESSAGE.parse(
|
||||||
line,
|
line,
|
||||||
TagResolver.builder()
|
Template.of("var", "Owned Plots"),
|
||||||
.tag("var", Tag.inserting(Component.text("Owned Plots")))
|
Template.of("val", String.valueOf(PlotQuery.newQuery().allPlots().count()))
|
||||||
.tag(
|
|
||||||
"val",
|
|
||||||
Tag.inserting(Component.text(PlotQuery.newQuery().allPlots().count()))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
));
|
));
|
||||||
information.append(MINI_MESSAGE.deserialize(
|
information.append(MINI_MESSAGE.parse(section, Template.of("val", "Messages")));
|
||||||
section,
|
information.append(MINI_MESSAGE.parse(
|
||||||
TagResolver.resolver("val", Tag.inserting(Component.text("Messages")))
|
|
||||||
));
|
|
||||||
information.append(MINI_MESSAGE.deserialize(
|
|
||||||
line,
|
line,
|
||||||
TagResolver.builder()
|
Template.of("var", "Total Messages"),
|
||||||
.tag("var", Tag.inserting(Component.text("Total Messages")))
|
Template.of("val", String.valueOf(captions.size()))
|
||||||
.tag(
|
|
||||||
"val",
|
|
||||||
Tag.inserting(Component.text(captions.size()))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
));
|
));
|
||||||
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(information.build())));
|
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(information.build())));
|
||||||
return true;
|
return true;
|
||||||
@ -185,7 +166,7 @@ public class Debug extends SubCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<Command> tab(final PlotPlayer<?> player, String[] args, boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, String[] args, boolean space) {
|
||||||
return Stream.of("debug-players", "entitytypes")
|
return Stream.of("loadedchunks", "debug-players", "entitytypes")
|
||||||
.filter(value -> value.startsWith(args[0].toLowerCase(Locale.ENGLISH)))
|
.filter(value -> value.startsWith(args[0].toLowerCase(Locale.ENGLISH)))
|
||||||
.map(value -> new Command(null, false, value, "plots.admin", RequiredType.NONE, null) {
|
.map(value -> new Command(null, false, value, "plots.admin", RequiredType.NONE, null) {
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
@ -36,9 +36,7 @@ import com.plotsquared.core.util.EventDispatcher;
|
|||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -97,7 +95,7 @@ public class DebugExec extends SubCommand {
|
|||||||
if (analysis != null) {
|
if (analysis != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugexec.changes_column"),
|
TranslatableCaption.of("debugexec.changes_column"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(analysis.changes)))
|
Template.of("value", String.valueOf(analysis.changes))
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -107,7 +105,7 @@ public class DebugExec extends SubCommand {
|
|||||||
public void run(PlotAnalysis value) {
|
public void run(PlotAnalysis value) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugexec.analyze_done"),
|
TranslatableCaption.of("debugexec.analyze_done"),
|
||||||
TagResolver.resolver("command", Tag.inserting(Component.text("/plot debugexec analyze")))
|
Template.of("command", "/plot debugexec analyze")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -117,10 +115,7 @@ public class DebugExec extends SubCommand {
|
|||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot debugexec analyze <threshold>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot debugexec analyze <threshold>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default"));
|
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default"));
|
||||||
return false;
|
return false;
|
||||||
@ -131,7 +126,7 @@ public class DebugExec extends SubCommand {
|
|||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugexec.invalid_threshold"),
|
TranslatableCaption.of("debugexec.invalid_threshold"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
|
Template.of("value", args[1])
|
||||||
);
|
);
|
||||||
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default_double"));
|
player.sendMessage(TranslatableCaption.of("debugexec.threshold_default_double"));
|
||||||
return false;
|
return false;
|
||||||
@ -162,7 +157,7 @@ public class DebugExec extends SubCommand {
|
|||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot debugexec remove-flag <flag>")))
|
Template.of("value", "/plot debugexec remove-flag <flag>")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -180,7 +175,7 @@ public class DebugExec extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugexec.cleared_flag"),
|
TranslatableCaption.of("debugexec.cleared_flag"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(flag)))
|
Template.of("value", flag)
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -188,10 +183,7 @@ public class DebugExec extends SubCommand {
|
|||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "Invalid syntax: /plot debugexec start-rgar <world>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("Invalid syntax: /plot debugexec start-rgar <world>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -199,7 +191,7 @@ public class DebugExec extends SubCommand {
|
|||||||
if (area == null) {
|
if (area == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.not_valid_plot_world"),
|
TranslatableCaption.of("errors.not_valid_plot_world"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[1])))
|
Template.of("value", args[1])
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -31,9 +31,7 @@ import com.plotsquared.core.inject.annotations.WorldFile;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.util.PremiumVerification;
|
import com.plotsquared.core.util.PremiumVerification;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -71,9 +69,9 @@ public class DebugPaste extends SubCommand {
|
|||||||
StringBuilder b = new StringBuilder();
|
StringBuilder b = new StringBuilder();
|
||||||
b.append(
|
b.append(
|
||||||
"""
|
"""
|
||||||
# Welcome to this paste
|
# Welcome to this paste
|
||||||
# It is meant to provide us at IntellectualSites with better information about your problem
|
# It is meant to provide us at IntellectualSites with better information about your problem
|
||||||
"""
|
"""
|
||||||
);
|
);
|
||||||
b.append("# PlotSquared Information\n");
|
b.append("# PlotSquared Information\n");
|
||||||
b.append("PlotSquared Version: ").append(PlotSquared.get().getVersion())
|
b.append("PlotSquared Version: ").append(PlotSquared.get().getVersion())
|
||||||
@ -133,10 +131,8 @@ public class DebugPaste extends SubCommand {
|
|||||||
} catch (IOException ignored) {
|
} catch (IOException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugpaste.latest_log"),
|
TranslatableCaption.of("debugpaste.latest_log"),
|
||||||
TagResolver.builder()
|
Template.of("file", "latest.log"),
|
||||||
.tag("file", Tag.inserting(Component.text("latest.log")))
|
Template.of("size", "14MB")
|
||||||
.tag("size", Tag.inserting(Component.text("14MB")))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,7 +141,7 @@ public class DebugPaste extends SubCommand {
|
|||||||
} catch (final IllegalArgumentException ignored) {
|
} catch (final IllegalArgumentException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugpaste.empty_file"),
|
TranslatableCaption.of("debugpaste.empty_file"),
|
||||||
TagResolver.resolver("file", Tag.inserting(Component.text("settings.yml")))
|
Template.of("file", "settings.yml")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -153,7 +149,7 @@ public class DebugPaste extends SubCommand {
|
|||||||
} catch (final IllegalArgumentException ignored) {
|
} catch (final IllegalArgumentException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugpaste.empty_file"),
|
TranslatableCaption.of("debugpaste.empty_file"),
|
||||||
TagResolver.resolver("file", Tag.inserting(Component.text("worlds.yml")))
|
Template.of("file", "worlds.yml")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,7 +162,7 @@ public class DebugPaste extends SubCommand {
|
|||||||
} catch (final IOException ignored) {
|
} catch (final IOException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugpaste.skip_multiverse"),
|
TranslatableCaption.of("debugpaste.skip_multiverse"),
|
||||||
TagResolver.resolver("file", Tag.inserting(Component.text("worlds.yml")))
|
Template.of("file", "worlds.yml")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,20 +177,20 @@ public class DebugPaste extends SubCommand {
|
|||||||
String.format("https://athion.net/ISPaster/paste/view/%s", pasteId);
|
String.format("https://athion.net/ISPaster/paste/view/%s", pasteId);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugpaste.debug_report_created"),
|
TranslatableCaption.of("debugpaste.debug_report_created"),
|
||||||
TagResolver.resolver("url", Tag.preProcessParsed(link))
|
Template.of("url", link)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final String responseMessage = jsonObject.get("response").getAsString();
|
final String responseMessage = jsonObject.get("response").getAsString();
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugpaste.creation_failed"),
|
TranslatableCaption.of("debugpaste.creation_failed"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(responseMessage)))
|
Template.of("value", responseMessage)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (final Throwable throwable) {
|
} catch (final Throwable throwable) {
|
||||||
throwable.printStackTrace();
|
throwable.printStackTrace();
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugpaste.creation_failed"),
|
TranslatableCaption.of("debugpaste.creation_failed"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(throwable.getMessage())))
|
Template.of("value", throwable.getMessage())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -28,9 +28,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.PlotManager;
|
import com.plotsquared.core.plot.PlotManager;
|
||||||
import com.plotsquared.core.queue.QueueCoordinator;
|
import com.plotsquared.core.queue.QueueCoordinator;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -62,7 +60,7 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
if (args.length < 1) {
|
if (args.length < 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
|
Template.of("value", DebugRoadRegen.USAGE)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -75,19 +73,16 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
}
|
}
|
||||||
String kind = args[0].toLowerCase();
|
String kind = args[0].toLowerCase();
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case "plot" -> {
|
case "plot":
|
||||||
return regenPlot(player);
|
return regenPlot(player);
|
||||||
}
|
case "region":
|
||||||
case "region" -> {
|
|
||||||
return regenRegion(player, Arrays.copyOfRange(args, 1, args.length));
|
return regenRegion(player, Arrays.copyOfRange(args, 1, args.length));
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
|
Template.of("value", DebugRoadRegen.USAGE)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +91,6 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
Plot plot = player.getCurrentPlot();
|
Plot plot = player.getCurrentPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
@ -109,11 +103,11 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
queue.setCompleteTask(() -> {
|
queue.setCompleteTask(() -> {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugroadregen.regen_done"),
|
TranslatableCaption.of("debugroadregen.regen_done"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("value", plot.getId().toString())
|
||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugroadregen.regen_all"),
|
TranslatableCaption.of("debugroadregen.regen_all"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot regenallroads")))
|
Template.of("value", "/plot regenallroads")
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
manager.createRoadEast(plot, queue);
|
manager.createRoadEast(plot, queue);
|
||||||
@ -132,18 +126,18 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("invalid.not_valid_number"),
|
TranslatableCaption.of("invalid.not_valid_number"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("0, 256")))
|
Template.of("value", "0, 256")
|
||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
|
Template.of("value", DebugRoadRegen.USAGE)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (args.length != 0) {
|
} else if (args.length != 0) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
|
Template.of("value", DebugRoadRegen.USAGE)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -161,11 +155,11 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugroadregen.schematic"),
|
TranslatableCaption.of("debugroadregen.schematic"),
|
||||||
TagResolver.resolver("command", Tag.inserting(Component.text("/plot createroadschematic")))
|
Template.of("command", "/plot createroadschematic")
|
||||||
);
|
);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("debugroadregen.regenallroads"),
|
TranslatableCaption.of("debugroadregen.regenallroads"),
|
||||||
TagResolver.resolver("command", Tag.inserting(Component.text("/plot regenallroads")))
|
Template.of("command", "/plot regenallroads")
|
||||||
);
|
);
|
||||||
boolean result = this.hybridUtils.scheduleSingleRegionRoadUpdate(plot, height);
|
boolean result = this.hybridUtils.scheduleSingleRegionRoadUpdate(plot, height);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
|
@ -32,9 +32,7 @@ import com.plotsquared.core.util.EconHandler;
|
|||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.PlotExpression;
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
|
||||||
@ -79,7 +77,7 @@ public class Delete extends SubCommand {
|
|||||||
if (eventResult == Result.DENY) {
|
if (eventResult == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Delete")))
|
Template.of("value", "Delete")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -114,17 +112,14 @@ public class Delete extends SubCommand {
|
|||||||
this.econHandler.depositMoney(player, value);
|
this.econHandler.depositMoney(player, value);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.added_balance"),
|
TranslatableCaption.of("economy.added_balance"),
|
||||||
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(value))))
|
Template.of("money", this.econHandler.format(value))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("working.deleting_done"),
|
TranslatableCaption.of("working.deleting_done"),
|
||||||
TagResolver.resolver(
|
Template.of("amount", String.valueOf(System.currentTimeMillis() - start)),
|
||||||
"amount",
|
Template.of("plot", plot.getId().toString())
|
||||||
Tag.inserting(Component.text(String.valueOf(System.currentTimeMillis() - start)))
|
|
||||||
),
|
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
|
||||||
);
|
);
|
||||||
eventDispatcher.callPostDelete(plot);
|
eventDispatcher.callPostDelete(plot);
|
||||||
});
|
});
|
||||||
|
@ -34,9 +34,7 @@ import com.plotsquared.core.util.PlayerManager;
|
|||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import com.sk89q.worldedit.world.gamemode.GameModes;
|
import com.sk89q.worldedit.world.gamemode.GameModes;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -90,7 +88,7 @@ public class Deny extends SubCommand {
|
|||||||
if (size >= maxDenySize) {
|
if (size >= maxDenySize) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("members.plot_max_members_denied"),
|
TranslatableCaption.of("members.plot_max_members_denied"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(size)))
|
Template.of("amount", String.valueOf(size))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -101,7 +99,7 @@ public class Deny extends SubCommand {
|
|||||||
} else if (throwable != null || uuids.isEmpty()) {
|
} else if (throwable != null || uuids.isEmpty()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
for (UUID uuid : uuids) {
|
for (UUID uuid : uuids) {
|
||||||
@ -109,7 +107,7 @@ public class Deny extends SubCommand {
|
|||||||
player.hasPermission(Permission.PERMISSION_DENY_EVERYONE) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DENY))) {
|
player.hasPermission(Permission.PERMISSION_DENY_EVERYONE) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DENY))) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
} else if (plot.isOwner(uuid)) {
|
} else if (plot.isOwner(uuid)) {
|
||||||
player.sendMessage(TranslatableCaption.of("deny.cant_remove_owner"));
|
player.sendMessage(TranslatableCaption.of("deny.cant_remove_owner"));
|
||||||
@ -117,11 +115,7 @@ public class Deny extends SubCommand {
|
|||||||
} else if (plot.getDenied().contains(uuid)) {
|
} else if (plot.getDenied().contains(uuid)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("member.already_added"),
|
TranslatableCaption.of("member.already_added"),
|
||||||
PlotSquared.platform().playerManager().getUsernameCaption(uuid)
|
Template.of("player", PlayerManager.resolveName(uuid).getComponent(player))
|
||||||
.thenApply(caption -> TagResolver.resolver(
|
|
||||||
"player",
|
|
||||||
Tag.inserting(caption.toComponent(player))
|
|
||||||
))
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
@ -27,9 +27,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DescriptionFlag;
|
import com.plotsquared.core.plot.flag.implementations.DescriptionFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@CommandDeclaration(command = "setdescription",
|
@CommandDeclaration(command = "setdescription",
|
||||||
@ -56,7 +54,7 @@ public class Desc extends SetCommand {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Description removal")))
|
Template.of("value", "Description removal")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -71,7 +69,7 @@ public class Desc extends SetCommand {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Description set")))
|
Template.of("value", "Description set")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -35,9 +35,7 @@ import com.plotsquared.core.plot.flag.PlotFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@CommandDeclaration(command = "done",
|
@CommandDeclaration(command = "done",
|
||||||
@ -71,7 +69,7 @@ public class Done extends SubCommand {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Done")))
|
Template.of("value", "Done")
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -91,10 +89,10 @@ public class Done extends SubCommand {
|
|||||||
plot.addRunning();
|
plot.addRunning();
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("web.generating_link"),
|
TranslatableCaption.of("web.generating_link"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done");
|
final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done");
|
||||||
if (PlotSquared.platform().expireManager() == null || doneRequirements == null || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DONE)) {
|
if (PlotSquared.platform().expireManager() == null || doneRequirements == null) {
|
||||||
finish(plot, player, true);
|
finish(plot, player, true);
|
||||||
plot.removeRunning();
|
plot.removeRunning();
|
||||||
} else {
|
} else {
|
||||||
@ -103,7 +101,7 @@ public class Done extends SubCommand {
|
|||||||
public void run(PlotAnalysis value) {
|
public void run(PlotAnalysis value) {
|
||||||
plot.removeRunning();
|
plot.removeRunning();
|
||||||
boolean result =
|
boolean result =
|
||||||
value.getComplexity(doneRequirements) >= doneRequirements.THRESHOLD;
|
value.getComplexity(doneRequirements) <= doneRequirements.THRESHOLD;
|
||||||
finish(plot, player, result);
|
finish(plot, player, result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -20,6 +20,7 @@ package com.plotsquared.core.command;
|
|||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
|
import com.plotsquared.core.configuration.caption.StaticCaption;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
@ -32,9 +33,7 @@ import com.plotsquared.core.util.StringMan;
|
|||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -112,10 +111,7 @@ public class Download extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_DOWNLOAD_WORLD)) {
|
if (!player.hasPermission(Permission.PERMISSION_DOWNLOAD_WORLD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_DOWNLOAD_WORLD.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_DOWNLOAD_WORLD)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -129,26 +125,18 @@ public class Download extends SubCommand {
|
|||||||
if (url == null) {
|
if (url == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("web.generating_link_failed"),
|
TranslatableCaption.of("web.generating_link_failed"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("web.generation_link_success_legacy_world"), Template.of("url", url.toString()));
|
||||||
TranslatableCaption.of("web.generation_link_success_legacy_world"),
|
|
||||||
TagResolver.builder()
|
|
||||||
.tag("url", Tag.preProcessParsed(url.toString()))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
sendUsage(player);
|
sendUsage(player);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("web.generating_link"), Template.of("plot", plot.getId().toString()));
|
||||||
TranslatableCaption.of("web.generating_link"),
|
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
|
||||||
);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,24 +174,20 @@ public class Download extends SubCommand {
|
|||||||
if (Settings.Web.LEGACY_WEBINTERFACE) {
|
if (Settings.Web.LEGACY_WEBINTERFACE) {
|
||||||
schematicHandler
|
schematicHandler
|
||||||
.getCompoundTag(plot)
|
.getCompoundTag(plot)
|
||||||
.whenComplete((compoundTag, throwable) -> schematicHandler.upload(
|
.whenComplete((compoundTag, throwable) -> {
|
||||||
compoundTag,
|
schematicHandler.upload(compoundTag, null, null, new RunnableVal<>() {
|
||||||
null,
|
@Override
|
||||||
null,
|
public void run(URL value) {
|
||||||
new RunnableVal<>() {
|
plot.removeRunning();
|
||||||
@Override
|
player.sendMessage(
|
||||||
public void run(URL value) {
|
TranslatableCaption.of("web.generation_link_success"),
|
||||||
plot.removeRunning();
|
Template.of("download", value.toString()),
|
||||||
player.sendMessage(
|
Template.of("delete", "Not available")
|
||||||
TranslatableCaption.of("web.generation_link_success"),
|
);
|
||||||
TagResolver.builder()
|
player.sendMessage(StaticCaption.of(value.toString()));
|
||||||
.tag("download", Tag.preProcessParsed(value.toString()))
|
|
||||||
.tag("delete", Tag.preProcessParsed("Not available"))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
));
|
});
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO legacy support
|
// TODO legacy support
|
||||||
@ -212,15 +196,13 @@ public class Download extends SubCommand {
|
|||||||
if (throwable != null || !result.isSuccess()) {
|
if (throwable != null || !result.isSuccess()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("web.generating_link_failed"),
|
TranslatableCaption.of("web.generating_link_failed"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("web.generation_link_success"),
|
TranslatableCaption.of("web.generation_link_success"),
|
||||||
TagResolver.builder()
|
Template.of("download", result.getDownloadUrl()),
|
||||||
.tag("download", Tag.preProcessParsed(result.getDownloadUrl()))
|
Template.of("delete", result.getDeletionUrl())
|
||||||
.tag("delete", Tag.preProcessParsed(result.getDeletionUrl()))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -23,6 +23,7 @@ import com.plotsquared.core.PlotSquared;
|
|||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.CaptionUtility;
|
import com.plotsquared.core.configuration.caption.CaptionUtility;
|
||||||
import com.plotsquared.core.configuration.caption.StaticCaption;
|
import com.plotsquared.core.configuration.caption.StaticCaption;
|
||||||
|
import com.plotsquared.core.configuration.caption.Templates;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.events.PlotFlagAddEvent;
|
import com.plotsquared.core.events.PlotFlagAddEvent;
|
||||||
import com.plotsquared.core.events.PlotFlagRemoveEvent;
|
import com.plotsquared.core.events.PlotFlagRemoveEvent;
|
||||||
@ -46,9 +47,7 @@ import com.plotsquared.core.util.task.RunnableVal2;
|
|||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.format.Style;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
|
||||||
@ -85,10 +84,7 @@ public final class FlagCommand extends Command {
|
|||||||
private static boolean sendMessage(PlotPlayer<?> player) {
|
private static boolean sendMessage(PlotPlayer<?> player) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot flag <set | remove | add | list | info> <flag> <value>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot flag <set | remove | add | list | info> <flag> <value>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -103,10 +99,9 @@ public final class FlagCommand extends Command {
|
|||||||
if (flag instanceof IntegerFlag && MathMan.isInteger(value)) {
|
if (flag instanceof IntegerFlag && MathMan.isInteger(value)) {
|
||||||
try {
|
try {
|
||||||
int numeric = Integer.parseInt(value);
|
int numeric = Integer.parseInt(value);
|
||||||
// Getting full permission without ".<amount>" at the end
|
|
||||||
perm = perm.substring(0, perm.length() - value.length() - 1);
|
perm = perm.substring(0, perm.length() - value.length() - 1);
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
if (numeric >= 0) {
|
if (numeric > 0) {
|
||||||
int checkRange = PlotSquared.get().getPlatform().equalsIgnoreCase("bukkit") ?
|
int checkRange = PlotSquared.get().getPlatform().equalsIgnoreCase("bukkit") ?
|
||||||
numeric :
|
numeric :
|
||||||
Settings.Limit.MAX_PLOTS;
|
Settings.Limit.MAX_PLOTS;
|
||||||
@ -115,9 +110,9 @@ public final class FlagCommand extends Command {
|
|||||||
if (!result) {
|
if (!result) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of(
|
||||||
"node",
|
"node",
|
||||||
Tag.inserting(Component.text(perm + "." + numeric))
|
perm + "." + numeric
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -134,21 +129,16 @@ public final class FlagCommand extends Command {
|
|||||||
);
|
);
|
||||||
final boolean result = player.hasPermission(permission);
|
final boolean result = player.hasPermission(permission);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", permission));
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(permission)))
|
|
||||||
);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (final FlagParseException e) {
|
} catch (final FlagParseException e) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.flag_parse_error"),
|
TranslatableCaption.of("flag.flag_parse_error"),
|
||||||
TagResolver.builder()
|
Template.of("flag_name", flag.getName()),
|
||||||
.tag("flag_name", Tag.inserting(Component.text(flag.getName())))
|
Template.of("flag_value", e.getValue()),
|
||||||
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
|
Template.of("error", e.getErrorMessage().getComponent(player))
|
||||||
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
@ -165,10 +155,7 @@ public final class FlagCommand extends Command {
|
|||||||
perm = basePerm;
|
perm = basePerm;
|
||||||
}
|
}
|
||||||
if (!result) {
|
if (!result) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("permission.no_permission"), Template.of("node", perm));
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(perm)))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -192,7 +179,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_SET_FLAG_OTHER)) {
|
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_SET_FLAG_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_SET_FLAG_OTHER))
|
Template.of("node", String.valueOf(Permission.PERMISSION_SET_FLAG_OTHER))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -227,7 +214,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (best != null) {
|
if (best != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.not_valid_flag_suggested"),
|
TranslatableCaption.of("flag.not_valid_flag_suggested"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(best)))
|
Template.of("value", best)
|
||||||
);
|
);
|
||||||
suggested = true;
|
suggested = true;
|
||||||
}
|
}
|
||||||
@ -336,7 +323,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag set <flag> <value>")))
|
Template.of("value", "/plot flag set <flag> <value>")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -349,7 +336,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Flag set")))
|
Template.of("value", "Flag set")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -365,21 +352,15 @@ public final class FlagCommand extends Command {
|
|||||||
} catch (final FlagParseException e) {
|
} catch (final FlagParseException e) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.flag_parse_error"),
|
TranslatableCaption.of("flag.flag_parse_error"),
|
||||||
TagResolver.builder()
|
Template.of("flag_name", plotFlag.getName()),
|
||||||
.tag("flag_name", Tag.inserting(Component.text(plotFlag.getName())))
|
Template.of("flag_value", e.getValue()),
|
||||||
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
|
Template.of("error", e.getErrorMessage().getComponent(player))
|
||||||
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plot.setFlag(parsed);
|
plot.setFlag(parsed);
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("flag.flag_added"), Template.of("flag", String.valueOf(args[0])),
|
||||||
TranslatableCaption.of("flag.flag_added"),
|
Template.of("value", String.valueOf(parsed))
|
||||||
TagResolver.builder()
|
|
||||||
.tag("flag", Tag.inserting(Component.text(args[0])))
|
|
||||||
.tag("value", Tag.inserting(Component.text(parsed.toString())))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,7 +382,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag add <flag> <values>")))
|
Template.of("value", "/plot flag add <flag> <values>")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -414,7 +395,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Flag add")))
|
Template.of("value", "Flag add")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -435,11 +416,9 @@ public final class FlagCommand extends Command {
|
|||||||
} catch (FlagParseException e) {
|
} catch (FlagParseException e) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.flag_parse_error"),
|
TranslatableCaption.of("flag.flag_parse_error"),
|
||||||
TagResolver.builder()
|
Template.of("flag_name", plotFlag.getName()),
|
||||||
.tag("flag_name", Tag.inserting(Component.text(plotFlag.getName())))
|
Template.of("flag_value", e.getValue()),
|
||||||
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
|
Template.of("error", e.getErrorMessage().getComponent(player))
|
||||||
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -449,12 +428,8 @@ public final class FlagCommand extends Command {
|
|||||||
player.sendMessage(TranslatableCaption.of("flag.flag_not_added"));
|
player.sendMessage(TranslatableCaption.of("flag.flag_not_added"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("flag.flag_added"), Template.of("flag", String.valueOf(args[0])),
|
||||||
TranslatableCaption.of("flag.flag_added"),
|
Template.of("value", String.valueOf(parsed))
|
||||||
TagResolver.builder()
|
|
||||||
.tag("flag", Tag.inserting(Component.text(args[0])))
|
|
||||||
.tag("value", Tag.inserting(Component.text(parsed.toString())))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -476,7 +451,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (args.length != 1 && args.length != 2) {
|
if (args.length != 1 && args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag remove <flag> [values]")))
|
Template.of("value", "/plot flag remove <flag> [values]")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -490,7 +465,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("Flag remove")))
|
Template.of("value", "Flag remove")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -500,10 +475,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase()))
|
||||||
"node",
|
|
||||||
Tag.inserting(Component.text(Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase())))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -518,11 +490,9 @@ public final class FlagCommand extends Command {
|
|||||||
} catch (final FlagParseException e) {
|
} catch (final FlagParseException e) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.flag_parse_error"),
|
TranslatableCaption.of("flag.flag_parse_error"),
|
||||||
TagResolver.builder()
|
Template.of("flag_name", flag.getName()),
|
||||||
.tag("flag_name", Tag.inserting(Component.text(flag.getName())))
|
Template.of("flag_value", e.getValue()),
|
||||||
.tag("flag_value", Tag.inserting(Component.text(e.getValue())))
|
Template.of("error", String.valueOf(e.getErrorMessage()))
|
||||||
.tag("error", Tag.inserting(e.getErrorMessage().toComponent(player)))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -533,13 +503,10 @@ public final class FlagCommand extends Command {
|
|||||||
if (list.removeAll((List) parsedFlag.getValue())) {
|
if (list.removeAll((List) parsedFlag.getValue())) {
|
||||||
if (list.isEmpty()) {
|
if (list.isEmpty()) {
|
||||||
if (plot.removeFlag(flag)) {
|
if (plot.removeFlag(flag)) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("flag.flag_removed"), Template.of("flag", args[0]), Template.of(
|
||||||
TranslatableCaption.of("flag.flag_removed"),
|
"value",
|
||||||
TagResolver.builder()
|
String.valueOf(flagWithOldValue)
|
||||||
.tag("flag", Tag.inserting(Component.text(args[0])))
|
));
|
||||||
.tag("value", Tag.inserting(Component.text(flag.toString())))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(TranslatableCaption.of("flag.flag_not_removed"));
|
player.sendMessage(TranslatableCaption.of("flag.flag_not_removed"));
|
||||||
@ -551,10 +518,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (addEvent.getEventResult() == Result.DENY) {
|
if (addEvent.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("events.event_denied"),
|
TranslatableCaption.of("events.event_denied"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "Re-addition of " + plotFlag.getName())
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("Re-addition of " + plotFlag.getName()))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -577,13 +541,10 @@ public final class FlagCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("flag.flag_removed"), Template.of("flag", args[0]), Template.of(
|
||||||
TranslatableCaption.of("flag.flag_removed"),
|
"value",
|
||||||
TagResolver.builder()
|
String.valueOf(flagWithOldValue)
|
||||||
.tag("flag", Tag.inserting(Component.text(args[0])))
|
));
|
||||||
.tag("value", Tag.inserting(Component.text(flag.toString())))
|
|
||||||
.build()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@CommandDeclaration(command = "list",
|
@CommandDeclaration(command = "list",
|
||||||
@ -601,35 +562,34 @@ public final class FlagCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Map<Component, ArrayList<String>> flags = new HashMap<>();
|
final Map<String, ArrayList<String>> flags = new HashMap<>();
|
||||||
for (PlotFlag<?, ?> plotFlag : GlobalFlagContainer.getInstance().getRecognizedPlotFlags()) {
|
for (PlotFlag<?, ?> plotFlag : GlobalFlagContainer.getInstance().getRecognizedPlotFlags()) {
|
||||||
if (plotFlag instanceof InternalFlag) {
|
if (plotFlag instanceof InternalFlag) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final Component category = plotFlag.getFlagCategory().toComponent(player);
|
final String category = MINI_MESSAGE.stripTokens(plotFlag.getFlagCategory().getComponent(player));
|
||||||
final Collection<String> flagList = flags.computeIfAbsent(category, k -> new ArrayList<>());
|
final Collection<String> flagList =
|
||||||
|
flags.computeIfAbsent(category, k -> new ArrayList<>());
|
||||||
flagList.add(plotFlag.getName());
|
flagList.add(plotFlag.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final Map.Entry<Component, ArrayList<String>> entry : flags.entrySet()) {
|
for (final Map.Entry<String, ArrayList<String>> entry : flags.entrySet()) {
|
||||||
Collections.sort(entry.getValue());
|
Collections.sort(entry.getValue());
|
||||||
Component category =
|
Component category =
|
||||||
MINI_MESSAGE.deserialize(
|
MINI_MESSAGE.parse(
|
||||||
TranslatableCaption.of("flag.flag_list_categories").getComponent(player),
|
TranslatableCaption.of("flag.flag_list_categories").getComponent(player),
|
||||||
TagResolver.resolver("category", Tag.inserting(entry.getKey().style(Style.empty())))
|
Template.of("category", entry.getKey())
|
||||||
);
|
);
|
||||||
TextComponent.Builder builder = Component.text().append(category);
|
TextComponent.Builder builder = Component.text().append(category);
|
||||||
final Iterator<String> flagIterator = entry.getValue().iterator();
|
final Iterator<String> flagIterator = entry.getValue().iterator();
|
||||||
while (flagIterator.hasNext()) {
|
while (flagIterator.hasNext()) {
|
||||||
final String flag = flagIterator.next();
|
final String flag = flagIterator.next();
|
||||||
builder.append(MINI_MESSAGE
|
builder.append(MINI_MESSAGE
|
||||||
.deserialize(
|
.parse(
|
||||||
TranslatableCaption.of("flag.flag_list_flag").getComponent(player),
|
TranslatableCaption.of("flag.flag_list_flag").getComponent(player),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot flag info " + flag),
|
||||||
.tag("command", Tag.preProcessParsed("/plot flag info " + flag))
|
Template.of("flag", flag),
|
||||||
.tag("flag", Tag.inserting(Component.text(flag)))
|
Template.of("suffix", flagIterator.hasNext() ? ", " : "")
|
||||||
.tag("suffix", Tag.inserting(Component.text(flagIterator.hasNext() ? ", " : "")))
|
|
||||||
.build()
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.build())));
|
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.build())));
|
||||||
@ -653,7 +613,7 @@ public final class FlagCommand extends Command {
|
|||||||
if (args.length < 1) {
|
if (args.length < 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot flag info <flag>")))
|
Template.of("value", "/plot flag info <flag>")
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -661,17 +621,11 @@ public final class FlagCommand extends Command {
|
|||||||
if (plotFlag != null) {
|
if (plotFlag != null) {
|
||||||
player.sendMessage(TranslatableCaption.of("flag.flag_info_header"));
|
player.sendMessage(TranslatableCaption.of("flag.flag_info_header"));
|
||||||
// Flag name
|
// Flag name
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("flag.flag_info_name"), Template.of("flag", plotFlag.getName()));
|
||||||
TranslatableCaption.of("flag.flag_info_name"),
|
|
||||||
TagResolver.resolver("flag", Tag.inserting(Component.text(plotFlag.getName())))
|
|
||||||
);
|
|
||||||
// Flag category
|
// Flag category
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.flag_info_category"),
|
TranslatableCaption.of("flag.flag_info_category"),
|
||||||
TagResolver.resolver(
|
Templates.of(player, "value", plotFlag.getFlagCategory())
|
||||||
"value",
|
|
||||||
Tag.inserting(plotFlag.getFlagCategory().toComponent(player))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
// Flag description
|
// Flag description
|
||||||
// TODO maybe merge and \n instead?
|
// TODO maybe merge and \n instead?
|
||||||
@ -680,18 +634,16 @@ public final class FlagCommand extends Command {
|
|||||||
// Flag example
|
// Flag example
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.flag_info_example"),
|
TranslatableCaption.of("flag.flag_info_example"),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot flag set"),
|
||||||
.tag("command", Tag.preProcessParsed("/plot flag set"))
|
Template.of("flag", plotFlag.getName()),
|
||||||
.tag("flag", Tag.preProcessParsed(plotFlag.getName()))
|
Template.of("value", plotFlag.getExample())
|
||||||
.tag("value", Tag.preProcessParsed(plotFlag.getExample()))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
// Default value
|
// Default value
|
||||||
final String defaultValue = player.getLocation().getPlotArea().getFlagContainer()
|
final String defaultValue = player.getLocation().getPlotArea().getFlagContainer()
|
||||||
.getFlagErased(plotFlag.getClass()).toString();
|
.getFlagErased(plotFlag.getClass()).toString();
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("flag.flag_info_default_value"),
|
TranslatableCaption.of("flag.flag_info_default_value"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(defaultValue)))
|
Template.of("value", defaultValue)
|
||||||
);
|
);
|
||||||
// Footer. Done this way to prevent the duplicate-message-thingy from catching it
|
// Footer. Done this way to prevent the duplicate-message-thingy from catching it
|
||||||
player.sendMessage(TranslatableCaption.of("flag.flag_info_footer"));
|
player.sendMessage(TranslatableCaption.of("flag.flag_info_footer"));
|
||||||
|
@ -31,9 +31,7 @@ import com.plotsquared.core.util.TabCompletions;
|
|||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -65,7 +63,7 @@ public class Grant extends Command {
|
|||||||
checkTrue(
|
checkTrue(
|
||||||
args.length >= 1 && args.length <= 2,
|
args.length >= 1 && args.length <= 2,
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot grant <check | add> [player]")))
|
Template.of("value", "/plot grant <check | add> [player]")
|
||||||
);
|
);
|
||||||
final String arg0 = args[0].toLowerCase();
|
final String arg0 = args[0].toLowerCase();
|
||||||
switch (arg0) {
|
switch (arg0) {
|
||||||
@ -73,7 +71,7 @@ public class Grant extends Command {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_GRANT.format(arg0))) {
|
if (!player.hasPermission(Permission.PERMISSION_GRANT.format(arg0))) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_GRANT.format(arg0))))
|
Template.of("node", Permission.PERMISSION_GRANT.format(arg0))
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
@ -86,7 +84,7 @@ public class Grant extends Command {
|
|||||||
} else if (throwable != null || uuids.size() != 1) {
|
} else if (throwable != null || uuids.size() != 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(String.valueOf(uuids))))
|
Template.of("value", String.valueOf(uuids))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final UUID uuid = uuids.iterator().next();
|
final UUID uuid = uuids.iterator().next();
|
||||||
@ -97,7 +95,7 @@ public class Grant extends Command {
|
|||||||
if (args[0].equalsIgnoreCase("check")) {
|
if (args[0].equalsIgnoreCase("check")) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("grants.granted_plots"),
|
TranslatableCaption.of("grants.granted_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(access.get().orElse(0))))
|
Template.of("amount", String.valueOf(access.get().orElse(0)))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
access.set(access.get().orElse(0) + 1);
|
access.set(access.get().orElse(0) + 1);
|
||||||
@ -117,7 +115,7 @@ public class Grant extends Command {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("grants.granted_plots"),
|
TranslatableCaption.of("grants.granted_plots"),
|
||||||
TagResolver.resolver("amount", Tag.inserting(Component.text(granted)))
|
Template.of("amount", String.valueOf(granted))
|
||||||
);
|
);
|
||||||
} else { // add
|
} else { // add
|
||||||
int amount;
|
int amount;
|
||||||
@ -132,7 +130,7 @@ public class Grant extends Command {
|
|||||||
DBFunc.addPersistentMeta(uuid, key, rawData, replace);
|
DBFunc.addPersistentMeta(uuid, key, rawData, replace);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("grants.added"),
|
TranslatableCaption.of("grants.added"),
|
||||||
TagResolver.resolver("grants", Tag.inserting(Component.text(amount)))
|
Template.of("grants", String.valueOf(amount))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,8 +28,7 @@ import com.plotsquared.core.util.task.RunnableVal2;
|
|||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -60,10 +59,9 @@ public class Help extends Command {
|
|||||||
RunnableVal2<Command, CommandResult> whenDone
|
RunnableVal2<Command, CommandResult> whenDone
|
||||||
) {
|
) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 0 -> {
|
case 0:
|
||||||
return displayHelp(player, null, 0);
|
return displayHelp(player, null, 0);
|
||||||
}
|
case 1:
|
||||||
case 1 -> {
|
|
||||||
if (MathMan.isInteger(args[0])) {
|
if (MathMan.isInteger(args[0])) {
|
||||||
try {
|
try {
|
||||||
return displayHelp(player, null, Integer.parseInt(args[0]));
|
return displayHelp(player, null, Integer.parseInt(args[0]));
|
||||||
@ -73,8 +71,7 @@ public class Help extends Command {
|
|||||||
} else {
|
} else {
|
||||||
return displayHelp(player, args[0], 1);
|
return displayHelp(player, args[0], 1);
|
||||||
}
|
}
|
||||||
}
|
case 2:
|
||||||
case 2 -> {
|
|
||||||
if (MathMan.isInteger(args[1])) {
|
if (MathMan.isInteger(args[1])) {
|
||||||
try {
|
try {
|
||||||
return displayHelp(player, args[0], Integer.parseInt(args[1]));
|
return displayHelp(player, args[0], Integer.parseInt(args[1]));
|
||||||
@ -83,8 +80,8 @@ public class Help extends Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
default:
|
||||||
default -> sendUsage(player);
|
sendUsage(player);
|
||||||
}
|
}
|
||||||
return CompletableFuture.completedFuture(true);
|
return CompletableFuture.completedFuture(true);
|
||||||
}
|
}
|
||||||
@ -113,36 +110,27 @@ public class Help extends Command {
|
|||||||
}
|
}
|
||||||
if (cat == null && page == 0) {
|
if (cat == null && page == 0) {
|
||||||
TextComponent.Builder builder = Component.text();
|
TextComponent.Builder builder = Component.text();
|
||||||
builder.append(MINI_MESSAGE.deserialize(TranslatableCaption.of("help.help_header").getComponent(player)));
|
builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("help.help_header").getComponent(player)));
|
||||||
for (CommandCategory c : CommandCategory.values()) {
|
for (CommandCategory c : CommandCategory.values()) {
|
||||||
if (!c.canAccess(player)) {
|
if (!c.canAccess(player)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE
|
builder.append(Component.newline()).append(MINI_MESSAGE
|
||||||
.deserialize(
|
.parse(
|
||||||
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot help"),
|
||||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
Template.of("category", c.name().toLowerCase()),
|
||||||
.tag("category", Tag.inserting(Component.text(c.name().toLowerCase())))
|
Template.of("category_desc", c.getComponent(player))
|
||||||
.tag("category_desc", Tag.inserting(c.toComponent(player)))
|
|
||||||
.build()
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE
|
builder.append(Component.newline()).append(MINI_MESSAGE
|
||||||
.deserialize(
|
.parse(
|
||||||
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
TranslatableCaption.of("help.help_info_item").getComponent(player),
|
||||||
TagResolver.builder()
|
Template.of("command", "/plot help"),
|
||||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
Template.of("category", "all"),
|
||||||
.tag("category", Tag.inserting(Component.text("all")))
|
Template.of("category_desc", "Display all commands")
|
||||||
.tag(
|
|
||||||
"category_desc",
|
|
||||||
Tag.inserting(TranslatableCaption
|
|
||||||
.of("help.help_display_all_commands")
|
|
||||||
.toComponent(player))
|
|
||||||
)
|
|
||||||
.build()
|
|
||||||
));
|
));
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
|
builder.append(Component.newline()).append(MINI_MESSAGE.parse(TranslatableCaption
|
||||||
.of("help.help_footer")
|
.of("help.help_footer")
|
||||||
.getComponent(player)));
|
.getComponent(player)));
|
||||||
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.asComponent())));
|
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.asComponent())));
|
||||||
|
@ -34,9 +34,7 @@ import com.plotsquared.core.util.query.PlotQuery;
|
|||||||
import com.plotsquared.core.util.query.SortingStrategy;
|
import com.plotsquared.core.util.query.SortingStrategy;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -73,10 +71,8 @@ public class HomeCommand extends Command {
|
|||||||
} else if (plots.size() < page || page < 1) {
|
} else if (plots.size() < page || page < 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("invalid.number_not_in_range"),
|
TranslatableCaption.of("invalid.number_not_in_range"),
|
||||||
TagResolver.builder()
|
Template.of("min", "1"),
|
||||||
.tag("min", Tag.inserting(Component.text(1)))
|
Template.of("max", String.valueOf(plots.size()))
|
||||||
.tag("max", Tag.inserting(Component.text(plots.size())))
|
|
||||||
.build()
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -110,7 +106,7 @@ public class HomeCommand extends Command {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_VISIT_OWNED) && !player.hasPermission(Permission.PERMISSION_HOME)) {
|
if (!player.hasPermission(Permission.PERMISSION_VISIT_OWNED) && !player.hasPermission(Permission.PERMISSION_HOME)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_VISIT_OWNED.toString())))
|
Template.of("node", Permission.PERMISSION_VISIT_OWNED.toString())
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
@ -132,7 +128,7 @@ public class HomeCommand extends Command {
|
|||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("invalid.not_a_number"),
|
TranslatableCaption.of("invalid.not_a_number"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(identifier)))
|
Template.of("value", identifier)
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
@ -173,7 +169,7 @@ public class HomeCommand extends Command {
|
|||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("invalid.not_a_number"),
|
TranslatableCaption.of("invalid.not_a_number"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(identifier)))
|
Template.of("value", identifier)
|
||||||
);
|
);
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ package com.plotsquared.core.command;
|
|||||||
|
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
import com.plotsquared.core.configuration.caption.StaticCaption;
|
import com.plotsquared.core.configuration.caption.StaticCaption;
|
||||||
|
import com.plotsquared.core.configuration.caption.Templates;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.MetaDataAccess;
|
import com.plotsquared.core.player.MetaDataAccess;
|
||||||
@ -34,8 +35,7 @@ import com.plotsquared.core.util.TabCompletions;
|
|||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -71,44 +71,41 @@ public class Inbox extends SubCommand {
|
|||||||
max = comments.length;
|
max = comments.length;
|
||||||
}
|
}
|
||||||
TextComponent.Builder builder = Component.text();
|
TextComponent.Builder builder = Component.text();
|
||||||
builder.append(MINI_MESSAGE.deserialize(
|
builder.append(MINI_MESSAGE.parse(TranslatableCaption.of("list.comment_list_header_paged").getComponent(player) + '\n',
|
||||||
TranslatableCaption.of("list.comment_list_header_paged").getComponent(player) + '\n',
|
Template.of("amount", String.valueOf(comments.length)), Template.of("cur", String.valueOf(page + 1)),
|
||||||
TagResolver.builder()
|
Template.of("max", String.valueOf(totalPages + 1)), Template.of("word", "all")
|
||||||
.tag("amount", Tag.inserting(Component.text(comments.length)))
|
|
||||||
.tag("cur", Tag.inserting(Component.text(page + 1)))
|
|
||||||
.tag("max", Tag.inserting(Component.text(totalPages + 1)))
|
|
||||||
.tag("word", Tag.inserting(Component.text("all")))
|
|
||||||
.build()
|
|
||||||
));
|
));
|
||||||
|
|
||||||
// This might work xD
|
// This might work xD
|
||||||
for (int x = page * 12; x < max; x++) {
|
for (int x = page * 12; x < max; x++) {
|
||||||
PlotComment comment = comments[x];
|
PlotComment comment = comments[x];
|
||||||
Component commentColored;
|
Component commentColored;
|
||||||
if (player.getName().equals(comment.senderName())) {
|
if (player.getName().equals(comment.senderName)) {
|
||||||
commentColored = MINI_MESSAGE
|
commentColored = MINI_MESSAGE
|
||||||
.deserialize(
|
.parse(
|
||||||
TranslatableCaption.of("list.comment_list_by_lister").getComponent(player),
|
TranslatableCaption.of("list.comment_list_by_lister").getComponent(player),
|
||||||
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment())))
|
Template.of("comment", comment.comment)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
commentColored = MINI_MESSAGE
|
commentColored = MINI_MESSAGE
|
||||||
.deserialize(
|
.parse(
|
||||||
TranslatableCaption.of("list.comment_list_by_other").getComponent(player),
|
TranslatableCaption.of("list.comment_list_by_other").getComponent(player),
|
||||||
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment())))
|
Template.of("comment", comment.comment)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
TagResolver resolver = TagResolver.builder()
|
Template number = Template.of("number", String.valueOf(x));
|
||||||
.tag("number", Tag.inserting(Component.text(x)))
|
Template world = Template.of("world", comment.world);
|
||||||
.tag("world", Tag.inserting(Component.text(comment.world())))
|
Template plot_id = Template.of("plot_id", comment.id.getX() + ";" + comment.id.getY());
|
||||||
.tag("plot_id", Tag.inserting(Component.text(comment.id().getX() + ";" + comment.id().getY())))
|
Template commenter = Template.of("commenter", comment.senderName);
|
||||||
.tag("commenter", Tag.inserting(Component.text(comment.senderName())))
|
Template commentTemplate = Template.of("comment", commentColored);
|
||||||
.tag("comment", Tag.inserting(commentColored))
|
|
||||||
.build();
|
|
||||||
builder.append(MINI_MESSAGE
|
builder.append(MINI_MESSAGE
|
||||||
.deserialize(
|
.parse(
|
||||||
TranslatableCaption.of("list.comment_list_comment").getComponent(player),
|
TranslatableCaption.of("list.comment_list_comment").getComponent(player),
|
||||||
resolver
|
number,
|
||||||
|
world,
|
||||||
|
plot_id,
|
||||||
|
commenter,
|
||||||
|
commentTemplate
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.build())));
|
player.sendMessage(StaticCaption.of(MINI_MESSAGE.serialize(builder.build())));
|
||||||
@ -137,7 +134,7 @@ public class Inbox extends SubCommand {
|
|||||||
int unread = 0;
|
int unread = 0;
|
||||||
for (PlotComment comment : value) {
|
for (PlotComment comment : value) {
|
||||||
total++;
|
total++;
|
||||||
if (comment.timestamp() > CommentManager
|
if (comment.timestamp > CommentManager
|
||||||
.getTimestamp(player, inbox.toString())) {
|
.getTimestamp(player, inbox.toString())) {
|
||||||
unread++;
|
unread++;
|
||||||
}
|
}
|
||||||
@ -145,23 +142,20 @@ public class Inbox extends SubCommand {
|
|||||||
if (total != 0) {
|
if (total != 0) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.inbox_item"),
|
TranslatableCaption.of("comment.inbox_item"),
|
||||||
TagResolver.resolver(
|
Template.of("value", inbox + " (" + total + '/' + unread + ')')
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text(inbox + " (" + total + '/' + unread + ')'))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.inbox_item"),
|
TranslatableCaption.of("comment.inbox_item"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(inbox.toString())))
|
Template.of("value", inbox.toString())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
})) {
|
})) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.inbox_item"),
|
TranslatableCaption.of("comment.inbox_item"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(inbox.toString())))
|
Template.of("value", inbox.toString())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -172,10 +166,7 @@ public class Inbox extends SubCommand {
|
|||||||
if (inbox == null) {
|
if (inbox == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.invalid_inbox"),
|
TranslatableCaption.of("comment.invalid_inbox"),
|
||||||
TagResolver.resolver(
|
Template.of("list", StringMan.join(CommentManager.inboxes.keySet(), ", "))
|
||||||
"list",
|
|
||||||
Tag.inserting(Component.text(StringMan.join(CommentManager.inboxes.keySet(), ", ")))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -190,7 +181,7 @@ public class Inbox extends SubCommand {
|
|||||||
final int page;
|
final int page;
|
||||||
if (args.length > 1) {
|
if (args.length > 1) {
|
||||||
switch (args[1].toLowerCase()) {
|
switch (args[1].toLowerCase()) {
|
||||||
case "delete" -> {
|
case "delete":
|
||||||
if (!inbox.canModify(plot, player)) {
|
if (!inbox.canModify(plot, player)) {
|
||||||
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
||||||
return false;
|
return false;
|
||||||
@ -198,10 +189,7 @@ public class Inbox extends SubCommand {
|
|||||||
if (args.length != 3) {
|
if (args.length != 3) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot inbox " + inbox + " delete <index>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot inbox " + inbox + " delete <index>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -211,27 +199,25 @@ public class Inbox extends SubCommand {
|
|||||||
if (index < 1) {
|
if (index < 1) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.not_valid_inbox_index"),
|
TranslatableCaption.of("comment.not_valid_inbox_index"),
|
||||||
TagResolver.resolver("number", Tag.inserting(Component.text(index)))
|
Templates.of("number", index)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver(
|
Template.of("value", "/plot inbox " + inbox + " delete <index>")
|
||||||
"value",
|
|
||||||
Tag.inserting(Component.text("/plot inbox " + inbox + " delete <index>"))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inbox.getComments(plot, new RunnableVal<>() {
|
if (!inbox.getComments(plot, new RunnableVal<>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(List<PlotComment> value) {
|
public void run(List<PlotComment> value) {
|
||||||
if (index > value.size()) {
|
if (index > value.size()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.not_valid_inbox_index"),
|
TranslatableCaption.of("comment.not_valid_inbox_index"),
|
||||||
TagResolver.resolver("number", Tag.inserting(Component.text(index)))
|
Templates.of("number", index)
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -241,7 +227,7 @@ public class Inbox extends SubCommand {
|
|||||||
if (success) {
|
if (success) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_removed_success"),
|
TranslatableCaption.of("comment.comment_removed_success"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(comment.comment())))
|
Template.of("value", comment.comment)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -253,8 +239,7 @@ public class Inbox extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
case "clear":
|
||||||
case "clear" -> {
|
|
||||||
if (!inbox.canModify(plot, player)) {
|
if (!inbox.canModify(plot, player)) {
|
||||||
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
||||||
}
|
}
|
||||||
@ -263,20 +248,18 @@ public class Inbox extends SubCommand {
|
|||||||
if (!comments.isEmpty()) {
|
if (!comments.isEmpty()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_removed_success"),
|
TranslatableCaption.of("comment.comment_removed_success"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("*")))
|
Template.of("value", String.valueOf(comments))
|
||||||
);
|
);
|
||||||
plot.getPlotCommentContainer().removeComments(comments);
|
plot.getPlotCommentContainer().removeComments(comments);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
try {
|
try {
|
||||||
page = Integer.parseInt(args[1]);
|
page = Integer.parseInt(args[1]);
|
||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
sendUsage(player);
|
sendUsage(player);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
page = 1;
|
page = 1;
|
||||||
|
@ -28,9 +28,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.flag.implementations.HideInfoFlag;
|
import com.plotsquared.core.plot.flag.implementations.HideInfoFlag;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -52,9 +50,8 @@ public class Info extends SubCommand {
|
|||||||
arg = args[0];
|
arg = args[0];
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
// TODO: (re?)implement /plot info inv. (it was never properly implemented)
|
// TODO: (re?)implement /plot info inv. (it was never properly implemented)
|
||||||
case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" ->
|
case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" -> plot = Plot
|
||||||
plot = Plot
|
.getPlotFromString(player, null, false);
|
||||||
.getPlotFromString(player, null, false);
|
|
||||||
default -> {
|
default -> {
|
||||||
plot = Plot.getPlotFromString(player, arg, false);
|
plot = Plot.getPlotFromString(player, arg, false);
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
@ -93,10 +90,7 @@ public class Info extends SubCommand {
|
|||||||
.hasPermission(Permission.PERMISSION_AREA_INFO_FORCE.toString())) {
|
.hasPermission(Permission.PERMISSION_AREA_INFO_FORCE.toString())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
Template.of("node", Permission.PERMISSION_AREA_INFO_FORCE.toString())
|
||||||
"node",
|
|
||||||
Tag.inserting(Permission.PERMISSION_AREA_INFO_FORCE)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -118,10 +112,7 @@ public class Info extends SubCommand {
|
|||||||
if (!hasOwner && !containsEveryone && !trustedEveryone) {
|
if (!hasOwner && !containsEveryone && !trustedEveryone) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("info.plot_info_unclaimed"),
|
TranslatableCaption.of("info.plot_info_unclaimed"),
|
||||||
TagResolver.resolver(
|
Template.of("plot", plot.getId().getX() + ";" + plot.getId().getY())
|
||||||
"plot",
|
|
||||||
Tag.inserting(Component.text(plot.getId().getX() + ";" + plot.getId().getY()))
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -30,9 +30,7 @@ import com.plotsquared.core.plot.world.PlotAreaManager;
|
|||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -82,7 +80,7 @@ public class Kick extends SubCommand {
|
|||||||
} else if (throwable != null || uuids.isEmpty()) {
|
} else if (throwable != null || uuids.isEmpty()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
Set<PlotPlayer<?>> players = new HashSet<>();
|
Set<PlotPlayer<?>> players = new HashSet<>();
|
||||||
@ -105,22 +103,22 @@ public class Kick extends SubCommand {
|
|||||||
if (players.isEmpty()) {
|
if (players.isEmpty()) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (PlotPlayer<?> player2 : players) {
|
for (PlotPlayer<?> player2 : players) {
|
||||||
if (!plot.equals(player2.getCurrentPlot())) {
|
if (!plot.equals(player2.getCurrentPlot())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("kick.player_not_in_plot"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("player", Tag.inserting(Component.text(player2.getName())))
|
Template.of("value", args[0])
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (player2.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
|
if (player2.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("kick.cannot_kick_player"),
|
TranslatableCaption.of("cluster.cannot_kick_player"),
|
||||||
TagResolver.resolver("player", Tag.inserting(Component.text(player2.getName())))
|
Template.of("name", player2.getName())
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -153,7 +151,7 @@ public class Kick extends SubCommand {
|
|||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return TabCompletions.completePlayersInPlot(player, plot, String.join(",", args).trim(),
|
return TabCompletions.completePlayersInPlot(plot, String.join(",", args).trim(),
|
||||||
Collections.singletonList(player.getName())
|
Collections.singletonList(player.getName())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -69,7 +67,7 @@ public class Leave extends Command {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("member.plot_left"),
|
TranslatableCaption.of("member.plot_left"),
|
||||||
TagResolver.resolver("player", Tag.inserting(Component.text(player.getName())))
|
Template.of("player", player.getName())
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -33,9 +33,7 @@ import com.plotsquared.core.util.EventDispatcher;
|
|||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -153,7 +151,7 @@ public class Like extends SubCommand {
|
|||||||
if (oldRating != null) {
|
if (oldRating != null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("ratings.rating_already_exists"),
|
TranslatableCaption.of("ratings.rating_already_exists"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -171,12 +169,12 @@ public class Like extends SubCommand {
|
|||||||
if (like) {
|
if (like) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("ratings.rating_liked"),
|
TranslatableCaption.of("ratings.rating_liked"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("ratings.rating_disliked"),
|
TranslatableCaption.of("ratings.rating_disliked"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
Template.of("plot", plot.getId().toString())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import com.plotsquared.core.PlotSquared;
|
|||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.Caption;
|
import com.plotsquared.core.configuration.caption.Caption;
|
||||||
import com.plotsquared.core.configuration.caption.CaptionHolder;
|
import com.plotsquared.core.configuration.caption.CaptionHolder;
|
||||||
|
import com.plotsquared.core.configuration.caption.Templates;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.database.DBFunc;
|
import com.plotsquared.core.database.DBFunc;
|
||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
@ -45,8 +46,7 @@ import com.plotsquared.core.util.task.RunnableVal3;
|
|||||||
import com.plotsquared.core.uuid.UUIDMapping;
|
import com.plotsquared.core.uuid.UUIDMapping;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.Template;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -123,7 +123,7 @@ public class ListCmd extends SubCommand {
|
|||||||
public void noArgs(PlotPlayer<?> player) {
|
public void noArgs(PlotPlayer<?> player) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.subcommand_set_options_header"),
|
TranslatableCaption.of("commandconfig.subcommand_set_options_header"),
|
||||||
TagResolver.resolver("values", Tag.inserting(Component.text(Arrays.toString(getArgumentList(player)))))
|
Templates.of("values", Arrays.toString(getArgumentList(player)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,14 +159,9 @@ public class ListCmd extends SubCommand {
|
|||||||
if (query == null) {
|
if (query == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.did_you_mean"),
|
TranslatableCaption.of("commandconfig.did_you_mean"),
|
||||||
TagResolver.resolver(
|
Template.of(
|
||||||
"value",
|
"value",
|
||||||
Tag.inserting(Component.text(
|
new StringComparison<>(args[0], new String[]{"mine", "shared", "world", "all"}).getBestMatch()
|
||||||
new StringComparison<>(
|
|
||||||
args[0],
|
|
||||||
new String[]{"mine", "shared", "world", "all"}
|
|
||||||
).getBestMatch()
|
|
||||||
))
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -194,7 +189,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_MINE)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_MINE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.mine")))
|
Templates.of("node", "plots.list.mine")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -209,7 +204,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_SHARED)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_SHARED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.shared")))
|
Templates.of("node", "plots.list.shared")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -222,14 +217,14 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
|
Templates.of("node", "plots.list.world")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission("plots.list.world." + world)) {
|
if (!player.hasPermission("plots.list.world." + world)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
|
Templates.of("node", "plots.list.world." + world)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -239,7 +234,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_EXPIRED)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_EXPIRED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.expired")))
|
Templates.of("node", "plots.list.expired")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -253,14 +248,14 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_AREA)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_AREA)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.area")))
|
Templates.of("node", "plots.list.area")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission("plots.list.world." + world)) {
|
if (!player.hasPermission("plots.list.world." + world)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
|
Templates.of("node", "plots.list.world." + world)
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -274,7 +269,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_ALL)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_ALL)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.all")))
|
Templates.of("node", "plots.list.all")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -284,7 +279,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_DONE)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_DONE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.done")))
|
Templates.of("node", "plots.list.done")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -299,7 +294,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_TOP)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_TOP)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.top")))
|
Templates.of("node", "plots.list.top")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -310,7 +305,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_FOR_SALE)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_FOR_SALE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.forsale")))
|
Templates.of("node", "plots.list.forsale")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -323,7 +318,7 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_UNOWNED)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_UNOWNED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.unowned")))
|
Templates.of("node", "plots.list.unowned")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -333,14 +328,14 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.fuzzy")))
|
Templates.of("node", "plots.list.fuzzy")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (args.length < (page == -1 ? 2 : 3)) {
|
if (args.length < (page == -1 ? 2 : 3)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot list fuzzy <search...> [#]")))
|
Templates.of("value", "/plot list fuzzy <search...> [#]")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -358,14 +353,14 @@ public class ListCmd extends SubCommand {
|
|||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
|
Templates.of("node", "plots.list.world")
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission("plots.list.world." + args[0])) {
|
if (!player.hasPermission("plots.list.world." + args[0])) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + args[0])))
|
Templates.of("node", "plots.list.world." + args[0])
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -384,15 +379,12 @@ public class ListCmd extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (uuid == null) {
|
if (uuid == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("errors.invalid_player"), Templates.of("value", args[0]));
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_PLAYER)) {
|
if (!player.hasPermission(Permission.PERMISSION_LIST_PLAYER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.player")))
|
Templates.of("node", "plots.list.player")
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
sort[0] = false;
|
sort[0] = false;
|
||||||
@ -428,34 +420,32 @@ public class ListCmd extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
color = TranslatableCaption.of("info.plot_list_default");
|
color = TranslatableCaption.of("info.plot_list_default");
|
||||||
}
|
}
|
||||||
Component trusted = MINI_MESSAGE.deserialize(
|
Component trusted = MINI_MESSAGE.parse(
|
||||||
TranslatableCaption.of("info.plot_info_trusted").getComponent(player),
|
TranslatableCaption.of("info.plot_info_trusted").getComponent(player),
|
||||||
TagResolver.resolver("trusted", Tag.inserting(PlayerManager.getPlayerList(plot.getTrusted(), player)))
|
Template.of("trusted", PlayerManager.getPlayerList(plot.getTrusted(), player))
|
||||||
);
|
);
|
||||||
Component members = MINI_MESSAGE.deserialize(
|
Component members = MINI_MESSAGE.parse(
|
||||||
TranslatableCaption.of("info.plot_info_members").getComponent(player),
|
TranslatableCaption.of("info.plot_info_members").getComponent(player),
|
||||||
TagResolver.resolver("members", Tag.inserting(PlayerManager.getPlayerList(plot.getMembers(), player)))
|
Template.of("members", PlayerManager.getPlayerList(plot.getMembers(), player))
|
||||||
);
|
);
|
||||||
TagResolver.Builder finalResolver = TagResolver.builder();
|
Template command_tp = Template.of("command_tp", "/plot visit " + plot.getArea() + ";" + plot.getId());
|
||||||
finalResolver.tag(
|
Template command_info = Template.of("command_info", "/plot info " + plot.getArea() + ";" + plot.getId());
|
||||||
"command_tp",
|
Template hover_info =
|
||||||
Tag.preProcessParsed("/plot visit " + plot.getArea() + ";" + plot.getId())
|
Template.of(
|
||||||
|
"hover_info",
|
||||||
|
MINI_MESSAGE.serialize(Component
|
||||||
|
.text()
|
||||||
|
.append(trusted)
|
||||||
|
.append(Component.newline())
|
||||||
|
.append(members)
|
||||||
|
.asComponent())
|
||||||
|
);
|
||||||
|
Template numberTemplate = Template.of("number", String.valueOf(i));
|
||||||
|
Template plotTemplate = Template.of(
|
||||||
|
"plot",
|
||||||
|
MINI_MESSAGE.parse(color.getComponent(player), Template.of("plot", plot.toString()))
|
||||||
);
|
);
|
||||||
finalResolver.tag(
|
|
||||||
"command_info",
|
|
||||||
Tag.preProcessParsed("/plot info " + plot.getArea() + ";" + plot.getId())
|
|
||||||
);
|
|
||||||
finalResolver.tag("hover_info", Tag.inserting(
|
|
||||||
Component.text()
|
|
||||||
.append(trusted)
|
|
||||||
.append(Component.newline())
|
|
||||||
.append(members)
|
|
||||||
.asComponent()
|
|
||||||
));
|
|
||||||
finalResolver.tag("number", Tag.inserting(Component.text(i)));
|
|
||||||
finalResolver.tag("plot", Tag.inserting(MINI_MESSAGE.deserialize(
|
|
||||||
color.getComponent(player), TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
|
|
||||||
)));
|
|
||||||
String prefix = "";
|
String prefix = "";
|
||||||
String online = TranslatableCaption.of("info.plot_list_player_online").getComponent(player);
|
String online = TranslatableCaption.of("info.plot_list_player_online").getComponent(player);
|
||||||
String offline = TranslatableCaption.of("info.plot_list_player_offline").getComponent(player);
|
String offline = TranslatableCaption.of("info.plot_list_player_offline").getComponent(player);
|
||||||
@ -464,37 +454,35 @@ public class ListCmd extends SubCommand {
|
|||||||
String everyone = TranslatableCaption.of("info.plot_list_player_everyone").getComponent(player);
|
String everyone = TranslatableCaption.of("info.plot_list_player_everyone").getComponent(player);
|
||||||
TextComponent.Builder builder = Component.text();
|
TextComponent.Builder builder = Component.text();
|
||||||
if (plot.getFlag(ServerPlotFlag.class)) {
|
if (plot.getFlag(ServerPlotFlag.class)) {
|
||||||
TagResolver serverResolver = TagResolver.resolver(
|
Template serverTemplate = Template.of(
|
||||||
"server",
|
"info.server",
|
||||||
Tag.inserting(TranslatableCaption.of("info.server").toComponent(player))
|
TranslatableCaption.of("info.server").getComponent(player)
|
||||||
);
|
);
|
||||||
builder.append(MINI_MESSAGE.deserialize(server, serverResolver));
|
builder.append(MINI_MESSAGE.parse(server, serverTemplate));
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
|
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
|
||||||
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
|
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
|
||||||
for (final UUIDMapping uuidMapping : names) {
|
for (final UUIDMapping uuidMapping : names) {
|
||||||
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.uuid());
|
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.getUuid());
|
||||||
TagResolver resolver = TagResolver.builder()
|
Template prefixTemplate = Template.of("prefix", prefix);
|
||||||
.tag("prefix", Tag.inserting(Component.text(prefix)))
|
Template playerTemplate = Template.of("player", uuidMapping.getUsername());
|
||||||
.tag("player", Tag.inserting(Component.text(uuidMapping.username())))
|
|
||||||
.build();
|
|
||||||
if (pp != null) {
|
if (pp != null) {
|
||||||
builder.append(MINI_MESSAGE.deserialize(online, resolver));
|
builder.append(MINI_MESSAGE.parse(online, prefixTemplate, playerTemplate));
|
||||||
} else if (uuidMapping.username().equalsIgnoreCase("unknown")) {
|
} else if (uuidMapping.getUsername().equalsIgnoreCase("unknown")) {
|
||||||
TagResolver unknownResolver = TagResolver.resolver(
|
Template unknownTemplate = Template.of(
|
||||||
"unknown",
|
"info.unknown",
|
||||||
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
|
TranslatableCaption.of("info.unknown").getComponent(player)
|
||||||
);
|
);
|
||||||
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
|
builder.append(MINI_MESSAGE.parse(unknown, unknownTemplate));
|
||||||
} else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) {
|
} else if (uuidMapping.getUuid().equals(DBFunc.EVERYONE)) {
|
||||||
TagResolver everyoneResolver = TagResolver.resolver(
|
Template everyoneTemplate = Template.of(
|
||||||
"everyone",
|
"info.everyone",
|
||||||
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
|
TranslatableCaption.of("info.everyone").getComponent(player)
|
||||||
);
|
);
|
||||||
builder.append(MINI_MESSAGE.deserialize(everyone, everyoneResolver));
|
builder.append(MINI_MESSAGE.parse(everyone, everyoneTemplate));
|
||||||
} else {
|
} else {
|
||||||
builder.append(MINI_MESSAGE.deserialize(offline, resolver));
|
builder.append(MINI_MESSAGE.parse(offline, prefixTemplate, playerTemplate));
|
||||||
}
|
}
|
||||||
prefix = ", ";
|
prefix = ", ";
|
||||||
}
|
}
|
||||||
@ -510,16 +498,15 @@ public class ListCmd extends SubCommand {
|
|||||||
}
|
}
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(playerBuilder.toString())))
|
Templates.of("value", playerBuilder.toString())
|
||||||
);
|
);
|
||||||
} catch (TimeoutException e) {
|
} catch (TimeoutException e) {
|
||||||
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
finalResolver.tag("players", Tag.inserting(builder.asComponent()));
|
Template players = Template.of("players", builder.asComponent());
|
||||||
finalResolver.tag("size", Tag.inserting(Component.text(plot.getConnectedPlots().size())));
|
|
||||||
caption.set(TranslatableCaption.of("info.plot_list_item"));
|
caption.set(TranslatableCaption.of("info.plot_list_item"));
|
||||||
caption.setTagResolvers(finalResolver.build());
|
caption.setTemplates(command_tp, command_info, hover_info, numberTemplate, plotTemplate, players);
|
||||||
}
|
}
|
||||||
}, "/plot list " + args[0], TranslatableCaption.of("list.plot_list_header_paged"));
|
}, "/plot list " + args[0], TranslatableCaption.of("list.plot_list_header_paged"));
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user