diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 3112e129d..000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-# These are supported funding model platforms
-
-#github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
-#patreon: # Replace with a single Patreon username
-#open_collective: # Replace with a single Open Collective username
-ko_fi: ghostchu
-#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
-#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
-#liberapay: # Replace with a single Liberapay username
-#issuehunt: # Replace with a single IssueHunt username
-#otechie: # Replace with a single Otechie username
-#lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
-custom: [ "https://imgur.com/a/fgES06K" ]
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
deleted file mode 100644
index 00b6cbfda..000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: 'Bug Report'
-description: 'Report a bug with QuickShop to us.'
-
-title: '[BUG] '
-labels:
- - 'Bug'
-
-body:
- - type: 'markdown'
- attributes:
- value: |-
- ## Please Read!
- This Form is reserved for **Bug reports only!**
-
- - For performance issues with QuickShop, open a [Performance Report](https://github.com/Ghost-chu/QuickShop-Hikari/issues/new?template=performance.yml&labels=performance).
- - For contributions towards the wiki, open a [Wiki Contribution](https://github.com/Ghost-chu/QuickShop-Hikari/issues/new?template=wiki_contribution.yml.yml&labels=wiki).
- - Feature requests or other suggestions should be made in the [Discussions](https://github.com/Ghost-chu/QuickShop-Hikari/discussions).
-
- Please fill out all required fields in their entirety and as detailed as possible. Failing to do so could get your issue closed without any warning.
- - type: 'textarea'
- attributes:
- label: 'Description'
- description: |-
- Describe the bug as detailed as possible.
- You cann upload screenshots of the bug in the "screenshots" section further down.
- placeholder: 'When I used Quickshop did ... happen.'
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Steps to reproduce'
- description: 'List your steps on how to reproduce this bug reliably here.'
- placeholder: |-
- 1. Do something
- 2. ...
- 3. Bug!
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Expected Behaviour'
- description: 'What did you expect QuickShop to do?'
- placeholder: 'QuickShop should ...'
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Screenshots'
- description: |-
- Provide screenshots to show the bug, if possible.
- Gifs or Videos are also welcome if they can help explaining the issue.
- placeholder: 'When I used Quickshop did ... happen.'
- validations:
- required: true
- - type: 'input'
- attributes:
- label: '`/quickshop paste` URL'
- description: |-
- Please execute `/quickshop paste` in-game or `quickshop paste` in your server console.
- The plugin will generate a URL that you can then post in the field below.
-
- If you can't create a paste, should you upload other files such as the `latest.log` file to https://paste.helpch.at and share the URL.
-
- If QuickShop is unable to generate a Paste will it create a file under `plugins/QuickShop/`
- placeholder: 'https://paste.helpch.at/...'
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Additional Context'
- description: 'Feel free to include any info that may not fit any of the previous sections.'
- placeholder: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam ...'
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index 7166f29c4..000000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-blank_issues_enabled: true
-contact_links:
- - name: 'Development Builds'
- about: |-
- Bleeding-edge builds with the latest features and bug fixes.
- DEV-BUILDS MAY CAUSE DAMAGE TO YOUR SERVER! MAKE BACKUPS FIRST!
- url: 'https://ci.codemc.io/job/Ghost-chu/job/QuickShop-Hikari/'
- - name: 'Feature Requests'
- about: 'Use our discussions page to request changes towards QuickShop.'
- url: 'https://github.com/Ghost-chu/QuickShop-Hikari/discussions/categories/ideas'
- - name: 'Wiki'
- about: 'Find info about QuickShop in our dedicated wiki.'
- url: 'https://github.com/Ghost-chu/QuickShop-Hikari/wiki'
- - name: 'Discord'
- about: 'Join our Discord to ask questions and get fast support.'
- url: 'https://discord.gg/Bu3dVtmsD3'
diff --git a/.github/ISSUE_TEMPLATE/performance.yml b/.github/ISSUE_TEMPLATE/performance.yml
deleted file mode 100644
index 90b397907..000000000
--- a/.github/ISSUE_TEMPLATE/performance.yml
+++ /dev/null
@@ -1,90 +0,0 @@
-name: 'Performance Report'
-description: 'Report performance issues with QuickShop.'
-
-title: '[PERFORMANCE] '
-labels:
- - 'Performance Issue'
-
-body:
- - type: 'markdown'
- attributes:
- value: |-
- ## Please Read!
- This Form is reserved for **Performance reports only!**
-
- - For Bugs or issues with QuickShop, open a [Bug Report](https://github.com/Ghost-chu/QuickShop-Hikari/issues/new?template=bug_report.yml&labels=bug).
- - For contributions towards the wiki, open a [Wiki Contribution](https://github.com/Ghost-chu/QuickShop-Hikari/issues/new?template=wiki_contribution.yml.yml&labels=wiki).
- - Feature requests or other suggestions should be made in the [Discussions](https://github.com/Ghost-chu/QuickShop-Hikari/discussions).
-
- Please fill out all required fields in their entirety and as details as possible. Failing to do so could get your issue closed without any warning.
-
- #### Additional Notes
- Please only provide Sampler results from [Spark](https://www.spigotmc.org/resources/57242/)! Spigot Timings - no matter if v1 or v2 - will be ignored.
- Your issue will be closed without any reply if only a Spigot Timings Report was provided.
- - type: 'textarea'
- attributes:
- label: 'Description'
- description: |-
- Describe the issue as detailed as possible.
- You cann upload screenshots of the issue in the "screenshots" section further down.
- placeholder: 'When I used Quickshop did ... happen.'
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Steps to reproduce'
- description: 'List your steps on how to reproduce this issue reliably here.'
- placeholder: |-
- 1. Do something
- 2. ...
- 3. Bad performance!
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Expected Behaviour'
- description: 'What did you expect QuickShop to do?'
- placeholder: 'QuickShop should ...'
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Screenshots'
- description: |-
- Provide screenshots to show the performance problems, if possible.
- Gifs or Videos are also welcome if they can help explaining the issue.
- placeholder: 'When I used Quickshop did ... happen.'
- validations:
- required: true
- - type: 'input'
- attributes:
- label: '`/quickshop paste` URL'
- description: |-
- Please execute `/quickshop paste` in-game or `qs paste` in your server console.
- The plugin will generate a URL that you can then post in the field below.
-
- If you can't create a paste, should you upload other files such as the `latest.log` file to https://paste.helpch.at and share the URL.
-
- If QuickShop is unable to generate a Paste will it create a file under `plugins/QuickShop/`
- placeholder: 'https://paste.helpch.at/...'
- validations:
- required: true
- - type: 'input'
- attributes:
- label: 'Spark Sample URL'
- description: |-
- **How to use [Spark](https://www.spigotmc.org/resources/57242/)**
-
- 1. Download the plugin from the Spigot page (linked above) if you haven't already.
- 2. Add it to the server like any other plugin (Stop Server, add jar, start server).
- 3. Join the server and execute `/spark sampler --start`
- 4. Wait at least 10 minutes and/or perform the actions that cause performance issues with QuickShop.
- 5. Execute `/spark sampler --stop` to get the URL
- 6. Paste the URL in the field below.
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Additional Context'
- description: 'Feel free to include any info that may not fit any of the previous sections.'
- placeholder: 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam ...'
diff --git a/.github/ISSUE_TEMPLATE/wiki_contribution.yml b/.github/ISSUE_TEMPLATE/wiki_contribution.yml
deleted file mode 100644
index 3e4a799e6..000000000
--- a/.github/ISSUE_TEMPLATE/wiki_contribution.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: 'Wiki Contribution'
-description: 'Inform about a Contribution that you want to make towards the wiki.'
-
-title: '[WIKI] '
-labels:
- - 'Wiki'
-
-body:
- - type: 'markdown'
- attributes:
- value: |-
- ## Please Read!
- This Form is reserved for **Wiki Contributions only!**
-
- - For Bugs or issues with QuickShop, open a [Bug Report](https://github.com/Ghost-chu/QuickShop-Hikari/issues/new?template=bug_report.yml&labels=bug).
- - For performance issues with QuickShop, open a [Performance Report](https://github.com/Ghost-chu/QuickShop-Hikari/issues/new?template=performance.yml&labels=performance).
- - Feature requests or other suggestions should be made in the [Discussions](https://github.com/Ghost-chu/QuickShop-Hikari/discussions).
-
- Please fill out all required fields in their entirety and as detailed as possible. Failing to do so could get your issue closed without any warning.
- - type: 'input'
- attributes:
- label: 'Repository URL'
- description: 'Provide a URL to your GitHub Repository containing your Wiki changes.'
- placeholder: 'https://github.com/example/repo'
- validations:
- required: true
- - type: 'textarea'
- attributes:
- label: 'Changes'
- description: 'Provide a list of all changes you made.'
- placeholder: |-
- - Changed this.
- - Changed that.
- - Also changed this!
- validations:
- required: true
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index 97610d625..000000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-version: 2
-updates:
- - package-ecosystem: maven
- directory: "/"
- schedule:
- interval: daily
- open-pull-requests-limit: 10
- ignore:
- - dependency-name: com.github.ben-manes.caffeine:caffeine
- versions:
- - "> 2.8.8"
- - dependency-name: com.github.TownyAdvanced:Towny
- versions:
- - "> 0.96.2.0"
- - dependency-name: io.sentry:sentry
- versions:
- - "> 3.1.1"
- - dependency-name: net.kyori:adventure-text-serializer-gson
- versions:
- - "> 4.2.0, < 5"
- - dependency-name: net.minidev:json-smart
- versions:
- - "> 1.3.2"
- - dependency-name: net.tnemc:Reserve
- versions:
- - "> 0.1.3.0"
- - dependency-name: org.junit.jupiter:junit-jupiter
- versions:
- - "> RELEASE"
- - dependency-name: org.slf4j:slf4j-nop
- versions:
- - "> 1.7.6"
- - dependency-name: com.massivecraft:Factions
- versions:
- - 1.6.9.5-2.6.8-STABLE
- - dependency-name: com.github.angeschossen:LandsAPI
- versions:
- - 5.2.1
- - 5.2.2
- - 5.3.2
- - 5.3.3
- - 5.5.5
- - dependency-name: com.github.seeseemelk:MockBukkit-v1.16
- versions:
- - 0.25.0
- - 0.27.0
- - 0.28.0
- - 0.32.1
- - 0.32.2
diff --git a/.github/icons/Bukkit.png b/.github/icons/Bukkit.png
deleted file mode 100644
index e1d9d0f0c..000000000
Binary files a/.github/icons/Bukkit.png and /dev/null differ
diff --git a/.github/icons/Discord.svg b/.github/icons/Discord.svg
deleted file mode 100644
index 08e618028..000000000
--- a/.github/icons/Discord.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
\ No newline at end of file
diff --git a/.github/icons/Github.png b/.github/icons/Github.png
deleted file mode 100644
index 6dcb298ee..000000000
Binary files a/.github/icons/Github.png and /dev/null differ
diff --git a/.github/icons/Jenkins.svg b/.github/icons/Jenkins.svg
deleted file mode 100644
index 2be438068..000000000
--- a/.github/icons/Jenkins.svg
+++ /dev/null
@@ -1,121 +0,0 @@
-
\ No newline at end of file
diff --git a/.github/icons/MCBBS.png b/.github/icons/MCBBS.png
deleted file mode 100644
index 2ccaedaf6..000000000
Binary files a/.github/icons/MCBBS.png and /dev/null differ
diff --git a/.github/icons/Spigot.png b/.github/icons/Spigot.png
deleted file mode 100644
index 7f8cc476d..000000000
Binary files a/.github/icons/Spigot.png and /dev/null differ
diff --git a/.github/issue_label_bot.yaml b/.github/issue_label_bot.yaml
deleted file mode 100644
index 2c3bdeb71..000000000
--- a/.github/issue_label_bot.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-label-alias:
- bug: 'Bug'
- feature_request: 'Enhancement'
- question: 'Question'
diff --git a/.github/labeler.yml b/.github/labeler.yml
deleted file mode 100644
index ca89cba8e..000000000
--- a/.github/labeler.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-# Number of labels to fetch (optional). Defaults to 20
-numLabels: 40
-# These labels will not be used even if the issue contains them
-excludeLabels:
- - pinned
diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml
deleted file mode 100644
index 40a2ed6ad..000000000
--- a/.github/workflows/code_quality.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Qodana
-on:
- workflow_dispatch:
- pull_request:
- push:
- branches:
- - '*'
- - 'hikari'
- - 'release'
-
-jobs:
- qodana:
- runs-on: ubuntu-latest
- permissions:
- contents: write
- pull-requests: write
- checks: write
- steps:
- - uses: actions/checkout@v3
- with:
- ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit
- fetch-depth: 0 # a full history is required for pull request analysis
- - name: 'Qodana Scan'
- uses: JetBrains/qodana-action@v2023.2
- env:
- QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
deleted file mode 100644
index 5bf292b64..000000000
--- a/.github/workflows/maven.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-# This workflow will build a Java project with Maven
-# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
-
-name: Maven CI
-
-on:
- push:
- branches: [ hikari, cleanup ]
- pull_request:
- branches: [ hikari, cleanup ]
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - name: Set up JDK 17
- uses: actions/setup-java@v2
- with:
- java-version: '17'
- distribution: 'temurin'
- cache: 'maven'
- - name: Build with Maven
- run: mvn package --batch-mode --update-snapshots -T 1.5C -f pom.xml -P github
- - uses: actions/upload-artifact@v3
- with:
- name: quickshop-snapshots
- path: |
- **/target/*.jar
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@v3
- env:
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/mc-publish.yml b/.github/workflows/mc-publish.yml
deleted file mode 100644
index e38c46d32..000000000
--- a/.github/workflows/mc-publish.yml
+++ /dev/null
@@ -1,99 +0,0 @@
-# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
-# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
-
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-
-name: mc-publish
-
-on:
- workflow_dispatch:
- release:
- types:
- - published
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - name: Set up JDK 17
- uses: actions/setup-java@v3
- with:
- java-version: '17'
- distribution: 'temurin'
- cache: maven
- - name: Build with Maven
- run: mvn -B package -T 1.5C --file pom.xml
- - uses: Kir-Antipov/mc-publish@v3.3
- with:
- modrinth-id: ijC5dDkD
- modrinth-featured: true
- modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
-
- github-discussion: Announcements
- github-token: ${{ secrets.GITHUB_TOKEN }}
- github-draft: false
- files: |
- quickshop-bukkit/target/QuickShop-Hikari-*.jar
- **/target/+(Compat*|Addon*).jar
- loaders: |
- spigot
- paper
- purpur
- game-versions: |
- >=1.18.2 <=1.20.4
- game-version-filter: releases
- java: |
- 17
- dependencies: |
- essentialsx(optional)
- nbtapi(optional)
- discordsrv(optional)
- bluemap(optional)
- dynmap(optional)
- worldedit(optional)
- worldguard(optional)
- plan(optional)
- bentobox(optional)
- clearlag(optional)
- elitemobs(optional)
- griefprevention(optional)
- lands(optional)
- openinv(optional)
- placeholderapi(optional)
- residence(optional)
- towny(optional)
- superiorskyblock(optional)
- luckperms(optional)
- vault(optional)
- plan(optional)
- advancedregionmarket(optional)
- ecoenchants(optional)
- reforges(optional)
- packetlistenerapi(conflicting)
- # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive
- - name: Update dependency graph
- uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6
- - name: Build Translations
- uses: Ghost-chu/CrowdinCopyDeploy-action@master
- with:
- args: uploads3
- env:
- CROWDIN_ACCESS_TOKEN: ${{ secrets.CROWDIN_ACCESS_TOKEN }}
- CROWDIN_PROJECT_BRANCH_ID: '126'
- CROWDIN_PROJECT_ID: '524354'
- #DEPLOY_PATH: './deploy-prod'
- AWS_S3_ENDPOINT: ${{ secrets.AWS_S3_ENDPOINT }}
- AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- AWS_REGION: auto
- - name: Purge CloudFlare cache
- uses: jakejarvis/cloudflare-purge-action@master
- env:
- # Zone is required by both authentication methods
- CLOUDFLARE_ZONE: ${{ secrets.CLOUDFLARE_ZONE }}
- CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
- CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }}
diff --git a/.github/workflows/sync-crowdinota.yml b/.github/workflows/sync-crowdinota.yml
deleted file mode 100644
index 146410f92..000000000
--- a/.github/workflows/sync-crowdinota.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: ota-distribution
-
-on:
- workflow_dispatch:
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- # - uses: actions/checkout@v3
- # - name: Set up JDK 17
- # uses: actions/setup-java@v3
- # with:
- # java-version: '17'
- # distribution: 'temurin'
- - name: Build Translations
- uses: Ghost-chu/CrowdinCopyDeploy-action@master
- with:
- args: uploads3
- env:
- CROWDIN_ACCESS_TOKEN: ${{ secrets.CROWDIN_ACCESS_TOKEN }}
- CROWDIN_PROJECT_BRANCH_ID: '126'
- CROWDIN_PROJECT_ID: '524354'
- #DEPLOY_PATH: './deploy-prod'
- AWS_S3_ENDPOINT: ${{ secrets.AWS_S3_ENDPOINT }}
- AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
- AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
- AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- AWS_REGION: auto
- - name: Purge CloudFlare cache
- uses: jakejarvis/cloudflare-purge-action@master
- env:
- # Zone is required by both authentication methods
- CLOUDFLARE_ZONE: ${{ secrets.CLOUDFLARE_ZONE }}
- CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
- CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }}
diff --git a/.gitignore b/.gitignore
index c5f846d68..68b8cb9f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,11 @@
# IntelliJ
out/
+# Eclipse
+.classpath
+.project
+.settings/
+
# Compiled class file
*.class
@@ -95,7 +100,8 @@ $RECYCLE.BIN/
# Windows shortcuts
*.lnk
-target/
+bin/
+build/
pom.xml.tag
pom.xml.releaseBackup
@@ -113,3 +119,5 @@ buildNumber.properties
run/
/build-artifacts/
/.vscode/settings.json
+/.gradle/
+/build/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..68234fe5a
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "libs/Utilities-OG"]
+ path = libs/Utilities-OG
+ url = https://github.com/true-og/Utilities-OG
diff --git a/.mergify.yml b/.mergify.yml
deleted file mode 100644
index 88cbdcaca..000000000
--- a/.mergify.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-pull_request_rules:
- - name: Automatic merge on Crowdin
- conditions:
- - and:
- - author=Ghost-chu
- - title=New Crowdin updates
- actions:
- merge:
- method: squash
- commit_message_template: "Automatically merge Crowdin translations"
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
deleted file mode 100644
index d58dfb70b..000000000
--- a/.mvn/wrapper/maven-wrapper.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-wrapperVersion=3.3.2
-distributionType=only-script
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
diff --git a/README.md b/README.md
index 8f3398d93..dee204ac8 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,5 @@
-[codacy]: https://www.codacy.com/gh/Ghost-chu/QuickShop-Hikari/dashboard?utm_source=github.com&utm_medium=referral&utm_content=Ghost-chu/QuickShop-Hikari&utm_campaign=Badge_Grade
-
-[codeFactor]: https://www.codefactor.io/repository/github/ghost-chu/quickshop-hikari
-
-[codeScore]: https://app.codiga.io/public/project/32011/QuickShop-Hikari/dashboard
-
[license]: https://github.com/Ghost-chu/QuickShop-Hikari/blob/hikari/LICENSE
[contributors]: https://github.com/Ghost-chu/QuickShop-Hikari/graphs/contributors
@@ -22,8 +16,6 @@
[quickshop-original]: https://github.com/KaiKikuchi/QuickShop
-[codemc]: https://ci.codemc.io/job/Ghost-chu/job/QuickShop-Hikari/
-
[clearlagg]: https://www.spigotmc.org/resources/68271/
[worldguard]: https://dev.bukkit.org/projects/worldguard
@@ -36,28 +28,16 @@
[optional_modules]: https://ci.codemc.io/job/Ghost-chu/job/QuickShop-Hikari/
-[googlejava]: https://google.github.io/styleguide/javaguide.html
-
-[adoptium]: https://adoptium.net/
-
[bStats-site]: https://bstats.org
[bStats-plugin]: https://bstats.org/plugin/bukkit/QuickShop-Hikari/14281
-[codacyBadge]: https://app.codacy.com/project/badge/Grade/a04ef7174d9f4e65b60ae28b09222809
-
-[codeFactorBadge]: https://www.codefactor.io/repository/github/ghost-chu/quickshop-hikari/badge
-
-[codeScoreBadge]: https://api.codiga.io/project/32011/score/svg
-
[licenseBadge]: https://img.shields.io/github/license/Ghost-chu/QuickShop-Hikari.svg
[contributorsBadge]: https://img.shields.io/github/contributors/Ghost-chu/QuickShop-Hikari
-[passedTests]: https://img.shields.io/jenkins/tests?compact_message&jobUrl=https://ci.codemc.io/job/Ghost-chu/job/QuickShop-Hikari
-
[fossaStatusBadge]: https://app.fossa.com/api/projects/git%2Bgithub.com%2FGhost-chu%2FQuickShop-Hikari.svg?type=shield
[fossaStatusImageLarge]: https://app.fossa.com/api/projects/git%2Bgithub.com%2FGhost-chu%2FQuickShop-Hikari.svg?type=large
@@ -70,16 +50,9 @@
[Ver]: https://img.shields.io/spiget/version/100125?label=version
-
-
-
-
+# QuickShop-OG
-# QuickShop-Hikari
-
-[![codacyBadge]][codacy]
-[![codeScoreBadge]][codeScore]
[![licenseBadge]][license]
[![contributorsBadge]][contributors]
![passedTests]
@@ -91,23 +64,17 @@
## Introduction
-QuickShop Hikari is a Shop plugin that allows players to create Chest Shops to easily sell and buy items, without the
+QuickShop-OG is a GPLv3 based fork of QuickShop Hikari maintained by [TrueOG Network](https://trueog.net) for Purpur 1.19.4. QuickShop Hikari is a Shop plugin that allows players to create Chest Shops to easily sell and buy items, without the
need for any commands.
In fact, all commands in QuickShop are not even needed for normal gameplay.
-This version of QuickShop ([Ghost-chu/QuickShop-Hikari][quickshop-hikari]) is a fork
+QuickShop-OG is based on an older version of ([Ghost-chu/QuickShop-Hikari][quickshop-hikari]), which is a fork
from [PotatoCraft-Studio's version][quickshop-potato] which itself is a fork from the [Reremake][quickshop-ghostchu] of
the [original QuickShop][quickshop-original].
QuickShop Hikari is maintained by Ghost-Chu and has the goal to modernize the core content of QuickShop and adapt it to
the latest versions of Minecraft.
-## Community & Support
-
-[Discussions](https://github.com/Ghost-chu/QuickShop-Hikari/discussions)
-[Bug Tracker](https://github.com/Ghost-chu/QuickShop-Hikari/issues)
-[Discord](https://discord.gg/Bu3dVtmsD3)
-
## Features
- Easy to use
@@ -136,10 +103,6 @@ the latest versions of Minecraft.
- Shop benefits between shop owner and other players!
- And much much more!
-## Downloads
-
-Obtain the latest version from [ci.codemc.io][codemc]
-
## Compatibility Modules
You can download optional modules [here][optional_modules] for compatibility with other plugins.
@@ -164,16 +127,9 @@ You can download optional modules [here][optional_modules] for compatibility wit
- Flag-based shop control.
-## Contribute
-
-If you're a developer, you can contribute to the QuickShop source code! Just make a fork, install the Lombok plugin (if
-not done automatically), make your changes and create a pull request when you're done!
-Please try to follow [Google's Java Code Style][googlejava] and do not increase the Plugin version. Thank you!
-
### Distributing forks
You're allowed to create your fork to share. No permission is needed.
-Though it would be nice if you could pull-request your changes into this repository when they are good ones.
### Compile and Debugging
diff --git a/addon/.gitignore b/addon/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/addon/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/addon/bluemap/pom.xml b/addon/bluemap/pom.xml
deleted file mode 100644
index 38f336d60..000000000
--- a/addon/bluemap/pom.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- bluemap
- jar
-
- Addon-BlueMap
-
- Displaying the quickshops on your BlueMap instance
-
- 17
- UTF-8
-
-
-
-
- jitpack.io
- https://jitpack.io
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
- com.github.BlueMap-Minecraft
- BlueMapAPI
- 2.6.2
- provided
-
-
-
diff --git a/addon/bluemap/src/main/java/com/ghostchu/quickshop/addon/bluemap/Main.java b/addon/bluemap/src/main/java/com/ghostchu/quickshop/addon/bluemap/Main.java
index 724348cd2..4c12326ea 100644
--- a/addon/bluemap/src/main/java/com/ghostchu/quickshop/addon/bluemap/Main.java
+++ b/addon/bluemap/src/main/java/com/ghostchu/quickshop/addon/bluemap/Main.java
@@ -8,6 +8,7 @@ import de.bluecolored.bluemap.api.BlueMapMap;
import de.bluecolored.bluemap.api.BlueMapWorld;
import de.bluecolored.bluemap.api.markers.MarkerSet;
import de.bluecolored.bluemap.api.markers.POIMarker;
+import java.util.Optional;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.Bukkit;
@@ -18,8 +19,6 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
-import java.util.Optional;
-
public final class Main extends JavaPlugin implements Listener {
static Main instance;
private QuickShop plugin;
@@ -43,7 +42,9 @@ public final class Main extends JavaPlugin implements Listener {
BlueMapAPI.onEnable(blueMapAPI -> {
getLogger().info("Found BlueMap loaded! Hooking!");
createMarkerSet();
- Bukkit.getScheduler().runTaskTimerAsynchronously(this, this::updateAllMarkers, 1, getConfig().getInt("refresh-per-seconds") * 20L);
+ Bukkit.getScheduler()
+ .runTaskTimerAsynchronously(
+ this, this::updateAllMarkers, 1, getConfig().getInt("refresh-per-seconds") * 20L);
});
BlueMapAPI.onDisable(api -> Bukkit.getScheduler().cancelTasks(this));
@@ -69,7 +70,8 @@ public final class Main extends JavaPlugin implements Listener {
}
private void updateAllMarkers() {
- blueMapAPI.getWorlds().forEach(bWorld -> bWorld.getMaps().forEach(bMap -> bMap.getMarkerSets().remove("quickshop-hikari-shops")));
+ blueMapAPI.getWorlds().forEach(bWorld -> bWorld.getMaps()
+ .forEach(bMap -> bMap.getMarkerSets().remove("quickshop-hikari-shops")));
plugin.getShopManager().getAllShops().forEach(this::updateShopMarker);
}
@@ -79,12 +81,14 @@ public final class Main extends JavaPlugin implements Listener {
return;
}
for (BlueMapMap map : bWorld.get().getMaps()) {
- MarkerSet markerSet = map.getMarkerSets().computeIfAbsent("quickshop-hikari-shops", (key) -> createMarkerSet());
+ MarkerSet markerSet =
+ map.getMarkerSets().computeIfAbsent("quickshop-hikari-shops", (key) -> createMarkerSet());
String markerName = fillPlaceholders(getConfig().getString("marker-label"), shop);
String desc = fillPlaceholders(getConfig().getString("marker-detail"), shop);
POIMarker marker = POIMarker.builder()
.label(markerName)
- .position(shop.getLocation().getX(),
+ .position(
+ shop.getLocation().getX(),
shop.getLocation().getY(),
shop.getLocation().getZ())
.maxDistance(getConfig().getDouble("max-distance"))
diff --git a/addon/discount/pom.xml b/addon/discount/pom.xml
deleted file mode 100644
index 1b7edd8e5..000000000
--- a/addon/discount/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- discount
- jar
-
- Addon-Discount
-
- Add discount code to your QuickShop-Hikari server
-
- 17
- UTF-8
-
-
-
-
- dv8tion
- m2-dv8tion
- https://m2.dv8tion.net/releases
-
-
- Scarsz-Nexus
- https://nexus.scarsz.me/content/groups/public/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
-
-
-
-
-
-
-
diff --git a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCode.java b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCode.java
index 323d463bf..374578b5d 100644
--- a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCode.java
+++ b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCode.java
@@ -7,14 +7,13 @@ import com.ghostchu.quickshop.api.localization.text.TextManager;
import com.ghostchu.quickshop.api.shop.Shop;
import com.ghostchu.quickshop.common.util.CalculateUtil;
import com.ghostchu.quickshop.common.util.JsonUtil;
+import java.util.*;
import net.kyori.adventure.text.Component;
import org.apache.commons.lang3.StringUtils;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
-
public class DiscountCode {
private final String code;
private final UUID owner;
@@ -27,7 +26,16 @@ public class DiscountCode {
private long expiredTime;
- public DiscountCode(@NotNull UUID owner, @NotNull String code, @NotNull CodeType codeType, @NotNull DiscountRate rate, int maxUsage, @NotNull Map usages, @NotNull Set shopScope, double threshold, long expiredTime) {
+ public DiscountCode(
+ @NotNull UUID owner,
+ @NotNull String code,
+ @NotNull CodeType codeType,
+ @NotNull DiscountRate rate,
+ int maxUsage,
+ @NotNull Map usages,
+ @NotNull Set shopScope,
+ double threshold,
+ long expiredTime) {
this.owner = owner;
this.code = code;
this.codeType = codeType;
@@ -39,7 +47,14 @@ public class DiscountCode {
this.expiredTime = expiredTime;
}
- public DiscountCode(@NotNull UUID owner, @NotNull String code, @NotNull CodeType codeType, @NotNull DiscountRate rate, int maxUsage, double threshold, long expiredTime) {
+ public DiscountCode(
+ @NotNull UUID owner,
+ @NotNull String code,
+ @NotNull CodeType codeType,
+ @NotNull DiscountRate rate,
+ int maxUsage,
+ double threshold,
+ long expiredTime) {
this.owner = owner;
this.code = code;
this.codeType = codeType;
@@ -87,7 +102,8 @@ public class DiscountCode {
} else {
rate = JsonUtil.getGson().fromJson(data.getRate(), FixedDiscountRate.class);
}
- return new DiscountCode(data.getOwner(),
+ return new DiscountCode(
+ data.getOwner(),
data.getCode(),
data.getCodeType(),
rate,
@@ -135,7 +151,8 @@ public class DiscountCode {
public boolean addShopToScope(@NotNull Shop shop) {
if (codeType != CodeType.SPECIFIC_SHOPS) {
- throw new IllegalStateException("Cannot add shop to code scope, because this code is not a specific shop code.");
+ throw new IllegalStateException(
+ "Cannot add shop to code scope, because this code is not a specific shop code.");
}
return this.shopScope.add(shop.getShopId());
}
@@ -218,23 +235,24 @@ public class DiscountCode {
if (usage + 1 > maxUsage) {
return ApplicableType.REACHED_THE_LIMIT;
}
- ApplicableType type = switch (codeType) {
- case SPECIFIC_SHOPS -> {
- if (shopScope.contains(shop.getShopId())) {
- yield ApplicableType.APPLICABLE;
- } else {
- yield ApplicableType.NOT_APPLICABLE;
- }
- }
- case PLAYER_ALL_SHOPS -> {
- if (owner.equals(shop.getOwner().getUniqueId())) {
- yield ApplicableType.APPLICABLE;
- } else {
- yield ApplicableType.NOT_APPLICABLE;
- }
- }
- case SERVER_ALL_SHOPS -> ApplicableType.APPLICABLE;
- };
+ ApplicableType type =
+ switch (codeType) {
+ case SPECIFIC_SHOPS -> {
+ if (shopScope.contains(shop.getShopId())) {
+ yield ApplicableType.APPLICABLE;
+ } else {
+ yield ApplicableType.NOT_APPLICABLE;
+ }
+ }
+ case PLAYER_ALL_SHOPS -> {
+ if (owner.equals(shop.getOwner().getUniqueId())) {
+ yield ApplicableType.APPLICABLE;
+ } else {
+ yield ApplicableType.NOT_APPLICABLE;
+ }
+ }
+ case SERVER_ALL_SHOPS -> ApplicableType.APPLICABLE;
+ };
if (type != ApplicableType.APPLICABLE) {
return type;
}
@@ -256,8 +274,7 @@ public class DiscountCode {
threshold,
maxUsage,
usages,
- shopScope
- );
+ shopScope);
return JsonUtil.getGson().toJson(data);
}
@@ -274,22 +291,28 @@ public class DiscountCode {
if (!(o instanceof DiscountCode that)) {
return false;
}
- return maxUsage == that.maxUsage && Double.compare(that.threshold, threshold) == 0 && expiredTime == that.expiredTime && code.equals(that.code) && owner.equals(that.owner) && shopScope.equals(that.shopScope) && codeType == that.codeType && rate.equals(that.rate);
+ return maxUsage == that.maxUsage
+ && Double.compare(that.threshold, threshold) == 0
+ && expiredTime == that.expiredTime
+ && code.equals(that.code)
+ && owner.equals(that.owner)
+ && shopScope.equals(that.shopScope)
+ && codeType == that.codeType
+ && rate.equals(that.rate);
}
@Override
public String toString() {
- return "DiscountCode{" +
- "code='" + code + '\'' +
- ", owner=" + owner +
- ", usages=" + usages +
- ", shopScope=" + shopScope +
- ", codeType=" + codeType +
- ", rate=" + rate +
- ", maxUsage=" + maxUsage +
- ", threshold=" + threshold +
- ", expiredTime=" + expiredTime +
- '}';
+ return "DiscountCode{" + "code='"
+ + code + '\'' + ", owner="
+ + owner + ", usages="
+ + usages + ", shopScope="
+ + shopScope + ", codeType="
+ + codeType + ", rate="
+ + rate + ", maxUsage="
+ + maxUsage + ", threshold="
+ + threshold + ", expiredTime="
+ + expiredTime + '}';
}
public interface DiscountRate {
@@ -319,7 +342,9 @@ public class DiscountCode {
@Override
public @NotNull Component format(@NotNull CommandSender sender, @NotNull TextManager textManager) {
- return textManager.of(sender, "addon.discount.fixed-off", String.format("%.2f", rate)).forLocale();
+ return textManager
+ .of(sender, "addon.discount.fixed-off", String.format("%.2f", rate))
+ .forLocale();
}
}
@@ -343,7 +368,9 @@ public class DiscountCode {
@Override
public @NotNull Component format(@NotNull CommandSender sender, @NotNull TextManager textManager) {
- return textManager.of(sender, "addon.discount.percentage-off", CalculateUtil.multiply(percent, 100)).forLocale();
+ return textManager
+ .of(sender, "addon.discount.percentage-off", CalculateUtil.multiply(percent, 100))
+ .forLocale();
}
}
}
diff --git a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeData.java b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeData.java
index 46964b96b..74553da18 100644
--- a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeData.java
+++ b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeData.java
@@ -2,13 +2,12 @@ package com.ghostchu.quickshop.addon.discount;
import com.ghostchu.quickshop.addon.discount.type.CodeType;
import com.ghostchu.quickshop.addon.discount.type.RateType;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@@ -24,5 +23,4 @@ public class DiscountCodeData {
private int maxUsage;
private Map usages;
private Set shopScope;
-
}
diff --git a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeManager.java b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeManager.java
index 19740ae34..f1044dcb7 100644
--- a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeManager.java
+++ b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountCodeManager.java
@@ -3,16 +3,15 @@ package com.ghostchu.quickshop.addon.discount;
import com.ghostchu.quickshop.QuickShop;
import com.ghostchu.quickshop.addon.discount.type.CodeCreationResponse;
import com.ghostchu.quickshop.addon.discount.type.CodeType;
-import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.file.YamlConfiguration;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.logging.Level;
import java.util.regex.Pattern;
+import org.bukkit.command.CommandSender;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
public class DiscountCodeManager {
public static final String NAME_REG_EXP = "[a-zA-Z0-9_]*";
@@ -49,7 +48,8 @@ public class DiscountCodeManager {
public void saveDatabase() {
try {
- this.config.set("codes", this.codes.stream().map(DiscountCode::saveToString).toList());
+ this.config.set(
+ "codes", this.codes.stream().map(DiscountCode::saveToString).toList());
this.config.save(this.file);
} catch (IOException e) {
main.getLogger().log(Level.WARNING, "Couldn't save the player discount codes status into database.", e);
@@ -76,7 +76,15 @@ public class DiscountCodeManager {
}
@NotNull
- public CodeCreationResponse createDiscountCode(@NotNull CommandSender sender, @NotNull UUID owner, @NotNull String code, @NotNull CodeType codeType, @NotNull String rate, int maxUsage, double threshold, long expiredTime) {
+ public CodeCreationResponse createDiscountCode(
+ @NotNull CommandSender sender,
+ @NotNull UUID owner,
+ @NotNull String code,
+ @NotNull CodeType codeType,
+ @NotNull String rate,
+ int maxUsage,
+ double threshold,
+ long expiredTime) {
if (!namePattern.matcher(code).matches()) {
return CodeCreationResponse.REGEX_FAILURE;
}
@@ -96,15 +104,18 @@ public class DiscountCodeManager {
if (discountRate == null) {
return CodeCreationResponse.INVALID_RATE;
}
- if (!QuickShop.getPermissionManager().hasPermission(sender, "quickshopaddon.discount.create." + codeType.name().toLowerCase())) {
+ if (!QuickShop.getPermissionManager()
+ .hasPermission(
+ sender,
+ "quickshopaddon.discount.create." + codeType.name().toLowerCase())) {
return CodeCreationResponse.PERMISSION_DENIED;
}
- DiscountCode discountCode = new DiscountCode(owner, code, codeType, discountRate, maxUsage, threshold, expiredTime);
+ DiscountCode discountCode =
+ new DiscountCode(owner, code, codeType, discountRate, maxUsage, threshold, expiredTime);
if (!this.codes.add(discountCode)) {
return CodeCreationResponse.CODE_EXISTS;
}
main.getCodeManager().saveDatabase();
return CodeCreationResponse.SUCCESS;
}
-
}
diff --git a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountStatusManager.java b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountStatusManager.java
index 7cf3a5811..a8479e098 100644
--- a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountStatusManager.java
+++ b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/DiscountStatusManager.java
@@ -1,11 +1,10 @@
package com.ghostchu.quickshop.addon.discount;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
public class DiscountStatusManager {
private final Map PLAYER_STATUS = new HashMap<>();
diff --git a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/Main.java b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/Main.java
index 9a314356e..e236692bf 100644
--- a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/Main.java
+++ b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/Main.java
@@ -5,15 +5,14 @@ import com.ghostchu.quickshop.addon.discount.command.DiscountCommand;
import com.ghostchu.quickshop.addon.discount.listener.MainListener;
import com.ghostchu.quickshop.api.command.CommandContainer;
import com.ghostchu.quickshop.api.shop.permission.BuiltInShopPermissionGroup;
+import java.io.IOException;
+import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
-import java.io.IOException;
-import java.util.logging.Level;
-
public final class Main extends JavaPlugin implements Listener {
static Main instance;
private final DiscountStatusManager discountStatusManager = new DiscountStatusManager();
@@ -43,20 +42,27 @@ public final class Main extends JavaPlugin implements Listener {
return;
}
getLogger().info("Registering the per shop permissions...");
- plugin.getShopPermissionManager().registerPermission(BuiltInShopPermissionGroup.ADMINISTRATOR.getNamespacedNode(), this, "discount_code_create");
- plugin.getShopPermissionManager().registerPermission(BuiltInShopPermissionGroup.ADMINISTRATOR.getNamespacedNode(), this, "discount_code_use");
- plugin.getShopPermissionManager().registerPermission(BuiltInShopPermissionGroup.EVERYONE.getNamespacedNode(), this, "discount_code_use");
- plugin.getShopPermissionManager().registerPermission(BuiltInShopPermissionGroup.STAFF.getNamespacedNode(), this, "discount_code_use");
+ plugin.getShopPermissionManager()
+ .registerPermission(
+ BuiltInShopPermissionGroup.ADMINISTRATOR.getNamespacedNode(), this, "discount_code_create");
+ plugin.getShopPermissionManager()
+ .registerPermission(
+ BuiltInShopPermissionGroup.ADMINISTRATOR.getNamespacedNode(), this, "discount_code_use");
+ plugin.getShopPermissionManager()
+ .registerPermission(BuiltInShopPermissionGroup.EVERYONE.getNamespacedNode(), this, "discount_code_use");
+ plugin.getShopPermissionManager()
+ .registerPermission(BuiltInShopPermissionGroup.STAFF.getNamespacedNode(), this, "discount_code_use");
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> codeManager.cleanExpiredCodes(), 1L, 20 * 60 * 30);
Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> codeManager.saveDatabase(), 1L, 20 * 60 * 15);
getLogger().info("Registering the listeners...");
Bukkit.getPluginManager().registerEvents(this, this);
Bukkit.getPluginManager().registerEvents(new MainListener(this), this);
- plugin.getCommandManager().registerCmd(
- CommandContainer
- .builder()
+ plugin.getCommandManager()
+ .registerCmd(CommandContainer.builder()
.prefix("discount")
- .description((locale) -> plugin.text().of("addon.discount.commands.discount.description").forLocale(locale))
+ .description((locale) -> plugin.text()
+ .of("addon.discount.commands.discount.description")
+ .forLocale(locale))
.permission("quickshopaddon.discount.use")
.executor(new DiscountCommand(this, plugin))
.build());
diff --git a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/command/DiscountCommand.java b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/command/DiscountCommand.java
index 56a18f487..adbd60ed1 100644
--- a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/command/DiscountCommand.java
+++ b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/command/DiscountCommand.java
@@ -12,6 +12,8 @@ import com.ghostchu.quickshop.api.shop.Shop;
import com.ghostchu.quickshop.common.util.CommonUtil;
import com.ghostchu.quickshop.util.ChatSheetPrinter;
import com.ghostchu.quickshop.util.logger.Log;
+import java.text.SimpleDateFormat;
+import java.util.*;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
@@ -20,9 +22,6 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
public class DiscountCommand implements CommandHandler {
private final Main main;
private final QuickShop quickshop;
@@ -35,7 +34,13 @@ public class DiscountCommand implements CommandHandler {
@Override
public void onCommand(CommandSender sender, @NotNull String commandLabel, @NotNull CommandParser parser) {
if (parser.getArgs().isEmpty()) {
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount ").send();
+ quickshop
+ .text()
+ .of(
+ sender,
+ "command-incorrect",
+ "/quickshop discount ")
+ .send();
return;
}
String[] passThroughArgs = new String[parser.getArgs().size() - 1];
@@ -48,8 +53,13 @@ public class DiscountCommand implements CommandHandler {
case "info" -> info(sender, passThroughArgs);
case "config" -> config(sender, passThroughArgs);
case "list" -> list(sender, passThroughArgs);
- default ->
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount ").send();
+ default -> quickshop
+ .text()
+ .of(
+ sender,
+ "command-incorrect",
+ "/quickshop discount ")
+ .send();
}
}
@@ -59,7 +69,10 @@ public class DiscountCommand implements CommandHandler {
return;
}
if (passThroughArgs.length < 1) {
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount install ").send();
+ quickshop
+ .text()
+ .of(sender, "command-incorrect", "/quickshop discount install ")
+ .send();
return;
}
String codeStr = passThroughArgs[0];
@@ -69,7 +82,10 @@ public class DiscountCommand implements CommandHandler {
return;
}
main.getStatusManager().set(p.getUniqueId(), code);
- quickshop.text().of(sender, "addon.discount.discount-code-installed", code.getCode()).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-installed", code.getCode())
+ .send();
}
private void uninstall(CommandSender sender, String[] passThroughArgs) {
@@ -87,12 +103,24 @@ public class DiscountCommand implements CommandHandler {
return;
}
if (passThroughArgs.length < 1) {
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount create [max-usage] [threshold] [expired-time]").send();
+ quickshop
+ .text()
+ .of(
+ sender,
+ "command-incorrect",
+ "/quickshop discount create [max-usage] [threshold] [expired-time]")
+ .send();
return;
}
// code, code-type, rate, max-usage, threshold, expired-time
if (passThroughArgs.length < 3) {
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount create [max-usage] [threshold] [expired-time]").send();
+ quickshop
+ .text()
+ .of(
+ sender,
+ "command-incorrect",
+ "/quickshop discount create [max-usage] [threshold] [expired-time]")
+ .send();
return;
}
String code = passThroughArgs[0];
@@ -105,7 +133,10 @@ public class DiscountCommand implements CommandHandler {
}
}
if (codeType == null) {
- quickshop.text().of(sender, "addon.discount.invalid-code-type", codeTypeStr).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-code-type", codeTypeStr)
+ .send();
return;
}
int maxUsages = -1;
@@ -130,34 +161,66 @@ public class DiscountCommand implements CommandHandler {
if (passThroughArgs.length >= 6 && !"-1".equalsIgnoreCase(passThroughArgs[5])) {
Date date = CommonUtil.parseTime(passThroughArgs[5]);
if (date == null) {
- quickshop.text().of(sender, "not-a-valid-time", passThroughArgs[5]).send();
+ quickshop
+ .text()
+ .of(sender, "not-a-valid-time", passThroughArgs[5])
+ .send();
return;
}
expiredOn = date.getTime();
}
- CodeCreationResponse response = main.getCodeManager().createDiscountCode(p, p.getUniqueId(), code, codeType, passThroughArgs[2], maxUsages, threshold, expiredOn);
+ CodeCreationResponse response = main.getCodeManager()
+ .createDiscountCode(
+ p, p.getUniqueId(), code, codeType, passThroughArgs[2], maxUsages, threshold, expiredOn);
switch (response) {
- case PERMISSION_DENIED -> quickshop.text().of(sender, "no-permission").send();
- case INVALID_RATE -> quickshop.text().of(sender, "addon.discount.invalid-discount-rate").send();
- case REGEX_FAILURE ->
- quickshop.text().of(sender, "addon.discount.invalid-discount-code-regex", DiscountCodeManager.NAME_REG_EXP).send();
- case INVALID_USAGE -> quickshop.text().of(sender, "addon.discount.invalid-usage-restriction").send();
- case INVALID_THRESHOLD ->
- quickshop.text().of(sender, "addon.discount.invalid-threshold-restriction").send();
- case INVALID_EXPIRE_TIME -> quickshop.text().of(sender, "addon.discount.invalid-expire-time").send();
- case CODE_EXISTS -> quickshop.text().of(sender, "addon.discount.discount-code-already-exists").send();
- case SUCCESS -> quickshop.text().of(sender, "addon.discount.discount-code-created-successfully",
- code,
- CommonUtil.prettifyText(codeType.name()),
- "/quickshop discount install " + code,
- "/quickshop discount config " + code + " addshop").send();
+ case PERMISSION_DENIED -> quickshop
+ .text()
+ .of(sender, "no-permission")
+ .send();
+ case INVALID_RATE -> quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-discount-rate")
+ .send();
+ case REGEX_FAILURE -> quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-discount-code-regex", DiscountCodeManager.NAME_REG_EXP)
+ .send();
+ case INVALID_USAGE -> quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-usage-restriction")
+ .send();
+ case INVALID_THRESHOLD -> quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-threshold-restriction")
+ .send();
+ case INVALID_EXPIRE_TIME -> quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-expire-time")
+ .send();
+ case CODE_EXISTS -> quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-already-exists")
+ .send();
+ case SUCCESS -> quickshop
+ .text()
+ .of(
+ sender,
+ "addon.discount.discount-code-created-successfully",
+ code,
+ CommonUtil.prettifyText(codeType.name()),
+ "/quickshop discount install " + code,
+ "/quickshop discount config " + code + " addshop")
+ .send();
}
Log.debug("Discount code created: " + main.getCodeManager().getCode(code));
}
private void remove(CommandSender sender, String[] passThroughArgs) {
if (passThroughArgs.length < 1) {
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount remove ").send();
+ quickshop
+ .text()
+ .of(sender, "command-incorrect", "/quickshop discount remove ")
+ .send();
return;
}
String codeStr = passThroughArgs[0];
@@ -167,7 +230,8 @@ public class DiscountCommand implements CommandHandler {
return;
}
if (sender instanceof Player p) {
- if (!code.getOwner().equals(p.getUniqueId()) && !quickshop.perm().hasPermission(sender, "quickshopaddon.discount.remove.bypass")) {
+ if (!code.getOwner().equals(p.getUniqueId())
+ && !quickshop.perm().hasPermission(sender, "quickshopaddon.discount.remove.bypass")) {
quickshop.text().of(sender, "no-permission").send();
return;
}
@@ -178,7 +242,10 @@ public class DiscountCommand implements CommandHandler {
}
}
main.getCodeManager().removeCode(code);
- quickshop.text().of(sender, "addon.discount.discount-code-removed", code.getCode()).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-removed", code.getCode())
+ .send();
}
private void info(CommandSender sender, String[] passThroughArgs) {
@@ -188,7 +255,10 @@ public class DiscountCommand implements CommandHandler {
}
DiscountCode code = main.getStatusManager().get(p.getUniqueId(), main.getCodeManager());
if (code == null) {
- quickshop.text().of(sender, "addon.discount.discount-code-query-nothing").send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-query-nothing")
+ .send();
return;
}
String name = "Unknown";
@@ -196,7 +266,10 @@ public class DiscountCommand implements CommandHandler {
if (lookupName != null) {
name = lookupName;
}
- Component appliedTo = quickshop.text().of(sender, "addon.discount.code-type." + code.getCodeType().name()).forLocale();
+ Component appliedTo = quickshop
+ .text()
+ .of(sender, "addon.discount.code-type." + code.getCodeType().name())
+ .forLocale();
String remainsUsage;
int remains = code.getRemainsUsage(((Player) sender).getUniqueId());
if (remains == -1) {
@@ -207,7 +280,19 @@ public class DiscountCommand implements CommandHandler {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String expiredOn = sdf.format(new Date(code.getExpiredTime()));
- quickshop.text().of(sender, "addon.discount.discount-code-details", code.getCode(), name, appliedTo, remainsUsage, expiredOn, code.getThreshold(), code.getRate().format(sender, quickshop.text())).send();
+ quickshop
+ .text()
+ .of(
+ sender,
+ "addon.discount.discount-code-details",
+ code.getCode(),
+ name,
+ appliedTo,
+ remainsUsage,
+ expiredOn,
+ code.getThreshold(),
+ code.getRate().format(sender, quickshop.text()))
+ .send();
}
private void config(CommandSender sender, String[] passThroughArgs) {
@@ -216,12 +301,21 @@ public class DiscountCommand implements CommandHandler {
return;
}
if (passThroughArgs.length < 2) {
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount config [args]").send();
+ quickshop
+ .text()
+ .of(
+ sender,
+ "command-incorrect",
+ "/quickshop discount config [args]")
+ .send();
return;
}
DiscountCode code = main.getCodeManager().getCode(passThroughArgs[0]);
if (code == null) {
- quickshop.text().of(sender, "addon.discount.invalid-discount-code", passThroughArgs[0]).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-discount-code", passThroughArgs[0])
+ .send();
return;
}
switch (passThroughArgs[1]) {
@@ -236,10 +330,16 @@ public class DiscountCommand implements CommandHandler {
return;
}
if (code.getShopScope().add(shop.getShopId())) {
- quickshop.text().of(sender, "addon.discount.discount-code-config-shop-added", shop.getShopId()).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-config-shop-added", shop.getShopId())
+ .send();
main.getCodeManager().saveDatabase();
} else {
- quickshop.text().of(sender, "addon.discount.discount-code-config-shop-add-failure", shop.getShopId()).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-config-shop-add-failure", shop.getShopId())
+ .send();
}
}
case "removeshop" -> {
@@ -253,27 +353,42 @@ public class DiscountCommand implements CommandHandler {
return;
}
if (code.getShopScope().remove(shop.getShopId())) {
- quickshop.text().of(sender, "addon.discount.discount-code-config-shop-removed", shop.getShopId()).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-config-shop-removed", shop.getShopId())
+ .send();
main.getCodeManager().saveDatabase();
} else {
- quickshop.text().of(sender, "addon.discount.discount-code-config-shop-remove-failure", shop.getShopId()).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.discount-code-config-shop-remove-failure", shop.getShopId())
+ .send();
}
}
case "scope" -> {
if (passThroughArgs.length < 3) {
-// StringJoiner joiner = new StringJoiner("<", "/", ">");
-// Arrays.stream(CodeType.values()).forEach(t -> joiner.add(t.name()));
- quickshop.text().of(sender, "command-incorrect", "/quickshop discount config scope ").send();
+ // StringJoiner joiner = new StringJoiner("<", "/", ">");
+ // Arrays.stream(CodeType.values()).forEach(t -> joiner.add(t.name()));
+ quickshop
+ .text()
+ .of(sender, "command-incorrect", "/quickshop discount config scope ")
+ .send();
return;
}
- if (!code.getOwner().equals(((Player) sender).getUniqueId()) && !quickshop.perm().hasPermission(sender, "quickshopaddon.discount.bypass")) {
+ if (!code.getOwner().equals(((Player) sender).getUniqueId())
+ && !quickshop.perm().hasPermission(sender, "quickshopaddon.discount.bypass")) {
quickshop.text().of(sender, "no-permission").send();
return;
}
String newScope = passThroughArgs[2].toUpperCase(Locale.ROOT).replace("-", "_");
try {
CodeType type = CodeType.valueOf(newScope);
- if (!quickshop.perm().hasPermission(sender, "quickshopaddon.discount.create." + type.name().toLowerCase())) {
+ if (!quickshop
+ .perm()
+ .hasPermission(
+ sender,
+ "quickshopaddon.discount.create."
+ + type.name().toLowerCase())) {
quickshop.text().of(sender, "no-permission").send();
return;
}
@@ -281,7 +396,10 @@ public class DiscountCommand implements CommandHandler {
quickshop.text().of(sender, "discount-code-config-applied").send();
main.getCodeManager().saveDatabase();
} catch (IllegalArgumentException e) {
- quickshop.text().of(sender, "addon.discount.invalid-code-type", newScope).send();
+ quickshop
+ .text()
+ .of(sender, "addon.discount.invalid-code-type", newScope)
+ .send();
}
}
}
@@ -298,31 +416,37 @@ public class DiscountCommand implements CommandHandler {
}
ChatSheetPrinter printer = new ChatSheetPrinter(sender);
printer.printHeader();
- printer.printLine(quickshop.text().of(sender, "addon.discount.discount-code-list").forLocale());
- main.getCodeManager().getCodes().stream().filter(code -> code.getOwner().equals(((Player) sender).getUniqueId())).forEach(code -> printer.printLine(Component.text(code.getCode()).color(NamedTextColor.AQUA)));
+ printer.printLine(
+ quickshop.text().of(sender, "addon.discount.discount-code-list").forLocale());
+ main.getCodeManager().getCodes().stream()
+ .filter(code -> code.getOwner().equals(((Player) sender).getUniqueId()))
+ .forEach(
+ code -> printer.printLine(Component.text(code.getCode()).color(NamedTextColor.AQUA)));
printer.printFooter();
}
@Override
- public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
+ public @Nullable List onTabComplete(
+ @NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
if (cmdArg.length == 1) {
return Arrays.asList("install", "uninstall", "create", "remove", "info", "config", "list");
}
if (cmdArg.length == 2) {
return switch (cmdArg[0]) {
- case "install", "uninstall", "remove", "create", "config" -> List.of(PlainTextComponentSerializer
- .plainText()
- .serialize(quickshop
- .text()
- .of(sender,
- "addon.discount.tab-complete.discount.general.code"
- ).forLocale()));
+ case "install", "uninstall", "remove", "create", "config" -> List.of(
+ PlainTextComponentSerializer.plainText()
+ .serialize(quickshop
+ .text()
+ .of(sender, "addon.discount.tab-complete.discount.general.code")
+ .forLocale()));
default -> Collections.emptyList();
};
}
if (cmdArg.length == 3) {
return switch (cmdArg[0]) {
- case "create" -> Arrays.stream(CodeType.values()).map(Enum::name).toList();
+ case "create" -> Arrays.stream(CodeType.values())
+ .map(Enum::name)
+ .toList();
case "config" -> List.of("scope", "addshop", "removeshop");
default -> Collections.emptyList();
};
@@ -355,7 +479,8 @@ public class DiscountCommand implements CommandHandler {
}
private List tabCompleteHint(@NotNull CommandSender sender, @NotNull String key) {
- String str = PlainTextComponentSerializer.plainText().serialize(quickshop.text().of(sender, key).forLocale());
+ String str = PlainTextComponentSerializer.plainText()
+ .serialize(quickshop.text().of(sender, key).forLocale());
List list = new ArrayList<>();
String[] explode = str.split("\n");
for (int i = 0; i < explode.length; i++) {
diff --git a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/listener/MainListener.java b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/listener/MainListener.java
index aa72c33a5..b8e93082c 100644
--- a/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/listener/MainListener.java
+++ b/addon/discount/src/main/java/com/ghostchu/quickshop/addon/discount/listener/MainListener.java
@@ -9,14 +9,13 @@ import com.ghostchu.quickshop.api.obj.QUser;
import com.ghostchu.quickshop.api.shop.Shop;
import com.ghostchu.quickshop.util.Util;
import com.ghostchu.quickshop.util.logger.Log;
+import java.util.UUID;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.jetbrains.annotations.NotNull;
-import java.util.UUID;
-
public class MainListener implements Listener {
private final Main main;
private final QuickShop quickshop;
@@ -41,17 +40,39 @@ public class MainListener implements Listener {
String code = codeInstalled.getCode();
Util.mainThreadRun(() -> {
switch (codeInstalled.applicableShop(purchaser, shop)) {
- case APPLICABLE ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-applicable", code).send();
- case APPLICABLE_WITH_THRESHOLD ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-applicable", code, quickshop.getEconomy().format(codeInstalled.getThreshold(), shop.getLocation().getWorld(), shop.getCurrency())).send();
- case NOT_APPLICABLE ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-not-applicable", code).send();
- case REACHED_THE_LIMIT ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-reach-the-limit", code).send();
- case NO_PERMISSION ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-no-permission", code).send();
- case EXPIRED -> quickshop.text().of(purchaser, "addon.discount.discount-code-expired", code).send();
+ case APPLICABLE -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-applicable", code)
+ .send();
+ case APPLICABLE_WITH_THRESHOLD -> quickshop
+ .text()
+ .of(
+ purchaser,
+ "addon.discount.discount-code-applicable",
+ code,
+ quickshop
+ .getEconomy()
+ .format(
+ codeInstalled.getThreshold(),
+ shop.getLocation().getWorld(),
+ shop.getCurrency()))
+ .send();
+ case NOT_APPLICABLE -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-not-applicable", code)
+ .send();
+ case REACHED_THE_LIMIT -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-reach-the-limit", code)
+ .send();
+ case NO_PERMISSION -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-no-permission", code)
+ .send();
+ case EXPIRED -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-expired", code)
+ .send();
}
});
}
@@ -78,25 +99,66 @@ public class MainListener implements Listener {
double beforeDiscount = event.getTotal();
event.setTotal(codeInstalled.apply(purchaser, event.getTotal()));
double discounted = beforeDiscount - event.getTotal();
- quickshop.text().of(purchaser, "addon.discount.discount-code-applied-in-purchase", code, quickshop.getEconomy().format(discounted, shop.getLocation().getWorld(), shop.getCurrency())).send();
+ quickshop
+ .text()
+ .of(
+ purchaser,
+ "addon.discount.discount-code-applied-in-purchase",
+ code,
+ quickshop
+ .getEconomy()
+ .format(discounted, shop.getLocation().getWorld(), shop.getCurrency()))
+ .send();
}
case APPLICABLE_WITH_THRESHOLD -> {
if (event.getTotal() < codeInstalled.getThreshold()) {
- quickshop.text().of(purchaser, "addon.discount.discount-code-under-threshold", quickshop.getEconomy().format(codeInstalled.getThreshold(), shop.getLocation().getWorld(), shop.getCurrency())).send();
+ quickshop
+ .text()
+ .of(
+ purchaser,
+ "addon.discount.discount-code-under-threshold",
+ quickshop
+ .getEconomy()
+ .format(
+ codeInstalled.getThreshold(),
+ shop.getLocation().getWorld(),
+ shop.getCurrency()))
+ .send();
} else {
double beforeDiscount = event.getTotal();
event.setTotal(codeInstalled.apply(purchaser, event.getTotal()));
double discounted = beforeDiscount - event.getTotal();
- quickshop.text().of(purchaser, "addon.discount.discount-code-applied-in-purchase", code, quickshop.getEconomy().format(discounted, shop.getLocation().getWorld(), shop.getCurrency())).send();
+ quickshop
+ .text()
+ .of(
+ purchaser,
+ "addon.discount.discount-code-applied-in-purchase",
+ code,
+ quickshop
+ .getEconomy()
+ .format(
+ discounted,
+ shop.getLocation().getWorld(),
+ shop.getCurrency()))
+ .send();
}
}
- case NOT_APPLICABLE ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-not-applicable", code).send();
- case REACHED_THE_LIMIT ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-reach-the-limit", code).send();
- case NO_PERMISSION ->
- quickshop.text().of(purchaser, "addon.discount.discount-code-no-permission", code).send();
- case EXPIRED -> quickshop.text().of(purchaser, "addon.discount.discount-code-expired", code).send();
+ case NOT_APPLICABLE -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-not-applicable", code)
+ .send();
+ case REACHED_THE_LIMIT -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-reach-the-limit", code)
+ .send();
+ case NO_PERMISSION -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-no-permission", code)
+ .send();
+ case EXPIRED -> quickshop
+ .text()
+ .of(purchaser, "addon.discount.discount-code-expired", code)
+ .send();
}
}
@@ -104,5 +166,4 @@ public class MainListener implements Listener {
public void onQuit(PlayerQuitEvent event) {
main.getStatusManager().unset(event.getPlayer().getUniqueId());
}
-
}
diff --git a/addon/displaycontrol/pom.xml b/addon/displaycontrol/pom.xml
deleted file mode 100644
index 6d26eddd7..000000000
--- a/addon/displaycontrol/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- displaycontrol
- jar
-
- Addon-DisplayControl
-
- Allow clients toggle the virtual display items status
-
- 17
- UTF-8
-
-
-
-
- dv8tion
- m2-dv8tion
- https://m2.dv8tion.net/releases
-
-
- Scarsz-Nexus
- https://nexus.scarsz.me/content/groups/public/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
-
-
-
-
-
-
-
diff --git a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/Main.java b/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/Main.java
deleted file mode 100644
index 8b8c08a15..000000000
--- a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/Main.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package com.ghostchu.quickshop.addon.displaycontrol;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.displaycontrol.bean.ClientType;
-import com.ghostchu.quickshop.addon.displaycontrol.bean.DisplayOption;
-import com.ghostchu.quickshop.addon.displaycontrol.command.SubCommand_DisplayControl;
-import com.ghostchu.quickshop.addon.displaycontrol.database.DisplayControlDatabaseHelper;
-import com.ghostchu.quickshop.api.command.CommandContainer;
-import com.ghostchu.quickshop.api.event.DisplayApplicableCheckEvent;
-import com.ghostchu.quickshop.util.PackageUtil;
-import com.ghostchu.quickshop.util.Util;
-import com.ghostchu.quickshop.util.logger.Log;
-import com.google.common.io.ByteArrayDataInput;
-import com.google.common.io.ByteStreams;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.HandlerList;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.bukkit.plugin.messaging.PluginMessageListener;
-import org.jetbrains.annotations.NotNull;
-
-import java.sql.SQLException;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-
-public final class Main extends JavaPlugin implements Listener, PluginMessageListener {
- private static final String BUNGEE_CHANNEL = "quickshopcompat:bcgeyser";
- private static final String RESPONSE_PREFIX = "CLIENTTYPE";
- static Main instance;
- private final Map playerClientMapping = new ConcurrentHashMap<>();
- private final Map playerDisplayStatus = new ConcurrentHashMap<>();
- private QuickShop plugin;
- private DisplayControlDatabaseHelper databaseHelper;
-
- @Override
- public void onLoad() {
- instance = this;
- }
-
- @Override
- public void onDisable() {
- HandlerList.unregisterAll((Plugin) this);
- }
-
- @Override
- public void onEnable() {
- saveDefaultConfig();
- plugin = QuickShop.getInstance();
- try {
- databaseHelper = new DisplayControlDatabaseHelper(instance, plugin.getSqlManager(), plugin.getDbPrefix());
- } catch (SQLException e) {
- getLogger().log(Level.WARNING, "Failed to init database helper", e);
- Bukkit.getPluginManager().disablePlugin(this);
- return;
- }
- Bukkit.getPluginManager().registerEvents(this, this);
- Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> this.playerClientMapping.entrySet().removeIf(e -> Bukkit.getPlayer(e.getKey()) == null), 60 * 20 * 60, 60 * 20 * 60);
- plugin.getCommandManager().registerCmd(CommandContainer.builder()
- .prefix("displaycontrol")
- .permission("quickshopaddon.displaycontrol.use")
- .description((locale) -> plugin.text().of("addon.displaycontrol.command.displaycontrol").forLocale(locale))
- .executor(new SubCommand_DisplayControl(plugin, this))
- .build());
- getLogger().info("BungeeCord: " + Util.checkIfBungee());
- if (Util.checkIfBungee()) {
- getLogger().info("Detected BungeeCord, register the BungeeCord client information forward module, you will need install Compat-BungeeCord-Geyser module to make this feature work.");
- Bukkit.getMessenger().registerIncomingPluginChannel
- (this, BUNGEE_CHANNEL, this); // we register the incoming channel
- }
- }
-
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void playerLogin(AsyncPlayerPreLoginEvent event) {
- UUID uuid = event.getUniqueId();
- try {
- DisplayOption displayOption = databaseHelper.getDisplayOption(uuid);
- this.playerDisplayStatus.put(uuid, displayOption);
- } catch (SQLException e) {
- getLogger().log(Level.WARNING, "Failed to getting the player display status from database", e);
- }
- }
-
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void playerQuit(PlayerQuitEvent event) {
- cleanup(event.getPlayer().getUniqueId());
- }
-
- private void cleanup(UUID uuid) {
- this.playerDisplayStatus.remove(uuid);
- this.playerClientMapping.remove(uuid);
- }
-
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void displaySending(DisplayApplicableCheckEvent event) {
- UUID uuid = event.getPlayer();
- DisplayOption option = this.playerDisplayStatus.getOrDefault(uuid, DisplayOption.AUTO);
- boolean bedrockClient = this.playerClientMapping.getOrDefault(uuid, ClientType.UNDISCOVERED).isBedrockType();
- if (!option.isDisplayAvailable(bedrockClient)) {
- event.setApplicable(false);
- }
- }
-
- public DisplayControlDatabaseHelper getDatabaseHelper() {
- return databaseHelper;
- }
-
- @Override
- public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte @NotNull [] message) {
- if (!channel.equalsIgnoreCase(BUNGEE_CHANNEL)) {
- return;
- }
- ByteArrayDataInput in = ByteStreams.newDataInput(message);
- String prefix = in.readUTF();
- //noinspection SwitchStatementWithTooFewBranches
- switch (prefix) {
- case RESPONSE_PREFIX -> handleBungeeBedrockPlayerCallback(in);
- default -> getLogger().log(Level.WARNING, "Unrecognized type: " + prefix);
- }
- }
-
- private void handleBungeeBedrockPlayerCallback(ByteArrayDataInput in) {
- if (!PackageUtil.parsePackageProperly("acceptBungeeCordBedrockPlayerDiscoveryCallback").asBoolean(true)) {
- return;
- }
- UUID uuid = UUID.fromString(in.readUTF());
- int responseType = in.readShort();
- ClientType clientType = ClientType.UNDISCOVERED;
- if (responseType == 0) {
- clientType = ClientType.JAVA_EDITION_PLAYER;
- }
- if (responseType == 1) {
- clientType = ClientType.BEDROCK_EDITION_PLAYER_GEYSER;
- }
- if (responseType == 2) {
- clientType = ClientType.BEDROCK_EDITION_PLAYER_FLOODGATE;
- }
- Log.debug("Player " + uuid + " client type check callback: " + clientType.name() + ", isBedrockClient: " + clientType.isBedrockType());
- if (this.playerClientMapping.getOrDefault(uuid, ClientType.UNDISCOVERED).isWaitingDiscover()) {
- Log.debug("[BUNGEE-CALLBACK] Discovered player " + uuid + " client type is: " + clientType.name());
- this.playerClientMapping.put(uuid, clientType);
- }
- }
-}
diff --git a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/bean/ClientType.java b/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/bean/ClientType.java
deleted file mode 100644
index 39559b8a8..000000000
--- a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/bean/ClientType.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.ghostchu.quickshop.addon.displaycontrol.bean;
-
-public enum ClientType {
- UNDISCOVERED,
- BEDROCK_EDITION_PLAYER_GEYSER,
- BEDROCK_EDITION_PLAYER_FLOODGATE,
- JAVA_EDITION_PLAYER;
-
- public boolean isBedrockType() {
- return this == BEDROCK_EDITION_PLAYER_FLOODGATE || this == BEDROCK_EDITION_PLAYER_GEYSER;
- }
-
- public boolean isWaitingDiscover() {
- return this == UNDISCOVERED;
- }
-}
diff --git a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/bean/DisplayOption.java b/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/bean/DisplayOption.java
deleted file mode 100644
index b69c37718..000000000
--- a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/bean/DisplayOption.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.ghostchu.quickshop.addon.displaycontrol.bean;
-
-public enum DisplayOption {
- AUTO(0),
- ENABLED(1),
- DISABLED(2);
- private final int id;
-
- DisplayOption(int id) {
- this.id = id;
- }
-
- public boolean isDisplayAvailable(boolean bedrock) {
- if (this == AUTO) {
- return !bedrock;
- }
- return this == ENABLED;
- }
-
- public static DisplayOption fromId(int id) {
- for (DisplayOption value : values()) {
- if (value.id == id) {
- return value;
- }
- }
- return AUTO;
- }
-
- public int getId() {
- return id;
- }
-}
diff --git a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/command/SubCommand_DisplayControl.java b/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/command/SubCommand_DisplayControl.java
deleted file mode 100644
index 334e66548..000000000
--- a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/command/SubCommand_DisplayControl.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.ghostchu.quickshop.addon.displaycontrol.command;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.displaycontrol.Main;
-import com.ghostchu.quickshop.addon.displaycontrol.bean.DisplayOption;
-import com.ghostchu.quickshop.api.command.CommandHandler;
-import com.ghostchu.quickshop.api.command.CommandParser;
-import com.ghostchu.quickshop.util.Util;
-import com.ghostchu.quickshop.util.logger.Log;
-import org.bukkit.entity.Player;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.sql.SQLException;
-import java.util.Collections;
-import java.util.List;
-import java.util.logging.Level;
-
-public class SubCommand_DisplayControl implements CommandHandler {
- private final QuickShop qs;
- private final Main plugin;
-
- public SubCommand_DisplayControl(QuickShop qs, Main plugin) {
- this.qs = qs;
- this.plugin = plugin;
- }
-
- @Override
- public void onCommand(Player sender, @NotNull String commandLabel, @NotNull CommandParser parser) {
- if (parser.getArgs().isEmpty()) {
- qs.text().of(sender, "command-incorrect", "/quickshop displaycontrol ").send();
- return;
- }
- DisplayOption option = DisplayOption.AUTO;
- String userInput = parser.getArgs().get(0).trim();
- if ("enable".equalsIgnoreCase(userInput)) {
- option = DisplayOption.ENABLED;
- }
- if ("disable".equalsIgnoreCase(userInput)) {
- option = DisplayOption.DISABLED;
- }
- DisplayOption optionFinCopy = option;
- Util.asyncThreadRun(() -> {
- try {
- Integer i = plugin.getDatabaseHelper().setDisplayDisableForPlayer(sender.getUniqueId(), optionFinCopy);
- Log.debug("Execute DisplayToggle with id " + i + " affected");
- qs.text().of(sender, "addon.displaycontrol.toggle", optionFinCopy.name()).send();
- } catch (SQLException e) {
- qs.text().of(sender, "addon.displaycontrol.toggle-exception").send();
- plugin.getLogger().log(Level.WARNING, "Cannot save the player display status", e);
- }
- });
- }
-
-
- @Override
- public @Nullable List onTabComplete(@NotNull Player sender, @NotNull String commandLabel, @NotNull CommandParser parser) {
- if (parser.getArgs().size() == 1) {
- return List.of("enable", "disable");
- }
- return Collections.emptyList();
- }
-}
diff --git a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/database/DisplayControlDatabaseHelper.java b/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/database/DisplayControlDatabaseHelper.java
deleted file mode 100644
index ffdcc2e54..000000000
--- a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/database/DisplayControlDatabaseHelper.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.ghostchu.quickshop.addon.displaycontrol.database;
-
-import cc.carm.lib.easysql.api.SQLManager;
-import cc.carm.lib.easysql.api.SQLQuery;
-import com.ghostchu.quickshop.addon.displaycontrol.Main;
-import com.ghostchu.quickshop.addon.displaycontrol.bean.DisplayOption;
-import com.ghostchu.quickshop.util.Util;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.UUID;
-import java.util.logging.Level;
-
-public class DisplayControlDatabaseHelper {
- private final Main plugin;
-
- public DisplayControlDatabaseHelper(@NotNull Main plugin, @NotNull SQLManager sqlManager, @NotNull String dbPrefix) throws SQLException {
- this.plugin = plugin;
- try {
- DisplayControlTables.initializeTables(sqlManager, dbPrefix);
- } catch (SQLException e) {
- plugin.getLogger().log(Level.WARNING, "Cannot initialize tables", e);
- throw e;
- }
-
- }
-
- public @NotNull Integer setDisplayDisableForPlayer(@NotNull UUID uuid, DisplayOption status) throws SQLException {
- Util.ensureThread(true);
- try (SQLQuery query = DisplayControlTables.DISPLAY_CONTROL_PLAYERS.createQuery()
- .setLimit(1)
- .addCondition("player", uuid.toString())
- .build().execute();
- ResultSet set = query.getResultSet()) {
- if (set.next()) {
- return DisplayControlTables.DISPLAY_CONTROL_PLAYERS.createUpdate()
- .setLimit(1)
- .addCondition("player", uuid.toString())
- .setColumnValues("displayOption", status.getId())
- .build().execute();
- } else {
- return DisplayControlTables.DISPLAY_CONTROL_PLAYERS.createInsert()
- .setColumnNames("player", "displayOption")
- .setParams(uuid.toString(), status.getId())
- .returnGeneratedKey()
- .execute();
- }
- }
-
- }
-
- @Nullable
- public DisplayOption getDisplayOption(@NotNull UUID player) throws SQLException {
- Util.ensureThread(true);
- try (SQLQuery query = DisplayControlTables.DISPLAY_CONTROL_PLAYERS
- .createQuery()
- .selectColumns("displayOption")
- .addCondition("player", player.toString()).setLimit(1).build().execute();
- ResultSet set = query.getResultSet()) {
- if (set.next()) {
- int optionId = set.getInt("displayOption");
- return DisplayOption.fromId(optionId);
- }
- return DisplayOption.AUTO;
- }
- }
-}
diff --git a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/database/DisplayControlTables.java b/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/database/DisplayControlTables.java
deleted file mode 100644
index e99cfbb1c..000000000
--- a/addon/displaycontrol/src/main/java/com/ghostchu/quickshop/addon/displaycontrol/database/DisplayControlTables.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package com.ghostchu.quickshop.addon.displaycontrol.database;
-
-import cc.carm.lib.easysql.api.SQLManager;
-import cc.carm.lib.easysql.api.action.PreparedSQLUpdateAction;
-import cc.carm.lib.easysql.api.action.PreparedSQLUpdateBatchAction;
-import cc.carm.lib.easysql.api.builder.*;
-import cc.carm.lib.easysql.api.enums.IndexType;
-import cc.carm.lib.easysql.api.function.SQLHandler;
-import com.ghostchu.quickshop.util.Util;
-import com.ghostchu.quickshop.util.logger.Log;
-import org.jetbrains.annotations.NotNull;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-
-public enum DisplayControlTables {
-
- DISPLAY_CONTROL_PLAYERS("display_control_psettings", (table) -> {
- table.addAutoIncrementColumn("id", true); // SHOP DATA ID
- table.addColumn("player", "VARCHAR(36) NOT NULL"); // SHOP DATA OWNER (ALL-ZERO if this is server)
- table.addColumn("displayOption", "INT NOT NULL DEFAULT 0"); // DISPLAY SETTINGS, JSON ENCODE
- table.setIndex(IndexType.INDEX, "idx_qs_addon_display_control_psettings", "player");
- });
- private final @NotNull String name;
- private final @NotNull SQLHandler tableHandler;
-
- private String prefix;
- private SQLManager manager;
-
- DisplayControlTables(@NotNull String name,
- @NotNull SQLHandler tableHandler) {
- this.name = name;
- this.tableHandler = tableHandler;
- }
-
- public static void initializeTables(@NotNull SQLManager sqlManager,
- @NotNull String tablePrefix) throws SQLException {
- for (DisplayControlTables value : values()) {
- value.create(sqlManager, tablePrefix);
- }
- }
-
- private void create(@NotNull SQLManager sqlManager, @NotNull String tablePrefix) throws SQLException {
- if (this.manager == null) {
- this.manager = sqlManager;
- }
- this.prefix = tablePrefix;
-
- TableCreateBuilder tableBuilder = sqlManager.createTable(this.getName());
- tableHandler.accept(tableBuilder);
- tableBuilder.build().execute();
- Log.debug("Table creating:" + this.getName());
- }
-
- public @NotNull String getName() {
- return this.prefix + this.name;
- }
-
- public @NotNull DeleteBuilder createDelete() {
- return this.createDelete(this.manager);
- }
-
- public @NotNull DeleteBuilder createDelete(@NotNull SQLManager sqlManager) {
- return sqlManager.createDelete(this.getName());
- }
-
- public @NotNull InsertBuilder> createInsert() {
- return this.createInsert(this.manager);
- }
-
- public @NotNull InsertBuilder> createInsert(@NotNull SQLManager sqlManager) {
- return sqlManager.createInsert(this.getName());
- }
-
- public @NotNull InsertBuilder> createInsertBatch() {
- return this.createInsertBatch(this.manager);
- }
-
- public @NotNull InsertBuilder> createInsertBatch(@NotNull SQLManager sqlManager) {
- return sqlManager.createInsertBatch(this.getName());
- }
-
- public @NotNull TableQueryBuilder createQuery() {
- return this.createQuery(this.manager);
- }
-
- public @NotNull TableQueryBuilder createQuery(@NotNull SQLManager sqlManager) {
- return sqlManager.createQuery().inTable(this.getName());
- }
-
- public @NotNull ReplaceBuilder> createReplace() {
- return this.createReplace(this.manager);
- }
-
- public @NotNull ReplaceBuilder> createReplace(@NotNull SQLManager sqlManager) {
- return sqlManager.createReplace(this.getName());
- }
-
- public @NotNull ReplaceBuilder> createReplaceBatch() {
- return this.createReplaceBatch(this.manager);
- }
-
- public @NotNull ReplaceBuilder> createReplaceBatch(@NotNull SQLManager sqlManager) {
- return sqlManager.createReplaceBatch(this.getName());
- }
-
- public @NotNull UpdateBuilder createUpdate() {
- return this.createUpdate(this.manager);
- }
-
- public @NotNull UpdateBuilder createUpdate(@NotNull SQLManager sqlManager) {
- return sqlManager.createUpdate(this.getName());
- }
-
- public boolean isExists() {
- return isExists(this.manager);
- }
-
- public boolean isExists(@NotNull SQLManager manager) {
- boolean match = false;
- try {
- try (Connection connection = manager.getConnection(); ResultSet rs = connection.getMetaData().getTables(null, null, "%", null)) {
- while (rs.next()) {
- if (getName().equalsIgnoreCase(rs.getString("TABLE_NAME"))) {
- match = true;
- break;
- }
- }
- }
- } catch (SQLException e) {
- if (Util.isDevMode()) {
- e.printStackTrace();
- }
- Log.debug("Error while checking table existence: " + getName());
- }
- return match;
- }
-
- public boolean purgeTable() {
- return purgeTable(this.manager);
- }
-
- public boolean purgeTable(@NotNull SQLManager sqlManager) {
- try {
- sqlManager.createDelete(this.getName())
- .addCondition("1=1")
- .build().execute();
- return true;
- } catch (SQLException e) {
- Log.debug("Failed to purge table " + this.getName() + e);
- return false;
- }
- }
-}
diff --git a/addon/displaycontrol/src/main/resources/config.yml b/addon/displaycontrol/src/main/resources/config.yml
deleted file mode 100644
index fd2f6664d..000000000
--- a/addon/displaycontrol/src/main/resources/config.yml
+++ /dev/null
@@ -1 +0,0 @@
-config-version: 1
\ No newline at end of file
diff --git a/addon/displaycontrol/src/main/resources/plugin.yml b/addon/displaycontrol/src/main/resources/plugin.yml
deleted file mode 100644
index 6cdfdecc8..000000000
--- a/addon/displaycontrol/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: qsaddon-${project.artifactId}
-version: '${project.version}'
-main: com.ghostchu.quickshop.addon.${project.artifactId}.Main
-api-version: 1.18
-depend:
- - QuickShop-Hikari
-authors: [ Ghost_chu ]
-permissions:
- quickshopaddon.displaycontrol.use:
- description: Allows players to use displaycontrol commands
- default: true
\ No newline at end of file
diff --git a/addon/dynmap/pom.xml b/addon/dynmap/pom.xml
deleted file mode 100644
index ee4d48d5f..000000000
--- a/addon/dynmap/pom.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- dynmap
- jar
-
- Addon-Dynmap
-
- Displaying the quickshops on your Dynmap instance
-
- 17
- UTF-8
-
-
-
-
- MikeRepo
- https://repo.mikeprimm.com/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
- us.dynmap
- dynmap-api
- 3.4-beta-3
- provided
-
-
-
diff --git a/addon/dynmap/src/main/java/com/ghostchu/quickshop/addon/dynmap/Main.java b/addon/dynmap/src/main/java/com/ghostchu/quickshop/addon/dynmap/Main.java
deleted file mode 100644
index 22164b90d..000000000
--- a/addon/dynmap/src/main/java/com/ghostchu/quickshop/addon/dynmap/Main.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package com.ghostchu.quickshop.addon.dynmap;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.api.event.*;
-import com.ghostchu.quickshop.api.localization.text.TextManager;
-import com.ghostchu.quickshop.api.shop.Shop;
-import com.ghostchu.quickshop.api.shop.ShopType;
-import com.ghostchu.quickshop.util.PackageUtil;
-import com.ghostchu.quickshop.util.Util;
-import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
-import org.bukkit.Bukkit;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.HandlerList;
-import org.bukkit.event.Listener;
-import org.bukkit.event.world.WorldLoadEvent;
-import org.bukkit.event.world.WorldUnloadEvent;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.dynmap.DynmapAPI;
-import org.dynmap.markers.*;
-import org.jetbrains.annotations.NotNull;
-
-public final class Main extends JavaPlugin implements Listener {
- static Main instance;
- private QuickShop plugin;
- private DynmapAPI dynmapAPI;
- private MarkerAPI markerAPI;
-
- @Override
- public void onLoad() {
- instance = this;
- }
-
- @Override
- public void onDisable() {
- HandlerList.unregisterAll((Plugin) this);
- }
-
- @Override
- public void onEnable() {
- saveDefaultConfig();
- plugin = QuickShop.getInstance();
- this.dynmapAPI = (DynmapAPI) Bukkit.getPluginManager().getPlugin("dynmap");
- this.markerAPI = this.dynmapAPI.getMarkerAPI();
- Bukkit.getPluginManager().registerEvents(this, this);
- Bukkit.getScheduler().runTaskLater(this, this::updateAllMarkers, 80);
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(WorldLoadEvent event) {
- Util.mainThreadRun(this::updateAllMarkers);
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(WorldUnloadEvent event) {
- Util.mainThreadRun(this::updateAllMarkers);
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(QSConfigurationReloadEvent event) {
- Util.mainThreadRun(this::updateAllMarkers);
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopCreateSuccessEvent event) {
- updateShopMarker(event.getShop());
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopDeleteEvent event) {
- Util.mainThreadRun(() -> updateShopMarker(event.getShop()));
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopPriceChangeEvent event) {
- Util.mainThreadRun(() -> updateShopMarker(event.getShop()));
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopItemChangeEvent event) {
- Util.mainThreadRun(() -> updateShopMarker(event.getShop()));
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopOwnershipTransferEvent event) {
- Util.mainThreadRun(() -> updateShopMarker(event.getShop()));
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopSuccessPurchaseEvent event) {
- Util.mainThreadRun(() -> updateShopMarker(event.getShop()));
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopTypeChangeEvent event) {
- Util.mainThreadRun(() -> updateShopMarker(event.getShop()));
- }
-
- @EventHandler(ignoreCancelled = true)
- public void onEvent(ShopNamingEvent event) {
- Util.mainThreadRun(() -> updateShopMarker(event.getShop()));
- }
-
- @NotNull
- public String plain(@NotNull Component component) {
- return PlainTextComponentSerializer.plainText().serialize(component);
- }
-
- @NotNull
- public TextManager text() {
- return plugin.getTextManager();
- }
-
- public MarkerSet getMarkerSet() {
- String id = PackageUtil.parsePackageProperly("marker-id").asString("quickshop-hikari-shops");
- MarkerSet markerSet = markerAPI.getMarkerSet(id);
- if (markerSet == null) {
- markerSet = markerAPI.createMarkerSet(id, plain(text().of("addon.dynmap.markerset-title").forLocale()), null, false);
- }
- markerSet.setHideByDefault(getConfig().getBoolean("display-by-default", true));
- return markerSet;
- }
-
- public MarkerIcon getShopMarkerIcon() {
- return markerAPI.getMarkerIcon(PackageUtil.parsePackageProperly("marker-icon").asString("chest"));
- }
-
- public void updateAllMarkers() {
- MarkerSet markerSet = getMarkerSet();
- markerSet.getMarkers().forEach(GenericMarker::deleteMarker);
- for (Shop shop : plugin.getShopManager().getAllShops()) {
- updateShopMarker(shop);
- }
- }
-
- public void updateShopMarker(Shop shop) {
- MarkerSet markerSet = getMarkerSet();
- String shopName = shop.getShopName();
- String posStr = String.format("%s %s, %s, %s", shop.getLocation().getWorld().getName(), shop.getLocation().getBlockX(), shop.getLocation().getBlockY(), shop.getLocation().getBlockZ());
- if (shopName == null) {
- shopName = posStr;
- }
- Marker marker = markerSet.findMarker("quickshop-hikari-shop-" + shop.getShopId());
- String markerName = plain(text().of("addon.dynmap.marker-name",
- shopName,
- plain(shop.ownerName()),
- plain(Util.getItemStackName(shop.getItem())),
- plugin.getShopManager().format(shop.getPrice(), shop),
- shop.getShopStackingAmount(),
- shop.getShopType() == ShopType.SELLING ? plain(text().of("shop-type.selling").forLocale()) : plain(text().of("shop-type.buying").forLocale()),
- shop.isUnlimited(),
- posStr
- ).forLocale());
- if (marker == null) {
- marker = markerSet.createMarker("quickshop-hikari-shop-" + shop.getShopId()
- , markerName
- , shop.getLocation().getWorld().getName(),
- shop.getLocation().getX(),
- shop.getLocation().getY(),
- shop.getLocation().getZ(),
- getShopMarkerIcon(), false);
- } else {
- marker.setLocation(shop.getLocation().getWorld().getName(),
- shop.getLocation().getX(),
- shop.getLocation().getY(),
- shop.getLocation().getZ());
- }
- String desc = plain(text().of("addon.dynmap.marker-description",
- shopName,
- plain(shop.ownerName()),
- plain(Util.getItemStackName(shop.getItem())),
- plugin.getShopManager().format(shop.getPrice(), shop),
- shop.getShopStackingAmount(),
- shop.getShopType() == ShopType.SELLING ? plain(text().of("shop-type.selling").forLocale()) : plain(text().of("shop-type.buying").forLocale()),
- shop.isUnlimited(),
- posStr
- ).forLocale());
- marker.setDescription(desc.replace("\n", "
"));
- }
-
-}
diff --git a/addon/dynmap/src/main/resources/config.yml b/addon/dynmap/src/main/resources/config.yml
deleted file mode 100644
index 58745ecb4..000000000
--- a/addon/dynmap/src/main/resources/config.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-config-version: 1
-display-by-default: true
\ No newline at end of file
diff --git a/addon/dynmap/src/main/resources/plugin.yml b/addon/dynmap/src/main/resources/plugin.yml
deleted file mode 100644
index 129733f71..000000000
--- a/addon/dynmap/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-name: qsaddon-${project.artifactId}
-version: '${project.version}'
-main: com.ghostchu.quickshop.addon.${project.artifactId}.Main
-api-version: 1.18
-depend:
- - dynmap
-authors: [ Ghost_chu ]
diff --git a/addon/limited/pom.xml b/addon/limited/pom.xml
deleted file mode 100644
index bf2c5dc6c..000000000
--- a/addon/limited/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- limited
- jar
-
- Addon-Limited
-
- Limit the player max amount of item can purchase in your specific shop
-
- 17
- UTF-8
-
-
-
-
- dv8tion
- m2-dv8tion
- https://m2.dv8tion.net/releases
-
-
- Scarsz-Nexus
- https://nexus.scarsz.me/content/groups/public/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
-
-
-
-
-
-
-
diff --git a/addon/limited/src/main/java/com/ghostchu/quickshop/addon/limited/Main.java b/addon/limited/src/main/java/com/ghostchu/quickshop/addon/limited/Main.java
deleted file mode 100644
index f7ac639b9..000000000
--- a/addon/limited/src/main/java/com/ghostchu/quickshop/addon/limited/Main.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.ghostchu.quickshop.addon.limited;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.limited.command.SubCommand_Limit;
-import com.ghostchu.quickshop.api.command.CommandContainer;
-import com.ghostchu.quickshop.api.event.CalendarEvent;
-import com.ghostchu.quickshop.api.event.ShopClickEvent;
-import com.ghostchu.quickshop.api.event.ShopPurchaseEvent;
-import com.ghostchu.quickshop.api.event.ShopSuccessPurchaseEvent;
-import com.ghostchu.quickshop.api.localization.text.Text;
-import com.ghostchu.quickshop.api.shop.Shop;
-import com.ghostchu.quickshop.util.Util;
-import com.ghostchu.quickshop.util.logger.Log;
-import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
-import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
-import org.apache.commons.lang3.StringUtils;
-import org.bukkit.Bukkit;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.plugin.java.JavaPlugin;
-
-import java.util.UUID;
-
-public final class Main extends JavaPlugin implements Listener {
- public static Main instance;
- private QuickShop plugin;
-
- private CommandContainer container;
-
- @Override
- public void onDisable() {
- // Plugin shutdown logic
- plugin.getCommandManager().unregisterCmd(container);
- }
-
- @Override
- public void onEnable() {
- // Plugin startup logic
- instance = this;
- saveDefaultConfig();
- Bukkit.getPluginManager().registerEvents(this, this);
- this.plugin = QuickShop.getInstance();
- this.container = CommandContainer.builder()
- .prefix("limit")
- .permission("quickshopaddon.limit.use")
- .description((locale) -> plugin.text().of("addon.limited.commands.limit").forLocale(locale))
- .executor(new SubCommand_Limit(plugin))
- .build();
- plugin.getCommandManager().registerCmd(container);
-
- }
-
- @EventHandler(ignoreCancelled = true)
- public void shopPurchase(ShopPurchaseEvent event) {
- Shop shop = event.getShop();
- ConfigurationSection storage = shop.getExtra(this);
- if (storage.getInt("limit") < 1) {
- return;
- }
- int limit = storage.getInt("limit");
- UUID uuid = event.getPurchaser().getUniqueIdIfRealPlayer().orElse(null);
- if (uuid != null) {
- int playerUsedLimit = storage.getInt("data." + uuid, 0);
- if (playerUsedLimit + event.getAmount() > limit) {
- Text text = plugin.text().of(event.getPurchaser(), "addon.limited.trade-limit-reached-cancel-reason");
- text.send();
- event.setCancelled(true, PlainTextComponentSerializer.plainText().serialize(text.forLocale()));
- }
- }
- }
-
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void shopClick(ShopClickEvent event) {
- Shop shop = event.getShop();
- ConfigurationSection storage = shop.getExtra(this);
- if (storage.getInt("limit") < 1) {
- Log.debug("Shop limit is not enabled on this shop.");
- return;
- }
- int limit = storage.getInt("limit");
- int playerUsedLimit = storage.getInt("data." + event.getClicker().getUniqueId(), 0);
- plugin.text().of(event.getClicker(), "addon.limited.remains-limits", limit - playerUsedLimit).send();
- Log.debug("Shop limit is enabled on this shop. Limit: " + limit + " Used: " + playerUsedLimit);
- }
-
- @EventHandler(priority = EventPriority.MONITOR)
- public void shopPurchaseSuccess(ShopSuccessPurchaseEvent event) {
- Shop shop = event.getShop();
- ConfigurationSection storage = shop.getExtra(this);
- if (storage.getInt("limit") < 1) {
- return;
- }
- UUID uuid = event.getPurchaser().getUniqueIdIfRealPlayer().orElse(null);
- if (uuid != null) {
- int limit = storage.getInt("limit");
- int playerUsedLimit = storage.getInt("data." + uuid, 0);
- playerUsedLimit += event.getAmount();
- storage.set("data." + uuid, playerUsedLimit);
- shop.setExtra(this, storage);
- Player player = Bukkit.getPlayer(uuid);
- if (player != null) {
- player.sendTitle(
- LegacyComponentSerializer.legacySection()
- .serialize(plugin.text().of(player, "addon.limited.titles.title")
- .forLocale()),
- LegacyComponentSerializer.legacySection()
- .serialize(plugin.text().of(player, "addon.limited.titles.subtitle"
- , (limit - playerUsedLimit)).forLocale()));
- }
- }
- }
-
- @EventHandler(ignoreCancelled = true)
- public void scheduleEvent(CalendarEvent event) {
- if (event.getCalendarTriggerType() == CalendarEvent.CalendarTriggerType.SECOND
- || event.getCalendarTriggerType() == CalendarEvent.CalendarTriggerType.NOTHING_CHANGED) {
- return;
- }
- Util.asyncThreadRun(() -> plugin.getShopManager().getAllShops().forEach(shop -> {
- ConfigurationSection manager = shop.getExtra(this);
- int limit = manager.getInt("limit");
- if (limit < 1) {
- return;
- }
- if (StringUtils.isEmpty(manager.getString("period"))) {
- return;
- }
- try {
- if (event.getCalendarTriggerType().ordinal() >= CalendarEvent.CalendarTriggerType.valueOf(manager.getString("period")).ordinal()) {
- manager.set("data", null);
- shop.setExtra(this, manager);
- Log.debug("Limit data has been reset. Shop -> " + shop);
- }
- } catch (IllegalArgumentException ignored) {
- Log.debug("Limit data failed to reset. Shop -> " + shop + " type " + manager.getString("period") + " not exists.");
- manager.set("period", null);
- shop.setExtra(this, manager);
- }
- }));
-
- }
-}
diff --git a/addon/limited/src/main/java/com/ghostchu/quickshop/addon/limited/command/SubCommand_Limit.java b/addon/limited/src/main/java/com/ghostchu/quickshop/addon/limited/command/SubCommand_Limit.java
deleted file mode 100644
index 1e4d8b8ba..000000000
--- a/addon/limited/src/main/java/com/ghostchu/quickshop/addon/limited/command/SubCommand_Limit.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.ghostchu.quickshop.addon.limited.command;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.limited.Main;
-import com.ghostchu.quickshop.api.command.CommandHandler;
-import com.ghostchu.quickshop.api.command.CommandParser;
-import com.ghostchu.quickshop.api.event.CalendarEvent;
-import com.ghostchu.quickshop.api.shop.Shop;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.entity.Player;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
-public class SubCommand_Limit implements CommandHandler {
- private final QuickShop quickshop;
-
- public SubCommand_Limit(QuickShop quickshop) {
- this.quickshop = quickshop;
- }
-
- @Override
- public void onCommand(Player sender, @NotNull String commandLabel, @NotNull CommandParser parser) {
- if (parser.getArgs().isEmpty()) {
- quickshop.text().of(sender, "command.wrong-args").send();
- return;
- }
- Shop shop = getLookingShop(sender);
- if (shop == null) {
- quickshop.text().of(sender, "not-looking-at-shop").send();
- return;
- }
- ConfigurationSection manager = shop.getExtra(Main.instance);
- switch (parser.getArgs().get(0)) {
- case "set" -> {
- try {
- int limitAmount = Integer.parseInt(parser.getArgs().get(1));
- if (limitAmount > 0) {
- manager.set("limit", limitAmount);
- quickshop.text().of(sender, "addon.limited.success-setup").send();
- } else {
- manager.set("limit", null);
- manager.set("data", null);
- quickshop.text().of(sender, "addon.limited.success-remove").send();
- }
- shop.setExtra(Main.instance, manager);
- } catch (NumberFormatException e) {
- quickshop.text().of(sender, "not-a-integer", parser.getArgs().get(1)).send();
- }
- }
- case "unset" -> {
- manager.set("limit", null);
- manager.set("data", null);
- quickshop.text().of(sender, "addon.limited.success-remove").send();
- shop.setExtra(Main.instance, manager);
- }
- case "reset" -> {
- manager.set("data", null);
- shop.setExtra(Main.instance, manager);
- quickshop.text().of(sender, "addon.limited.success-reset").send();
- }
- case "period" -> {
- try {
- CalendarEvent.CalendarTriggerType type = CalendarEvent.CalendarTriggerType.valueOf(parser.getArgs().get(1).toUpperCase(Locale.ROOT));
- manager.set("period", type.name());
- quickshop.text().of(sender, "addon.limited.success-setup").send();
- shop.setExtra(Main.instance, manager);
- } catch (IllegalArgumentException ignored) {
- quickshop.text().of(sender, "command.wrong-args", parser.getArgs().get(1)).send();
- }
- }
- }
- }
-
- @Override
- public @Nullable List onTabComplete(@NotNull Player sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
- if (cmdArg.length < 2) {
- return List.of("set", "unset", "reset", "period");
- }
- if (cmdArg.length < 3) {
- switch (cmdArg[0]) {
- case "set" -> {
- return List.of("");
- }
- case "period" -> {
- return Arrays.stream(CalendarEvent.CalendarTriggerType.values())
- .filter(e -> !e.equals(CalendarEvent.CalendarTriggerType.SECOND))
- .filter(e -> !e.equals(CalendarEvent.CalendarTriggerType.NOTHING_CHANGED))
- .map(Enum::name).toList();
- }
- }
- }
- return Collections.emptyList();
- }
-}
diff --git a/addon/limited/src/main/resources/config.yml b/addon/limited/src/main/resources/config.yml
deleted file mode 100644
index fd2f6664d..000000000
--- a/addon/limited/src/main/resources/config.yml
+++ /dev/null
@@ -1 +0,0 @@
-config-version: 1
\ No newline at end of file
diff --git a/addon/limited/src/main/resources/plugin.yml b/addon/limited/src/main/resources/plugin.yml
deleted file mode 100644
index 49579d3ad..000000000
--- a/addon/limited/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: qssuite-limited
-version: '${project.version}'
-main: com.ghostchu.quickshop.addon.${project.artifactId}.Main
-api-version: 1.18
-depend:
- - QuickShop-Hikari
-authors: [ Ghost_chu ]
-permissions:
- quickshopaddon.limit.use:
- description: Allow player to use /quickshop limit
- default: op
\ No newline at end of file
diff --git a/addon/list/pom.xml b/addon/list/pom.xml
deleted file mode 100644
index b5b26cd46..000000000
--- a/addon/list/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- list
- jar
-
- Addon-List
-
- Listing the all your quickshop
-
- 17
- UTF-8
-
-
-
-
- dv8tion
- m2-dv8tion
- https://m2.dv8tion.net/releases
-
-
- Scarsz-Nexus
- https://nexus.scarsz.me/content/groups/public/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
-
-
-
-
-
-
-
diff --git a/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/Main.java b/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/Main.java
index 074db4b3c..2cbd92da2 100644
--- a/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/Main.java
+++ b/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/Main.java
@@ -29,11 +29,11 @@ public final class Main extends JavaPlugin implements Listener {
plugin = QuickShop.getInstance();
getLogger().info("Registering the per shop permissions...");
Bukkit.getPluginManager().registerEvents(this, this);
- plugin.getCommandManager().registerCmd(
- CommandContainer
- .builder()
+ plugin.getCommandManager()
+ .registerCmd(CommandContainer.builder()
.prefix("list")
- .description((locale) -> plugin.text().of("addon.list.commands.list").forLocale(locale))
+ .description((locale) ->
+ plugin.text().of("addon.list.commands.list").forLocale(locale))
.selectivePermission("quickshopaddon.list.self")
.selectivePermission("quickshopaddon.list.other")
.executor(new SubCommand_List(plugin))
diff --git a/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/command/SubCommand_List.java b/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/command/SubCommand_List.java
index 433605895..11d97425a 100644
--- a/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/command/SubCommand_List.java
+++ b/addon/list/src/main/java/com/ghostchu/quickshop/addon/list/command/SubCommand_List.java
@@ -1,11 +1,16 @@
package com.ghostchu.quickshop.addon.list.command;
+import static com.ghostchu.quickshop.util.Util.getPlayerList;
+
import com.ghostchu.quickshop.QuickShop;
import com.ghostchu.quickshop.api.command.CommandHandler;
import com.ghostchu.quickshop.api.command.CommandParser;
import com.ghostchu.quickshop.api.shop.Shop;
import com.ghostchu.quickshop.util.ChatSheetPrinter;
import com.ghostchu.quickshop.util.Util;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor;
@@ -16,12 +21,6 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-
-import static com.ghostchu.quickshop.util.Util.getPlayerList;
-
public class SubCommand_List implements CommandHandler {
private final QuickShop quickshop;
@@ -39,7 +38,8 @@ public class SubCommand_List implements CommandHandler {
}
@Override
- public @Nullable List onTabComplete(@NotNull Player sender, @NotNull String commandLabel, @NotNull CommandParser parser) {
+ public @Nullable List onTabComplete(
+ @NotNull Player sender, @NotNull String commandLabel, @NotNull CommandParser parser) {
if (parser.getArgs().size() == 1) {
if (sender.hasPermission("quickshopaddon.list.other")) {
return getPlayerList();
@@ -73,24 +73,53 @@ public class SubCommand_List implements CommandHandler {
List shops = quickshop.getShopManager().getAllShops(lookupUser);
ChatSheetPrinter printer = new ChatSheetPrinter(sender);
printer.printHeader();
- printer.printLine(quickshop.text().of(sender, "addon.list.table-prefix", name, shops.size()).forLocale());
+ printer.printLine(quickshop
+ .text()
+ .of(sender, "addon.list.table-prefix", name, shops.size())
+ .forLocale());
int counter = 1;
for (Shop shop : shops) {
String shopName = shop.getShopName();
Location location = shop.getLocation();
- String combineLocation = location.getWorld().getName() + " " + location.getBlockX() + ", " + location.getBlockY() + ", " + location.getBlockZ();
+ String combineLocation = location.getWorld().getName() + " " + location.getBlockX() + ", "
+ + location.getBlockY() + ", " + location.getBlockZ();
if (StringUtils.isEmpty(shopName)) {
shopName = combineLocation;
}
- Component shopNameComponent = LegacyComponentSerializer.legacySection().deserialize(shopName).append(Component.textOfChildren(Component.text(" (").append(Util.getItemStackName(shop.getItem())).append(Component.text(")"))).color(NamedTextColor.GRAY));
+ Component shopNameComponent = LegacyComponentSerializer.legacySection()
+ .deserialize(shopName)
+ .append(Component.textOfChildren(Component.text(" (")
+ .append(Util.getItemStackName(shop.getItem()))
+ .append(Component.text(")")))
+ .color(NamedTextColor.GRAY));
Component shopTypeComponent;
if (shop.isBuying()) {
- shopTypeComponent = quickshop.text().of(sender, "menu.this-shop-is-buying").forLocale();
+ shopTypeComponent =
+ quickshop.text().of(sender, "menu.this-shop-is-buying").forLocale();
} else {
- shopTypeComponent = quickshop.text().of(sender, "menu.this-shop-is-selling").forLocale();
+ shopTypeComponent =
+ quickshop.text().of(sender, "menu.this-shop-is-selling").forLocale();
}
- Component component = quickshop.text().of(sender, "addon.list.entry", counter, shopNameComponent, location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ(), quickshop.getEconomy().format(shop.getPrice(), shop.getLocation().getWorld(), shop.getCurrency()), shop.getShopStackingAmount(), Util.getItemStackName(shop.getItem()), shopTypeComponent).forLocale();
- component = component.clickEvent(ClickEvent.runCommand("/quickshop silentpreview " + shop.getRuntimeRandomUniqueId()));
+ Component component = quickshop
+ .text()
+ .of(
+ sender,
+ "addon.list.entry",
+ counter,
+ shopNameComponent,
+ location.getWorld().getName(),
+ location.getBlockX(),
+ location.getBlockY(),
+ location.getBlockZ(),
+ quickshop
+ .getEconomy()
+ .format(shop.getPrice(), shop.getLocation().getWorld(), shop.getCurrency()),
+ shop.getShopStackingAmount(),
+ Util.getItemStackName(shop.getItem()),
+ shopTypeComponent)
+ .forLocale();
+ component = component.clickEvent(
+ ClickEvent.runCommand("/quickshop silentpreview " + shop.getRuntimeRandomUniqueId()));
printer.printLine(component);
counter++;
}
diff --git a/addon/plan/.gitignore b/addon/plan/.gitignore
deleted file mode 100644
index 4788b4b45..000000000
--- a/addon/plan/.gitignore
+++ /dev/null
@@ -1,113 +0,0 @@
-# User-specific stuff
-.idea/
-
-*.iml
-*.ipr
-*.iws
-
-# IntelliJ
-out/
-
-# Compiled class file
-*.class
-
-# Log file
-*.log
-
-# BlueJ files
-*.ctxt
-
-# Package Files #
-*.jar
-*.war
-*.nar
-*.ear
-*.zip
-*.tar.gz
-*.rar
-
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
-
-*~
-
-# temporary files which can be created if a process still has a handle open of a deleted file
-.fuse_hidden*
-
-# KDE directory preferences
-.directory
-
-# Linux trash folder which might appear on any partition or disk
-.Trash-*
-
-# .nfs files are created when an open file is removed but is still being accessed
-.nfs*
-
-# General
-.DS_Store
-.AppleDouble
-.LSOverride
-
-# Icon must end with two \r
-Icon
-
-# Thumbnails
-._*
-
-# Files that might appear in the root of a volume
-.DocumentRevisions-V100
-.fseventsd
-.Spotlight-V100
-.TemporaryItems
-.Trashes
-.VolumeIcon.icns
-.com.apple.timemachine.donotpresent
-
-# Directories potentially created on remote AFP share
-.AppleDB
-.AppleDesktop
-Network Trash Folder
-Temporary Items
-.apdisk
-
-# Windows thumbnail cache files
-Thumbs.db
-Thumbs.db:encryptable
-ehthumbs.db
-ehthumbs_vista.db
-
-# Dump file
-*.stackdump
-
-# Folder config file
-[Dd]esktop.ini
-
-# Recycle Bin used on file shares
-$RECYCLE.BIN/
-
-# Windows Installer files
-*.cab
-*.msi
-*.msix
-*.msm
-*.msp
-
-# Windows shortcuts
-*.lnk
-
-target/
-
-pom.xml.tag
-pom.xml.releaseBackup
-pom.xml.versionsBackup
-pom.xml.next
-
-release.properties
-dependency-reduced-pom.xml
-buildNumber.properties
-.mvn/timing.properties
-.mvn/wrapper/maven-wrapper.jar
-.flattened-pom.xml
-
-# Common working directory
-run/
diff --git a/addon/plan/pom.xml b/addon/plan/pom.xml
deleted file mode 100644
index 0bb1eb9cd..000000000
--- a/addon/plan/pom.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- plan
- jar
-
- Addon-Plan
-
- Showcase the metrics about QuickShop-Hikari on your Plan page
-
- 17
- UTF-8
-
-
-
-
- jitpack
- https://jitpack.io
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
- com.github.plan-player-analytics
- Plan
- 5.6.2614
- provided
-
-
- com.github.juliomarcopineda
- jdbc-stream
- 0.1.1
- compile
-
-
- cc.carm.lib
- easysql-api
- 0.4.7
- provided
-
-
-
-
-
-
-
-
-
diff --git a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/HikariDataExtension.java b/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/HikariDataExtension.java
deleted file mode 100644
index 79703a09b..000000000
--- a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/HikariDataExtension.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package com.ghostchu.quickshop.addon.plan;
-
-import com.djrapitops.plan.extension.CallEvents;
-import com.djrapitops.plan.extension.DataExtension;
-import com.djrapitops.plan.extension.annotation.*;
-import com.djrapitops.plan.extension.icon.Color;
-import com.djrapitops.plan.extension.icon.Family;
-import com.djrapitops.plan.extension.icon.Icon;
-import com.djrapitops.plan.extension.table.Table;
-import com.ghostchu.quickshop.addon.plan.util.DataUtil;
-import com.ghostchu.quickshop.addon.plan.util.DateUtil;
-import com.ghostchu.quickshop.addon.plan.util.MetricQuery;
-import com.ghostchu.quickshop.api.database.ShopMetricRecord;
-import com.ghostchu.quickshop.api.database.bean.DataRecord;
-import com.ghostchu.quickshop.api.shop.Shop;
-import com.ghostchu.quickshop.common.util.CommonUtil;
-import com.ghostchu.quickshop.database.SimpleDatabaseHelperV2;
-import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
-
-import java.text.DecimalFormat;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.ExecutionException;
-
-@PluginInfo(name = "QuickShop-Hikari", iconName = "credit-card", iconFamily = Family.REGULAR, color = Color.LIGHT_BLUE)
-@TabInfo(tab = "Summary", iconName = "info-circle", iconFamily = Family.SOLID, elementOrder = {})
-@TabInfo(tab = "Purchases", iconName = "inbox", elementOrder = {})
-@TabInfo(tab = "Shops", iconName = "list", iconFamily = Family.SOLID, elementOrder = {})
-@TabOrder({"Summary", "Purchases", "Shops"})
-public class HikariDataExtension implements DataExtension {
- private final Main main;
- private final MetricQuery metricQuery;
- private final DataUtil dataUtil;
- private final DecimalFormat df = new DecimalFormat("#.00");
-
- public HikariDataExtension(Main main) {
- this.main = main;
- this.dataUtil = new DataUtil(main);
- this.metricQuery = new MetricQuery(main.getQuickShop(), (SimpleDatabaseHelperV2) main.getQuickShop().getDatabaseHelper());
- }
-
- @Override
- public CallEvents[] callExtensionMethodsOn() {
- return new CallEvents[]{
- CallEvents.PLAYER_LEAVE,
- CallEvents.SERVER_PERIODICAL};
- }
-
- // ======================= GLOBAL PROVIDERS =======================
-
- @StringProvider(text = "Total shops", description = "How many shops exists on this server", iconName = "hashtable", iconColor = Color.GREEN, priority = 100)
- @Tab("Summary")
- public String shopCreated() {
- return String.valueOf(main.getQuickShop().getShopManager().getAllShops().size());
- }
-
- @Tab("Summary")
- @StringProvider(text = "Total purchases", description = "Number of purchases on this server", iconName = "hashtable", iconColor = Color.GREEN, priority = 100)
- public String totalTransactions() {
- return String.valueOf(metricQuery.queryServerPurchaseCount());
- }
-
- @TableProvider(tableColor = Color.BLUE)
- @Tab("Purchases")
- public Table purchasesTab() {
- Table.Factory tableBuilder = Table.builder()
- .columnOne("Player", Icon.called("user").build())
- .columnTwo("Action", Icon.called("code-branch").build())
- .columnThree("Shop", Icon.called("shopping-cart").build())
- .columnFour("Item(amount)", Icon.called("box").build())
- .columnFive("Balance", Icon.called("money-bill-wave").build());
- List records = this.metricQuery.queryServerPurchaseRecords(DateUtil.daysAgo(365), 1000, true).stream().filter(record -> switch (record.getType()) {
- //noinspection deprecation
- case PURCHASE, PURCHASE_BUYING_SHOP, PURCHASE_SELLING_SHOP -> true;
- default -> false;
- }).toList();
- try {
- LinkedHashMap recordsMapped = this.metricQuery.mapToDataRecord(records);
- recordsMapped.forEach((metric, data) -> {
- String player = metric.getPlayer();
- String action = CommonUtil.prettifyText(metric.getType().name());
- String shop = dataUtil.getShopName(metric, data);
- String item = dataUtil.getItemName(data) + " (" + metric.getAmount() + ")";
- String balance = dataUtil.formatEconomy(metric);
- tableBuilder.addRow(player, action, shop, item, balance);
- });
- } catch (ExecutionException | InterruptedException e) {
- throw new RuntimeException(e);
- }
- return tableBuilder.build();
- }
-
-
- @TableProvider(tableColor = Color.CYAN)
- @Tab("Shops")
- public Table shopsTab() {
- Table.Factory tableBuilder = Table.builder()
- .columnOne("Owner", Icon.called("user").build())
- .columnTwo("Item", Icon.called("shopping-cart").build())
- .columnThree("Price", Icon.called("money-bill-wave").build())
- .columnFour("Type", Icon.called("code-branch").build())
- .columnFive("Location", Icon.called("location-arrow").build());
- for (Shop shop : main.getQuickShop().getShopManager().getAllShops()) {
- String owner = PlainTextComponentSerializer.plainText().serialize(shop.ownerName());
- String item = dataUtil.getItemName(shop.getItem()) + " x" + shop.getShopStackingAmount();
- String price = df.format(shop.getPrice());
- if (main.getQuickShop().getEconomy() != null) {
- price = main.getQuickShop().getEconomy().format(shop.getPrice(), shop.getLocation().getWorld(), shop.getCurrency());
- }
- String type = switch (shop.getShopType()) {
- case BUYING -> "Buying";
- case SELLING -> "Selling";
- };
- String location = dataUtil.loc2String(shop.getLocation());
- tableBuilder.addRow(owner, item, price, type, location);
- }
- return tableBuilder.build();
- }
-
-
- // ======================= PLAYER PROVIDERS =======================
-
- @StringProvider(text = "Owned shops", description = "How many shops created and exists by this player", iconName = "hashtable", iconColor = Color.GREEN, priority = 100, showInPlayerTable = true)
- public String shopCreatedPlayer(UUID playerUUID) {
- return String.valueOf(main.getQuickShop().getShopManager().getAllShops(playerUUID).size());
- }
-
- @TableProvider(tableColor = Color.BLUE)
- @Tab("Purchases")
- public Table purchasesTabPlayer(UUID playerUUID) {
- Table.Factory tableBuilder = Table.builder()
- .columnOne("Action", Icon.called("code-branch").build())
- .columnTwo("Location", Icon.called("location-arrow").build())
- .columnThree("Item(amount)", Icon.called("box").build())
- .columnFour("Balance", Icon.called("money-bill-wave").build());
-
- List records = this.metricQuery.queryServerPurchaseRecords(DateUtil.daysAgo(365), 50, true).stream().filter(record -> switch (record.getType()) {
- //noinspection deprecation
- case PURCHASE, PURCHASE_BUYING_SHOP, PURCHASE_SELLING_SHOP -> true;
- default -> false;
- }).toList();
- try {
- LinkedHashMap recordsMapped = this.metricQuery.mapToDataRecord(records);
- recordsMapped.forEach((metric, data) -> {
- String action = CommonUtil.prettifyText(metric.getType().name());
- String shop = dataUtil.getShopName(metric, data);
- String item = dataUtil.getItemName(data) + " (" + metric.getAmount() + ")";
- String balance = dataUtil.formatEconomy(metric);
- tableBuilder.addRow(action, shop, item, balance);
- });
- } catch (ExecutionException | InterruptedException e) {
- throw new RuntimeException(e);
- }
- return tableBuilder.build();
- }
-
- @TableProvider(tableColor = Color.CYAN)
- @Tab("Shops")
- public Table shopsTabPlayer(UUID playerUUID) {
- Table.Factory tableBuilder = Table.builder()
- .columnOne("Item", Icon.called("shopping-cart").build())
- .columnTwo("Price", Icon.called("money-bill-wave").build())
- .columnThree("Type", Icon.called("code-branch").build())
- .columnFour("Location", Icon.called("location-arrow").build());
- for (Shop shop : main.getQuickShop().getShopManager().getAllShops(playerUUID)) {
- String item = dataUtil.getItemName(shop.getItem()) + " x" + shop.getShopStackingAmount();
- String price = df.format(shop.getPrice());
- if (main.getQuickShop().getEconomy() != null) {
- price = main.getQuickShop().getEconomy().format(shop.getPrice(), shop.getLocation().getWorld(), shop.getCurrency());
- }
- String type = switch (shop.getShopType()) {
- case BUYING -> "Buying";
- case SELLING -> "Selling";
- };
- String location = dataUtil.loc2String(shop.getLocation());
- tableBuilder.addRow(item, price, type, location);
- }
- return tableBuilder.build();
- }
-}
diff --git a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/Main.java b/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/Main.java
deleted file mode 100644
index 538b85d19..000000000
--- a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/Main.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ghostchu.quickshop.addon.plan;
-
-import com.ghostchu.quickshop.QuickShop;
-import org.bukkit.event.Listener;
-import org.bukkit.plugin.java.JavaPlugin;
-
-public final class Main extends JavaPlugin implements Listener {
- private QuickShop quickshop;
-
- @Override
- public void onEnable() {
- saveDefaultConfig();
- quickshop = QuickShop.getInstance();
- new PlanHook(this).hookIntoPlan();
- }
-
- public QuickShop getQuickShop() {
- return quickshop;
- }
-}
diff --git a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/PlanHook.java b/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/PlanHook.java
deleted file mode 100644
index b2e0e55ec..000000000
--- a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/PlanHook.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.ghostchu.quickshop.addon.plan;
-
-import com.djrapitops.plan.capability.CapabilityService;
-import com.djrapitops.plan.extension.ExtensionService;
-import org.bukkit.Bukkit;
-
-public class PlanHook {
- private final Main main;
- private final CapabilityService capabilities = CapabilityService.getInstance();
-
- public PlanHook(Main main) {
- this.main = main;
- }
-
- public void hookIntoPlan() {
- registerDataExtension();
- listenForPlanReloads();
- }
-
- private void registerDataExtension() {
- try {
- if (capabilities.hasCapability("DATA_EXTENSION_TABLES")
- && capabilities.hasCapability("DATA_EXTENSION_VALUES")) {
- ExtensionService.getInstance().register(new HikariDataExtension(main));
- } else {
- main.getLogger().severe("Your Plan build doesn't support DATA_EXTENSION_TABLES or DATA_EXTENSION_VALUES capability!");
- Bukkit.getPluginManager().disablePlugin(main);
- }
- } catch (IllegalStateException planIsNotEnabled) {
- // Plan is not enabled, handle exception
- } catch (IllegalArgumentException dataExtensionImplementationIsInvalid) {
- // The DataExtension implementation has an implementation error, handle exception
- }
- }
-
- private void listenForPlanReloads() {
- CapabilityService.getInstance().registerEnableListener(
- isPlanEnabled -> {
- // Register DataExtension again
- if (isPlanEnabled) {
- registerDataExtension();
- }
- }
- );
- }
-}
diff --git a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/DataUtil.java b/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/DataUtil.java
deleted file mode 100644
index 427b188f0..000000000
--- a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/DataUtil.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.ghostchu.quickshop.addon.plan.util;
-
-import com.ghostchu.quickshop.addon.plan.Main;
-import com.ghostchu.quickshop.api.database.ShopMetricRecord;
-import com.ghostchu.quickshop.api.database.bean.DataRecord;
-import com.ghostchu.quickshop.api.shop.Shop;
-import com.ghostchu.quickshop.common.util.CommonUtil;
-import com.ghostchu.quickshop.util.Util;
-import com.google.common.html.HtmlEscapers;
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.configuration.InvalidConfigurationException;
-import org.bukkit.inventory.ItemStack;
-import org.jetbrains.annotations.NotNull;
-
-import java.text.DecimalFormat;
-import java.util.UUID;
-
-public class DataUtil {
- public final Main main;
-
- public DataUtil(@NotNull Main main) {
- this.main = main;
- }
-
- @NotNull
- public String formatEconomy(@NotNull ShopMetricRecord record) {
- Shop shop = main.getQuickShop().getShopManager().getShop(record.getShopId());
- if (shop == null || main.getQuickShop().getEconomy() == null) {
- DecimalFormat df = new DecimalFormat("#.00");
- return df.format(record.getTotal());
- }
- return main.getQuickShop().getEconomy().format(record.getTotal(), shop.getLocation().getWorld(), shop.getCurrency());
- }
-
- @NotNull
- public String getItemName(@NotNull DataRecord dataRecord) {
- ItemStack stack;
- try {
- stack = Util.deserialize(dataRecord.getItem());
- } catch (InvalidConfigurationException e) {
- return "[Failed to deserialize]";
- }
- if (stack == null) {
- return "[Failed to deserialize]";
- }
- String name = CommonUtil.prettifyText(stack.getType().name());
- if (stack.getItemMeta() != null && stack.getItemMeta().hasDisplayName()) {
- name = stack.getItemMeta().getDisplayName();
- }
- return HtmlEscapers.htmlEscaper().escape(name);
- }
-
- @NotNull
- public String getItemName(@NotNull ItemStack stack) {
- String name = CommonUtil.prettifyText(stack.getType().name());
- if (stack.getItemMeta() != null && stack.getItemMeta().hasDisplayName()) {
- name = stack.getItemMeta().getDisplayName();
- }
- return HtmlEscapers.htmlEscaper().escape(name);
- }
-
- @NotNull
- public String getShopName(@NotNull ShopMetricRecord record, @NotNull DataRecord dataRecord) {
- StringBuilder nameBuilder = new StringBuilder();
- Shop shop = main.getQuickShop().getShopManager().getShop(record.getShopId());
- if (shop == null) {
- nameBuilder.append("[Deleted] ");
- }
- String shopName = dataRecord.getName();
- if (shopName != null) {
- nameBuilder.append(ChatColor.stripColor(shopName));
- } else {
- if (shop != null) {
- Location location = shop.getLocation();
- String template = "%s %s,%s,%s";
- nameBuilder.append(String.format(template, location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ()));
- } else {
- nameBuilder.append("N/A");
- }
- }
- return HtmlEscapers.htmlEscaper().escape(nameBuilder.toString());
- }
-
- @NotNull
- public String loc2String(@NotNull Location location) {
- String template = "%s %s,%s,%s";
- return String.format(template, location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
- }
-
- @NotNull
- public String getPlayerName(@NotNull UUID uuid) {
- if (CommonUtil.getNilUniqueId().equals(uuid)) {
- return "[Server]";
- }
- String name = main.getQuickShop().getPlayerFinder().uuid2Name(uuid);
- if (name == null || name.isEmpty()) {
- return uuid.toString();
- }
- return HtmlEscapers.htmlEscaper().escape(name);
- }
-}
diff --git a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/DateUtil.java b/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/DateUtil.java
deleted file mode 100644
index 2e9c5b3b6..000000000
--- a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/DateUtil.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.ghostchu.quickshop.addon.plan.util;
-
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Calendar;
-import java.util.Date;
-
-public class DateUtil {
- @NotNull
- public static Date daysAgo(int ago) {
- Calendar cal = Calendar.getInstance();
- cal.add(Calendar.DAY_OF_MONTH, -ago);
- return cal.getTime();
- }
-}
diff --git a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/MetricQuery.java b/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/MetricQuery.java
deleted file mode 100644
index 06131dd02..000000000
--- a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/MetricQuery.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.ghostchu.quickshop.addon.plan.util;
-
-import cc.carm.lib.easysql.api.SQLQuery;
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.api.database.ShopMetricRecord;
-import com.ghostchu.quickshop.api.database.ShopOperationEnum;
-import com.ghostchu.quickshop.api.database.bean.DataRecord;
-import com.ghostchu.quickshop.database.SimpleDatabaseHelperV2;
-import com.ghostchu.quickshop.obj.QUserImpl;
-import com.ghostchu.quickshop.util.logger.Log;
-import org.jetbrains.annotations.NotNull;
-
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.*;
-import java.util.concurrent.ExecutionException;
-
-public class MetricQuery {
- private final SimpleDatabaseHelperV2 databaseHelper;
- private final QuickShop plugin;
-
- public MetricQuery(QuickShop plugin, SimpleDatabaseHelperV2 databaseHelper) {
- this.databaseHelper = databaseHelper;
- this.plugin = plugin;
- }
-
-
- public long queryServerPurchaseCount() {
- String sql = "SELECT COUNT(*) AS result FROM " + databaseHelper.getPrefix() + "log_purchase";
- try (SQLQuery query = databaseHelper.getManager().createQuery().withPreparedSQL(sql).setParams(Collections.emptyList()).execute()) {
- ResultSet set = query.getResultSet();
- if (set.next()) {
- return set.getInt("result");
- } else {
- return -1;
- }
- } catch (SQLException e) {
- return -1;
- }
- }
-
- @NotNull
- public List queryTransactions(@NotNull Date startTime, long limit, boolean descending) {
- List list = new ArrayList<>();
- try (SQLQuery query = databaseHelper.getManager().createQuery()
- .inTable(databaseHelper.getPrefix() + "log_transaction")
- .addTimeCondition("time", startTime, null)
- .selectColumns()
- .setLimit(1000)
- .orderBy("id", !descending).build().execute()) {
- ResultSet set = query.getResultSet();
- while (set.next()) {
- //"time", "shop", "data", "buyer", "type", "amount", "money", "tax"
- ShopTransactionRecord record = new ShopTransactionRecord(
- set.getDate("time"),
- UUID.fromString(set.getString("from")),
- UUID.fromString(set.getString("to")),
- set.getString("currency"),
- set.getDouble("amount"),
- UUID.fromString(set.getString("tax_currency")),
- set.getDouble("tax_amount"),
- set.getString("error")
- );
- list.add(record);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- return list;
- }
- return list;
- }
-
- // Use LinkedHashMap forced because we need keep the order.
- public @NotNull LinkedHashMap mapToDataRecord(@NotNull List metricRecords) throws ExecutionException, InterruptedException {
- // map ShopMetricRecord#getShopId to DataRecord with blocking future
- LinkedHashMap dataRecords = new LinkedHashMap<>();
- for (ShopMetricRecord metricRecord : metricRecords) {
- long shopId = metricRecord.getShopId();
- Long dataId = databaseHelper.locateShopDataId(shopId).get();
- if (dataId == null) {
- Log.debug("dataId is null for shopId " + shopId);
- continue;
- }
- DataRecord dataRecord = databaseHelper.getDataRecord(dataId).get();
- dataRecords.put(metricRecord, dataRecord);
- }
- return dataRecords;
-
- }
-
- @NotNull
- public List queryServerPurchaseRecords(@NotNull Date startTime, long limit, boolean descending) {
- List list = new ArrayList<>();
- try (SQLQuery query = databaseHelper.getManager().createQuery()
- .inTable(databaseHelper.getPrefix() + "log_purchase")
- .addTimeCondition("time", startTime, null)
- .selectColumns()
- .setLimit(1000)
- .orderBy("id", !descending).build().execute()) {
- ResultSet set = query.getResultSet();
- while (set.next()) {
- //"time", "shop", "data", "buyer", "type", "amount", "money", "tax"
- ShopMetricRecord record = ShopMetricRecord.builder()
- .time(set.getDate("time").getTime())
- .shopId(set.getLong("shop"))
- .type(ShopOperationEnum.valueOf(set.getString("type")))
- .total(set.getDouble("money"))
- .tax(set.getDouble("tax"))
- .amount(set.getInt("amount"))
- .player(QUserImpl.createSync(plugin.getPlayerFinder(), set.getString("buyer")))
- .build();
- list.add(record);
- }
- } catch (SQLException e) {
- e.printStackTrace();
- return list;
- }
- return list;
- }
-}
diff --git a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/ShopTransactionRecord.java b/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/ShopTransactionRecord.java
deleted file mode 100644
index 77d530b1c..000000000
--- a/addon/plan/src/main/java/com/ghostchu/quickshop/addon/plan/util/ShopTransactionRecord.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ghostchu.quickshop.addon.plan.util;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-
-import java.util.Date;
-import java.util.UUID;
-
-@Data
-@AllArgsConstructor
-@Builder
-public class ShopTransactionRecord {
- private Date time;
- private UUID from;
- private UUID to;
- private String currency;
- private double amount;
- private UUID taxAccount;
- private double taxAmount;
- private String error;
-}
diff --git a/addon/plan/src/main/resources/config.yml b/addon/plan/src/main/resources/config.yml
deleted file mode 100644
index e534f88ef..000000000
--- a/addon/plan/src/main/resources/config.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-config-version: 1
-
diff --git a/addon/plan/src/main/resources/plugin.yml b/addon/plan/src/main/resources/plugin.yml
deleted file mode 100644
index 9eee1a3a7..000000000
--- a/addon/plan/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-name: qsaddon-${project.artifactId}
-version: '${project.version}'
-main: com.ghostchu.quickshop.addon.${project.artifactId}.Main
-api-version: 1.18
-depend:
- - QuickShop-Hikari
- - Plan
-authors: [ Ghost_chu ]
-#libraries:
-# - net.dv8tion:JDA:4.4.0_352.fix-2
\ No newline at end of file
diff --git a/addon/reremake-migrator/pom.xml b/addon/reremake-migrator/pom.xml
deleted file mode 100644
index 1354eb868..000000000
--- a/addon/reremake-migrator/pom.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- reremake-migrator
- jar
-
- Addon-Reremake-Migrator
-
- Migrator QuickShop-Reremake data to QuickShop-Hikari
-
- 17
- UTF-8
-
-
-
-
- quickshop-repo
- https://repo.codemc.io/repository/maven-public/
-
-
- minebench-repo
- https://repo.minebench.de/
-
-
- CodeMC
- https://repo.codemc.io/repository/maven-public/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 3.5.1
-
-
- package
-
- shade
-
-
- ${name}-${version}
-
- true
- false
- false
- false
- true
- true
-
-
-
-
-
-
-
-
- de.themoep:minedown-adventure:*
- com.ghostchu.thirdparty:JsonConfiguration:*
- net.minidev:json-smart:*
-
-
-
-
- de.themoep.minedown.
-
- com.ghostchu.quickshop.addon.reremakemigrator.shade.de.themoep.minedown.
-
-
-
- com.dumptruckman.
-
- com.ghostchu.quickshop.addon.reremakemigrator.shade.com.dumptruckman.
-
-
-
- net.minidev.
- com.ghostchu.quickshop.addon.reremakemigrator.shade.net.minidev.
-
-
-
-
-
-
- META-INF/*.SF
- META-INF/*.DSA
- META-INF/*.RSA
- META-INF/*.kotlin_module
- META-INF/*.txt
- META-INF/proguard/*
- META-INF/services/*
- META-INF/versions/9/*
- *License*
- *LICENSE*
-
-
-
-
-
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
- org.maxgamer
- QuickShop
- 5.1.2.5
- provided
-
-
- de.themoep
- minedown-adventure
- 1.7.2-SNAPSHOT
- compile
-
-
- com.ghostchu.thirdparty
- JsonConfiguration
- 1.2-20230922.165143-1
-
-
-
- net.minidev
- json-smart
- 1.1.1
- compile
-
-
-
-
-
-
-
-
-
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/Main.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/Main.java
deleted file mode 100644
index 0686277a2..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/Main.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.reremakemigrator.command.SubCommand_ReremakeMigrate;
-import com.ghostchu.quickshop.api.command.CommandContainer;
-import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
-import org.bukkit.Bukkit;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.HandlerList;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.plugin.java.JavaPlugin;
-
-public class Main extends JavaPlugin implements Listener {
- static Main instance;
- private QuickShop hikari;
- private org.maxgamer.quickshop.QuickShop reremake;
- private String deniedMessage;
-
- @Override
- public void onLoad() {
- instance = this;
- }
-
- @Override
- public void onEnable() {
- saveDefaultConfig();
- hikari = QuickShop.getInstance();
- reremake = org.maxgamer.quickshop.QuickShop.getInstance();
- getLogger().info("Found QuickShop-Hikari: " + hikari.getJavaPlugin().getDescription().getVersion());
- getLogger().info("Found QuickShop-Reremake: " + reremake.getDescription().getVersion());
- Bukkit.getPluginManager().registerEvents(this, this);
- hikari.getCommandManager().registerCmd(
- CommandContainer
- .builder()
- .prefix("migratefromreremake")
- .description((locale) -> hikari.text().of("addon.reremake-migrator.commands.migratefromreremake").forLocale(locale))
- .permission("quickshopaddon.reremakemigrator.migrator-admin")
- .executor(new SubCommand_ReremakeMigrate(this, hikari, reremake))
- .build());
- }
-
- @Override
- public void onDisable() {
- HandlerList.unregisterAll((Plugin) this);
- }
-
- public QuickShop getHikari() {
- return hikari;
- }
-
- public org.maxgamer.quickshop.QuickShop getReremake() {
- return reremake;
- }
-
- public void setDeniedMessage(String deniedMessage) {
- this.deniedMessage = deniedMessage;
- }
-
- public void setDeniedMessage(Component deniedMessage) {
- this.deniedMessage = LegacyComponentSerializer.legacySection().serialize(deniedMessage);
- }
-
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public void onPlayerJoin(AsyncPlayerPreLoginEvent event) {
- if (this.deniedMessage != null) {
- event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, this.deniedMessage);
- }
- }
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/command/SubCommand_ReremakeMigrate.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/command/SubCommand_ReremakeMigrate.java
deleted file mode 100644
index 67365d6fa..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/command/SubCommand_ReremakeMigrate.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.command;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.reremakemigrator.Main;
-import com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent.*;
-import com.ghostchu.quickshop.api.command.CommandHandler;
-import com.ghostchu.quickshop.api.command.CommandParser;
-import com.ghostchu.quickshop.util.ProgressMonitor;
-import com.ghostchu.quickshop.util.Util;
-import org.bukkit.Bukkit;
-import org.bukkit.command.ConsoleCommandSender;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-public class SubCommand_ReremakeMigrate implements CommandHandler {
- private final Main plugin;
- private final QuickShop hikari;
- private final org.maxgamer.quickshop.QuickShop reremake;
- private final AtomicBoolean running = new AtomicBoolean(false);
-
- public SubCommand_ReremakeMigrate(Main main, QuickShop hikari, org.maxgamer.quickshop.QuickShop reremake) {
- this.plugin = main;
- this.hikari = hikari;
- this.reremake = reremake;
- }
-
- @Override
- public void onCommand(ConsoleCommandSender sender, @NotNull String commandLabel, @NotNull CommandParser parser) {
- if (running.get()) {
- return;
- }
- if (parser.getArgs().isEmpty() || parser.getArgs().size() < 2) {
- hikari.text().of(sender, "command-incorrect", "/quickshop reremakemigrate ").send();
- return;
- }
- if (!Bukkit.getOnlinePlayers().isEmpty()) {
- hikari.text().of(sender, "addon.reremake-migrator.server-not-empty").send();
- return;
- }
- boolean shouldOverrideExistShops = Boolean.parseBoolean(parser.getArgs().get(0));
- boolean shouldMigrateTransactionLogs = Boolean.parseBoolean(parser.getArgs().get(1));
- List migrateComponentList = new ArrayList<>();
- migrateComponentList.add(new ConfigMigrate(plugin, hikari, reremake, sender));
- migrateComponentList.add(new TranslationMigrateComponent(plugin, hikari, reremake, sender));
- migrateComponentList.add(new ShopMigrate(plugin, hikari, reremake, sender, shouldOverrideExistShops));
- if (shouldMigrateTransactionLogs) {
- migrateComponentList.add(new ShopLogsMigrate(plugin, hikari, reremake, sender));
- }
- Util.asyncThreadRun(() -> {
- running.set(true);
- plugin.setDeniedMessage(hikari.text().of(sender, "addon.reremake-migrator.join_blocking_converting").forLocale());
- for (MigrateComponent migrateComponent : new ProgressMonitor<>(migrateComponentList, triple -> hikari.text().of(sender, "addon.reremake-migrator.executing", triple.getRight().getClass().getSimpleName(), triple.getLeft(), triple.getMiddle()).send())) {
- String migrateComponentName = migrateComponent.getClass().getSimpleName();
- try {
- if (!migrateComponent.migrate()) {
- // Something failed during the migration?
- hikari.text().of(sender, "addon.reremake-migrator.failed", migrateComponentName).send();
- running.set(false);
- return;
- }
- } catch (Exception e) {
- hikari.logger().warn("Failed to execute migrate component {}", migrateComponentName, e);
- running.set(false);
- return;
- }
- }
- hikari.text().of(sender, "addon.reremake-migrator.completed").send();
- plugin.setDeniedMessage(hikari.text().of(sender, "addon.reremake-migrator.join_blocking_finished").forLocale());
- running.set(false);
- });
- }
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/AbstractMigrateComponent.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/AbstractMigrateComponent.java
deleted file mode 100644
index 1dd1bacd1..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/AbstractMigrateComponent.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.QuickShopBukkit;
-import com.ghostchu.quickshop.addon.reremakemigrator.Main;
-import com.ghostchu.quickshop.api.localization.text.Text;
-import org.bukkit.command.CommandSender;
-
-public abstract class AbstractMigrateComponent implements MigrateComponent {
- private final Main plugin;
- private final QuickShop hikari;
- private final org.maxgamer.quickshop.QuickShop reremake;
- private final CommandSender sender;
-
- public AbstractMigrateComponent(Main main, QuickShop hikari, org.maxgamer.quickshop.QuickShop reremake, CommandSender sender) {
- this.plugin = main;
- this.hikari = hikari;
- this.reremake = reremake;
- this.sender = sender;
- }
-
- @Override
- public QuickShop getHikari() {
- return this.hikari;
- }
-
- @Override
- public QuickShopBukkit getHikariJavaPlugin() {
- return this.hikari.getJavaPlugin();
- }
-
- @Override
- public org.maxgamer.quickshop.QuickShop getReremake() {
- return this.reremake;
- }
-
- @Override
- public Main getPlugin() {
- return plugin;
- }
-
- public CommandSender getSender() {
- return sender;
- }
-
- public Text text(String modulePath, Object... objects) {
- return getHikari().text().of(sender, "addon.reremake-migrator." + modulePath, objects);
- }
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ConfigMigrate.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ConfigMigrate.java
deleted file mode 100644
index c11aeab24..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ConfigMigrate.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.reremakemigrator.Main;
-import com.ghostchu.quickshop.util.ProgressMonitor;
-import org.bukkit.Material;
-import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.configuration.file.YamlConfiguration;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.util.List;
-import java.util.UUID;
-
-public class ConfigMigrate extends AbstractMigrateComponent {
- // tax-free-for-unlimited-shop
- //
- private final String[] DIRECT_COPY_KEYS = new String[]{
- "game-language", "enabled-languages", "mojangapi-mirror", "dev-mode", "tax", "tax-account", "unlimited-shop-owner-change",
- "unlimited-shop-owner-change-account", "show-tax", "respect-item-flag", "currency", "logging", "trying-fix-banlance-insuffient",
- "include-offlineplayer-list", "economy-type", "use-decimal-format", "decimal-format", "send-display-item-protection-alert",
- "send-shop-protection-alert", "chat-type", "limits", "shop-block", "shop.cost", "shop.refund",
- "shop.sending-stock-message-to-staffs", "shop.disable-creative-mode-trading", "shop.disable-super-tool",
- "shop.allow-owner-break-shop-sign", "shop.price-change-requires-fee", "shop.fee-for-price-change", "shop.lock",
- "shop.disable-quick-create", "shop.auto-sign", "shop.sign-glowing", "shop.sign-dye-color", "shop.pay-unlimited-shop-owners",
- "shop.display-items", "shop.display-items-check-ticks", "shop.display-type", "shop.display-auto-despawn",
- "shop.display-despawn-range", "shop.display-check-time", "shop.display-allow-stacks", "shop.finding", "shop.alternate-currency-symbol",
- "shop.alternate-currency-symbol-list", "shop.disable-vault-format", "shop.currency-symbol-on-right", "shop.ignore-unlimited-shop-messages",
- "shop.auto-fetch-shop-messages", "shop.ignore-cancel-chat-event", "shop.allow-shop-without-space-for-sign",
- "shop.maximum-digits-in-price", "shop.show-owner-uuid-in-controlpanel-if-op", "shop.sign-material",
- "shop.use-enchantment-for-enchanted-book", "shop.use-effect-for-potion-item", "shop.blacklist-world",
- "shop.blacklist-lores", "shop.protection-checking", "shop.protection-checking-blacklist", "shop.protection-checking-listener-blacklist",
- "shop.max-shops-checks-in-once", "shop.display-item-use-name", "shop.update-sign-when-inventory-moving", "shop.allow-economy-loan",
- "shop.word-for-trade-all-items", "shop.ongoing-fee", "shop.force-load-downgrade-items", "shop.remove-protection-trigger",
- "shop.allow-stacks", "shop.force-use-item-original-name", "blacklist", "plugin.Multiverse-Core", "plugin.WorldEdit",
- "effect", "matcher", "protect.explode", "protect.hopper", "protect.entity", "custom-item-stacksize", "purge", "debug"
- };
-
- public ConfigMigrate(Main main, QuickShop hikari, org.maxgamer.quickshop.QuickShop reremake, CommandSender sender) {
- super(main, hikari, reremake, sender);
- }
-
- @Override
- public boolean migrate() {
- copyValues();
- migrateCommandAlias();
- migratePriceRestrictions();
- setFixedConfigValues();
- getHikariJavaPlugin().reloadConfig();
- return true;
- }
-
- private void migrateCommandAlias() {
- List commandAlias = getReremake().getConfig().getStringList("custom-commands");
- if (!commandAlias.contains("qs")) {
- commandAlias.add("qs");
- }
- getHikari().getConfig().set("custom-commands", commandAlias);
- getHikariJavaPlugin().saveConfig();
- }
-
- private void setFixedConfigValues() {
- getHikari().getConfig().set("legacy-updater.shop-sign", true);
- }
-
- private void migratePriceRestrictions() {
- // Generating price-restriction.yml, copy from SimplePriceLimiter.java
- text("modules.config.migrate-price-restriction").send();
- File configFile = new File(getHikariJavaPlugin().getDataFolder(), "price-restriction.yml");
- if (!configFile.exists()) {
- try {
- Files.copy(getHikariJavaPlugin().getResource("price-restriction.yml"), configFile.toPath());
- } catch (IOException e) {
- getHikari().logger().warn("Failed to copy price-restriction.yml.yml to plugin folder!", e);
- }
- }
- FileConfiguration configuration = YamlConfiguration.loadConfiguration(configFile);
- // migrate the minimum-price and maximum-price
- configuration.set("undefined.min", getReremake().getConfig().get("shop.minimum-price", "0.01"));
- configuration.set("undefined.max", getReremake().getConfig().get("shop.maximum-price", 999999999999999999999999999999.99d));
- configuration.set("enable", true);
- // migrate the whole-number setting from Reremake configuration
- configuration.set("whole-number-only", getReremake().getConfig().get("shop.whole-number-prices-only"));
- List str = getReremake().getConfig().getStringList("shop.price-restriction");
- for (String record : new ProgressMonitor<>(str, (triple) -> text("modules.migrate-price-restriction-entry", triple.getLeft(), triple.getMiddle()).send())) {
- try {
- String[] records = record.split(";");
- if (records.length != 3) {
- continue;
- }
- Material material = Material.matchMaterial(records[0]);
- double min = Double.parseDouble(records[1]);
- double max = Double.parseDouble(records[2]);
- String name = UUID.randomUUID().toString().replace("-", "");
- if (material == null) {
- continue;
- }
- configuration.set("rules." + name + ".items", List.of(material));
- configuration.set("rules." + name + ".currency", List.of("*"));
- configuration.set("rules." + name + ".min", min);
- configuration.set("rules." + name + ".max", max);
- } catch (Exception e) {
- getHikari().logger().warn("Failed to migrate rule {}", record, e);
- }
- }
- try {
- configuration.save(configFile);
- } catch (IOException e) {
- getHikari().logger().warn("Failed to save the price-restriction.yml", e);
- }
- }
-
-
- private void copyValues() {
- text("modules.config.copy-values", DIRECT_COPY_KEYS.length).send();
- for (String directCopyKey : new ProgressMonitor<>(DIRECT_COPY_KEYS, triple ->
- text("modules.config.copying-value", triple.getRight(), triple.getLeft(), triple.getMiddle()).send())) {
- copyValue(directCopyKey);
- }
- getHikariJavaPlugin().saveConfig();
- }
-
- private void copyValue(String keyName) {
- if (getReremake().getConfig().contains(keyName)) {
- getHikari().getConfig().set(keyName, getReremake().getConfig().get(keyName));
- }
- }
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/MigrateComponent.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/MigrateComponent.java
deleted file mode 100644
index dd6445e77..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/MigrateComponent.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.QuickShopBukkit;
-import com.ghostchu.quickshop.addon.reremakemigrator.Main;
-
-public interface MigrateComponent {
- QuickShop getHikari();
-
- QuickShopBukkit getHikariJavaPlugin();
-
- org.maxgamer.quickshop.QuickShop getReremake();
-
- boolean migrate();
-
- Main getPlugin();
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/MockPlugin.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/MockPlugin.java
deleted file mode 100644
index 784fb64e4..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/MockPlugin.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent;
-
-import org.bukkit.Server;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.file.FileConfiguration;
-import org.bukkit.generator.BiomeProvider;
-import org.bukkit.generator.ChunkGenerator;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.plugin.PluginDescriptionFile;
-import org.bukkit.plugin.PluginLoader;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.File;
-import java.io.InputStream;
-import java.util.List;
-import java.util.logging.Logger;
-
-public class MockPlugin implements Plugin {
-
- private final String pluginName;
-
- public MockPlugin(String pluginName) {
- this.pluginName = pluginName;
- }
-
- @NotNull
- @Override
- public File getDataFolder() {
- return null;
- }
-
- @NotNull
- @Override
- public PluginDescriptionFile getDescription() {
- return new PluginDescriptionFile(pluginName, "0.0.0", "N/A");
- }
-
- @NotNull
- @Override
- public FileConfiguration getConfig() {
- return null;
- }
-
- @Nullable
- @Override
- public InputStream getResource(@NotNull String s) {
- return null;
- }
-
- @Override
- public void saveConfig() {
-
- }
-
- @Override
- public void saveDefaultConfig() {
-
- }
-
- @Override
- public void saveResource(@NotNull String s, boolean b) {
-
- }
-
- @Override
- public void reloadConfig() {
-
- }
-
- @NotNull
- @Override
- public PluginLoader getPluginLoader() {
- return null;
- }
-
- @NotNull
- @Override
- public Server getServer() {
- return null;
- }
-
- @Override
- public boolean isEnabled() {
- return false;
- }
-
- @Override
- public void onDisable() {
-
- }
-
- @Override
- public void onLoad() {
-
- }
-
- @Override
- public void onEnable() {
-
- }
-
- @Override
- public boolean isNaggable() {
- return false;
- }
-
- @Override
- public void setNaggable(boolean b) {
-
- }
-
- @Nullable
- @Override
- public ChunkGenerator getDefaultWorldGenerator(@NotNull String s, @Nullable String s1) {
- return null;
- }
-
- @Nullable
- @Override
- public BiomeProvider getDefaultBiomeProvider(@NotNull String s, @Nullable String s1) {
- return null;
- }
-
- @NotNull
- @Override
- public Logger getLogger() {
- return null;
- }
-
- @NotNull
- @Override
- public String getName() {
- return pluginName;
- }
-
- @Override
- public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
- return false;
- }
-
- @Nullable
- @Override
- public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] strings) {
- return null;
- }
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ShopLogsMigrate.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ShopLogsMigrate.java
deleted file mode 100644
index 59ff56312..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ShopLogsMigrate.java
+++ /dev/null
@@ -1,268 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.reremakemigrator.Main;
-import com.ghostchu.quickshop.api.database.ShopMetricRecord;
-import com.ghostchu.quickshop.api.database.ShopOperationEnum;
-import com.ghostchu.quickshop.api.shop.Shop;
-import com.ghostchu.quickshop.api.shop.ShopType;
-import com.ghostchu.quickshop.common.util.CommonUtil;
-import com.ghostchu.quickshop.common.util.JsonUtil;
-import com.ghostchu.quickshop.common.util.QuickExecutor;
-import com.ghostchu.quickshop.obj.QUserImpl;
-import com.google.gson.JsonObject;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import org.apache.commons.lang3.StringUtils;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.World;
-import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.InvalidConfigurationException;
-import org.jetbrains.annotations.Nullable;
-
-import java.io.*;
-import java.nio.charset.Charset;
-import java.nio.charset.MalformedInputException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.time.format.DateTimeParseException;
-import java.time.temporal.ChronoField;
-import java.time.temporal.TemporalAccessor;
-import java.util.Base64;
-import java.util.Date;
-import java.util.UUID;
-import java.util.zip.GZIPInputStream;
-
-public class ShopLogsMigrate extends AbstractMigrateComponent {
- private final String template = "[2023-11-11 19:35:43.502] ";
- DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").withZone(ZoneId.systemDefault());
-
- public ShopLogsMigrate(Main main, QuickShop hikari, org.maxgamer.quickshop.QuickShop reremake, CommandSender sender) {
- super(main, hikari, reremake, sender);
- }
-
- @Override
- public boolean migrate() {
- text("modules.shop-logs.start-migrate").send();
- File logsFile = new File(getReremake().getDataFolder(), "appended-qs.log");
- File filteredFile = new File(getReremake().getDataFolder(), "filtered-qs.log");
- File formattedFile = new File(getReremake().getDataFolder(), "formatted-qs.log");
- try (PrintWriter printWriter = new PrintWriter(logsFile, StandardCharsets.UTF_8)) {
- logsFile.createNewFile();
- filteredFile.createNewFile();
- appendFiles(getReremake().getDataFolder(), printWriter);
- printWriter.flush();
- migrateAppendedLogs(logsFile, filteredFile);
- readAndFormatEntire(filteredFile, formattedFile);
- importToDatabase(formattedFile);
- } catch (Exception ex) {
- getHikari().logger().warn("Failed to migrate logs", ex);
- return true;
- } finally {
- logsFile.delete();
- filteredFile.delete();
- formattedFile.delete();
- }
- return true;
- }
-
- private void importToDatabase(File filteredFile) throws IOException {
- long sumLines = countLines(filteredFile);
- BufferedReader bufferedReader = new BufferedReader(new FileReader(filteredFile));
- try (bufferedReader) {
- String cursor;
- long count = 0;
- while ((cursor = bufferedReader.readLine()) != null) {
- try {
- count++;
- text("modules.shop-logs.import-entry", "", count, sumLines);
- DatedLogEntry entry = JsonUtil.standard().fromJson(new String(Base64.getDecoder().decode(cursor), StandardCharsets.UTF_8), DatedLogEntry.class);
- Date date = entry.getDate();
- JsonObject jObj = JsonUtil.readObject(entry.getContent());
- if (jObj.has("shop") && jObj.has("type") && jObj.has("trader")
- && jObj.has("itemStack") && jObj.has("amount")
- && jObj.has("balance")
- && jObj.has("tax")) {
- try {
- importThePurchaseRecord(date, jObj);
- } catch (Exception e) {
- getHikari().logger().warn("Error on importing to database", e);
- }
- continue;
- }
-// if (jObj.has("creator") && jObj.has("shop") && jObj.has("location")) {
-// importTheCreationRecord(date, jObj);
-// continue;
-// }
- getHikari().logger().warn("Invalid record {}, skipping", entry);
- } catch (Exception e2) {
- getHikari().logger().warn("Parse the log failed, cursor [{}]", cursor, e2);
- }
- }
- }
- }
-
- private long countLines(File filteredFile) throws FileNotFoundException {
- BufferedReader bufferedReader = new BufferedReader(new FileReader(filteredFile));
- return bufferedReader.lines().count();
- }
-
-// private void importTheCreationRecord(Date date, JsonObject jObj) {
-// UUID creator = UUID.fromString(jObj.getAsJsonObject("creator").getAsString());
-// JsonObject shopObj = jObj.get("shop").getAsJsonObject();
-// JsonObject loc = jObj.get("location").getAsJsonObject();
-// String worldName = loc.get("world").getAsString();
-// int x = loc.get("x").getAsInt();
-// int y = loc.get("y").getAsInt();
-// int z = loc.get("z").getAsInt();
-// World world = Bukkit.getWorld("worldName");
-// if (world == null) {
-// getHikari().logger().warn("Failed to migrate record, world is null.");
-// return;
-// }
-// Shop shop = getHikari().getShopManager().getShop(new Location(world, x, y, z));
-// if (shop == null) {
-// getHikari().logger().warn("Failed to migrate record, shop already no-longer exists.");
-// return;
-// }
-//
-// }
-
- private void importThePurchaseRecord(Date date, JsonObject jObj) throws InvalidConfigurationException {
- int amount = jObj.get("amount").getAsInt();
- double balance = jObj.get("balance").getAsDouble();
- double tax = jObj.get("tax").getAsDouble();
- UUID trader = UUID.fromString(jObj.get("trader").getAsString());
- ShopType type = ShopType.valueOf(jObj.get("type").getAsString());
- JsonObject shop = jObj.get("shop").getAsJsonObject();
- JsonObject pos = shop.get("position").getAsJsonObject();
- World world = Bukkit.getWorld(pos.get("world").getAsString());
- if (world == null) {
- throw new IllegalArgumentException("World " + jObj.get("world").getAsString() + " not exists.");
- }
- int x = pos.get("x").getAsInt();
- int y = pos.get("y").getAsInt();
- int z = pos.get("z").getAsInt();
- Location location = new Location(world, x, y, z);
- Shop shopInstance = getHikari().getShopManager().getShop(location);
- if (shopInstance == null) {
- throw new IllegalArgumentException("Shop at " + location + " not exists anymore");
- }
- ShopMetricRecord shopMetricRecord = new ShopMetricRecord(
- date.getTime(),
- shopInstance.getShopId(),
- type == ShopType.SELLING ? ShopOperationEnum.PURCHASE_SELLING_SHOP : ShopOperationEnum.PURCHASE_BUYING_SHOP,
- balance,
- tax,
- amount,
- QUserImpl.createSync(getHikari().getPlayerFinder(), trader, QuickExecutor.getSecondaryProfileIoExecutor())
- );
- getHikari().getDatabaseHelper().insertMetricRecord(shopMetricRecord);
- }
-
- private void readAndFormatEntire(File filteredFile, File formattedFile) throws IOException {
- BufferedReader bufferedReader = new BufferedReader(new FileReader(filteredFile));
- formattedFile.createNewFile();
- PrintWriter writer = new PrintWriter(formattedFile, StandardCharsets.UTF_8);
- StringBuilder buffer = new StringBuilder();
- try (bufferedReader; writer) {
- String cursor;
- while ((cursor = bufferedReader.readLine()) != null) {
- if (_isNewLineStart(cursor)) {
- // Clean buffer
- if (!buffer.isEmpty()) {
- DatedLogEntry formatted = _formatLine(buffer.toString());
- if (formatted != null) {
- writer.println(Base64.getEncoder().encodeToString(JsonUtil.standard().toJson(formatted)
- .getBytes(StandardCharsets.UTF_8)));
- } else {
- getHikari().logger().warn("Entry {} is invalid.", cursor);
- }
- buffer = new StringBuilder();
- }
- buffer.append(cursor);
- } else {
- buffer.append(cursor);
- }
- }
- writer.flush();
- }
- }
-
- @Data
- @AllArgsConstructor
- static class DatedLogEntry {
- private Date date;
- private String content;
- }
-
- @Nullable
- private DatedLogEntry _formatLine(String line) throws DateTimeParseException {
- String json = StringUtils.substringAfter(line, "] ");
- if (!CommonUtil.isJson(json)) return null;
- String dateStr = line.substring(1, template.length() - 1).trim();
- TemporalAccessor accessor = DATETIME_FORMATTER.parse(dateStr);
- return new DatedLogEntry(new Date(accessor.getLong(ChronoField.MILLI_OF_SECOND)), json);
- }
-
- private boolean _isNewLineStart(String line) {
- if (!line.startsWith("[")) return false;
- if (line.length() < template.length()) return false;
- return line.endsWith("] ");
- }
-
- private void migrateAppendedLogs(File logsFile, File filteredFile) throws IOException {
- text("modules.shop-logs.filter-history-files").send();
- BufferedReader bufferedReader = new BufferedReader(new FileReader(logsFile));
- PrintWriter writer = new PrintWriter(filteredFile, StandardCharsets.UTF_8);
- long counter = 0;
- try (bufferedReader; writer) {
- String line;
- while ((line = bufferedReader.readLine()) != null) {
- if (line.contains("beforeTrading") && line.contains("player") && line.contains("holding")) {
- continue;
- }
- if (StringUtils.isBlank(line)) {
- continue;
- }
- writer.println(line);
- counter++;
- }
- } finally {
- writer.flush();
- logsFile.delete();
- text("modules.shop-logs.filtered-history-files", counter);
- }
- }
-
- private void appendFiles(File dataFolder, PrintWriter logsFile) throws IOException {
- text("modules.shop-logs.extract-history-files").send();
- File logsSubFolder = new File(dataFolder, "logs");
- if (logsSubFolder.exists()) {
- File[] files = logsSubFolder.listFiles(f -> f.getName().endsWith(".log.gz"));
- if (files != null) {
- for (File file : files) {
- try (GZIPInputStream gzipInputStream = new GZIPInputStream(new FileInputStream(file))) {
- String content = new String(gzipInputStream.readAllBytes(), StandardCharsets.UTF_8);
- logsFile.println(content);
- logsFile.flush();
- }
- }
- }
- }
- File mainLogFile = new File(dataFolder, "qs.log");
- getHikari().logger().info("Selected main log file: " + mainLogFile.getAbsolutePath());
- if (mainLogFile.exists()) {
- try {
- logsFile.println(Files.readString(mainLogFile.toPath()));
- } catch (MalformedInputException e) {
- logsFile.println(Files.readString(mainLogFile.toPath(), Charset.defaultCharset()));
- }
- } else {
- throw new IllegalStateException("Main qs.log log file not exists");
- }
- }
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ShopMigrate.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ShopMigrate.java
deleted file mode 100644
index cde39f51c..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/ShopMigrate.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent;
-
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.reremakemigrator.Main;
-import com.ghostchu.quickshop.api.shop.ShopType;
-import com.ghostchu.quickshop.api.shop.permission.BuiltInShopPermissionGroup;
-import com.ghostchu.quickshop.common.util.CommonUtil;
-import com.ghostchu.quickshop.common.util.QuickExecutor;
-import com.ghostchu.quickshop.economy.SimpleBenefit;
-import com.ghostchu.quickshop.obj.QUserImpl;
-import com.ghostchu.quickshop.shop.ContainerShop;
-import com.ghostchu.quickshop.shop.inventory.BukkitInventoryWrapper;
-import com.ghostchu.quickshop.util.ProgressMonitor;
-import com.ghostchu.quickshop.util.performance.BatchBukkitExecutor;
-import com.google.common.io.Files;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.block.BlockState;
-import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.ConfigurationSection;
-import org.bukkit.configuration.InvalidConfigurationException;
-import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.inventory.InventoryHolder;
-import org.maxgamer.quickshop.api.shop.Shop;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class ShopMigrate extends AbstractMigrateComponent {
- private final boolean override;
-
- public ShopMigrate(Main main, QuickShop hikari, org.maxgamer.quickshop.QuickShop reremake, CommandSender sender, boolean overrideExists) {
- super(main, hikari, reremake, sender);
- this.override = overrideExists;
- }
-
- @Override
- public boolean migrate() {
- final AtomicBoolean success = new AtomicBoolean(true);
- final AtomicInteger c = new AtomicInteger(0);
- List allShops = getReremake().getShopManager().getAllShops();
- List preparedShops = new ArrayList<>();
- text("modules.shop.start-migrate", allShops.size()).send();
- BatchBukkitExecutor batchBukkitExecutor = new BatchBukkitExecutor<>();
- batchBukkitExecutor.addTasks(allShops);
- batchBukkitExecutor.startHandle(getHikari().getJavaPlugin(), reremakeShop -> {
- text("modules.shop.migrate-entry", reremakeShop.toString(), c.incrementAndGet(), allShops.size()).send();
- try {
- Location shopLoc = reremakeShop.getLocation();
- com.ghostchu.quickshop.api.shop.Shop hikariShop = getHikari().getShopManager().getShop(shopLoc, true);
- if (hikariShop != null) {
- if (!override) {
- text("modules.shop.conflict", "SKIPPING").send();
- return;
- } else {
- text("modules.shop.conflict", "OVERWRITING").send();
- getHikari().getShopManager().deleteShop(hikariShop);
- }
- }
- BlockState block = shopLoc.getBlock().getState();
- if (!(block instanceof InventoryHolder container)) {
- getHikari().logger().warn("Shop Invalid: Shop block not a valid Container, failed to create InventoryHolder.");
- return;
- }
- ContainerShop hikariRawShop = new ContainerShop(
- getHikari(),
- -1,
- shopLoc,
- Math.min(reremakeShop.getPrice(), 999999999999999999999999999999.99), // DECIMAL (32,2) MAX
- reremakeShop.getItem().clone(),
- QUserImpl.createSync(getHikari().getPlayerFinder(), reremakeShop.getOwner()),
- reremakeShop.isUnlimited(),
- ShopType.fromID(reremakeShop.getShopType().toID()),
- getReremakeShopExtra(reremakeShop),
- reremakeShop.getCurrency(),
- reremakeShop.isDisableDisplay(),
- reremakeShop.getTaxAccountActual() == null ? null : QUserImpl.createSync(getHikari().getPlayerFinder(), reremakeShop.getTaxAccountActual()),
- getHikari().getJavaPlugin().getName(),
- getHikari().getInventoryWrapperManager().mklink(new BukkitInventoryWrapper(container.getInventory())),
- null,
- Collections.emptyMap(),
- new SimpleBenefit()
- );
- migrateReremakeBanAddonData(reremakeShop, hikariRawShop);
- hikariRawShop.setDirty();
- preparedShops.add(hikariRawShop);
- } catch (Exception e) {
- getHikari().logger().warn("Failed to migrate shop " + reremakeShop, e);
- }
- }).thenAcceptAsync(a -> {
- unloadAndMoveAwayReremake();
- registerHikariShops(preparedShops);
- saveHikariShops();
- }, QuickExecutor.getCommonExecutor()).exceptionally((error) -> {
- getHikari().logger().warn("Error while migrating shops", error);
- success.set(false);
- return null;
- }).join();
- return success.get();
- }
-
- private void migrateReremakeBanAddonData(Shop reremakeShop, ContainerShop hikariRawShop) {
- try {
- ConfigurationSection reremakeBanExtra = reremakeShop.getExtra(new MockPlugin("QuickShopBan"));
- for (String bannedPlayer : reremakeBanExtra.getStringList("bannedplayers")) {
- if (!CommonUtil.isUUID(bannedPlayer)) continue;
- getHikari().logger().info("Migrating shop ban record {} at {} to new Hikari container shop.", bannedPlayer, reremakeShop);
- UUID uuid = UUID.fromString(bannedPlayer);
- hikariRawShop.setPlayerGroup(uuid, BuiltInShopPermissionGroup.BLOCKED);
- }
- } catch (Throwable th) {
- getHikari().logger().warn("Failed to migrate the shop ban record", th);
- }
- }
-
- private YamlConfiguration getReremakeShopExtra(Shop reremakeShop) {
- YamlConfiguration configuration = new YamlConfiguration();
- try {
- configuration.loadFromString(reremakeShop.saveExtraToYaml());
- } catch (InvalidConfigurationException ignored) {
- }
- return configuration;
- }
-
- private void saveHikariShops() {
- CompletableFuture>[] shopsToSaveFuture = getHikari().getShopManager().getAllShops().stream().filter(com.ghostchu.quickshop.api.shop.Shop::isDirty)
- .map(com.ghostchu.quickshop.api.shop.Shop::update)
- .toArray(CompletableFuture[]::new);
- text("modules.shop.saving-shops", shopsToSaveFuture.length).send();
- for (CompletableFuture> completableFuture : new ProgressMonitor<>(shopsToSaveFuture, triple -> text("modules.shop.save-entry", triple.getLeft(), triple.getMiddle()).send())) {
- try {
- completableFuture.join();
- } catch (Exception e) {
- getHikari().logger().warn("Error while saving shops, skipping", e);
- }
- }
-// CompletableFuture.allOf(shopsToSaveFuture)
-// .thenAcceptAsync((v) -> {
-// if (shopsToSaveFuture.length != 0) {
-// Log.debug("Saved " + shopsToSaveFuture.length + " shops in background.");
-// }
-// }, QuickExecutor.getShopSaveExecutor())
-// .exceptionally(e -> {
-// getHikari().logger().warn("Error while saving shops", e);
-// return null;
-// }).join();
- }
-
- private void registerHikariShops(List preparedShops) {
- for (com.ghostchu.quickshop.api.shop.Shop shop : new ProgressMonitor<>(preparedShops, triple -> text("modules.shop.register-entry", triple.getRight(), triple.getLeft(), triple.getMiddle()).send())) {
- getHikari().getShopManager().registerShop(shop, true).join();
- shop.setDirty();
- }
- }
-
- private void unloadAndMoveAwayReremake() {
- text("modules.shop.unloading-reremake").send();
- Bukkit.getPluginManager().disablePlugin(getReremake());
- File reremakeDataDirectory = new File(getHikari().getDataFolder(), "QuickShop");
- try {
- Files.move(reremakeDataDirectory, new File(getHikari().getDataFolder(), "QuickShop.migrated"));
- } catch (IOException e) {
- getHikari().logger().warn("Failed to move QuickShop-Reremake data directory, it may cause issues. You should manually move it to another location.");
- }
- }
-}
diff --git a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/TranslationMigrateComponent.java b/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/TranslationMigrateComponent.java
deleted file mode 100644
index f2bec4827..000000000
--- a/addon/reremake-migrator/src/main/java/com/ghostchu/quickshop/addon/reremakemigrator/migratecomponent/TranslationMigrateComponent.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package com.ghostchu.quickshop.addon.reremakemigrator.migratecomponent;
-
-import com.dumptruckman.bukkit.configuration.json.JsonConfiguration;
-import com.ghostchu.quickshop.QuickShop;
-import com.ghostchu.quickshop.addon.reremakemigrator.Main;
-import com.ghostchu.quickshop.util.ProgressMonitor;
-import de.themoep.minedown.adventure.MineDown;
-import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.minimessage.MiniMessage;
-import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.file.YamlConfiguration;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-public class TranslationMigrateComponent extends AbstractMigrateComponent {
-
- public TranslationMigrateComponent(Main main, QuickShop hikari, org.maxgamer.quickshop.QuickShop reremake, CommandSender sender) {
- super(main, hikari, reremake, sender);
- }
-
- @Override
- public boolean migrate() {
- text("modules.translation.start-migrate").send();
- File reremakeOverrideFolder = new File(getReremake().getDataFolder(), "overrides");
- if (!reremakeOverrideFolder.exists()) {
- return true;
- }
- File[] fileTree = reremakeOverrideFolder.listFiles();
- if (fileTree == null) {
- getHikari().logger().warn("Skipping translation migrate (no file tree)");
- return true;
- }
-
- for (File langFolder : new ProgressMonitor<>(fileTree, (triple) -> text("modules.translation.migrate-entry", triple.getRight().getName(), triple.getLeft(), triple.getMiddle()))) {
- File langJsonFile = new File(langFolder, "messages.json");
- if (!langJsonFile.exists()) {
- continue;
- }
- try {
- migrateFile(langFolder, langJsonFile);
- } catch (Exception exception) {
- getHikari().logger().warn("Failed migrate lang file " + langJsonFile.getName() + ".", exception);
- }
- }
- return true;
- }
-
- private void migrateFile(File langFolder, File langJsonFile) throws IOException {
- File hikariOverrideFolder = new File(getHikari().getDataFolder(), "overrides");
- File targetLangFolder = new File(hikariOverrideFolder, langFolder.getName());
- if (!targetLangFolder.exists()) {
- if (!targetLangFolder.mkdirs()) {
- throw new IOException("Failed to create lang " + langFolder.getName() + " directory.");
- }
- }
- JsonConfiguration jsonConfiguration = JsonConfiguration.loadConfiguration(langJsonFile);
- YamlConfiguration yamlConfiguration = new YamlConfiguration();
- File targetLangFile = new File(targetLangFolder, langJsonFile.getName().replace(".json", ".yml"));
- if (targetLangFile.exists()) {
- yamlConfiguration = YamlConfiguration.loadConfiguration(targetLangFile);
- }
- getHikari().logger().info("Migrating the Reremake language file: " + langJsonFile.getAbsolutePath() + "...");
- Set keys = jsonConfiguration.getKeys(true);
- text("modules.translation.copy-values", targetLangFolder.getName(), keys.size()).send();
- for (String key : new ProgressMonitor<>(keys, (triple) -> text("modules.translation.copying-value", triple.getRight(), triple.getLeft(), triple.getMiddle()).send())) {
- if ("_comment".equals(key)) {
- continue;
- }
- if (jsonConfiguration.isConfigurationSection(key)) {
- continue;
- }
- if (jsonConfiguration.isString(key)) {
- String originalValue = jsonConfiguration.getString(key);
- Component component = MineDown.parse(originalValue).compact();
- String convertedValue = MiniMessage.miniMessage().serialize(component);
- yamlConfiguration.set(key, convertedValue);
- } else {
- if (jsonConfiguration.isList(key)) {
- List list = jsonConfiguration.getStringList(key);
- List convert = new ArrayList<>();
- list.forEach(s -> {
- Component component = MineDown.parse(s).compact();
- String convertedValue = MiniMessage.miniMessage().serialize(component);
- convert.add(convertedValue);
- });
- yamlConfiguration.set(key, convert);
- } else {
- yamlConfiguration.set(key, jsonConfiguration.get(key));
- }
- }
- }
- if (!targetLangFile.exists()) {
- if (!targetLangFile.createNewFile()) {
- getHikari().logger().warn("Couldn't save converted data to file: file creation failed");
- return;
- }
- }
- yamlConfiguration.save(targetLangFile);
- }
-}
diff --git a/addon/reremake-migrator/src/main/resources/config.yml b/addon/reremake-migrator/src/main/resources/config.yml
deleted file mode 100644
index fd2f6664d..000000000
--- a/addon/reremake-migrator/src/main/resources/config.yml
+++ /dev/null
@@ -1 +0,0 @@
-config-version: 1
\ No newline at end of file
diff --git a/addon/reremake-migrator/src/main/resources/plugin.yml b/addon/reremake-migrator/src/main/resources/plugin.yml
deleted file mode 100644
index 148e0d12f..000000000
--- a/addon/reremake-migrator/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: qsaddon-reremakemigrator
-version: '${project.version}'
-main: com.ghostchu.quickshop.addon.reremakemigrator.Main
-api-version: 1.18
-depend:
- - QuickShop-Hikari
- - QuickShop
-authors: [ Ghost_chu ]
-permissions:
- quickshopaddon.reremakemigrator.migrator-admin:
- default: op
- description: Migrate from QuickShop-Reremake
\ No newline at end of file
diff --git a/addon/shopitemonly/pom.xml b/addon/shopitemonly/pom.xml
deleted file mode 100644
index a3b581ced..000000000
--- a/addon/shopitemonly/pom.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.addon
- shopitemonly
- jar
-
- Addon-ShopItemOnly
-
- Restrict only store items can be placed in store containers
-
- 17
- UTF-8
-
-
-
-
- dv8tion
- m2-dv8tion
- https://m2.dv8tion.net/releases
-
-
- Scarsz-Nexus
- https://nexus.scarsz.me/content/groups/public/
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
- org.apache.commons
- commons-lang3
- 3.14.0
- provided
-
-
-
-
-
-
-
-
-
diff --git a/addon/shopitemonly/src/main/java/com/ghostchu/quickshop/addon/shopitemonly/Main.java b/addon/shopitemonly/src/main/java/com/ghostchu/quickshop/addon/shopitemonly/Main.java
index 36241abe9..59bf0f56a 100644
--- a/addon/shopitemonly/src/main/java/com/ghostchu/quickshop/addon/shopitemonly/Main.java
+++ b/addon/shopitemonly/src/main/java/com/ghostchu/quickshop/addon/shopitemonly/Main.java
@@ -2,6 +2,8 @@ package com.ghostchu.quickshop.addon.shopitemonly;
import com.ghostchu.quickshop.QuickShop;
import com.ghostchu.quickshop.api.shop.Shop;
+import java.util.ArrayList;
+import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -16,9 +18,6 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
-import java.util.ArrayList;
-import java.util.List;
-
public final class Main extends JavaPlugin implements Listener {
static Main instance;
private QuickShop plugin;
@@ -40,7 +39,6 @@ public final class Main extends JavaPlugin implements Listener {
Bukkit.getPluginManager().registerEvents(this, this);
}
-
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void invClose(InventoryCloseEvent event) {
Inventory inventory = event.getInventory();
@@ -75,19 +73,21 @@ public final class Main extends JavaPlugin implements Listener {
inventory.remove(item);
invLocation.getWorld().dropItemNaturally(invLocation.add(0, 1, 0), item);
}
- plugin.text().of(event.getPlayer(), "addon.shopitemonly.message", pendingForRemoval.size()).send();
+ plugin.text()
+ .of(event.getPlayer(), "addon.shopitemonly.message", pendingForRemoval.size())
+ .send();
}
-
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void invMove(InventoryMoveItemEvent event) {
- if (event.getDestination() == null) { //Stupid CMIGUI plugin
+ if (event.getDestination() == null) { // Stupid CMIGUI plugin
return;
}
if (event.getDestination().getLocation() == null) {
return;
}
- Shop shop = plugin.getShopManager().getShopIncludeAttached(event.getDestination().getLocation());
+ Shop shop = plugin.getShopManager()
+ .getShopIncludeAttached(event.getDestination().getLocation());
if (shop == null) {
return;
}
diff --git a/bootstrap.sh b/bootstrap.sh
new file mode 100755
index 000000000..46a1e94bd
--- /dev/null
+++ b/bootstrap.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/bash
+
+# Fetch all submodule content.
+git submodule update --force --recursive --init
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 000000000..f3176ec54
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,301 @@
+val quickshopVersion = "5.9"
+val purpurApiVersion = "1.19.4-R0.1-SNAPSHOT"
+val javaLanguageVersion = 17
+val jetbrainsAnnotationsVersion = "24.1.0"
+val adventureApiVersion = "4.22.0"
+val adventureExtraVersion = "4.2.0"
+val adventurePlatformVersion = "4.3.2"
+val viaversionApi = "4.3.0"
+
+plugins {
+ id("java-library")
+ id("io.freefair.lombok") version "8.14" apply false
+ id("com.gradleup.shadow") version "8.3.6" apply false
+ id("com.diffplug.spotless") version "7.0.4"
+}
+
+subprojects {
+ apply(plugin = "java-library")
+ apply(plugin = "io.freefair.lombok")
+ apply(plugin = "com.diffplug.spotless")
+ apply(plugin = "com.gradleup.shadow")
+ apply(plugin = "eclipse")
+
+ group = "com.ghostchu"
+ version = quickshopVersion
+
+ java {
+ toolchain {
+ languageVersion.set(JavaLanguageVersion.of(javaLanguageVersion))
+ vendor.set(org.gradle.jvm.toolchain.JvmVendorSpec.GRAAL_VM)
+ }
+ }
+
+ repositories {
+ mavenCentral()
+ maven("https://repo.viaversion.com")
+ maven("https://repo.purpurmc.org/snapshots")
+ maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
+ maven("https://repo.papermc.io/repository/maven-public/")
+ maven("https://repo.codemc.io/repository/maven-public/")
+ maven("https://repo.codemc.io/repository/nms/")
+ maven("https://repo.md-5.net/content/repositories/releases/")
+ maven("https://repo.md-5.net/content/repositories/snapshots/")
+ maven("https://repo.dmulloy2.net/repository/public/")
+ maven("https://repo.essentialsx.net/releases/")
+ maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
+ maven("https://maven.enginehub.org/repo/")
+ maven("https://m2.dv8tion.net/releases")
+ maven("https://nexus.scarsz.me/content/groups/public/")
+ maven("https://www.jitpack.io")
+ }
+
+ dependencies { compileOnly("org.jetbrains:annotations:$jetbrainsAnnotationsVersion") }
+
+ if (path != ":libs:Utilities-OG") {
+ spotless {
+ java {
+ removeUnusedImports()
+ palantirJavaFormat()
+ }
+ kotlinGradle {
+ ktfmt().kotlinlangStyle().configure { it.setMaxWidth(120) }
+ target("build.gradle.kts", "settings.gradle.kts")
+ }
+ }
+ }
+
+ tasks.withType().configureEach {
+ isPreserveFileTimestamps = false
+ isReproducibleFileOrder = true
+ }
+ tasks.withType().configureEach {
+ dependsOn("spotlessApply")
+ options.compilerArgs.addAll(listOf("-parameters", "-Xlint:deprecation"))
+ options.encoding = "UTF-8"
+ options.isFork = true
+ }
+}
+
+project(":quickshop-common") {
+ dependencies {
+ api("net.kyori:adventure-api:$adventureApiVersion")
+ api("net.kyori:adventure-nbt:$adventureApiVersion")
+ api("com.ghostchu:simplereloadlib:1.1.2")
+ implementation("org.apache.commons:commons-lang3:3.14.0")
+ implementation("org.slf4j:slf4j-jdk14:2.0.9")
+ implementation("com.google.code.gson:gson:2.10.1")
+ api("cc.carm.lib:easysql-hikaricp:0.4.7")
+ api("org.apache.commons:commons-text:1.11.0")
+ api("org.apache.commons:commons-compress:1.25.0")
+ compileOnly("org.purpurmc.purpur:purpur-api:$purpurApiVersion")
+ compileOnlyApi(project(":libs:Utilities-OG"))
+ }
+}
+
+project(":quickshop-api") {
+ dependencies {
+ api(project(":quickshop-common"))
+ implementation("com.vdurmont:semver4j:3.1.0")
+ compileOnly("cc.carm.lib:easysql-api:0.4.7")
+ compileOnly("org.purpurmc.purpur:purpur-api:$purpurApiVersion")
+ }
+}
+
+val platformApi = "org.purpurmc.purpur:purpur-api:$purpurApiVersion"
+
+project(":platform:quickshop-platform-interface") {
+ dependencies {
+ api(project(":quickshop-common"))
+ compileOnly(platformApi)
+ compileOnly("de.tr7zw:item-nbt-api-plugin:2.12.1")
+ }
+}
+
+project(":platform:quickshop-platform-spigot-abstract") {
+ dependencies {
+ api(project(":platform:quickshop-platform-interface"))
+ compileOnly(platformApi)
+ implementation("commons-lang:commons-lang:2.6")
+ compileOnly("de.tr7zw:item-nbt-api-plugin:2.12.1")
+ }
+}
+
+project(":platform:quickshop-platform-paper") {
+ dependencies {
+ implementation(project(":platform:quickshop-platform-interface"))
+ compileOnly("io.papermc.paper:paper-api:$purpurApiVersion")
+ }
+}
+
+listOf(
+ "v1_19_R1" to "1.19.1-R0.1-SNAPSHOT",
+ "v1_19_R2" to "1.19.3-R0.1-SNAPSHOT",
+ "v1_19_R3" to "1.19.4-R0.1-SNAPSHOT"
+).forEach { (suffix, spigotVer) ->
+ project(":platform:quickshop-platform-spigot-$suffix") {
+ dependencies {
+ api(project(":platform:quickshop-platform-spigot-abstract"))
+ compileOnly("org.spigotmc:spigot:$spigotVer:remapped-mojang")
+ compileOnly("de.tr7zw:item-nbt-api-plugin:2.12.1")
+ }
+ }
+}
+
+project(":quickshop-bukkit") {
+ tasks.processResources {
+ val versionString = project.version.toString()
+ val props = mapOf(
+ "version" to versionString,
+ "project" to mapOf("version" to versionString)
+ )
+ inputs.properties(props)
+ filesMatching("plugin.yml") { expand(props) }
+ }
+
+ dependencies {
+ implementation(project(":quickshop-api"))
+ implementation(project(":platform:quickshop-platform-spigot-abstract"))
+ implementation("com.ghostchu.crowdin:crowdinota:1.0.3")
+ compileOnly(project(":libs:Utilities-OG"))
+ listOf(
+ ":platform:quickshop-platform-spigot-v1_19_R1",
+ ":platform:quickshop-platform-spigot-v1_19_R2",
+ ":platform:quickshop-platform-spigot-v1_19_R3",
+ ":platform:quickshop-platform-paper"
+ ).forEach { implementation(project(it)) }
+ compileOnly(platformApi)
+ compileOnly("net.kyori:adventure-platform-bukkit:$adventurePlatformVersion")
+ compileOnly("net.kyori:adventure-platform-viaversion:$adventurePlatformVersion")
+ compileOnly("net.kyori:adventure-text-serializer-ansi:$adventureExtraVersion")
+ compileOnly("net.kyori:adventure-text-serializer-bungeecord:$adventureExtraVersion")
+ compileOnly("com.viaversion:viaversion-api:$viaversionApi")
+ compileOnly("com.h2database:h2:2.2.224")
+ compileOnly("com.comphenix.protocol:ProtocolLib:5.0.0")
+ compileOnly("com.github.MilkBowl:VaultAPI:1.7.1")
+ compileOnly("me.clip:placeholderapi:2.11.5")
+ compileOnly("net.tnemc:EconomyCore:0.1.2.6-Pre1")
+ compileOnly("net.tnemc:Reserve:0.1.5.3-SNAPSHOT-4")
+ compileOnly("org.bstats:bstats-bukkit:3.0.2")
+ compileOnly("com.konghq:unirest-java:3.14.5")
+ compileOnly("com.github.juliomarcopineda:jdbc-stream:0.1.1")
+ compileOnly("net.sourceforge.csvjdbc:csvjdbc:1.0.41")
+ compileOnly("org.dom4j:dom4j:2.1.4")
+ compileOnly("net.essentialsx:EssentialsX:2.20.1")
+ compileOnly("com.rollbar:rollbar-java:1.10.0")
+ compileOnly(files("lib/GemsEconomy-4.9.2.jar"))
+ }
+
+ tasks.named("shadowJar") {
+ archiveClassifier.set("")
+ minimize()
+ relocate("io.papermc.lib", "com.ghostchu.quickshop.shade.io.papermc.lib")
+ relocate("de.tr7zw.changeme.nbtapi", "com.ghostchu.quickshop.shade.de.tr7zw.changeme.nbtapi")
+ relocate("org.bstats", "com.ghostchu.quickshop.shade.org.bstats")
+ relocate("de.themoep.minedown", "com.ghostchu.quickshop.shade.de.themoep.minedown")
+ manifest { attributes["Main-Class"] = "com.ghostchu.quickshop.bootstrap.Bootstrap" }
+ exclude(
+ "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA",
+ "META-INF/*.kotlin_module", "META-INF/*.txt",
+ "META-INF/proguard/*", "META-INF/services/*",
+ "META-INF/versions/9/*", "*License*", "*LICENSE*"
+ )
+ }
+
+ tasks.named("jar") { archiveClassifier.set("original") }
+
+ tasks.register("copyReleaseJar") {
+ dependsOn("shadowJar")
+ from(tasks.named("shadowJar").flatMap { it.archiveFile })
+ into(layout.projectDirectory.dir("../target"))
+ }
+
+ tasks.build {
+ dependsOn(tasks.spotlessApply)
+ dependsOn("shadowJar", "copyReleaseJar")
+ }
+}
+
+val commonAddOnDeps = listOf(
+ platformApi,
+ "org.apache.commons:commons-lang3:3.14.0"
+)
+
+project(":addon:bluemap") {
+ dependencies {
+ compileOnly(project(":quickshop-bukkit"))
+ compileOnly(project(":quickshop-api"))
+ compileOnly("com.github.BlueMap-Minecraft:BlueMapAPI:2.6.2")
+ commonAddOnDeps.forEach { compileOnly(it) }
+ }
+}
+
+listOf("discount", "list", "shopitemonly").forEach { name ->
+ project(":addon:$name") {
+ dependencies {
+ compileOnly(project(":quickshop-bukkit"))
+ compileOnly(project(":quickshop-api"))
+ commonAddOnDeps.forEach { compileOnly(it) }
+ }
+ }
+}
+
+project(":compatibility:common") {
+ dependencies {
+ compileOnly(platformApi)
+ api(project(":quickshop-common"))
+ compileOnly(project(":quickshop-api"))
+ compileOnly(project(":quickshop-bukkit"))
+ }
+}
+
+project(":compatibility:clearlag") {
+ dependencies {
+ implementation(project(":compatibility:common"))
+ compileOnly(project(":quickshop-bukkit"))
+ compileOnly(platformApi)
+ compileOnly(files("lib/Clearlag-3.2.2.jar"))
+ }
+}
+
+project(":compatibility:nocheatplus") {
+ dependencies {
+ implementation(project(":compatibility:common"))
+ compileOnly(project(":quickshop-bukkit"))
+ compileOnly(platformApi)
+ compileOnly(project(":quickshop-api"))
+ compileOnly("fr.neatmonster:nocheatplus:3.16.1-SNAPSHOT")
+ }
+}
+
+project(":compatibility:openinv") {
+ dependencies {
+ implementation(project(":compatibility:common"))
+ compileOnly(project(":quickshop-bukkit"))
+ compileOnly(platformApi)
+ compileOnly(project(":quickshop-api"))
+ compileOnly("com.github.true-og.OpenInv:openinvapi:a85e8ebc28")
+ }
+}
+
+project(":compatibility:worldedit") {
+ dependencies {
+ implementation(project(":compatibility:common"))
+ compileOnly(project(":quickshop-bukkit"))
+ compileOnly(project(":quickshop-api"))
+ compileOnly(platformApi)
+ compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.17")
+ }
+}
+
+project(":compatibility:worldguard") {
+ dependencies {
+ implementation(project(":compatibility:common"))
+ compileOnly(project(":quickshop-bukkit"))
+ compileOnly(project(":quickshop-api"))
+ compileOnly(platformApi)
+ compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.8")
+ compileOnly("com.github.juliomarcopineda:jdbc-stream:0.1.1")
+ compileOnly("one.util:streamex:0.8.2")
+ }
+}
diff --git a/compatibility/.gitignore b/compatibility/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/compatibility/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/compatibility/clearlag/pom.xml b/compatibility/clearlag/pom.xml
deleted file mode 100644
index a80092936..000000000
--- a/compatibility/clearlag/pom.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.compatibility
- clearlag
- jar
-
- Compat-Clearlag
-
- Compatibility module for ClearLagg
-
- 17
- UTF-8
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu.quickshop.compatibility
- common
- ${parent.version}
- compile
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
- me.minebuilders
- clearlag
- 3.2.2
- system
- ${basedir}/lib/Clearlag-3.2.2.jar
-
-
-
diff --git a/compatibility/clearlag/src/main/java/com/ghostchu/quickshop/compatibility/clearlag/Main.java b/compatibility/clearlag/src/main/java/com/ghostchu/quickshop/compatibility/clearlag/Main.java
index 9dd87ade7..2f69e3073 100644
--- a/compatibility/clearlag/src/main/java/com/ghostchu/quickshop/compatibility/clearlag/Main.java
+++ b/compatibility/clearlag/src/main/java/com/ghostchu/quickshop/compatibility/clearlag/Main.java
@@ -2,14 +2,13 @@ package com.ghostchu.quickshop.compatibility.clearlag;
import com.ghostchu.quickshop.compatibility.CompatibilityModule;
import com.ghostchu.quickshop.shop.display.AbstractDisplayItem;
+import java.util.Iterator;
import me.minebuilders.clearlag.events.EntityRemoveEvent;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Item;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
-import java.util.Iterator;
-
public final class Main extends CompatibilityModule implements Listener {
@Override
diff --git a/compatibility/common/pom.xml b/compatibility/common/pom.xml
deleted file mode 100644
index db539e9e0..000000000
--- a/compatibility/common/pom.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.compatibility
- common
- jar
-
- quickshop-compatibility-common
-
- Compatibility module for Commons
-
- 17
- UTF-8
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.11.0
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
diff --git a/compatibility/common/src/main/java/com/ghostchu/quickshop/compatibility/CompatibilityModule.java b/compatibility/common/src/main/java/com/ghostchu/quickshop/compatibility/CompatibilityModule.java
index 5ba2a5279..f29367397 100644
--- a/compatibility/common/src/main/java/com/ghostchu/quickshop/compatibility/CompatibilityModule.java
+++ b/compatibility/common/src/main/java/com/ghostchu/quickshop/compatibility/CompatibilityModule.java
@@ -7,6 +7,9 @@ import com.ghostchu.quickshop.api.shop.Shop;
import com.ghostchu.quickshop.common.util.CommonUtil;
import com.ghostchu.quickshop.obj.QUserImpl;
import com.ghostchu.quickshop.util.logging.container.ShopRemoveLog;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
@@ -18,10 +21,6 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
public abstract class CompatibilityModule extends JavaPlugin implements Listener {
private QuickShopAPI api;
diff --git a/compatibility/nocheatplus/pom.xml b/compatibility/nocheatplus/pom.xml
deleted file mode 100644
index 30a692b62..000000000
--- a/compatibility/nocheatplus/pom.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.compatibility
- nocheatplus
- jar
-
- Compat-NoCheatPlus
-
-
- UTF-8
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- CodeMC
- https://repo.codemc.io/repository/maven-public/
-
-
- codemc-releases
- https://repo.codemc.io/repository/maven-releases/
-
-
- md_5-snapshots
- https://repo.md-5.net/content/repositories/snapshots/
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- fr.neatmonster
- nocheatplus
- 3.16.1-SNAPSHOT
- provided
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
- com.ghostchu.quickshop.compatibility
- common
- ${parent.version}
- compile
-
-
-
diff --git a/compatibility/nocheatplus/src/main/java/com/ghostchu/quickshop/compatibility/nocheatplus/Main.java b/compatibility/nocheatplus/src/main/java/com/ghostchu/quickshop/compatibility/nocheatplus/Main.java
index 92dc17e1f..e8542a7f3 100644
--- a/compatibility/nocheatplus/src/main/java/com/ghostchu/quickshop/compatibility/nocheatplus/Main.java
+++ b/compatibility/nocheatplus/src/main/java/com/ghostchu/quickshop/compatibility/nocheatplus/Main.java
@@ -9,9 +9,7 @@ import org.bukkit.event.Listener;
public final class Main extends CompatibilityModule implements Listener {
@Override
- public void init() {
-
- }
+ public void init() {}
@EventHandler(ignoreCancelled = true)
public void onFakeEventBegin(ShopProtectionCheckEvent event) {
diff --git a/compatibility/openinv/pom.xml b/compatibility/openinv/pom.xml
deleted file mode 100644
index feaac9a8f..000000000
--- a/compatibility/openinv/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.compatibility
- openinv
- jar
-
- Compat-OpenInv
-
-
- 17
- UTF-8
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- jitpack.io
- https://www.jitpack.io
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.github.true-og.OpenInv
- openinvapi
- a85e8ebc28
- provided
-
-
- com.ghostchu.quickshop.compatibility
- common
- ${parent.version}
- compile
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
diff --git a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/EnderChestWrapper.java b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/EnderChestWrapper.java
index 365069897..2194b9f1f 100644
--- a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/EnderChestWrapper.java
+++ b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/EnderChestWrapper.java
@@ -5,6 +5,7 @@ import com.ghostchu.quickshop.api.inventory.InventoryWrapperIterator;
import com.ghostchu.quickshop.api.inventory.InventoryWrapperManager;
import com.ghostchu.quickshop.api.inventory.InventoryWrapperType;
import com.lishid.openinv.IOpenInv;
+import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
@@ -14,8 +15,6 @@ import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.UUID;
-
public class EnderChestWrapper implements InventoryWrapper {
private final UUID uuid;
private final Player player;
@@ -26,7 +25,6 @@ public class EnderChestWrapper implements InventoryWrapper {
this.uuid = uuid;
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid);
this.player = iOpenInv.loadPlayer(offlinePlayer);
-
}
public UUID getUuid() {
diff --git a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/Main.java b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/Main.java
index fe9bde7c8..cfa735c0a 100644
--- a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/Main.java
+++ b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/Main.java
@@ -30,7 +30,14 @@ public final class Main extends CompatibilityModule implements Listener {
@Override
public void onEnable() {
super.onEnable();
- getApi().getCommandManager().registerCmd(CommandContainer.builder().prefix("echest").permission("quickshop.echest").description((locale) -> LegacyComponentSerializer.legacySection().deserialize(getConfig().getString("messages.description"))).executor(new OpenInvCommand(this)).build());
+ getApi().getCommandManager()
+ .registerCmd(CommandContainer.builder()
+ .prefix("echest")
+ .permission("quickshop.echest")
+ .description((locale) -> LegacyComponentSerializer.legacySection()
+ .deserialize(getConfig().getString("messages.description")))
+ .executor(new OpenInvCommand(this))
+ .build());
}
@Override
diff --git a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvCommand.java b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvCommand.java
index c25542a8f..b817aafbc 100644
--- a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvCommand.java
+++ b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvCommand.java
@@ -5,14 +5,13 @@ import com.ghostchu.quickshop.api.command.CommandHandler;
import com.ghostchu.quickshop.api.shop.Shop;
import com.ghostchu.quickshop.common.util.CommonUtil;
import com.ghostchu.quickshop.shop.inventory.BukkitInventoryWrapper;
+import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryHolder;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.List;
-
public class OpenInvCommand implements CommandHandler {
private final Main plugin;
@@ -34,16 +33,27 @@ public class OpenInvCommand implements CommandHandler {
plugin.getApi().getTextManager().of(sender, "not-looking-at-shop").send();
return;
}
- if (!sender.getUniqueId().equals(shop.getOwner().getUniqueId()) && !QuickShop.getPermissionManager().hasPermission(sender, "quickshop.admin")) {
+ if (!sender.getUniqueId().equals(shop.getOwner().getUniqueId())
+ && !QuickShop.getPermissionManager().hasPermission(sender, "quickshop.admin")) {
plugin.getApi().getTextManager().of(sender, "no-permission").send();
return;
}
if (shop.getInventory() instanceof EnderChestWrapper) {
- shop.setInventory(new BukkitInventoryWrapper((((InventoryHolder) shop.getLocation().getBlock().getState()).getInventory())), plugin.getApi().getInventoryWrapperRegistry().get("QuickShop-Hikari"));
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("messages.to-chest")));
+ shop.setInventory(
+ new BukkitInventoryWrapper(
+ (((InventoryHolder) shop.getLocation().getBlock().getState()).getInventory())),
+ plugin.getApi().getInventoryWrapperRegistry().get("QuickShop-Hikari"));
+ sender.sendMessage(ChatColor.translateAlternateColorCodes(
+ '&', plugin.getConfig().getString("messages.to-chest")));
} else {
- shop.setInventory(new EnderChestWrapper(shop.getOwner().getUniqueIdIfRealPlayer().orElse(CommonUtil.getNilUniqueId()), plugin.getOpenInv(), plugin), plugin.getManager());
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("messages.to-echest")));
+ shop.setInventory(
+ new EnderChestWrapper(
+ shop.getOwner().getUniqueIdIfRealPlayer().orElse(CommonUtil.getNilUniqueId()),
+ plugin.getOpenInv(),
+ plugin),
+ plugin.getManager());
+ sender.sendMessage(ChatColor.translateAlternateColorCodes(
+ '&', plugin.getConfig().getString("messages.to-echest")));
}
}
@@ -56,7 +66,8 @@ public class OpenInvCommand implements CommandHandler {
* @return Candidate list
*/
@Override
- public @Nullable List onTabComplete(@NotNull Player sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
+ public @Nullable List onTabComplete(
+ @NotNull Player sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
return CommandHandler.super.onTabComplete(sender, commandLabel, cmdArg);
}
}
diff --git a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvInventoryManager.java b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvInventoryManager.java
index 61469364f..33e91b59f 100644
--- a/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvInventoryManager.java
+++ b/compatibility/openinv/src/main/java/com/ghostchu/quickshop/compatibility/openinv/OpenInvInventoryManager.java
@@ -3,9 +3,8 @@ package com.ghostchu.quickshop.compatibility.openinv;
import com.ghostchu.quickshop.api.inventory.InventoryWrapper;
import com.ghostchu.quickshop.api.inventory.InventoryWrapperManager;
import com.lishid.openinv.IOpenInv;
-import org.jetbrains.annotations.NotNull;
-
import java.util.UUID;
+import org.jetbrains.annotations.NotNull;
public class OpenInvInventoryManager implements InventoryWrapperManager {
private final IOpenInv openInv;
@@ -42,6 +41,7 @@ public class OpenInvInventoryManager implements InventoryWrapperManager {
if (wrapper instanceof EnderChestWrapper wrap) {
return wrap.getUuid().toString();
}
- throw new IllegalArgumentException("Cannot create symbol link for target Inventory: " + wrapper.getClass().getName());
+ throw new IllegalArgumentException("Cannot create symbol link for target Inventory: "
+ + wrapper.getClass().getName());
}
}
diff --git a/compatibility/worldedit/pom.xml b/compatibility/worldedit/pom.xml
deleted file mode 100644
index 615523004..000000000
--- a/compatibility/worldedit/pom.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.compatibility
- worldedit
- jar
-
- Compat-WorldEdit
-
-
- 17
- UTF-8
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- enginehub-repo
- https://maven.enginehub.org/repo/
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.sk89q.worldedit
- worldedit-bukkit
- 7.2.17
- provided
-
-
- org.bstats
- *
-
-
-
-
- com.ghostchu.quickshop.compatibility
- common
- ${parent.version}
- compile
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
-
diff --git a/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/Main.java b/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/Main.java
index 3e3d10271..55e8fca08 100644
--- a/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/Main.java
+++ b/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/Main.java
@@ -17,7 +17,8 @@ public final class Main extends CompatibilityModule implements Listener {
@Override
public void onEnable() {
// Plugin startup logic
- WorldEditPlugin worldEditPlugin = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
+ WorldEditPlugin worldEditPlugin =
+ (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
adapter = new WorldEditAdapter(worldEditPlugin);
Bukkit.getPluginManager().registerEvents(adapter, this);
super.onEnable();
@@ -27,5 +28,4 @@ public final class Main extends CompatibilityModule implements Listener {
public void init() {
// There no init stuffs need to do
}
-
}
diff --git a/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditAdapter.java b/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditAdapter.java
index cd6b034fd..4cb4aed5f 100644
--- a/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditAdapter.java
+++ b/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditAdapter.java
@@ -33,6 +33,4 @@ public class WorldEditAdapter implements Listener {
public void unregister() {
weBukkit.getWorldEdit().getEventBus().unregister(this);
}
-
-
}
diff --git a/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditBlockListener.java b/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditBlockListener.java
index 2416a6d0b..aa509bedd 100644
--- a/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditBlockListener.java
+++ b/compatibility/worldedit/src/main/java/com/ghostchu/quickshop/compatibility/worldedit/WorldEditBlockListener.java
@@ -36,7 +36,8 @@ public class WorldEditBlockListener extends AbstractDelegateExtent {
}
@Override
- public > boolean setBlock(final BlockVector3 position, final T block) throws WorldEditException {
+ public > boolean setBlock(final BlockVector3 position, final T block)
+ throws WorldEditException {
if (!(this.world instanceof BukkitWorld)) {
return super.setBlock(position, block);
}
@@ -48,11 +49,19 @@ public class WorldEditBlockListener extends AbstractDelegateExtent {
if (extent.setBlock(position, block)) {
// Block Changed
- if (oldBlock.getBlockType().getMaterial().hasContainer() && !newBlock.getBlockType().getMaterial().hasContainer()) {
- Shop shop = api.getShopManager().getShop(location, true); // Because WorldEdit can only remove half of shop, so we can keep another half as shop if it is doublechest shop.
+ if (oldBlock.getBlockType().getMaterial().hasContainer()
+ && !newBlock.getBlockType().getMaterial().hasContainer()) {
+ Shop shop = api.getShopManager()
+ .getShop(
+ location,
+ true); // Because WorldEdit can only remove half of shop, so we can keep another half as
+ // shop if it is doublechest shop.
if (shop != null) {
Util.mainThreadRun(() -> {
- api.logEvent(new ShopRemoveLog(QUserImpl.createFullFilled(CommonUtil.getNilUniqueId(), "WorldEdit", false), "WorldEdit", shop.saveToInfoStorage()));
+ api.logEvent(new ShopRemoveLog(
+ QUserImpl.createFullFilled(CommonUtil.getNilUniqueId(), "WorldEdit", false),
+ "WorldEdit",
+ shop.saveToInfoStorage()));
api.getShopManager().deleteShop(shop);
});
}
diff --git a/compatibility/worldguard/pom.xml b/compatibility/worldguard/pom.xml
deleted file mode 100644
index 8ca861dcf..000000000
--- a/compatibility/worldguard/pom.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
- com.ghostchu.quickshop.compatibility
- worldguard
- jar
-
- Compat-WorldGuard
-
-
- 17
- UTF-8
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- enginehub-repo
- https://maven.enginehub.org/repo/
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.sk89q.worldguard
- worldguard-bukkit
- 7.0.9
- provided
-
-
- com.ghostchu.quickshop.compatibility
- common
- ${parent.version}
- compile
-
-
- com.ghostchu
- quickshop-bukkit
- ${parent.version}
- provided
-
-
- com.github.juliomarcopineda
- jdbc-stream
- 0.1.1
- provided
-
-
- one.util
- streamex
- 0.8.2
- provided
-
-
-
diff --git a/compatibility/worldguard/src/main/java/com/ghostchu/quickshop/compatibility/worldguard/Main.java b/compatibility/worldguard/src/main/java/com/ghostchu/quickshop/compatibility/worldguard/Main.java
index 57ccb546e..a2324c0af 100644
--- a/compatibility/worldguard/src/main/java/com/ghostchu/quickshop/compatibility/worldguard/Main.java
+++ b/compatibility/worldguard/src/main/java/com/ghostchu/quickshop/compatibility/worldguard/Main.java
@@ -22,6 +22,8 @@ import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import com.sk89q.worldguard.protection.regions.RegionQuery;
+import java.util.*;
+import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
@@ -29,9 +31,6 @@ import org.bukkit.World;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
-import java.util.*;
-import java.util.logging.Level;
-
public final class Main extends CompatibilityModule implements Listener {
private StateFlag createFlag;
private StateFlag tradeFlag;
@@ -43,8 +42,10 @@ public final class Main extends CompatibilityModule implements Listener {
FlagRegistry registry = WorldGuard.getInstance().getFlagRegistry();
try {
// create a flag with the name "my-custom-flag", defaulting to true
- StateFlag createFlag = new StateFlag("quickshophikari-create", getConfig().getBoolean("create.default-allow", false));
- StateFlag tradeFlag = new StateFlag("quickshophikari-trade", getConfig().getBoolean("trade.default-allow", true));
+ StateFlag createFlag =
+ new StateFlag("quickshophikari-create", getConfig().getBoolean("create.default-allow", false));
+ StateFlag tradeFlag =
+ new StateFlag("quickshophikari-trade", getConfig().getBoolean("trade.default-allow", true));
registry.register(createFlag);
registry.register(tradeFlag);
this.createFlag = createFlag;
@@ -73,7 +74,6 @@ public final class Main extends CompatibilityModule implements Listener {
super.onLoad();
}
-
@Override
public void init() {
// There no init stuffs need to do
@@ -87,10 +87,12 @@ public final class Main extends CompatibilityModule implements Listener {
if (manager == null) {
return;
}
- ApplicableRegionSet set = manager.getApplicableRegions(BlockVector3.at(shopLoc.getX(), shopLoc.getY(), shopLoc.getZ()));
+ ApplicableRegionSet set =
+ manager.getApplicableRegions(BlockVector3.at(shopLoc.getX(), shopLoc.getY(), shopLoc.getZ()));
for (ProtectedRegion region : set.getRegions()) {
if (region.getOwners().contains(event.getAuthorizer())) {
- if (event.getNamespace().equals(QuickShop.getInstance().getJavaPlugin()) && event.getPermission().equals(BuiltInShopPermission.DELETE.getRawNode())) {
+ if (event.getNamespace().equals(QuickShop.getInstance().getJavaPlugin())
+ && event.getPermission().equals(BuiltInShopPermission.DELETE.getRawNode())) {
event.setResult(true);
}
}
@@ -104,10 +106,13 @@ public final class Main extends CompatibilityModule implements Listener {
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
if (!query.testState(BukkitAdapter.adapt(event.getLocation()), localPlayer, this.createFlag)) {
- event.setCancelled(true, getApi().getTextManager().of(event.getCreator(), "addon.worldguard.creation-flag-test-failed").forLocale());
+ event.setCancelled(
+ true,
+ getApi().getTextManager()
+ .of(event.getCreator(), "addon.worldguard.creation-flag-test-failed")
+ .forLocale());
}
});
-
}
@EventHandler(ignoreCancelled = true)
@@ -117,15 +122,27 @@ public final class Main extends CompatibilityModule implements Listener {
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
if (!query.testState(BukkitAdapter.adapt(event.getShop().getLocation()), localPlayer, this.createFlag)) {
- event.setCancelled(true, getApi().getTextManager().of(event.getCreator(), "addon.worldguard.creation-flag-test-failed").forLocale());
+ event.setCancelled(
+ true,
+ getApi().getTextManager()
+ .of(event.getCreator(), "addon.worldguard.creation-flag-test-failed")
+ .forLocale());
return;
}
- Set regions = container.createQuery().getApplicableRegions(BukkitAdapter.adapt(event.getShop().getLocation())).getRegions();
+ Set regions = container
+ .createQuery()
+ .getApplicableRegions(BukkitAdapter.adapt(event.getShop().getLocation()))
+ .getRegions();
List shops = new ArrayList<>();
- regions.forEach(r -> shops.addAll(getRegionShops(r, event.getShop().getLocation().getWorld()).values()));
+ regions.forEach(r -> shops.addAll(
+ getRegionShops(r, event.getShop().getLocation().getWorld()).values()));
if (limitPerRegion > 0) {
if (shops.size() + 1 > limitPerRegion) {
- event.setCancelled(true, getApi().getTextManager().of(event.getCreator(), "addon.worldguard.reached-per-region-amount-limit").forLocale());
+ event.setCancelled(
+ true,
+ getApi().getTextManager()
+ .of(event.getCreator(), "addon.worldguard.reached-per-region-amount-limit")
+ .forLocale());
}
}
});
@@ -160,7 +177,11 @@ public final class Main extends CompatibilityModule implements Listener {
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
if (!query.testState(BukkitAdapter.adapt(event.getShop().getLocation()), localPlayer, this.tradeFlag)) {
- event.setCancelled(true, getApi().getTextManager().of(event.getPurchaser(), "addon.worldguard.trade-flag-test-failed").forLocale());
+ event.setCancelled(
+ true,
+ getApi().getTextManager()
+ .of(event.getPurchaser(), "addon.worldguard.trade-flag-test-failed")
+ .forLocale());
}
});
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 000000000..ff23a68d7
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100755
index 000000000..23d15a936
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,251 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH="\\\"\\\""
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 000000000..5eed7ee84
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,94 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/libs/.gitignore b/libs/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/libs/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/libs/Utilities-OG b/libs/Utilities-OG
new file mode 160000
index 000000000..e68d3fec7
--- /dev/null
+++ b/libs/Utilities-OG
@@ -0,0 +1 @@
+Subproject commit e68d3fec7a08ffb7f5850b06df963b34802b3dbf
diff --git a/mvnw b/mvnw
deleted file mode 100755
index 19529ddf8..000000000
--- a/mvnw
+++ /dev/null
@@ -1,259 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Apache Maven Wrapper startup batch script, version 3.3.2
-#
-# Optional ENV vars
-# -----------------
-# JAVA_HOME - location of a JDK home dir, required when download maven via java source
-# MVNW_REPOURL - repo url base for downloading maven distribution
-# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
-# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
-# ----------------------------------------------------------------------------
-
-set -euf
-[ "${MVNW_VERBOSE-}" != debug ] || set -x
-
-# OS specific support.
-native_path() { printf %s\\n "$1"; }
-case "$(uname)" in
-CYGWIN* | MINGW*)
- [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
- native_path() { cygpath --path --windows "$1"; }
- ;;
-esac
-
-# set JAVACMD and JAVACCMD
-set_java_home() {
- # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
- if [ -n "${JAVA_HOME-}" ]; then
- if [ -x "$JAVA_HOME/jre/sh/java" ]; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- JAVACCMD="$JAVA_HOME/jre/sh/javac"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- JAVACCMD="$JAVA_HOME/bin/javac"
-
- if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
- echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
- echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
- return 1
- fi
- fi
- else
- JAVACMD="$(
- 'set' +e
- 'unset' -f command 2>/dev/null
- 'command' -v java
- )" || :
- JAVACCMD="$(
- 'set' +e
- 'unset' -f command 2>/dev/null
- 'command' -v javac
- )" || :
-
- if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
- echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
- return 1
- fi
- fi
-}
-
-# hash string like Java String::hashCode
-hash_string() {
- str="${1:-}" h=0
- while [ -n "$str" ]; do
- char="${str%"${str#?}"}"
- h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
- str="${str#?}"
- done
- printf %x\\n $h
-}
-
-verbose() { :; }
-[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
-
-die() {
- printf %s\\n "$1" >&2
- exit 1
-}
-
-trim() {
- # MWRAPPER-139:
- # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
- # Needed for removing poorly interpreted newline sequences when running in more
- # exotic environments such as mingw bash on Windows.
- printf "%s" "${1}" | tr -d '[:space:]'
-}
-
-# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
-while IFS="=" read -r key value; do
- case "${key-}" in
- distributionUrl) distributionUrl=$(trim "${value-}") ;;
- distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
- esac
-done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
-[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
-
-case "${distributionUrl##*/}" in
-maven-mvnd-*bin.*)
- MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
- case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
- *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
- :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
- :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
- :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
- *)
- echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
- distributionPlatform=linux-amd64
- ;;
- esac
- distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
- ;;
-maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
-*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
-esac
-
-# apply MVNW_REPOURL and calculate MAVEN_HOME
-# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
-[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
-distributionUrlName="${distributionUrl##*/}"
-distributionUrlNameMain="${distributionUrlName%.*}"
-distributionUrlNameMain="${distributionUrlNameMain%-bin}"
-MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
-MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
-
-exec_maven() {
- unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
- exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
-}
-
-if [ -d "$MAVEN_HOME" ]; then
- verbose "found existing MAVEN_HOME at $MAVEN_HOME"
- exec_maven "$@"
-fi
-
-case "${distributionUrl-}" in
-*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
-*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
-esac
-
-# prepare tmp dir
-if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
- clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
- trap clean HUP INT TERM EXIT
-else
- die "cannot create temp dir"
-fi
-
-mkdir -p -- "${MAVEN_HOME%/*}"
-
-# Download and Install Apache Maven
-verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
-verbose "Downloading from: $distributionUrl"
-verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
-
-# select .zip or .tar.gz
-if ! command -v unzip >/dev/null; then
- distributionUrl="${distributionUrl%.zip}.tar.gz"
- distributionUrlName="${distributionUrl##*/}"
-fi
-
-# verbose opt
-__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
-[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
-
-# normalize http auth
-case "${MVNW_PASSWORD:+has-password}" in
-'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
-has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
-esac
-
-if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
- verbose "Found wget ... using wget"
- wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
-elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
- verbose "Found curl ... using curl"
- curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
-elif set_java_home; then
- verbose "Falling back to use Java to download"
- javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
- targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
- cat >"$javaSource" <<-END
- public class Downloader extends java.net.Authenticator
- {
- protected java.net.PasswordAuthentication getPasswordAuthentication()
- {
- return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
- }
- public static void main( String[] args ) throws Exception
- {
- setDefault( new Downloader() );
- java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
- }
- }
- END
- # For Cygwin/MinGW, switch paths to Windows format before running javac and java
- verbose " - Compiling Downloader.java ..."
- "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
- verbose " - Running Downloader.java ..."
- "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
-fi
-
-# If specified, validate the SHA-256 sum of the Maven distribution zip file
-if [ -n "${distributionSha256Sum-}" ]; then
- distributionSha256Result=false
- if [ "$MVN_CMD" = mvnd.sh ]; then
- echo "Checksum validation is not supported for maven-mvnd." >&2
- echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
- exit 1
- elif command -v sha256sum >/dev/null; then
- if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
- distributionSha256Result=true
- fi
- elif command -v shasum >/dev/null; then
- if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
- distributionSha256Result=true
- fi
- else
- echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
- echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
- exit 1
- fi
- if [ $distributionSha256Result = false ]; then
- echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
- echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
- exit 1
- fi
-fi
-
-# unzip and move
-if command -v unzip >/dev/null; then
- unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
-else
- tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
-fi
-printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
-mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
-
-clean || :
-exec_maven "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
deleted file mode 100644
index b150b91ed..000000000
--- a/mvnw.cmd
+++ /dev/null
@@ -1,149 +0,0 @@
-<# : batch portion
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements. See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership. The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License. You may obtain a copy of the License at
-@REM
-@REM http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied. See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Apache Maven Wrapper startup batch script, version 3.3.2
-@REM
-@REM Optional ENV vars
-@REM MVNW_REPOURL - repo url base for downloading maven distribution
-@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
-@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
-@REM ----------------------------------------------------------------------------
-
-@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
-@SET __MVNW_CMD__=
-@SET __MVNW_ERROR__=
-@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
-@SET PSModulePath=
-@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
- IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
-)
-@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
-@SET __MVNW_PSMODULEP_SAVE=
-@SET __MVNW_ARG0_NAME__=
-@SET MVNW_USERNAME=
-@SET MVNW_PASSWORD=
-@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
-@echo Cannot start maven from wrapper >&2 && exit /b 1
-@GOTO :EOF
-: end batch / begin powershell #>
-
-$ErrorActionPreference = "Stop"
-if ($env:MVNW_VERBOSE -eq "true") {
- $VerbosePreference = "Continue"
-}
-
-# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
-$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
-if (!$distributionUrl) {
- Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
-}
-
-switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
- "maven-mvnd-*" {
- $USE_MVND = $true
- $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
- $MVN_CMD = "mvnd.cmd"
- break
- }
- default {
- $USE_MVND = $false
- $MVN_CMD = $script -replace '^mvnw','mvn'
- break
- }
-}
-
-# apply MVNW_REPOURL and calculate MAVEN_HOME
-# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
-if ($env:MVNW_REPOURL) {
- $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
- $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
-}
-$distributionUrlName = $distributionUrl -replace '^.*/',''
-$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
-$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
-if ($env:MAVEN_USER_HOME) {
- $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
-}
-$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
-$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
-
-if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
- Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
- Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
- exit $?
-}
-
-if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
- Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
-}
-
-# prepare tmp dir
-$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
-$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
-$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
-trap {
- if ($TMP_DOWNLOAD_DIR.Exists) {
- try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
- catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
- }
-}
-
-New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
-
-# Download and Install Apache Maven
-Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
-Write-Verbose "Downloading from: $distributionUrl"
-Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
-
-$webclient = New-Object System.Net.WebClient
-if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
- $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
-}
-[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
-$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
-
-# If specified, validate the SHA-256 sum of the Maven distribution zip file
-$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
-if ($distributionSha256Sum) {
- if ($USE_MVND) {
- Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
- }
- Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
- if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
- Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
- }
-}
-
-# unzip and move
-Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
-Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
-try {
- Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
-} catch {
- if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
- Write-Error "fail to move MAVEN_HOME"
- }
-} finally {
- try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
- catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
-}
-
-Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
diff --git a/platform/.gitignore b/platform/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/platform/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/platform/quickshop-platform-interface/.gitignore b/platform/quickshop-platform-interface/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/platform/quickshop-platform-interface/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/platform/quickshop-platform-interface/pom.xml b/platform/quickshop-platform-interface/pom.xml
deleted file mode 100644
index 3edcfee13..000000000
--- a/platform/quickshop-platform-interface/pom.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
- 4.0.0
-
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
-
- quickshop-platform-interface
- jar
-
- quickshop-platform-interface
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- CodeMC
- https://repo.codemc.io/repository/maven-public/
-
-
-
-
-
- org.spigotmc
- spigot-api
-
-
- com.ghostchu
- quickshop-common
- ${parent.version}
- compile
-
-
- de.tr7zw
- item-nbt-api-plugin
- 2.12.1
- provided
-
-
- *
- *
-
-
-
-
-
diff --git a/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Platform.java b/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Platform.java
index eabb760f7..9152a91a7 100644
--- a/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Platform.java
+++ b/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Platform.java
@@ -1,6 +1,9 @@
package com.ghostchu.quickshop.platform;
import de.tr7zw.nbtapi.NBTItem;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.minimessage.MiniMessage;
@@ -21,16 +24,14 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
public interface Platform {
void shutdown();
- @NotNull Component getDisplayName(@NotNull ItemStack stack);
+ @NotNull
+ Component getDisplayName(@NotNull ItemStack stack);
- @Nullable Component getDisplayName(@NotNull ItemMeta meta);
+ @Nullable
+ Component getDisplayName(@NotNull ItemMeta meta);
@Nullable
default String getItemShopId(@NotNull ItemStack stack) {
@@ -45,43 +46,60 @@ public interface Platform {
return shopId;
}
- @NotNull HoverEvent getItemStackHoverEvent(@NotNull ItemStack stack);
+ @NotNull
+ HoverEvent getItemStackHoverEvent(@NotNull ItemStack stack);
- @NotNull Component getLine(@NotNull Sign sign, int line);
+ @NotNull
+ Component getLine(@NotNull Sign sign, int line);
- @Nullable List getLore(@NotNull ItemStack stack);
+ @Nullable
+ List getLore(@NotNull ItemStack stack);
- @Nullable List getLore(@NotNull ItemMeta meta);
+ @Nullable
+ List getLore(@NotNull ItemMeta meta);
- @NotNull String getMinecraftVersion();
+ @NotNull
+ String getMinecraftVersion();
- @NotNull Component getTranslation(@NotNull Material material);
+ @NotNull
+ Component getTranslation(@NotNull Material material);
- @NotNull Component getTranslation(@NotNull EntityType entity);
+ @NotNull
+ Component getTranslation(@NotNull EntityType entity);
- @NotNull Component getTranslation(@NotNull PotionEffectType potionEffectType);
+ @NotNull
+ Component getTranslation(@NotNull PotionEffectType potionEffectType);
- @NotNull Component getTranslation(@NotNull Enchantment enchantment);
+ @NotNull
+ Component getTranslation(@NotNull Enchantment enchantment);
- @NotNull Component getTranslation(@NotNull ItemStack itemStack);
+ @NotNull
+ Component getTranslation(@NotNull ItemStack itemStack);
- @NotNull String getTranslationKey(@NotNull Material material);
+ @NotNull
+ String getTranslationKey(@NotNull Material material);
- @NotNull String getTranslationKey(@NotNull EntityType entity);
+ @NotNull
+ String getTranslationKey(@NotNull EntityType entity);
- @NotNull String getTranslationKey(@NotNull PotionEffectType potionEffectType);
+ @NotNull
+ String getTranslationKey(@NotNull PotionEffectType potionEffectType);
- @NotNull String getTranslationKey(@NotNull Enchantment enchantment);
+ @NotNull
+ String getTranslationKey(@NotNull Enchantment enchantment);
- @NotNull String getTranslationKey(@NotNull ItemStack stack);
+ @NotNull
+ String getTranslationKey(@NotNull ItemStack stack);
- @NotNull MiniMessage miniMessage();
+ @NotNull
+ MiniMessage miniMessage();
void registerCommand(@NotNull String prefix, @NotNull Command command);
void sendMessage(@NotNull CommandSender sender, @NotNull Component component);
- void sendSignTextChange(@NotNull Player player, @NotNull Sign sign, boolean glowing, @NotNull List components);
+ void sendSignTextChange(
+ @NotNull Player player, @NotNull Sign sign, boolean glowing, @NotNull List components);
void setDisplayName(@NotNull ItemStack stack, @Nullable Component component);
@@ -93,5 +111,6 @@ public interface Platform {
void updateTranslationMappingSection(@NotNull Map mapping);
- @NotNull Logger getSlf4jLogger(@NotNull Plugin parent);
+ @NotNull
+ Logger getSlf4jLogger(@NotNull Plugin parent);
}
diff --git a/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Util.java b/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Util.java
index 4c009bd3b..7c4b39a25 100644
--- a/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Util.java
+++ b/platform/quickshop-platform-interface/src/main/java/com/ghostchu/quickshop/platform/Util.java
@@ -2,8 +2,7 @@ package com.ghostchu.quickshop.platform;
public class Util {
- private Util() {
- }
+ private Util() {}
public static boolean methodExists(Class> clazz, String methodName) {
try {
diff --git a/platform/quickshop-platform-paper/.gitignore b/platform/quickshop-platform-paper/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/platform/quickshop-platform-paper/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/platform/quickshop-platform-paper/pom.xml b/platform/quickshop-platform-paper/pom.xml
deleted file mode 100644
index f084d6b3a..000000000
--- a/platform/quickshop-platform-paper/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
- 4.0.0
-
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
-
- quickshop-platform-paper
- jar
- quickshop-platform-paper
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- papermc
- https://repo.papermc.io/repository/maven-public/
-
-
-
-
-
- com.ghostchu
- quickshop-platform-interface
- ${parent.version}
- compile
-
-
- io.papermc.paper
- paper-api
- 1.19.4-R0.1-SNAPSHOT
- provided
-
-
-
diff --git a/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java b/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java
index efd6117a1..442da7988 100644
--- a/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java
+++ b/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java
@@ -2,6 +2,7 @@ package com.ghostchu.quickshop.platform.paper;
import com.ghostchu.quickshop.common.util.QuickSLF4JLogger;
import com.ghostchu.quickshop.platform.Platform;
+import java.util.*;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.minimessage.MiniMessage;
@@ -22,8 +23,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
-import java.util.*;
-
@SuppressWarnings("removal")
public class PaperPlatform implements Platform {
@@ -34,9 +33,7 @@ public class PaperPlatform implements Platform {
}
@Override
- public void shutdown() {
-
- }
+ public void shutdown() {}
@Override
public @NotNull Component getDisplayName(@NotNull ItemStack stack) {
@@ -169,7 +166,8 @@ public class PaperPlatform implements Platform {
}
@Override
- public void sendSignTextChange(@NotNull Player player, @NotNull Sign sign, boolean glowing, @NotNull List components) {
+ public void sendSignTextChange(
+ @NotNull Player player, @NotNull Sign sign, boolean glowing, @NotNull List components) {
player.sendSignChange(sign.getLocation(), components);
}
@@ -185,7 +183,6 @@ public class PaperPlatform implements Platform {
stack.customName(component);
}
-
@Override
public void setLines(@NotNull Sign sign, @NotNull List component) {
for (int i = 0; i < Math.min(component.size(), 4); i++) {
@@ -199,7 +196,6 @@ public class PaperPlatform implements Platform {
stack.lore(new ArrayList<>(components));
}
-
@Override
public void updateTranslationMappingSection(@NotNull Map mapping) {
this.translationMapping = mapping;
diff --git a/platform/quickshop-platform-spigot-abstract/.gitignore b/platform/quickshop-platform-spigot-abstract/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/platform/quickshop-platform-spigot-abstract/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/platform/quickshop-platform-spigot-abstract/pom.xml b/platform/quickshop-platform-spigot-abstract/pom.xml
deleted file mode 100644
index 3b410e8e5..000000000
--- a/platform/quickshop-platform-spigot-abstract/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
- 4.0.0
-
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
-
- quickshop-platform-spigot-abstract
- jar
-
- quickshop-platform-spigot-abstract
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- codemc-repo
- https://repo.codemc.org/repository/maven-public/
-
-
-
-
-
- com.ghostchu
- quickshop-platform-interface
- ${parent.version}
- compile
-
-
- org.spigotmc
- spigot-api
-
-
-
- commons-lang
- commons-lang
- 2.6
- compile
-
-
- de.tr7zw
- item-nbt-api-plugin
- 2.12.1
- provided
-
-
- *
- *
-
-
-
-
-
diff --git a/platform/quickshop-platform-spigot-abstract/src/main/java/com/ghostchu/quickshop/platform/spigot/AbstractSpigotPlatform.java b/platform/quickshop-platform-spigot-abstract/src/main/java/com/ghostchu/quickshop/platform/spigot/AbstractSpigotPlatform.java
index a450929a8..2be285fd0 100644
--- a/platform/quickshop-platform-spigot-abstract/src/main/java/com/ghostchu/quickshop/platform/spigot/AbstractSpigotPlatform.java
+++ b/platform/quickshop-platform-spigot-abstract/src/main/java/com/ghostchu/quickshop/platform/spigot/AbstractSpigotPlatform.java
@@ -5,12 +5,15 @@ import com.ghostchu.quickshop.platform.Platform;
import de.tr7zw.nbtapi.NBT;
import de.tr7zw.nbtapi.iface.ReadWriteNBT;
import de.tr7zw.nbtapi.iface.ReadWriteNBTList;
-import net.kyori.adventure.platform.bukkit.BukkitAudiences;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
-import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
-import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
-import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
+import net.trueog.utilitiesog.UtilitiesOG;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Sign;
@@ -26,25 +29,14 @@ import org.bukkit.potion.PotionEffectType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-import java.util.stream.Collectors;
-
public abstract class AbstractSpigotPlatform implements Platform {
protected final Logger logger = Logger.getLogger("QuickShop-Hikari");
- private final Plugin plugin;
protected Map translationMapping;
- private BukkitAudiences audience;
public AbstractSpigotPlatform(@NotNull Plugin instance) {
- this.plugin = instance;
- //TODO use method to replace
if (Bukkit.getPluginManager().getPlugin("NBTAPI") == null) {
throw new IllegalStateException("Must install NBT-API if you're running on Spigot server");
}
- //this.translationMapping = mapping;
}
@NotNull
@@ -55,8 +47,8 @@ public abstract class AbstractSpigotPlatform implements Platform {
@Override
public @NotNull Component getDisplayName(@NotNull ItemStack stack) {
- if (stack.getItemMeta() != null) {
- return LegacyComponentSerializer.legacySection().deserialize(stack.getItemMeta().getDisplayName());
+ if (stack.getItemMeta() != null && stack.getItemMeta().hasDisplayName()) {
+ return stack.getItemMeta().displayName();
}
return Component.empty();
}
@@ -64,33 +56,28 @@ public abstract class AbstractSpigotPlatform implements Platform {
@Override
public @NotNull Component getDisplayName(@NotNull ItemMeta meta) {
if (meta.hasDisplayName()) {
- return LegacyComponentSerializer.legacySection().deserialize(meta.getDisplayName());
+ return meta.displayName();
}
return Component.empty();
}
@Override
public @NotNull Component getLine(@NotNull Sign sign, int line) {
- return LegacyComponentSerializer.legacySection().deserialize(sign.getLine(line));
+ return UtilitiesOG.trueogColorize(sign.getLine(line));
}
@Override
public @Nullable List getLore(@NotNull ItemStack stack) {
- if (!stack.hasItemMeta()) {
- return null;
- }
- if (!stack.getItemMeta().hasLore()) {
- return null;
- }
- return stack.getItemMeta().getLore().stream().map(LegacyComponentSerializer.legacySection()::deserialize).collect(Collectors.toList());
+ if (!stack.hasItemMeta()) return null;
+ ItemMeta meta = stack.getItemMeta();
+ if (!meta.hasLore()) return null;
+ return meta.getLore().stream().map(UtilitiesOG::trueogColorize).collect(Collectors.toList());
}
@Override
public @Nullable List getLore(@NotNull ItemMeta meta) {
- if (!meta.hasLore()) {
- return null;
- }
- return meta.getLore().stream().map(LegacyComponentSerializer.legacySection()::deserialize).collect(Collectors.toList());
+ if (!meta.hasLore()) return null;
+ return meta.getLore().stream().map(UtilitiesOG::trueogColorize).collect(Collectors.toList());
}
@Override
@@ -119,80 +106,57 @@ public abstract class AbstractSpigotPlatform implements Platform {
}
@Override
- public @NotNull MiniMessage miniMessage() {
+ public MiniMessage miniMessage() {
return MiniMessage.miniMessage();
}
-
@Override
public void sendMessage(@NotNull CommandSender sender, @NotNull Component component) {
- if (this.audience == null) {
- this.audience = BukkitAudiences.create(this.plugin);
- }
- //this.audience.sender(sender).sendMessage(component);
- sender.spigot().sendMessage(BungeeComponentSerializer.get().serialize(component));
+ sender.sendMessage(MiniMessage.miniMessage().serialize(component));
}
@Override
- public void shutdown() {
- if (this.audience != null) {
- this.audience.close();
- }
- }
+ public void shutdown() {}
@Override
- public void sendSignTextChange(@NotNull Player player, @NotNull Sign sign, boolean glowing, @NotNull List components) {
- //player.sendSignChange(sign.getLocation(), components.stream().map(com -> LegacyComponentSerializer.legacySection().serialize(com)).toArray(String[]::new));
- }
+ public void sendSignTextChange(
+ @NotNull Player player, @NotNull Sign sign, boolean glowing, @NotNull List components) {}
@Override
public void setDisplayName(@NotNull ItemStack stack, @Nullable Component component) {
- if (stack.getItemMeta() == null) {
- return;
- }
+ if (!stack.hasItemMeta()) return;
ItemMeta meta = stack.getItemMeta();
- if (component == null) {
- meta.setDisplayName(null);
- } else {
- meta.setDisplayName(LegacyComponentSerializer.legacySection().serialize(component));
- }
+ meta.displayName(component);
stack.setItemMeta(meta);
}
@Override
public void setDisplayName(@NotNull Item stack, @Nullable Component component) {
- if (component == null) {
- stack.setCustomName(null);
- } else {
- stack.setCustomName(LegacyComponentSerializer.legacySection().serialize(component));
- }
+ stack.setCustomName(component == null ? null : MiniMessage.miniMessage().serialize(component));
}
@Override
public void setLines(@NotNull Sign sign, @NotNull List component) {
- String EMPTY_LINE_NBT = "{\"text\":\"\"}";
+ String emptyJson = "{\"text\":\"\"}";
ReadWriteNBT root = NBT.createNBTObject();
- ReadWriteNBT front_text = root.getOrCreateCompound("front_text"); // > 1.20
- ReadWriteNBTList messages = front_text.getStringList("messages"); // > 1.20
+ ReadWriteNBT frontText = root.getOrCreateCompound("front_text");
+ ReadWriteNBTList messages = frontText.getStringList("messages");
for (int i = 0; i < 4; i++) {
Component com = component.get(i);
- String json = com == null ? EMPTY_LINE_NBT : GsonComponentSerializer.gson().serialize(com);
+ String json = com == null
+ ? emptyJson
+ : "{\"text\":\"" + MiniMessage.miniMessage().serialize(com) + "\"}";
root.setString("Text" + (i + 1), json);
- messages.add(json); // > 1.20
+ messages.add(json);
}
- // ==== Apply the changes ====
- NBT.modify(sign, nbt -> {
- nbt.mergeCompound(root);
- });
+ NBT.modify(sign, (Consumer) nbt -> nbt.mergeCompound(root));
}
@Override
public void setLore(@NotNull ItemStack stack, @NotNull Collection components) {
- if (!stack.hasItemMeta()) {
- return;
- }
+ if (!stack.hasItemMeta()) return;
ItemMeta meta = stack.getItemMeta();
- meta.setLore(components.stream().map(LegacyComponentSerializer.legacySection()::serialize).collect(Collectors.toList()));
+ meta.lore(components.stream().collect(Collectors.toList()));
stack.setItemMeta(meta);
}
diff --git a/platform/quickshop-platform-spigot-v1_19_R1/.gitignore b/platform/quickshop-platform-spigot-v1_19_R1/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/platform/quickshop-platform-spigot-v1_19_R1/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/platform/quickshop-platform-spigot-v1_19_R1/pom.xml b/platform/quickshop-platform-spigot-v1_19_R1/pom.xml
deleted file mode 100644
index 61c81da1d..000000000
--- a/platform/quickshop-platform-spigot-v1_19_R1/pom.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
- 4.0.0
-
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
-
- quickshop-platform-spigot-v1_19_R1
- jar
-
- quickshop-platform-spigot-v1_19_R1
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- net.md-5
- specialsource-maven-plugin
- 2.0.2
-
-
- package
-
- remap
-
- remap-obf
-
- org.spigotmc:minecraft-server:1.19.1-R0.1-SNAPSHOT:txt:maps-mojang
- true
- org.spigotmc:spigot:1.19.1-R0.1-SNAPSHOT:jar:remapped-mojang
-
- true
- remapped-obf
-
-
-
- package
-
- remap
-
- remap-spigot
-
-
- ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar
-
- org.spigotmc:minecraft-server:1.19.1-R0.1-SNAPSHOT:csrg:maps-spigot
- org.spigotmc:spigot:1.19.1-R0.1-SNAPSHOT:jar:remapped-obf
-
-
-
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- nms-repo
- https://repo.codemc.io/repository/nms/
-
-
- CodeMC
- https://repo.codemc.io/repository/maven-public/
-
-
-
-
-
- com.ghostchu
- quickshop-platform-spigot-abstract
- ${parent.version}
- compile
-
-
- org.spigotmc
- spigot
- 1.19.1-R0.1-SNAPSHOT
- remapped-mojang
- provided
-
-
- de.tr7zw
- item-nbt-api-plugin
- 2.12.1
- provided
-
-
- *
- *
-
-
-
-
-
diff --git a/platform/quickshop-platform-spigot-v1_19_R1/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_1/Spigot1191Platform.java b/platform/quickshop-platform-spigot-v1_19_R1/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_1/Spigot1191Platform.java
index c341a7b81..031b105ac 100644
--- a/platform/quickshop-platform-spigot-v1_19_R1/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_1/Spigot1191Platform.java
+++ b/platform/quickshop-platform-spigot-v1_19_R1/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_1/Spigot1191Platform.java
@@ -3,6 +3,7 @@ package com.ghostchu.quickshop.platform.spigot.v1_19_1;
import com.ghostchu.quickshop.platform.Platform;
import com.ghostchu.quickshop.platform.Util;
import com.ghostchu.quickshop.platform.spigot.AbstractSpigotPlatform;
+import java.util.Optional;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.nbt.api.BinaryTagHolder;
import net.kyori.adventure.text.event.HoverEvent;
@@ -23,8 +24,6 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.potion.PotionEffectType;
import org.jetbrains.annotations.NotNull;
-import java.util.Optional;
-
public class Spigot1191Platform extends AbstractSpigotPlatform implements Platform {
public Spigot1191Platform(@NotNull Plugin plugin) {
@@ -37,10 +36,12 @@ public class Spigot1191Platform extends AbstractSpigotPlatform implements Platfo
Key key = Key.key(namespacedKey.toString());
BinaryTagHolder holder;
if (Util.methodExists(BinaryTagHolder.class, "binaryTagHolder")) {
- holder = BinaryTagHolder.binaryTagHolder(CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
+ holder = BinaryTagHolder.binaryTagHolder(
+ CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
} else {
//noinspection UnstableApiUsage
- holder = BinaryTagHolder.of(CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
+ holder = BinaryTagHolder.of(
+ CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
}
return HoverEvent.showItem(key, stack.getAmount(), holder);
}
@@ -62,7 +63,8 @@ public class Spigot1191Platform extends AbstractSpigotPlatform implements Platfo
if (material.isBlock()) {
return CraftMagicNumbers.getBlock(material).getDescriptionId();
} else {
- return postProcessingTranslationKey(CraftMagicNumbers.getItem(material).getDescriptionId());
+ return postProcessingTranslationKey(
+ CraftMagicNumbers.getItem(material).getDescriptionId());
}
}
@@ -72,7 +74,8 @@ public class Spigot1191Platform extends AbstractSpigotPlatform implements Platfo
@Override
public @NotNull String getTranslationKey(@NotNull EntityType type) {
- Optional> op = net.minecraft.world.entity.EntityType.byString(type.getKey().toString());
+ Optional> op =
+ net.minecraft.world.entity.EntityType.byString(type.getKey().toString());
if (op.isPresent()) {
return postProcessingTranslationKey(op.get().getDescriptionId());
} else {
diff --git a/platform/quickshop-platform-spigot-v1_19_R2/.gitignore b/platform/quickshop-platform-spigot-v1_19_R2/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/platform/quickshop-platform-spigot-v1_19_R2/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/platform/quickshop-platform-spigot-v1_19_R2/pom.xml b/platform/quickshop-platform-spigot-v1_19_R2/pom.xml
deleted file mode 100644
index 3315ffbaa..000000000
--- a/platform/quickshop-platform-spigot-v1_19_R2/pom.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
- 4.0.0
-
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
-
- quickshop-platform-spigot-v1_19_R2
- jar
-
- quickshop-platform-spigot-v1_19_R2
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- net.md-5
- specialsource-maven-plugin
- 2.0.2
-
-
- package
-
- remap
-
- remap-obf
-
- org.spigotmc:minecraft-server:1.19.3-R0.1-SNAPSHOT:txt:maps-mojang
- true
- org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT:jar:remapped-mojang
-
- true
- remapped-obf
-
-
-
- package
-
- remap
-
- remap-spigot
-
-
- ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar
-
- org.spigotmc:minecraft-server:1.19.3-R0.1-SNAPSHOT:csrg:maps-spigot
- org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT:jar:remapped-obf
-
-
-
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- nms-repo
- https://repo.codemc.io/repository/nms/
-
-
- CodeMC
- https://repo.codemc.io/repository/maven-public/
-
-
-
-
-
- com.ghostchu
- quickshop-platform-interface
- ${parent.version}
- compile
-
-
- com.ghostchu
- quickshop-platform-spigot-abstract
- ${parent.version}
- compile
-
-
- org.spigotmc
- spigot
- 1.19.3-R0.1-SNAPSHOT
- remapped-mojang
- provided
-
-
- de.tr7zw
- item-nbt-api-plugin
- 2.12.1
- provided
-
-
- *
- *
-
-
-
-
-
diff --git a/platform/quickshop-platform-spigot-v1_19_R2/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_2/Spigot1193Platform.java b/platform/quickshop-platform-spigot-v1_19_R2/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_2/Spigot1193Platform.java
index d87559a8c..357d4f74f 100644
--- a/platform/quickshop-platform-spigot-v1_19_R2/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_2/Spigot1193Platform.java
+++ b/platform/quickshop-platform-spigot-v1_19_R2/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_2/Spigot1193Platform.java
@@ -35,10 +35,12 @@ public class Spigot1193Platform extends AbstractSpigotPlatform implements Platfo
Key key = Key.key(namespacedKey.toString());
BinaryTagHolder holder;
if (Util.methodExists(BinaryTagHolder.class, "binaryTagHolder")) {
- holder = BinaryTagHolder.binaryTagHolder(CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
+ holder = BinaryTagHolder.binaryTagHolder(
+ CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
} else {
//noinspection UnstableApiUsage
- holder = BinaryTagHolder.of(CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
+ holder = BinaryTagHolder.of(
+ CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
}
return HoverEvent.showItem(key, stack.getAmount(), holder);
}
@@ -90,6 +92,7 @@ public class Spigot1193Platform extends AbstractSpigotPlatform implements Platfo
CraftEnchantment craftEnchantment = (CraftEnchantment) enchantment;
return postProcessingTranslationKey(craftEnchantment.getHandle().getDescriptionId());
}
+
@Override
public @NotNull String getTranslationKey(@NotNull ItemStack stack) {
return postProcessingTranslationKey(stack.getTranslationKey());
diff --git a/platform/quickshop-platform-spigot-v1_19_R3/.gitignore b/platform/quickshop-platform-spigot-v1_19_R3/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/platform/quickshop-platform-spigot-v1_19_R3/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/platform/quickshop-platform-spigot-v1_19_R3/pom.xml b/platform/quickshop-platform-spigot-v1_19_R3/pom.xml
deleted file mode 100644
index 9cc428722..000000000
--- a/platform/quickshop-platform-spigot-v1_19_R3/pom.xml
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
- 4.0.0
-
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- ../../pom.xml
-
-
- quickshop-platform-spigot-v1_19_R3
- jar
-
- quickshop-platform-spigot-v1_19_R3
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
- net.md-5
- specialsource-maven-plugin
- 2.0.2
-
-
- package
-
- remap
-
- remap-obf
-
- org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:txt:maps-mojang
- true
- org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-mojang
-
- true
- remapped-obf
-
-
-
- package
-
- remap
-
- remap-spigot
-
-
- ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar
-
- org.spigotmc:minecraft-server:1.19.4-R0.1-SNAPSHOT:csrg:maps-spigot
- org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT:jar:remapped-obf
-
-
-
-
-
-
-
-
- src/main/resources
- true
-
-
-
-
-
-
- nms-repo
- https://repo.codemc.io/repository/nms/
-
-
- CodeMC
- https://repo.codemc.io/repository/maven-public/
-
-
-
-
-
- com.ghostchu
- quickshop-platform-interface
- ${parent.version}
- compile
-
-
- com.ghostchu
- quickshop-platform-spigot-abstract
- ${parent.version}
- compile
-
-
- org.spigotmc
- spigot
- 1.19.4-R0.1-SNAPSHOT
- remapped-mojang
- provided
-
-
- de.tr7zw
- item-nbt-api-plugin
- 2.12.1
- provided
-
-
- *
- *
-
-
-
-
-
diff --git a/platform/quickshop-platform-spigot-v1_19_R3/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_3/Spigot1194Platform.java b/platform/quickshop-platform-spigot-v1_19_R3/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_3/Spigot1194Platform.java
index e3e536561..a3f3fae94 100644
--- a/platform/quickshop-platform-spigot-v1_19_R3/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_3/Spigot1194Platform.java
+++ b/platform/quickshop-platform-spigot-v1_19_R3/src/main/java/com/ghostchu/quickshop/platform/spigot/v1_19_3/Spigot1194Platform.java
@@ -35,10 +35,12 @@ public class Spigot1194Platform extends AbstractSpigotPlatform implements Platfo
Key key = Key.key(namespacedKey.toString());
BinaryTagHolder holder;
if (Util.methodExists(BinaryTagHolder.class, "binaryTagHolder")) {
- holder = BinaryTagHolder.binaryTagHolder(CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
+ holder = BinaryTagHolder.binaryTagHolder(
+ CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
} else {
//noinspection UnstableApiUsage
- holder = BinaryTagHolder.of(CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
+ holder = BinaryTagHolder.of(
+ CraftItemStack.asNMSCopy(stack).save(new CompoundTag()).toString());
}
return HoverEvent.showItem(key, stack.getAmount(), holder);
}
@@ -78,7 +80,7 @@ public class Spigot1194Platform extends AbstractSpigotPlatform implements Platfo
@Override
public @NotNull String getTranslationKey(@NotNull PotionEffectType potionEffectType) {
- if(potionEffectType instanceof PotionEffectTypeWrapper wrapper){
+ if (potionEffectType instanceof PotionEffectTypeWrapper wrapper) {
potionEffectType = wrapper.getType();
}
CraftPotionEffectType craftPotionEffectType = (CraftPotionEffectType) potionEffectType;
@@ -90,6 +92,7 @@ public class Spigot1194Platform extends AbstractSpigotPlatform implements Platfo
CraftEnchantment craftEnchantment = (CraftEnchantment) enchantment;
return postProcessingTranslationKey(craftEnchantment.getHandle().getDescriptionId());
}
+
@Override
public @NotNull String getTranslationKey(@NotNull ItemStack stack) {
return postProcessingTranslationKey(stack.getTranslationKey());
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 70db42ec7..000000000
--- a/pom.xml
+++ /dev/null
@@ -1,360 +0,0 @@
-
-
-
- 4.0.0
-
- com.ghostchu
- quickshop-hikari
- 5.2.0.7
- pom
- quickshop-hikari
- Another QuickShop fork
- https://github.com/${developer}/${artifactId}
-
-
- 17
- Ghost-chu
- UTF-8
-
-
-
-
- GPL v3 License
- https://www.gnu.org/licenses/
- repo
-
-
-
-
-
- Ghost_chu
- Ghost chu
- 2908803755@qq.com
- https://www.ghostchu.com
- Asia/Shanghai
-
-
-
-
- scm:git:git@github.com:${developer}/${artifactId}.git
- scm:git:git@github.com:${developer}/${artifactId}.git
- https://github.com/${developer}/${artifactId}
- HEAD
-
-
-
- https://github.com/${developer}/${name}/issues
- GitHub Issues
-
-
-
-
- md_5-releases
- https://repo.md-5.net/content/repositories/releases/
-
-
- codemc-snapshots
- https://repo.codemc.io/repository/maven-snapshots/
-
-
-
-
- GitHub Actions
- https://github.com/${developer}/${artifactId}/actions/workflows/maven.yml
-
-
-
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.11.0
-
- ${java.version}
- ${java.version}
-
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 3.5.1
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- 3.6.2
-
- UTF-8
- com.ghostchu.quickshop.nonquickshopstuff.*
- ${java.version}
-
-
-
-
- org.apache.maven.plugins
- maven-clean-plugin
-
-
-
-
- io.github.git-commit-id
- git-commit-id-maven-plugin
- 5.0.0
-
- ${project.basedir}/.git
- false
- yyyy-MM-dd HH:mm:ss
- git
- json
-
- false
- false
- -dirty
-
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
- package
-
- shade
-
-
- QuickShop-OG-${project.version}
- true
- false
- false
- false
- true
- false
-
-
- com.ghostchu:quickshop*:*
- com.ghostchu.quickshop.compatibility:*:*
- com.ghostchu.quickshop.addon:*:*
- de.tr7zw:item-nbt-api:*
- io.papermc:paperlib:*
- org.bstats:*
-
-
-
-
- io.papermc.lib.
- com.ghostchu.quickshop.shade.io.papermc.lib.
-
-
- de.tr7zw.changeme.nbtapi
- com.ghostchu.quickshop.shade.de.tr7zw.changeme.nbtapi
-
-
- org.bstats
- com.ghostchu.quickshop.shade.org.bstats
-
-
- de.themoep.minedown.
- com.ghostchu.quickshop.shade.de.themoep.minedown
-
-
-
-
- com.ghostchu.quickshop.bootstrap.Bootstrap
-
-
-
-
-
- META-INF/*.SF
- META-INF/*.DSA
- META-INF/*.RSA
- META-INF/*.kotlin_module
- META-INF/*.txt
- META-INF/proguard/*
- META-INF/services/*
- META-INF/versions/9/*
- *License*
- *LICENSE*
-
-
-
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
-
- attach-javadocs
-
- jar
-
-
- false
- -Xdoclint:none
-
-
-
-
-
-
-
- io.github.git-commit-id
- git-commit-id-maven-plugin
-
-
-
- get-the-git-infos
- initialize
-
- revision
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
-
-
- org.codehaus.mojo
- versions-maven-plugin
- 2.16.1
-
- true
-
-
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
-
-
- copy-resources
- initialize
-
- copy-resources
-
-
- ${basedir}/target/extra-resources
-
-
- src/main/resources
- true
-
- *
-
-
-
-
-
-
-
-
-
-
-
-
- spigot-repo
- https://hub.spigotmc.org/nexus/content/repositories/snapshots/
-
-
-
-
-
-
- org.spigotmc
- spigot-api
- 1.20.4-R0.1-SNAPSHOT
- provided
-
-
- commons-lang
- commons-lang
-
-
-
-
- org.projectlombok
- lombok
- 1.18.30
- provided
-
-
- org.jetbrains
- annotations
- 24.1.0
- provided
-
-
-
-
-
-
- org.projectlombok
- lombok
-
-
- org.jetbrains
- annotations
-
-
-
-
- quickshop-common
- quickshop-api
- platform/quickshop-platform-interface
- platform/quickshop-platform-spigot-abstract
- platform/quickshop-platform-spigot-v1_19_R1
- platform/quickshop-platform-spigot-v1_19_R2
- platform/quickshop-platform-spigot-v1_19_R3
- platform/quickshop-platform-paper
- quickshop-bukkit
- compatibility/common
- compatibility/clearlag
- compatibility/nocheatplus
- compatibility/worldguard
- compatibility/worldedit
- compatibility/openinv
- addon/plan
- addon/discount
- addon/list
- addon/shopitemonly
- addon/limited
- addon/dynmap
- addon/bluemap
- addon/displaycontrol
- addon/reremake-migrator
-
-
-
-
diff --git a/quickshop-api/.gitignore b/quickshop-api/.gitignore
new file mode 100644
index 000000000..84c048a73
--- /dev/null
+++ b/quickshop-api/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/quickshop-api/pom.xml b/quickshop-api/pom.xml
deleted file mode 100644
index 6e30b6766..000000000
--- a/quickshop-api/pom.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
- quickshop-hikari
- com.ghostchu
- 5.2.0.7
-
- 4.0.0
-
- quickshop-api
-
-
- 17
- 17
-
-
-
-
- com.ghostchu
- quickshop-common
- ${parent.version}
- compile
-
-
- org.spigotmc
- spigot-api
-
-
- com.vdurmont
- semver4j
- 3.1.0
-
-
-
\ No newline at end of file
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/CommonUtil.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/CommonUtil.java
index e0aa5a761..374d6d50f 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/CommonUtil.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/CommonUtil.java
@@ -4,8 +4,7 @@ import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.Nullable;
public class CommonUtil {
- private CommonUtil() {
- }
+ private CommonUtil() {}
public static boolean isEmptyComponent(@Nullable Component component) {
if (component == null) {
@@ -16,5 +15,4 @@ public class CommonUtil {
}
return component.equals(Component.text(""));
}
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/GameVersion.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/GameVersion.java
index 707c4b180..8093543ea 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/GameVersion.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/GameVersion.java
@@ -79,7 +79,13 @@ public enum GameVersion {
*/
private final boolean signTextDyeSupport;
- GameVersion(boolean coreSupports, boolean endOfLife, boolean virtualDisplaySupports, boolean newNmsName, boolean signGlowingSupport, boolean signTextDyeSupport) {
+ GameVersion(
+ boolean coreSupports,
+ boolean endOfLife,
+ boolean virtualDisplaySupports,
+ boolean newNmsName,
+ boolean signGlowingSupport,
+ boolean signTextDyeSupport) {
this.coreSupports = coreSupports;
this.endOfLife = endOfLife;
this.virtualDisplaySupports = virtualDisplaySupports;
@@ -88,7 +94,6 @@ public enum GameVersion {
this.signTextDyeSupport = signTextDyeSupport;
}
-
/**
* Matches the version that QuickShop supports or not
*
@@ -104,5 +109,4 @@ public enum GameVersion {
}
return UNKNOWN;
}
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopAPI.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopAPI.java
index 1d7e1379c..639dcffc8 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopAPI.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopAPI.java
@@ -6,21 +6,21 @@ import com.ghostchu.quickshop.api.inventory.InventoryWrapperRegistry;
import com.ghostchu.quickshop.api.localization.text.TextManager;
import com.ghostchu.quickshop.api.shop.*;
import com.vdurmont.semver4j.Semver;
+import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
-import java.util.Map;
-
/**
* The unique entry point to allow you to access most features of QuickShop
*/
public interface QuickShopAPI {
static QuickShopAPI getInstance() {
- RegisteredServiceProvider provider = Bukkit.getServicesManager().getRegistration(QuickShopProvider.class);
+ RegisteredServiceProvider provider =
+ Bukkit.getServicesManager().getRegistration(QuickShopProvider.class);
if (provider == null) {
throw new IllegalStateException("QuickShop hadn't loaded at this moment.");
}
@@ -28,7 +28,8 @@ public interface QuickShopAPI {
}
static Plugin getPluginInstance() {
- RegisteredServiceProvider provider = Bukkit.getServicesManager().getRegistration(QuickShopProvider.class);
+ RegisteredServiceProvider provider =
+ Bukkit.getServicesManager().getRegistration(QuickShopProvider.class);
if (provider == null) {
throw new IllegalStateException("QuickShop hadn't loaded at this moment.");
}
@@ -61,7 +62,8 @@ public interface QuickShopAPI {
*
* @return registry
*/
- @NotNull InventoryWrapperRegistry getInventoryWrapperRegistry();
+ @NotNull
+ InventoryWrapperRegistry getInventoryWrapperRegistry();
/**
* Getting current using ItemMatcher impl
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopProvider.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopProvider.java
index 6a9c08de4..feffeaded 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopProvider.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/QuickShopProvider.java
@@ -9,6 +9,4 @@ public interface QuickShopProvider {
@NotNull
Plugin getInstance();
-
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/RankLimiter.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/RankLimiter.java
index c06b5ab6e..9b6c8e8dd 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/RankLimiter.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/RankLimiter.java
@@ -1,20 +1,19 @@
package com.ghostchu.quickshop.api;
import com.ghostchu.quickshop.api.obj.QUser;
+import java.util.Map;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
-import java.util.Map;
-
public interface RankLimiter {
-
int getShopLimit(@NotNull QUser p);
@Deprecated(forRemoval = true)
@ApiStatus.Internal
@ApiStatus.Obsolete
- @NotNull Map getLimits();
+ @NotNull
+ Map getLimits();
boolean isLimit();
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandContainer.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandContainer.java
index fec6d3e28..cbc51aa6e 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandContainer.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandContainer.java
@@ -2,6 +2,10 @@ package com.ghostchu.quickshop.api.command;
import com.ghostchu.quickshop.api.CommonUtil;
import com.ghostchu.quickshop.api.QuickShopAPI;
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
import lombok.Builder;
import lombok.Data;
import lombok.Singular;
@@ -12,11 +16,6 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.lang.reflect.Method;
-import java.util.List;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
/**
* Builds a CommandContainer that can be registered into CommandManager.
*
@@ -34,20 +33,28 @@ public class CommandContainer {
*/
@Singular
private List selectivePermissions;
+
@Singular
private List permissions; // E.g quickshop.unlimited
+
@NotNull
private String prefix; // E.g /quickshop
- @Nullable
- private Function<@NotNull String, @Nullable Component> description; // Will show in the /quickshop help, provide an arg that pass a player locale code
- private boolean disabled; //Set command is disabled or not.
@Nullable
- private Supplier disabledSupplier; //Set command is disabled or not.
+ private Function<@NotNull String, @Nullable Component>
+ description; // Will show in the /quickshop help, provide an arg that pass a player locale code
+
+ private boolean disabled; // Set command is disabled or not.
+
@Nullable
- private Supplier disablePlaceholder; //Set the text shown if command disabled
+ private Supplier disabledSupplier; // Set command is disabled or not.
+
@Nullable
- private Function<@Nullable CommandSender, @NotNull Component> disableCallback; //Set the callback that should return a text to shown
+ private Supplier disablePlaceholder; // Set the text shown if command disabled
+
+ @Nullable
+ private Function<@Nullable CommandSender, @NotNull Component>
+ disableCallback; // Set the callback that should return a text to shown
private Class> executorType;
@@ -60,10 +67,16 @@ public class CommandContainer {
public final @NotNull Component getDisableText(@NotNull CommandSender sender) {
if (this.getDisableCallback() != null) {
return this.getDisableCallback().apply(sender);
- } else if (this.getDisablePlaceholder() != null && !CommonUtil.isEmptyComponent(this.getDisablePlaceholder().get())) {
+ } else if (this.getDisablePlaceholder() != null
+ && !CommonUtil.isEmptyComponent(this.getDisablePlaceholder().get())) {
return this.getDisablePlaceholder().get();
} else {
- return Component.empty().color(NamedTextColor.GRAY).append(QuickShopAPI.getInstance().getTextManager().of(sender, "command.feature-not-enabled").forLocale());
+ return Component.empty()
+ .color(NamedTextColor.GRAY)
+ .append(QuickShopAPI.getInstance()
+ .getTextManager()
+ .of(sender, "command.feature-not-enabled")
+ .forLocale());
}
}
@@ -80,7 +93,9 @@ public class CommandContainer {
public void bakeExecutorType() {
for (Method declaredMethod : getExecutor().getClass().getMethods()) {
if ("onCommand".equals(declaredMethod.getName()) || "onTabComplete".equals(declaredMethod.getName())) {
- if (declaredMethod.getParameterCount() != 3 || declaredMethod.isSynthetic() || declaredMethod.isBridge()) {
+ if (declaredMethod.getParameterCount() != 3
+ || declaredMethod.isSynthetic()
+ || declaredMethod.isBridge()) {
continue;
}
executorType = declaredMethod.getParameterTypes()[0];
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandHandler.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandHandler.java
index 51fd02d8e..a4abf8a3f 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandHandler.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandHandler.java
@@ -2,6 +2,8 @@ package com.ghostchu.quickshop.api.command;
import com.ghostchu.quickshop.api.QuickShopAPI;
import com.ghostchu.quickshop.api.shop.Shop;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
import org.apache.commons.lang3.NotImplementedException;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender;
@@ -10,9 +12,6 @@ import org.bukkit.util.BlockIterator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-
/**
* The command handler that processing sub commands under QS main command
*
@@ -104,11 +103,13 @@ public interface CommandHandler {
*/
@Deprecated(since = "4.2.0.0")
default void onCommand(T sender, @NotNull String commandLabel, @NotNull String[] cmdArgs) {
- throw new NotImplementedException("This method is deprecated, please use onCommand(T sender, @NotNull String commandLabel, @NotNull CommandParser parser) instead.");
+ throw new NotImplementedException(
+ "This method is deprecated, please use onCommand(T sender, @NotNull String commandLabel, @NotNull CommandParser parser) instead.");
}
@Nullable
- default List onTabComplete_Internal(@NotNull T sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
+ default List onTabComplete_Internal(
+ @NotNull T sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
StringJoiner joiner = new StringJoiner(" ");
for (String s : cmdArg) {
joiner.add(s);
@@ -149,6 +150,7 @@ public interface CommandHandler {
*/
@Deprecated(since = "4.2.0.0")
default List onTabComplete(@NotNull T sender, @NotNull String commandLabel, @NotNull String[] cmdArgs) {
- throw new NotImplementedException("This method is deprecated, please use onTabComplete(T sender, @NotNull String commandLabel, @NotNull CommandParser parser) instead.");
+ throw new NotImplementedException(
+ "This method is deprecated, please use onTabComplete(T sender, @NotNull String commandLabel, @NotNull CommandParser parser) instead.");
}
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandManager.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandManager.java
index c450f3b89..50c8b41e1 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandManager.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandManager.java
@@ -1,12 +1,11 @@
package com.ghostchu.quickshop.api.command;
+import java.util.List;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.List;
-
/**
* The manager that managing all sub-commands that registered
* Also performing permission checks in there.
@@ -17,7 +16,8 @@ public interface CommandManager {
*
* @return All registered {@link CommandContainer}s.
*/
- @NotNull List getRegisteredCommands();
+ @NotNull
+ List getRegisteredCommands();
boolean onCommand(
@NotNull CommandSender sender,
@@ -25,7 +25,8 @@ public interface CommandManager {
@NotNull String commandLabel,
@NotNull String[] cmdArg);
- @Nullable List onTabComplete(
+ @Nullable
+ List onTabComplete(
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String commandLabel,
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandParser.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandParser.java
index 9d572d208..28b64cc68 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandParser.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandParser.java
@@ -1,8 +1,7 @@
package com.ghostchu.quickshop.api.command;
-import org.jetbrains.annotations.NotNull;
-
import java.util.*;
+import org.jetbrains.annotations.NotNull;
/**
* CommandParser is a utility class for parsing command arguments.
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandProcesser.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandProcesser.java
index 0f00a8719..b60c95c7d 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandProcesser.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/command/CommandProcesser.java
@@ -1,13 +1,12 @@
package com.ghostchu.quickshop.api.command;
+import java.util.Collections;
+import java.util.List;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Collections;
-import java.util.List;
-
-//Preserved for backward compatibility
+// Preserved for backward compatibility
@Deprecated
public interface CommandProcesser extends CommandHandler {
@@ -20,5 +19,4 @@ public interface CommandProcesser extends CommandHandler {
@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] cmdArg) {
return Collections.emptyList();
}
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/DatabaseHelper.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/DatabaseHelper.java
index 3b58d9651..5cdb9047f 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/DatabaseHelper.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/DatabaseHelper.java
@@ -5,15 +5,14 @@ import com.ghostchu.quickshop.api.database.bean.DataRecord;
import com.ghostchu.quickshop.api.database.bean.ShopRecord;
import com.ghostchu.quickshop.api.obj.QUser;
import com.ghostchu.quickshop.api.shop.Shop;
-import org.apache.commons.lang3.tuple.Triple;
-import org.bukkit.Location;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
+import org.apache.commons.lang3.tuple.Triple;
+import org.bukkit.Location;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
/**
* Processing and handle most things about database ;)
@@ -33,14 +32,16 @@ public interface DatabaseHelper {
* @param player The player
* @return
*/
- @NotNull CompletableFuture<@NotNull Integer> cleanMessageForPlayer(@NotNull UUID player);
+ @NotNull
+ CompletableFuture<@NotNull Integer> cleanMessageForPlayer(@NotNull UUID player);
/**
* Create a shop data record sand save into database
*
* @param shop The shop object
*/
- @NotNull CompletableFuture<@NotNull Long> createData(@NotNull Shop shop);
+ @NotNull
+ CompletableFuture<@NotNull Long> createData(@NotNull Shop shop);
/**
* Create a shop record in database
@@ -68,7 +69,8 @@ public interface DatabaseHelper {
* @return The data record, null for not exists
* @throws SQLException something going wrong
*/
- @NotNull CompletableFuture<@Nullable DataRecord> getDataRecord(long dataId);
+ @NotNull
+ CompletableFuture<@Nullable DataRecord> getDataRecord(long dataId);
/**
* Async gets the player last use locale code from database
@@ -91,7 +93,6 @@ public interface DatabaseHelper {
*/
CompletableFuture<@Nullable String> getPlayerName(@NotNull UUID uuid);
-
/**
* Async gets the player last use username from database
*
@@ -105,17 +106,29 @@ public interface DatabaseHelper {
* @param rec Record object that can be serialized by Gson.
* @return
*/
- @NotNull CompletableFuture<@NotNull Integer> insertHistoryRecord(@NotNull Object rec);
+ @NotNull
+ CompletableFuture<@NotNull Integer> insertHistoryRecord(@NotNull Object rec);
- @NotNull CompletableFuture<@NotNull Integer> insertMetricRecord(@NotNull ShopMetricRecord recordEntry);
+ @NotNull
+ CompletableFuture<@NotNull Integer> insertMetricRecord(@NotNull ShopMetricRecord recordEntry);
- void insertTransactionRecord(@Nullable UUID from, @Nullable UUID to, double amount, @Nullable String currency, double taxAmount, @Nullable UUID taxAccount, @Nullable String error);
+ void insertTransactionRecord(
+ @Nullable UUID from,
+ @Nullable UUID to,
+ double amount,
+ @Nullable String currency,
+ double taxAmount,
+ @Nullable UUID taxAccount,
+ @Nullable String error);
- @NotNull List listShops(boolean deleteIfCorrupt);
+ @NotNull
+ List listShops(boolean deleteIfCorrupt);
- @NotNull List listShopsTaggedBy(@NotNull UUID tagger, @NotNull String tag);
+ @NotNull
+ List listShopsTaggedBy(@NotNull UUID tagger, @NotNull String tag);
- @NotNull List listTags(@NotNull UUID tagger);
+ @NotNull
+ List listTags(@NotNull UUID tagger);
CompletableFuture<@Nullable Integer> removeShopTag(@NotNull UUID tagger, @NotNull Long shopId, @NotNull String tag);
@@ -131,7 +144,8 @@ public interface DatabaseHelper {
* @param shopId The shop record id
* @return The shop record
*/
- @NotNull CompletableFuture<@Nullable Long> locateShopDataId(long shopId);
+ @NotNull
+ CompletableFuture<@Nullable Long> locateShopDataId(long shopId);
/**
* Locate a shop record from database by location
@@ -150,7 +164,8 @@ public interface DatabaseHelper {
* @param dataId The data record id
* @return
*/
- @NotNull CompletableFuture<@NotNull Integer> removeData(long dataId);
+ @NotNull
+ CompletableFuture<@NotNull Integer> removeData(long dataId);
/**
* Remove a shop data record from database
@@ -158,8 +173,8 @@ public interface DatabaseHelper {
* @param shopId The shop record id
* @return
*/
- @NotNull CompletableFuture<@NotNull Integer> removeShop(long shopId);
-
+ @NotNull
+ CompletableFuture<@NotNull Integer> removeShop(long shopId);
/**
* Remove a shop data mapping record from database
@@ -170,7 +185,8 @@ public interface DatabaseHelper {
* @param z Shop Z
* @return
*/
- @NotNull CompletableFuture<@NotNull Integer> removeShopMap(@NotNull String world, int x, int y, int z);
+ @NotNull
+ CompletableFuture<@NotNull Integer> removeShopMap(@NotNull String world, int x, int y, int z);
/**
* Create a transaction message record and save into database
@@ -180,7 +196,9 @@ public interface DatabaseHelper {
* @param time System time
* @return
*/
- @NotNull CompletableFuture<@NotNull Integer> saveOfflineTransactionMessage(@NotNull UUID player, @NotNull String message, long time);
+ @NotNull
+ CompletableFuture<@NotNull Integer> saveOfflineTransactionMessage(
+ @NotNull UUID player, @NotNull String message, long time);
/**
* Select all messages that saved in the database
@@ -208,7 +226,8 @@ public interface DatabaseHelper {
@NotNull
SQLQuery selectTable(@NotNull String table) throws SQLException;
- CompletableFuture updatePlayerProfile(@NotNull UUID uuid, @Nullable String locale, @NotNull String username);
+ CompletableFuture updatePlayerProfile(
+ @NotNull UUID uuid, @Nullable String locale, @NotNull String username);
/**
* Update player profiles in batch
@@ -226,7 +245,8 @@ public interface DatabaseHelper {
* @param stock The inventory stock
* @return
*/
- @NotNull CompletableFuture<@NotNull Integer> updateExternalInventoryProfileCache(long shopId, int space, int stock);
+ @NotNull
+ CompletableFuture<@NotNull Integer> updateExternalInventoryProfileCache(long shopId, int space, int stock);
/**
* Update the shop profile to database
@@ -235,5 +255,4 @@ public interface DatabaseHelper {
* @return
*/
CompletableFuture updateShop(@NotNull Shop shop);
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/ShopMetricRecord.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/ShopMetricRecord.java
index d8226abe6..33bfa377c 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/ShopMetricRecord.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/ShopMetricRecord.java
@@ -16,7 +16,8 @@ public class ShopMetricRecord {
private String player;
@Builder
- public ShopMetricRecord(long time, long shopId, ShopOperationEnum type, double total, double tax, int amount, QUser player) {
+ public ShopMetricRecord(
+ long time, long shopId, ShopOperationEnum type, double total, double tax, int amount, QUser player) {
this.time = time;
this.shopId = shopId;
this.type = type;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/bean/DataRecord.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/bean/DataRecord.java
index 170b38d51..d60734510 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/bean/DataRecord.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/database/bean/DataRecord.java
@@ -1,11 +1,10 @@
package com.ghostchu.quickshop.api.database.bean;
import com.ghostchu.quickshop.api.obj.QUser;
+import java.util.Date;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Date;
-
public interface DataRecord {
@NotNull
Date getCreateTime();
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/AbstractEconomy.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/AbstractEconomy.java
index 436d61967..8b61fe0f4 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/AbstractEconomy.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/AbstractEconomy.java
@@ -4,20 +4,18 @@ import com.ghostchu.quickshop.api.obj.QUser;
import com.ghostchu.simplereloadlib.ReloadResult;
import com.ghostchu.simplereloadlib.ReloadStatus;
import com.ghostchu.simplereloadlib.Reloadable;
+import java.util.UUID;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.UUID;
-
/**
* Abstract Economy Core
*/
public abstract class AbstractEconomy implements EconomyCore, Reloadable {
- protected AbstractEconomy() {
- }
+ protected AbstractEconomy() {}
@Override
public @NotNull String getName() {
@@ -50,11 +48,12 @@ public abstract class AbstractEconomy implements EconomyCore, Reloadable {
} else if (obj instanceof OfflinePlayer offlinePlayer) {
return withdraw(offlinePlayer, amount, world, currency);
}
- throw new IllegalArgumentException("The obj argument can only accept one of those type: " +
- "QUser = player quickshop user object, " +
- "UUID = player uuid, String = player username, " +
- "OfflinePlayer = player bukkit offline player object." +
- " Your given: " + obj.getClass());
+ throw new IllegalArgumentException(
+ "The obj argument can only accept one of those type: " + "QUser = player quickshop user object, "
+ + "UUID = player uuid, String = player username, "
+ + "OfflinePlayer = player bukkit offline player object."
+ + " Your given: "
+ + obj.getClass());
}
@Override
@@ -82,11 +81,12 @@ public abstract class AbstractEconomy implements EconomyCore, Reloadable {
} else if (obj instanceof OfflinePlayer offlinePlayer) {
return deposit(offlinePlayer, amount, world, currency);
}
- throw new IllegalArgumentException("The obj argument can only accept one of those type: " +
- "QUser = player quickshop user object, " +
- "UUID = player uuid, String = player username, " +
- "OfflinePlayer = player bukkit offline player object." +
- " Your given: " + obj.getClass());
+ throw new IllegalArgumentException(
+ "The obj argument can only accept one of those type: " + "QUser = player quickshop user object, "
+ + "UUID = player uuid, String = player username, "
+ + "OfflinePlayer = player bukkit offline player object."
+ + " Your given: "
+ + obj.getClass());
}
@Override
@@ -115,15 +115,17 @@ public abstract class AbstractEconomy implements EconomyCore, Reloadable {
} else if (obj instanceof OfflinePlayer offlinePlayer) {
return getBalance(offlinePlayer, world, currency);
}
- throw new IllegalArgumentException("The obj argument can only accept one of those type: " +
- "QUser = player quickshop user object, " +
- "UUID = player uuid, String = player username, " +
- "OfflinePlayer = player bukkit offline player object." +
- " Your given: " + obj.getClass());
+ throw new IllegalArgumentException(
+ "The obj argument can only accept one of those type: " + "QUser = player quickshop user object, "
+ + "UUID = player uuid, String = player username, "
+ + "OfflinePlayer = player bukkit offline player object."
+ + " Your given: "
+ + obj.getClass());
}
@Override
- public boolean transfer(@NotNull Object from, @NotNull Object to, double amount, @NotNull World world, @Nullable String currency) {
+ public boolean transfer(
+ @NotNull Object from, @NotNull Object to, double amount, @NotNull World world, @Nullable String currency) {
if (!isValid()) {
return false;
}
@@ -152,7 +154,8 @@ public abstract class AbstractEconomy implements EconomyCore, Reloadable {
* @return successed
*/
@Override
- public boolean transfer(@NotNull UUID from, @NotNull UUID to, double amount, @NotNull World world, @Nullable String currency) {
+ public boolean transfer(
+ @NotNull UUID from, @NotNull UUID to, double amount, @NotNull World world, @Nullable String currency) {
if (!isValid()) {
return false;
}
@@ -170,7 +173,8 @@ public abstract class AbstractEconomy implements EconomyCore, Reloadable {
}
@Override
- public boolean transfer(@NotNull String from, @NotNull String to, double amount, @NotNull World world, @Nullable String currency) {
+ public boolean transfer(
+ @NotNull String from, @NotNull String to, double amount, @NotNull World world, @Nullable String currency) {
if (!isValid()) {
return false;
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/Benefit.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/Benefit.java
index e0a680314..8e6e35135 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/Benefit.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/Benefit.java
@@ -1,9 +1,8 @@
package com.ghostchu.quickshop.api.economy;
-import org.jetbrains.annotations.NotNull;
-
import java.util.Map;
import java.util.UUID;
+import org.jetbrains.annotations.NotNull;
public interface Benefit {
/**
@@ -54,8 +53,7 @@ public interface Benefit {
@NotNull
String serialize();
- class BenefitExistsException extends Exception {
- }
+ class BenefitExistsException extends Exception {}
class BenefitOverflowException extends Exception {
private final double overflow;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyCore.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyCore.java
index de450ef1c..dbdb48925 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyCore.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyCore.java
@@ -1,13 +1,12 @@
package com.ghostchu.quickshop.api.economy;
+import java.util.UUID;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.UUID;
-
/**
* @author netherfoam Represents an economy.
*/
@@ -119,14 +118,16 @@ public interface EconomyCore {
*
* @return Impl name
*/
- @NotNull String getName();
+ @NotNull
+ String getName();
/**
* Getting Economy impl owned by
*
* @return Owned by
*/
- @NotNull Plugin getPlugin();
+ @NotNull
+ Plugin getPlugin();
/**
* Gets the currency does exists
@@ -161,8 +162,8 @@ public interface EconomyCore {
* @param world The transaction world
* @return true if success (Payer had enough cash, receiver was able to receive the funds)
*/
- boolean transfer(@NotNull Object from, @NotNull Object to, double amount, @NotNull World world, @Nullable String currency);
-
+ boolean transfer(
+ @NotNull Object from, @NotNull Object to, double amount, @NotNull World world, @Nullable String currency);
/**
* Transfers the given amount of money from Player1 to Player2
@@ -174,7 +175,8 @@ public interface EconomyCore {
* @param world The transaction world
* @return true if success (Payer had enough cash, receiver was able to receive the funds)
*/
- boolean transfer(@NotNull UUID from, @NotNull UUID to, double amount, @NotNull World world, @Nullable String currency);
+ boolean transfer(
+ @NotNull UUID from, @NotNull UUID to, double amount, @NotNull World world, @Nullable String currency);
/**
* Transfers the given amount of money from Player1 to Player2
@@ -186,8 +188,8 @@ public interface EconomyCore {
* @param world The transaction world
* @return true if success (Payer had enough cash, receiver was able to receive the funds)
*/
- boolean transfer(@NotNull String from, @NotNull String to, double amount, @NotNull World world, @Nullable String currency);
-
+ boolean transfer(
+ @NotNull String from, @NotNull String to, double amount, @NotNull World world, @Nullable String currency);
/**
* Withdraws a given amount of money from the given username and turns it to thin air.
@@ -232,5 +234,4 @@ public interface EconomyCore {
* @return True if success, false if they didn't have enough cash
*/
boolean withdraw(@NotNull OfflinePlayer trader, double amount, @NotNull World world, @Nullable String currency);
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyTransaction.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyTransaction.java
index 1fa430093..a8bf99973 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyTransaction.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyTransaction.java
@@ -1,13 +1,12 @@
package com.ghostchu.quickshop.api.economy;
import com.ghostchu.quickshop.api.operation.Operation;
+import java.util.Deque;
+import java.util.List;
import org.bukkit.World;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Deque;
-import java.util.List;
-
public interface EconomyTransaction {
/**
@@ -48,23 +47,28 @@ public interface EconomyTransaction {
void setAmountAfterTax(double amountAfterTax);
- @NotNull EconomyCore getCore();
+ @NotNull
+ EconomyCore getCore();
void setCore(@NotNull EconomyCore core);
- @Nullable String getCurrency();
+ @Nullable
+ String getCurrency();
void setCurrency(@Nullable String currency);
- @Nullable Object getFrom();
+ @Nullable
+ Object getFrom();
void setFrom(@Nullable Object from);
- @Nullable String getLastError();
+ @Nullable
+ String getLastError();
void setLastError(@NotNull String lastError);
- @NotNull Deque getProcessingStack();
+ @NotNull
+ Deque getProcessingStack();
/**
* Getting the tax in this transaction
@@ -75,15 +79,18 @@ public interface EconomyTransaction {
void setTax(double tax);
- @Nullable Object getTaxer();
+ @Nullable
+ Object getTaxer();
void setTaxer(@Nullable Object taxer);
- @Nullable Object getTo();
+ @Nullable
+ Object getTo();
void setTo(@Nullable Object to);
- @NotNull World getWorld();
+ @NotNull
+ World getWorld();
void setWorld(@NotNull World world);
@@ -94,11 +101,11 @@ public interface EconomyTransaction {
* @return A list contains all steps executed. If "continueWhenFailed" is false, it only contains all success steps before hit the error. Else all.
*/
@SuppressWarnings("UnusedReturnValue")
- @NotNull List rollback(boolean continueWhenFailed);
+ @NotNull
+ List rollback(boolean continueWhenFailed);
void setAllowLoan(boolean allowLoan);
-
interface TransactionCallback {
/**
* Calling while Transaction commit
@@ -117,17 +124,14 @@ public interface EconomyTransaction {
*
* @param economyTransaction Transaction
*/
- default void onFailed(@NotNull EconomyTransaction economyTransaction) {
- }
+ default void onFailed(@NotNull EconomyTransaction economyTransaction) {}
/**
* Calling while Transaction commit successfully
*
* @param economyTransaction Transaction
*/
- default void onSuccess(@NotNull EconomyTransaction economyTransaction) {
-
- }
+ default void onSuccess(@NotNull EconomyTransaction economyTransaction) {}
/**
* Calling while Tax processing failed
@@ -136,9 +140,6 @@ public interface EconomyTransaction {
*
* @param economyTransaction Transaction
*/
- default void onTaxFailed(@NotNull EconomyTransaction economyTransaction) {
- }
-
+ default void onTaxFailed(@NotNull EconomyTransaction economyTransaction) {}
}
-
-}
\ No newline at end of file
+}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyType.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyType.java
index 83cc53d15..fb79d3a6a 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyType.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/EconomyType.java
@@ -11,7 +11,7 @@ public enum EconomyType {
UNKNOWN(-1),
VAULT(0),
RESERVE(1),
- //MIXED(2),
+ // MIXED(2),
GEMS_ECONOMY(3),
TNE(4);
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/DepositEconomyOperation.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/DepositEconomyOperation.java
index 7e71851e1..c5c59a070 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/DepositEconomyOperation.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/DepositEconomyOperation.java
@@ -18,7 +18,12 @@ public class DepositEconomyOperation implements Operation {
private boolean committed = false;
private boolean rollback = false;
- public DepositEconomyOperation(@NotNull Object account, double amount, @NotNull World world, @Nullable String currency, @NotNull EconomyCore economyCore) {
+ public DepositEconomyOperation(
+ @NotNull Object account,
+ double amount,
+ @NotNull World world,
+ @Nullable String currency,
+ @NotNull EconomyCore economyCore) {
this.account = account;
this.amount = amount;
this.world = world;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/WithdrawEconomyOperation.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/WithdrawEconomyOperation.java
index 81910639e..ea29f9d00 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/WithdrawEconomyOperation.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/economy/operation/WithdrawEconomyOperation.java
@@ -18,7 +18,12 @@ public class WithdrawEconomyOperation implements Operation {
private boolean committed = false;
private boolean rollback = false;
- public WithdrawEconomyOperation(@NotNull Object account, double amount, @NotNull World world, @Nullable String currency, @NotNull EconomyCore economyCore) {
+ public WithdrawEconomyOperation(
+ @NotNull Object account,
+ double amount,
+ @NotNull World world,
+ @Nullable String currency,
+ @NotNull EconomyCore economyCore) {
this.account = account;
this.amount = amount;
this.world = world;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/AbstractQSEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/AbstractQSEvent.java
index e01fe53ca..28bf0d023 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/AbstractQSEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/AbstractQSEvent.java
@@ -7,9 +7,6 @@ import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
-/**
- * Parent about all events.
- */
public abstract class AbstractQSEvent extends Event {
private static final HandlerList HANDLERS = new HandlerList();
@@ -22,11 +19,6 @@ public abstract class AbstractQSEvent extends Event {
super(async);
}
- /**
- * Call event on Bukkit event bus and check if cancelled
- *
- * @return Returns true if cancelled, and false if didn't cancel
- */
public boolean callCancellableEvent() {
Bukkit.getPluginManager().callEvent(this);
if (this instanceof Cancellable cancellable) {
@@ -35,21 +27,22 @@ public abstract class AbstractQSEvent extends Event {
return false;
}
- /**
- * Fire event on Bukkit event bus
- */
- public void callEvent() {
+ @Override
+ public boolean callEvent() {
QuickShopAPI.getPluginInstance().getServer().getPluginManager().callEvent(this);
+ if (this instanceof Cancellable cancellable) {
+ return !cancellable.isCancelled();
+ }
+ return true;
}
@NotNull
@Override
public HandlerList getHandlers() {
- return getHandlerList();
+ return HANDLERS;
}
public static HandlerList getHandlerList() {
return HANDLERS;
}
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/CalendarEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/CalendarEvent.java
index a537c1f67..18087554d 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/CalendarEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/CalendarEvent.java
@@ -9,7 +9,6 @@ import lombok.EqualsAndHashCode;
*/
@EqualsAndHashCode(callSuper = true)
@Data
-
public class CalendarEvent extends AbstractQSEvent {
private CalendarTriggerType calendarTriggerType;
@@ -18,6 +17,13 @@ public class CalendarEvent extends AbstractQSEvent {
}
public enum CalendarTriggerType {
- NOTHING_CHANGED, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
+ NOTHING_CHANGED,
+ SECOND,
+ MINUTE,
+ HOUR,
+ DAY,
+ WEEK,
+ MONTH,
+ YEAR
}
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/DisplayApplicableCheckEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/DisplayApplicableCheckEvent.java
index 1f5721e7d..393fde455 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/DisplayApplicableCheckEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/DisplayApplicableCheckEvent.java
@@ -1,7 +1,6 @@
package com.ghostchu.quickshop.api.event;
import com.ghostchu.quickshop.api.shop.Shop;
-
import java.util.UUID;
public class DisplayApplicableCheckEvent extends AbstractQSEvent {
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopAuthorizeCalculateEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopAuthorizeCalculateEvent.java
index 5ca04ca57..1a3dff055 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopAuthorizeCalculateEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopAuthorizeCalculateEvent.java
@@ -1,11 +1,10 @@
package com.ghostchu.quickshop.api.event;
import com.ghostchu.quickshop.api.shop.Shop;
+import java.util.UUID;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
-import java.util.UUID;
-
/**
* Call when shop authorize was calculated
*/
@@ -26,7 +25,12 @@ public class ShopAuthorizeCalculateEvent extends AbstractQSEvent {
*
* @param shop The shop bought from
*/
- public ShopAuthorizeCalculateEvent(@NotNull Shop shop, @NotNull UUID authorizer, @NotNull Plugin namespace, @NotNull String permission, boolean result) {
+ public ShopAuthorizeCalculateEvent(
+ @NotNull Shop shop,
+ @NotNull UUID authorizer,
+ @NotNull Plugin namespace,
+ @NotNull String permission,
+ boolean result) {
this.shop = shop;
this.authorizer = authorizer;
this.namespace = namespace;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopClickEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopClickEvent.java
index 9b4d4ba9f..0b4a86a82 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopClickEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopClickEvent.java
@@ -13,6 +13,7 @@ public class ShopClickEvent extends AbstractQSEvent implements QSCancellable {
@NotNull
private final Shop shop;
+
private final Player player;
private boolean cancelled;
@@ -62,6 +63,4 @@ public class ShopClickEvent extends AbstractQSEvent implements QSCancellable {
public boolean isCancelled() {
return this.cancelled;
}
-
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopCreateSuccessEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopCreateSuccessEvent.java
index 2a892c951..fa6647d70 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopCreateSuccessEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopCreateSuccessEvent.java
@@ -15,7 +15,6 @@ public class ShopCreateSuccessEvent extends AbstractQSEvent {
@NotNull
private final Shop shop;
-
/**
* Call when have a new shop was created.
*
@@ -27,7 +26,6 @@ public class ShopCreateSuccessEvent extends AbstractQSEvent {
this.creator = creator;
}
-
/**
* Gets the creator of this shop
*
@@ -37,7 +35,6 @@ public class ShopCreateSuccessEvent extends AbstractQSEvent {
return this.creator;
}
-
/**
* Gets the shop created
*
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInfoPanelEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInfoPanelEvent.java
index c108249f8..b718c53db 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInfoPanelEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInfoPanelEvent.java
@@ -1,14 +1,13 @@
package com.ghostchu.quickshop.api.event;
import com.ghostchu.quickshop.api.shop.Shop;
+import java.util.UUID;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.UUID;
-
/**
* Calling when purchaser prepared to purchase a shop (click the shop)
*/
@@ -19,6 +18,7 @@ public class ShopInfoPanelEvent extends AbstractQSEvent implements QSCancellable
@NotNull
private final UUID purchaser;
+
@Nullable
private final Player player;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInventoryChangedEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInventoryChangedEvent.java
index 72db9d729..47884492b 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInventoryChangedEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopInventoryChangedEvent.java
@@ -11,6 +11,7 @@ public class ShopInventoryChangedEvent extends AbstractQSEvent {
@NotNull
private final InventoryWrapper wrapper;
+
@NotNull
private final InventoryWrapperManager manager;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPlayerGroupSetEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPlayerGroupSetEvent.java
index 498e0d869..60d63c368 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPlayerGroupSetEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPlayerGroupSetEvent.java
@@ -1,9 +1,8 @@
package com.ghostchu.quickshop.api.event;
import com.ghostchu.quickshop.api.shop.Shop;
-import org.jetbrains.annotations.NotNull;
-
import java.util.UUID;
+import org.jetbrains.annotations.NotNull;
/**
* Fire when a player's group is set or changed.
@@ -22,7 +21,8 @@ public class ShopPlayerGroupSetEvent extends AbstractQSEvent {
* @param oldGroup The old group.
* @param newGroup The new group.
*/
- public ShopPlayerGroupSetEvent(@NotNull Shop shop, @NotNull UUID player, @NotNull String oldGroup, @NotNull String newGroup) {
+ public ShopPlayerGroupSetEvent(
+ @NotNull Shop shop, @NotNull UUID player, @NotNull String oldGroup, @NotNull String newGroup) {
this.shop = shop;
this.player = player;
this.oldGroup = oldGroup;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPurchaseEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPurchaseEvent.java
index b83cadb06..bbdb65b55 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPurchaseEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopPurchaseEvent.java
@@ -38,7 +38,12 @@ public class ShopPurchaseEvent extends AbstractQSEvent implements QSCancellable
* @param amount The amount they're buying
* @param total The total balance in this purchase
*/
- public ShopPurchaseEvent(@NotNull Shop shop, @NotNull QUser purchaser, @NotNull InventoryWrapper purchaserInventory, int amount, double total) {
+ public ShopPurchaseEvent(
+ @NotNull Shop shop,
+ @NotNull QUser purchaser,
+ @NotNull InventoryWrapper purchaserInventory,
+ int amount,
+ double total) {
this.shop = shop;
this.purchaser = purchaser;
this.purchaserInventory = purchaserInventory;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopSuccessPurchaseEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopSuccessPurchaseEvent.java
index a655d064c..8f2ce514f 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopSuccessPurchaseEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopSuccessPurchaseEvent.java
@@ -23,8 +23,7 @@ public class ShopSuccessPurchaseEvent extends AbstractQSEvent {
private final double tax;
- private final double
- total; // Don't use getter, we have important notice need told dev in javadoc.
+ private final double total; // Don't use getter, we have important notice need told dev in javadoc.
/**
* Builds a new shop purchase event
@@ -38,7 +37,12 @@ public class ShopSuccessPurchaseEvent extends AbstractQSEvent {
* @param total The money in this purchase
*/
public ShopSuccessPurchaseEvent(
- @NotNull Shop shop, @NotNull QUser purchaser, @NotNull InventoryWrapper purchaserInventory, int amount, double total, double tax) {
+ @NotNull Shop shop,
+ @NotNull QUser purchaser,
+ @NotNull InventoryWrapper purchaserInventory,
+ int amount,
+ double total,
+ double tax) {
this.shop = shop;
this.purchaser = purchaser;
this.purchaserInventory = purchaserInventory;
@@ -76,7 +80,6 @@ public class ShopSuccessPurchaseEvent extends AbstractQSEvent {
return this.total;
}
-
/**
* Gets the purchaser, that maybe is a online/offline/virtual player.
*
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountChangeEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountChangeEvent.java
index 1c155f239..24c66806f 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountChangeEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountChangeEvent.java
@@ -12,6 +12,7 @@ import org.jetbrains.annotations.Nullable;
public class ShopTaxAccountChangeEvent extends AbstractQSEvent implements QSCancellable {
@Nullable
private final QUser newTaxAccount;
+
@NotNull
private final Shop shop;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountGettingEvent.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountGettingEvent.java
index 1252af167..7ad3f7ad0 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountGettingEvent.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/ShopTaxAccountGettingEvent.java
@@ -9,6 +9,7 @@ import org.jetbrains.annotations.Nullable;
*/
public class ShopTaxAccountGettingEvent extends AbstractQSEvent {
private final Shop shop;
+
@Nullable
private QUser taxAccount;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/package-info.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/package-info.java
index c9a9ae5bc..37b466810 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/package-info.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/event/package-info.java
@@ -1,4 +1,4 @@
/**
* The QuickShop events that allow addons to listen to.
*/
-package com.ghostchu.quickshop.api.event;
\ No newline at end of file
+package com.ghostchu.quickshop.api.event;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/eventmanager/QuickEventManager.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/eventmanager/QuickEventManager.java
index e22cd169e..4750e4e34 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/eventmanager/QuickEventManager.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/eventmanager/QuickEventManager.java
@@ -1,11 +1,10 @@
package com.ghostchu.quickshop.api.eventmanager;
+import java.util.function.Consumer;
import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.function.Consumer;
-
/**
* QuickEventManager allow user switch between bukkit and quickshop.
* QuickShop's EventManager can filter the Plugin listeners and skip it when calling events
@@ -17,5 +16,6 @@ public interface QuickEventManager {
* @param event The event
* @throws IllegalStateException Just like bukkit
*/
- void callEvent(@NotNull Event event, @Nullable Consumer callBeforePassToMonitor) throws IllegalStateException;
+ void callEvent(@NotNull Event event, @Nullable Consumer callBeforePassToMonitor)
+ throws IllegalStateException;
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapper.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapper.java
index 5db2a3208..93cab77dd 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapper.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapper.java
@@ -1,6 +1,9 @@
package com.ghostchu.quickshop.api.inventory;
import com.ghostchu.quickshop.api.QuickShopAPI;
+import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.inventory.InventoryHolder;
@@ -8,10 +11,6 @@ import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
/**
* Wrapper to handle inventory/fake inventory/custom inventory etc.
*/
@@ -68,7 +67,12 @@ public interface InventoryWrapper extends Iterable {
*/
@NotNull
default ItemStack[] createSnapshot() {
- Logger.getLogger("QuickShop-Hikari").log(Level.WARNING, "InventoryWrapper provider " + getWrapperManager().getClass().getName() + " didn't override default InventoryWrapper#createSnapshot method, it may cause un-excepted behavior like item missing, mess order and heavy hit performance! Please report this issue to InventoryWrapper provider plugin author!");
+ Logger.getLogger("QuickShop-Hikari")
+ .log(
+ Level.WARNING,
+ "InventoryWrapper provider "
+ + getWrapperManager().getClass().getName()
+ + " didn't override default InventoryWrapper#createSnapshot method, it may cause un-excepted behavior like item missing, mess order and heavy hit performance! Please report this issue to InventoryWrapper provider plugin author!");
List contents = new ArrayList<>();
for (ItemStack stack : this) {
if (stack == null) {
@@ -84,21 +88,24 @@ public interface InventoryWrapper extends Iterable {
*
* @return Wrapper Manager
*/
- @NotNull InventoryWrapperManager getWrapperManager();
+ @NotNull
+ InventoryWrapperManager getWrapperManager();
/**
* Gets the block or entity belonging to the open inventory
*
* @return The holder of the inventory; null if it has no holder.
*/
- @Nullable InventoryHolder getHolder();
+ @Nullable
+ InventoryHolder getHolder();
/**
* Gets the Inventory Type
*
* @return The Inventory Type
*/
- @NotNull InventoryWrapperType getInventoryType();
+ @NotNull
+ InventoryWrapperType getInventoryType();
/**
* Get the location of the block or entity which corresponds to this inventory. May return null if this container
@@ -106,7 +113,8 @@ public interface InventoryWrapper extends Iterable {
*
* @return location or null if not applicable.
*/
- @Nullable Location getLocation();
+ @Nullable
+ Location getLocation();
/**
* Do valid check, check if this Inventory is valid.
@@ -136,7 +144,8 @@ public interface InventoryWrapper extends Iterable {
while (iterator.hasNext()) {
ItemStack itemStack = iterator.next();
// TODO: Need lots of verification, it cause mismatch between items under non-Bukkit item matcher
- if (itemStack != null && QuickShopAPI.getInstance().getItemMatcher().matches(itemStackToRemove, itemStack)) {
+ if (itemStack != null
+ && QuickShopAPI.getInstance().getItemMatcher().matches(itemStackToRemove, itemStack)) {
int couldRemove = itemStack.getAmount();
int actuallyRemove = Math.min(itemStackToRemove.getAmount(), couldRemove);
itemStack.setAmount(itemStack.getAmount() - actuallyRemove);
@@ -165,7 +174,12 @@ public interface InventoryWrapper extends Iterable {
* @return The result of rollback.
*/
default boolean restoreSnapshot(@NotNull ItemStack[] snapshot) {
- Logger.getLogger("QuickShop-Hikari").log(Level.WARNING, "InventoryWrapper provider " + getWrapperManager().getClass().getName() + " didn't override default InventoryWrapper#restoreSnapshot method, it may cause un-excepted behavior like item missing, mess order and heavy hit performance! Please report this issue to InventoryWrapper provider plugin author!");
+ Logger.getLogger("QuickShop-Hikari")
+ .log(
+ Level.WARNING,
+ "InventoryWrapper provider "
+ + getWrapperManager().getClass().getName()
+ + " didn't override default InventoryWrapper#restoreSnapshot method, it may cause un-excepted behavior like item missing, mess order and heavy hit performance! Please report this issue to InventoryWrapper provider plugin author!");
InventoryWrapperIterator it = iterator();
while (it.hasNext()) {
it.remove();
@@ -198,7 +212,8 @@ public interface InventoryWrapper extends Iterable {
continue AddProcess;
} else {
if (itemStack.isSimilar(itemStackToAdd)) {
- int couldAdd = itemStack.getMaxStackSize() - Math.min(itemStack.getMaxStackSize(), itemStack.getAmount());
+ int couldAdd = itemStack.getMaxStackSize()
+ - Math.min(itemStack.getMaxStackSize(), itemStack.getAmount());
int actuallyAdd = Math.min(itemStackToAdd.getAmount(), couldAdd);
itemStack.setAmount(itemStack.getAmount() + actuallyAdd);
int needsNow = itemStackToAdd.getAmount() - actuallyAdd;
@@ -237,5 +252,4 @@ public interface InventoryWrapper extends Iterable {
*/
boolean changeItem(int index, ItemStack itemStack);
}
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperIterator.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperIterator.java
index a58ba85a8..cf097bc07 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperIterator.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperIterator.java
@@ -1,18 +1,16 @@
package com.ghostchu.quickshop.api.inventory;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.jetbrains.annotations.Nullable;
-
import java.util.Iterator;
import java.util.NoSuchElementException;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.Nullable;
/**
* Iterator for InventoryWrapper
*/
public interface InventoryWrapperIterator extends Iterator {
-
/**
* Return the default implementation for bukkit inventory
*
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperManager.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperManager.java
index 7d953ad7d..22514345e 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperManager.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperManager.java
@@ -27,6 +27,4 @@ public interface InventoryWrapperManager {
*/
@NotNull
String mklink(@NotNull InventoryWrapper wrapper) throws IllegalArgumentException;
-
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperRegistry.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperRegistry.java
index af18585c8..f59793ef7 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperRegistry.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/inventory/InventoryWrapperRegistry.java
@@ -1,12 +1,11 @@
package com.ghostchu.quickshop.api.inventory;
import com.google.common.collect.MapMaker;
+import java.util.Map;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Map;
-
public class InventoryWrapperRegistry {
private final Map registry = new MapMaker().makeMap();
@@ -27,10 +26,13 @@ public class InventoryWrapperRegistry {
public void register(@NotNull Plugin plugin, @NotNull InventoryWrapperManager manager) {
if (registry.containsKey(plugin.getName())) {
- plugin.getLogger().warning("Nag Author: Plugin " + plugin.getName() + " already have a registered InventoryWrapperManager: "
- + registry.get(plugin.getName()).getClass().getName() +
- " but trying register another new manager: " + manager.getClass().getName() +
- ". This may cause unexpected behavior! Replacing with new instance...");
+ plugin.getLogger()
+ .warning("Nag Author: Plugin " + plugin.getName()
+ + " already have a registered InventoryWrapperManager: "
+ + registry.get(plugin.getName()).getClass().getName()
+ + " but trying register another new manager: "
+ + manager.getClass().getName()
+ + ". This may cause unexpected behavior! Replacing with new instance...");
}
registry.put(plugin.getName(), manager);
}
@@ -38,6 +40,4 @@ public class InventoryWrapperRegistry {
public void unregister(@NotNull Plugin plugin) {
registry.remove(plugin.getName());
}
-
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/ProxiedLocale.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/ProxiedLocale.java
index 8962aab5a..1f6df8940 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/ProxiedLocale.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/ProxiedLocale.java
@@ -7,6 +7,7 @@ import org.jetbrains.annotations.Nullable;
public class ProxiedLocale {
@Nullable
private String origin;
+
private String relative;
public ProxiedLocale(@Nullable String origin, String relative) {
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/Text.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/Text.java
index 121419b91..399b8c8bc 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/Text.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/Text.java
@@ -13,14 +13,16 @@ public interface Text {
* @param locale The minecraft locale code (like en_us)
* @return The text
*/
- @NotNull Component forLocale(@NotNull String locale);
+ @NotNull
+ Component forLocale(@NotNull String locale);
/**
* Getting the text for player locale
*
* @return Getting the text for player locale
*/
- @NotNull Component forLocale();
+ @NotNull
+ Component forLocale();
/**
* Getting this text is exists in the translation file
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextList.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextList.java
index 5349f10f5..eb1bf790f 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextList.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextList.java
@@ -1,10 +1,9 @@
package com.ghostchu.quickshop.api.localization.text;
+import java.util.List;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull;
-import java.util.List;
-
/**
* The Texts of a series of the translation.
*/
@@ -16,14 +15,16 @@ public interface TextList {
* @param locale The minecraft locale code (like en_us)
* @return The text
*/
- @NotNull List forLocale(@NotNull String locale);
+ @NotNull
+ List forLocale(@NotNull String locale);
/**
* Getting the text for player locale
*
* @return Getting the text for player locale
*/
- @NotNull List forLocale();
+ @NotNull
+ List forLocale();
/**
* Getting this text is exists in the translation file
@@ -32,7 +33,6 @@ public interface TextList {
*/
boolean isPresent();
-
/**
* Send text to the player
*/
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextManager.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextManager.java
index 1658f8a36..faf4363c5 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextManager.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/localization/text/TextManager.java
@@ -1,27 +1,31 @@
package com.ghostchu.quickshop.api.localization.text;
import com.ghostchu.quickshop.api.obj.QUser;
+import java.util.List;
+import java.util.UUID;
import net.kyori.adventure.text.Component;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.List;
-import java.util.UUID;
-
/**
* The TextManager that allow create user's locale specified message.
*/
public interface TextManager {
- @NotNull Component[] convert(@Nullable Object... args);
+ @NotNull
+ Component[] convert(@Nullable Object... args);
- @NotNull ProxiedLocale findRelativeLanguages(@Nullable String langCode);
+ @NotNull
+ ProxiedLocale findRelativeLanguages(@Nullable String langCode);
- @NotNull ProxiedLocale findRelativeLanguages(@Nullable CommandSender sender);
+ @NotNull
+ ProxiedLocale findRelativeLanguages(@Nullable CommandSender sender);
- @NotNull ProxiedLocale findRelativeLanguages(@Nullable UUID sender, boolean allowDbLoad);
+ @NotNull
+ ProxiedLocale findRelativeLanguages(@Nullable UUID sender, boolean allowDbLoad);
- @NotNull ProxiedLocale findRelativeLanguages(@Nullable QUser qUser, boolean allowDbLoad);
+ @NotNull
+ ProxiedLocale findRelativeLanguages(@Nullable QUser qUser, boolean allowDbLoad);
/**
* Return the set of available Languages
@@ -80,7 +84,6 @@ public interface TextManager {
@NotNull
Text of(@Nullable UUID sender, @NotNull String path, @Nullable Object... args);
-
/**
* Getting the translation with path with player's locale (if available)
*
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/obj/QUser.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/obj/QUser.java
index bcaef71bd..4809bfcdc 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/obj/QUser.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/obj/QUser.java
@@ -1,22 +1,26 @@
package com.ghostchu.quickshop.api.obj;
+import java.util.Optional;
+import java.util.UUID;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Optional;
-import java.util.UUID;
-
public interface QUser {
- @Nullable String getUsername();
+ @Nullable
+ String getUsername();
- @NotNull Optional getUsernameOptional();
+ @NotNull
+ Optional getUsernameOptional();
- @NotNull String getDisplay();
+ @NotNull
+ String getDisplay();
- @Nullable UUID getUniqueId();
+ @Nullable
+ UUID getUniqueId();
- @NotNull Optional getUniqueIdOptional();
+ @NotNull
+ Optional getUniqueIdOptional();
boolean isRealPlayer();
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/operation/Operation.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/operation/Operation.java
index 666a149f8..1bbdc9800 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/operation/Operation.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/operation/Operation.java
@@ -30,6 +30,5 @@ public interface Operation {
*
* @return true if successes
*/
-
boolean rollback();
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/package-info.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/package-info.java
index c191ec4c8..25a71fdf3 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/package-info.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/package-info.java
@@ -1,4 +1,4 @@
/**
* The QuickShop API package
*/
-package com.ghostchu.quickshop.api;
\ No newline at end of file
+package com.ghostchu.quickshop.api;
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/permission/PermissionProvider.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/permission/PermissionProvider.java
index 7461475af..33dd7cf22 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/permission/PermissionProvider.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/permission/PermissionProvider.java
@@ -34,5 +34,4 @@ public interface PermissionProvider {
* @return hasPermission
*/
boolean hasPermission(@NotNull QUser sender, @NotNull String permission);
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/serialize/BlockPos.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/serialize/BlockPos.java
index ceb764327..a7933cae0 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/serialize/BlockPos.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/serialize/BlockPos.java
@@ -30,12 +30,10 @@ public final class BlockPos {
return x;
}
-
public int getY() {
return y;
}
-
public int getZ() {
return z;
}
@@ -46,13 +44,12 @@ public final class BlockPos {
@Override
public String toString() {
- return "BlockPos{" +
- "version=" + version +
- ", x=" + x +
- ", y=" + y +
- ", z=" + z +
- ", world='" + world + '\'' +
- '}';
+ return "BlockPos{" + "version="
+ + version + ", x="
+ + x + ", y="
+ + y + ", z="
+ + z + ", world='"
+ + world + '\'' + '}';
}
public static BlockPos deserialize(String string) {
@@ -61,7 +58,8 @@ public final class BlockPos {
if (split.length < 5) {
throw new IllegalArgumentException("Invalid input string for deserialization");
}
- return new BlockPos(Integer.parseInt(split[1]), Integer.parseInt(split[2]), Integer.parseInt(split[3]), split[4]);
+ return new BlockPos(
+ Integer.parseInt(split[1]), Integer.parseInt(split[2]), Integer.parseInt(split[3]), split[4]);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Failed to parse integer during deserialization", e);
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Info.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Info.java
index 58b159463..ba470e16b 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Info.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Info.java
@@ -13,24 +13,28 @@ public interface Info {
/**
* @return ShopAction action, Get shop action.
*/
- @NotNull ShopAction getAction();
+ @NotNull
+ ShopAction getAction();
void setAction(@NotNull ShopAction action);
/**
* @return ItemStack iStack, Get Shop's selling/buying item's ItemStack.
*/
- @NotNull ItemStack getItem();
+ @NotNull
+ ItemStack getItem();
/**
* @return Location loc, Get shop's location,
*/
- @NotNull Location getLocation();
+ @NotNull
+ Location getLocation();
/**
* @return Block signBlock, Get block of shop's sign, may return the null.
*/
- @Nullable Block getSignBlock();
+ @Nullable
+ Block getSignBlock();
/**
* Get shop is or not has changed.
@@ -46,5 +50,4 @@ public interface Info {
* @return Bypassed Protection Checks
*/
boolean isBypassed();
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/InventoryTransaction.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/InventoryTransaction.java
index a49daecd9..528885702 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/InventoryTransaction.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/InventoryTransaction.java
@@ -2,13 +2,12 @@ package com.ghostchu.quickshop.api.shop;
import com.ghostchu.quickshop.api.inventory.InventoryWrapper;
import com.ghostchu.quickshop.api.operation.Operation;
+import java.util.Deque;
+import java.util.List;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Deque;
-import java.util.List;
-
public interface InventoryTransaction {
/**
* Commit the transaction
@@ -67,7 +66,8 @@ public interface InventoryTransaction {
* @return A list contains all steps executed. If "continueWhenFailed" is false, it only contains all success steps before hit the error. Else all.
*/
@SuppressWarnings("UnusedReturnValue")
- @NotNull List rollback(boolean continueWhenFailed);
+ @NotNull
+ List rollback(boolean continueWhenFailed);
interface TransactionCallback {
/**
@@ -87,17 +87,13 @@ public interface InventoryTransaction {
*
* @param transaction Transaction
*/
- default void onFailed(@NotNull InventoryTransaction transaction) {
- }
+ default void onFailed(@NotNull InventoryTransaction transaction) {}
/**
* Calling while Transaction commit successfully
*
* @param transaction Transaction
*/
- default void onSuccess(@NotNull InventoryTransaction transaction) {
- }
-
-
+ default void onSuccess(@NotNull InventoryTransaction transaction) {}
}
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ItemMatcher.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ItemMatcher.java
index 609a51d0e..eb37668e2 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ItemMatcher.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ItemMatcher.java
@@ -14,14 +14,16 @@ public interface ItemMatcher {
*
* @return Provider name
*/
- @NotNull String getName();
+ @NotNull
+ String getName();
/**
* Gets the ItemMatcher provider plugin instance
*
* @return Provider Plugin instance
*/
- @NotNull Plugin getPlugin();
+ @NotNull
+ Plugin getPlugin();
/**
* Tests ItemStacks is matches
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PlayerFinder.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PlayerFinder.java
index de7971667..24674dbad 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PlayerFinder.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PlayerFinder.java
@@ -1,28 +1,37 @@
package com.ghostchu.quickshop.api.shop;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
public interface PlayerFinder {
- @Nullable String uuid2Name(@NotNull UUID uuid);
+ @Nullable
+ String uuid2Name(@NotNull UUID uuid);
- @Nullable String uuid2Name(@NotNull UUID uuid, boolean writeCache, @NotNull ExecutorService executorService);
+ @Nullable
+ String uuid2Name(@NotNull UUID uuid, boolean writeCache, @NotNull ExecutorService executorService);
- @Nullable UUID name2Uuid(@NotNull String name);
+ @Nullable
+ UUID name2Uuid(@NotNull String name);
- @Nullable UUID name2Uuid(@NotNull String name, boolean writeCache, @NotNull ExecutorService executorService);
+ @Nullable
+ UUID name2Uuid(@NotNull String name, boolean writeCache, @NotNull ExecutorService executorService);
- @NotNull CompletableFuture uuid2NameFuture(@NotNull UUID uuid);
+ @NotNull
+ CompletableFuture uuid2NameFuture(@NotNull UUID uuid);
- @NotNull CompletableFuture uuid2NameFuture(@NotNull UUID uuid, boolean writeCache, @NotNull ExecutorService executorService);
+ @NotNull
+ CompletableFuture uuid2NameFuture(
+ @NotNull UUID uuid, boolean writeCache, @NotNull ExecutorService executorService);
- @NotNull CompletableFuture name2UuidFuture(@NotNull String name);
+ @NotNull
+ CompletableFuture name2UuidFuture(@NotNull String name);
- @NotNull CompletableFuture name2UuidFuture(@NotNull String name, boolean writeCache, @NotNull ExecutorService executorService);
+ @NotNull
+ CompletableFuture name2UuidFuture(
+ @NotNull String name, boolean writeCache, @NotNull ExecutorService executorService);
void cache(@NotNull UUID uuid, @NotNull String name);
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PriceLimiter.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PriceLimiter.java
index 0dde09932..331cedad0 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PriceLimiter.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/PriceLimiter.java
@@ -18,5 +18,7 @@ public interface PriceLimiter {
* @param price the price
* @return the result
*/
- @NotNull PriceLimiterCheckResult check(@NotNull CommandSender sender, @NotNull ItemStack stack, @Nullable String currency, double price);
+ @NotNull
+ PriceLimiterCheckResult check(
+ @NotNull CommandSender sender, @NotNull ItemStack stack, @Nullable String currency, double price);
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Shop.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Shop.java
index a7e85a4a8..3fae3f119 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Shop.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/Shop.java
@@ -8,6 +8,10 @@ import com.ghostchu.quickshop.api.localization.text.ProxiedLocale;
import com.ghostchu.quickshop.api.obj.QUser;
import com.ghostchu.quickshop.api.shop.permission.BuiltInShopPermission;
import com.ghostchu.quickshop.api.shop.permission.BuiltInShopPermissionGroup;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
import net.kyori.adventure.text.Component;
import org.bukkit.Location;
import org.bukkit.NamespacedKey;
@@ -21,11 +25,6 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.CompletableFuture;
-
/**
* A shop
*/
@@ -49,7 +48,8 @@ public interface Shop {
* @param paramInt How many buyed?
* @throws Exception Possible exception thrown if anything wrong.
*/
- void buy(@NotNull QUser buyer, @NotNull InventoryWrapper buyerInventory, @NotNull Location loc2Drop, int paramInt) throws Exception;
+ void buy(@NotNull QUser buyer, @NotNull InventoryWrapper buyerInventory, @NotNull Location loc2Drop, int paramInt)
+ throws Exception;
/**
* Check the display location, and teleport, respawn if needs.
@@ -99,7 +99,8 @@ public interface Shop {
*
* @return Inventory
*/
- @Nullable InventoryWrapper getInventory();
+ @Nullable
+ InventoryWrapper getInventory();
/**
* Gets the InventoryWrapper provider name (the plugin name who register it), usually is QuickShop
@@ -132,7 +133,6 @@ public interface Shop {
@NotNull
Location getLocation();
-
/**
* Get shop's owner QUser
*
@@ -199,7 +199,8 @@ public interface Shop {
*
* @return Random UUID
*/
- @NotNull UUID getRuntimeRandomUniqueId();
+ @NotNull
+ UUID getRuntimeRandomUniqueId();
/**
* Gets the Shop ID to identify the shop.
@@ -260,7 +261,7 @@ public interface Shop {
* Line 3: Price
*/
default List getSignText(@NotNull ProxiedLocale locale) {
- //backward support
+ // backward support
throw new UnsupportedOperationException();
}
@@ -292,7 +293,6 @@ public interface Shop {
*
* @return Shop Tax Account, null if use general tax account
*/
-
@Nullable
QUser getTaxAccountActual();
@@ -417,7 +417,6 @@ public interface Shop {
*/
void onClick(@NotNull Player clicker);
-
@Deprecated()
@ApiStatus.Internal
void handleLoading();
@@ -508,8 +507,7 @@ public interface Shop {
* Refresh shop sign and display item
*/
@Deprecated(forRemoval = true)
- default void refresh() {
- }
+ default void refresh() {}
/**
* Remove x ItemStack from the shop inventory
@@ -551,7 +549,9 @@ public interface Shop {
* @param paramInt How many sold?
* @throws Exception Possible exception thrown if anything wrong.
*/
- void sell(@NotNull QUser seller, @NotNull InventoryWrapper sellerInventory, @NotNull Location loc2Drop, int paramInt) throws Exception;
+ void sell(
+ @NotNull QUser seller, @NotNull InventoryWrapper sellerInventory, @NotNull Location loc2Drop, int paramInt)
+ throws Exception;
/**
* Sets shop is dirty
@@ -614,5 +614,4 @@ public interface Shop {
* Sets the benefit in this shop
*/
void setShopBenefit(@NotNull Benefit benefit);
-
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanel.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanel.java
index 4f55e732b..67b40b7f1 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanel.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanel.java
@@ -1,12 +1,11 @@
package com.ghostchu.quickshop.api.shop;
+import java.util.List;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
-import java.util.List;
-
/**
* The shop control panel impl.
*/
@@ -18,7 +17,8 @@ public interface ShopControlPanel {
* @param shop The shop
* @return The components, or empty list if nothing to show. Every component will be shown in a new line.
*/
- @NotNull List generate(@NotNull Player player, @NotNull Shop shop);
+ @NotNull
+ List generate(@NotNull Player player, @NotNull Shop shop);
/**
* Usually you don't need touch this :)
@@ -44,5 +44,6 @@ public interface ShopControlPanel {
*
* @return Your plugin instance;
*/
- @NotNull Plugin getPlugin();
+ @NotNull
+ Plugin getPlugin();
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanelManager.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanelManager.java
index 2acf8af09..54cfcbcf6 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanelManager.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopControlPanelManager.java
@@ -14,7 +14,6 @@ public interface ShopControlPanelManager {
* @param player the player to open
* @param shop the shop to open
*/
-
void openControlPanel(@NotNull Player player, @NotNull Shop shop);
/**
@@ -36,6 +35,5 @@ public interface ShopControlPanelManager {
*
* @param panel the panel to unregister
*/
-
void unregister(@NotNull ShopControlPanel panel);
}
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopInfoStorage.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopInfoStorage.java
index ae0e594a9..5334e38b8 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopInfoStorage.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopInfoStorage.java
@@ -2,10 +2,9 @@ package com.ghostchu.quickshop.api.shop;
import com.ghostchu.quickshop.api.obj.QUser;
import com.ghostchu.quickshop.api.serialize.BlockPos;
-import lombok.Data;
-
import java.util.Map;
import java.util.UUID;
+import lombok.Data;
/**
* Minimal information about a shop.
@@ -27,7 +26,21 @@ public class ShopInfoStorage {
private final String symbolLink;
private final Map permission;
- public ShopInfoStorage(String world, BlockPos position, QUser owner, double price, String item, int unlimited, int shopType, String extra, String currency, boolean disableDisplay, QUser taxAccount, String inventoryWrapperName, String symbolLink, Map permission) {
+ public ShopInfoStorage(
+ String world,
+ BlockPos position,
+ QUser owner,
+ double price,
+ String item,
+ int unlimited,
+ int shopType,
+ String extra,
+ String currency,
+ boolean disableDisplay,
+ QUser taxAccount,
+ String inventoryWrapperName,
+ String symbolLink,
+ Map permission) {
this.world = world;
this.position = position;
this.owner = owner.serialize();
diff --git a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopManager.java b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopManager.java
index 9103baa58..de2af20e4 100644
--- a/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopManager.java
+++ b/quickshop-api/src/main/java/com/ghostchu/quickshop/api/shop/ShopManager.java
@@ -3,6 +3,8 @@ package com.ghostchu.quickshop.api.shop;
import com.ghostchu.quickshop.api.economy.AbstractEconomy;
import com.ghostchu.quickshop.api.inventory.InventoryWrapper;
import com.ghostchu.quickshop.api.obj.QUser;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
@@ -12,9 +14,6 @@ import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-
/**
* The manager that managing shops
*/
@@ -66,14 +65,14 @@ public interface ShopManager {
@NotNull Shop shop,
int amount);
-// /**
-// * Adds a shop to the world. Does NOT require the chunk or world to be loaded Call shop.onLoad
-// * by yourself
-// *
-// * @param world The name of the world
-// * @param shop The shop to add
-// */
-// void addShop(@NotNull String world, @NotNull Shop shop);
+ // /**
+ // * Adds a shop to the world. Does NOT require the chunk or world to be loaded Call shop.onLoad
+ // * by yourself
+ // *
+ // * @param world The name of the world
+ // * @param shop The shop to add
+ // */
+ // void addShop(@NotNull String world, @NotNull Shop shop);
void bakeShopRuntimeRandomUniqueIdCache(@NotNull Shop shop);
@@ -91,7 +90,8 @@ public interface ShopManager {
* @param bypassProtectCheck Should bypass protection check
* @throws IllegalStateException If the shop owner offline
*/
- void createShop(@NotNull Shop shop, @Nullable Block signBlock, boolean bypassProtectCheck) throws IllegalStateException;
+ void createShop(@NotNull Shop shop, @Nullable Block signBlock, boolean bypassProtectCheck)
+ throws IllegalStateException;
/**
* Format the price use formatter
@@ -101,7 +101,8 @@ public interface ShopManager {
* @param world shop world
* @return formated price
*/
- @NotNull String format(double d, @NotNull World world, @Nullable String currency);
+ @NotNull
+ String format(double d, @NotNull World world, @Nullable String currency);
/**
* Format the price use formatter
@@ -110,14 +111,16 @@ public interface ShopManager {
* @param shop The shop
* @return formated price
*/
- @NotNull String format(double d, @NotNull Shop shop);
+ @NotNull
+ String format(double d, @NotNull Shop shop);
/**
* @return Returns the Map. Info contains what their last question etc was.
* @deprecated Use getInteractiveManager() instead.
*/
@Deprecated(forRemoval = true)
- @NotNull Map getActions();
+ @NotNull
+ Map getActions();
/**
* Returns all shops in the whole database, include unloaded.
@@ -126,14 +129,16 @@ public interface ShopManager {
*
* @return All shop in the database
*/
- @NotNull List getAllShops();
+ @NotNull
+ List getAllShops();
/**
* Get all loaded shops.
*
* @return All loaded shops.
*/
- @NotNull Set getLoadedShops();
+ @NotNull
+ Set getLoadedShops();
/**
* Get a players all shops.
@@ -143,7 +148,8 @@ public interface ShopManager {
* @param playerUUID The player's uuid.
* @return The list have this player's all shops.
*/
- @NotNull List getAllShops(@NotNull QUser playerUUID);
+ @NotNull
+ List getAllShops(@NotNull QUser playerUUID);
/**
* Get a players all shops.
@@ -153,7 +159,8 @@ public interface ShopManager {
* @param playerUUID The player's uuid.
* @return The list have this player's all shops.
*/
- @NotNull List getAllShops(@NotNull UUID playerUUID);
+ @NotNull
+ List getAllShops(@NotNull UUID playerUUID);
/**
* Getting the Shop Price Limiter
@@ -168,7 +175,8 @@ public interface ShopManager {
*
* @return The shop object
*/
- @Nullable Shop getShop(long shopId);
+ @Nullable
+ Shop getShop(long shopId);
/**
* Gets a shop in a specific location
@@ -177,7 +185,8 @@ public interface ShopManager {
* @param loc The location to get the shop from
* @return The shop at that location
*/
- @Nullable Shop getShop(@NotNull Location loc);
+ @Nullable
+ Shop getShop(@NotNull Location loc);
/**
* Gets a shop in a specific location but via cache
@@ -186,7 +195,8 @@ public interface ShopManager {
* @param loc The location to get the shop from
* @return The shop at that location but via cache
*/
- @Nullable Shop getShopViaCache(@NotNull Location loc);
+ @Nullable
+ Shop getShopViaCache(@NotNull Location loc);
/**
* Gets a shop in a specific location
@@ -196,12 +206,14 @@ public interface ShopManager {
* @param skipShopableChecking whether to check is shopable
* @return The shop at that location
*/
- @Nullable Shop getShop(@NotNull Location loc, boolean skipShopableChecking);
+ @Nullable
+ Shop getShop(@NotNull Location loc, boolean skipShopableChecking);
+ @Nullable
+ Shop getShopFromRuntimeRandomUniqueId(@NotNull UUID runtimeRandomUniqueId);
- @Nullable Shop getShopFromRuntimeRandomUniqueId(@NotNull UUID runtimeRandomUniqueId);
-
- @Nullable Shop getShopFromRuntimeRandomUniqueId(@NotNull UUID runtimeRandomUniqueId, boolean includeInvalid);
+ @Nullable
+ Shop getShopFromRuntimeRandomUniqueId(@NotNull UUID runtimeRandomUniqueId, boolean includeInvalid);
/**
* Gets a shop in a specific location Include the attached shop, e.g DoubleChest shop.
@@ -209,7 +221,8 @@ public interface ShopManager {
* @param loc The location to get the shop from
* @return The shop at that location
*/
- @Nullable Shop getShopIncludeAttached(@Nullable Location loc);
+ @Nullable
+ Shop getShopIncludeAttached(@Nullable Location loc);
/**
* Gets a shop in a specific location Include the attached shop, e.g DoubleChest shop. but via cache
@@ -217,8 +230,8 @@ public interface ShopManager {
* @param loc The location to get the shop from
* @return The shop at that location but via cache
*/
- @Nullable Shop getShopIncludeAttachedViaCache(@Nullable Location loc);
-
+ @Nullable
+ Shop getShopIncludeAttachedViaCache(@Nullable Location loc);
/**
* Returns a new shop iterator object, allowing iteration over shops easily, instead of sorting
@@ -226,14 +239,16 @@ public interface ShopManager {
*
* @return a new shop iterator object.
*/
- @NotNull Iterator getShopIterator();
+ @NotNull
+ Iterator getShopIterator();
/**
* Returns a map of World - Chunk - Shop
*
* @return a map of World - Chunk - Shop
*/
- @NotNull Map>> getShops();
+ @NotNull
+ Map>> getShops();
/**
* Returns a map of Shops
@@ -242,7 +257,8 @@ public interface ShopManager {
* used.
* @return Shops
*/
- @Nullable Map getShops(@NotNull Chunk c);
+ @Nullable
+ Map getShops(@NotNull Chunk c);
/**
* Gets the shop at the world and specific chunk.
@@ -252,7 +268,8 @@ public interface ShopManager {
* @param chunkZ The chunk z coordinate
* @return The shop at the world and specific chunk.
*/
- @Nullable Map getShops(@NotNull String world, int chunkX, int chunkZ);
+ @Nullable
+ Map getShops(@NotNull String world, int chunkX, int chunkZ);
/**
* Gets the shop at the world and specific chunk.
@@ -260,7 +277,8 @@ public interface ShopManager {
* @param shopChunk The shop chunk
* @return The shop at the world and specific chunk.
*/
- @Nullable Map getShops(@NotNull ShopChunk shopChunk);
+ @Nullable
+ Map getShops(@NotNull ShopChunk shopChunk);
/**
* Returns a map of Chunk - Shop
@@ -268,7 +286,8 @@ public interface ShopManager {
* @param world The name of the world (case sensitive) to get the list of shops from
* @return a map of Chunk - Shop
*/
- @Nullable Map> getShops(@NotNull String world);
+ @Nullable
+ Map> getShops(@NotNull String world);
/**
* Get the all shops in the world.
@@ -276,7 +295,8 @@ public interface ShopManager {
* @param world The world you want get the shops.
* @return The list have this world all shops
*/
- @NotNull List getShopsInWorld(@NotNull World world);
+ @NotNull
+ List getShopsInWorld(@NotNull World world);
/**
* Get the all shops in the world.
@@ -284,8 +304,8 @@ public interface ShopManager {
* @param worldName The world you want get the shops.
* @return The list have this world all shops
*/
- @NotNull List