forked from Upstream/CommandPanels
Compare commits
114 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
690ac0e6bf | ||
|
86aecb856a | ||
|
e58adfa9f5 | ||
|
5473206adf | ||
|
aced7b6243 | ||
|
98a02f2408 | ||
|
5f5db64255 | ||
|
9975b2f76a | ||
|
768b2a6de9 | ||
|
8b518e3cb7 | ||
|
372a9c0e86 | ||
|
3034ecd8f3 | ||
|
15766dca58 | ||
|
42e61009db | ||
|
f068a61596 | ||
|
a27360f8ff | ||
|
6f2a39d613 | ||
|
6c390a98f2 | ||
|
9aa6a64f1e | ||
|
a8663e41a7 | ||
|
843ba8b393 | ||
|
2bc6259e41 | ||
|
44e4c5831e | ||
|
724d5039c0 | ||
|
558ab7d7b5 | ||
|
d35517af76 | ||
|
2b354a62f7 | ||
|
64bc5f8f60 | ||
|
d1645d6bbb | ||
|
ad25df283f | ||
|
43d1b221b5 | ||
|
43dbaafc94 | ||
|
47aabb03b2 | ||
|
f3e9e023e6 | ||
|
df03148d84 | ||
|
b8ee48a384 | ||
|
016d67f7c8 | ||
|
66944ab903 | ||
|
fe32486b0b | ||
|
ed1b30c6f6 | ||
|
3e9c40c160 | ||
|
e163347f7d | ||
|
abafd085aa | ||
|
53dafd8f69 | ||
|
1ae3b62463 | ||
|
e5cef06194 | ||
|
24a72b82dd | ||
|
68591c7a11 | ||
|
6c558177ec | ||
|
10dc42ac3c | ||
|
6138ef1e2d | ||
|
1830c900db | ||
|
6551246c7a | ||
|
deab494c45 | ||
|
41383140b5 | ||
|
7dadce2fd7 | ||
|
388c7d7a4b | ||
|
c48779291d | ||
|
b88a5d62a9 | ||
|
21737bb99c | ||
|
b47857cb14 | ||
|
1cf7d0a4e0 | ||
|
614a9c77d5 | ||
|
7525db4bf2 | ||
|
d842ddff30 | ||
|
6bfbe3338a | ||
|
569a8172b9 | ||
|
b512d94624 | ||
|
1b71947d13 | ||
|
acca60a4fa | ||
|
0b5b776eb0 | ||
|
b1e91b7616 | ||
|
b9ca25eed6 | ||
|
056c547605 | ||
|
4da33349a5 | ||
|
31cea874c0 | ||
|
41ba7f31e7 | ||
|
1f71e26b4d | ||
|
5d0dd09e5b | ||
|
d210e016b0 | ||
|
2236f07eec | ||
|
67019348bb | ||
|
06c30c018d | ||
|
912d79c9de | ||
|
819ebc4592 | ||
|
336190f071 | ||
|
39ee2a6b21 | ||
|
2aced6e917 | ||
|
60e24fd45f | ||
|
c10919da43 | ||
|
74d9aa1d8a | ||
|
fad0e1fa39 | ||
|
b2b04906b8 | ||
|
5dee0f8a93 | ||
|
0f0d5dca84 | ||
|
277fe46859 | ||
|
02b2422de0 | ||
|
e8a5dbc1cd | ||
|
0de82db750 | ||
|
13ceeb43a1 | ||
|
f384bec035 | ||
|
27648b7642 | ||
|
d9fb7080f4 | ||
|
b5d3a9b5c6 | ||
|
ac721b0770 | ||
|
81f1f611dd | ||
|
3d24f93d84 | ||
|
d43fcfa1b1 | ||
|
7961db8520 | ||
|
8e022869af | ||
|
b4109fa071 | ||
|
02dc119a65 | ||
|
a1fbb3aca4 | ||
|
ec32f96c2a |
30
.gitea/workflows/build.yml
Normal file
30
.gitea/workflows/build.yml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
name: Build CommandPanels plugin
|
||||||
|
run-name: Build CommandPanels plugin
|
||||||
|
on: [push]
|
||||||
|
jobs:
|
||||||
|
Build-latest-jar:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Build | Prepare packages
|
||||||
|
run: |
|
||||||
|
apt update; apt-get install software-properties-common -y
|
||||||
|
wget -O- https://apt.corretto.aws/corretto.key | apt-key add -
|
||||||
|
add-apt-repository 'deb https://apt.corretto.aws stable main'
|
||||||
|
apt-get update; apt-get install -y maven java-21-amazon-corretto-jdk
|
||||||
|
- name: Setup git
|
||||||
|
run: |
|
||||||
|
git config --global user.name "Radim Lipovčan"
|
||||||
|
git config --global user.email "radim@lipovcan.cz"
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Build | Maven clean build
|
||||||
|
run: |
|
||||||
|
mvn clean install && ls -lah && ls */ -lah && ls */* -lah&& ls */*/* -lah
|
||||||
|
- name: Push | Create release
|
||||||
|
uses: https://git.lipovcan.cz/Upstream/gitea-release-action.git@v1
|
||||||
|
with:
|
||||||
|
files: |-
|
||||||
|
target/CommandPanels-DEV.jar
|
||||||
|
- name: Push | Old FTP way to gitea.lipovcan.cz:8081
|
||||||
|
run: |
|
||||||
|
curl --insecure --user username:mypass -T ./target/CommandPanels-DEV.jar ftp://192.168.10.133:/
|
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
14
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -33,6 +33,7 @@ body:
|
|||||||
- 1.17
|
- 1.17
|
||||||
- 1.18
|
- 1.18
|
||||||
- 1.19
|
- 1.19
|
||||||
|
- 1.20
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
@ -41,6 +42,9 @@ body:
|
|||||||
label: What CommandPanels version are you using?
|
label: What CommandPanels version are you using?
|
||||||
options:
|
options:
|
||||||
- latest
|
- latest
|
||||||
|
- 3.20.0.3
|
||||||
|
- 3.20.0.2
|
||||||
|
- 3.20.0.1
|
||||||
- 3.19.0.3
|
- 3.19.0.3
|
||||||
- 3.19.0.2
|
- 3.19.0.2
|
||||||
- 3.19.0.1
|
- 3.19.0.1
|
||||||
@ -66,16 +70,6 @@ body:
|
|||||||
- 3.17.4.1
|
- 3.17.4.1
|
||||||
- 3.17.4.0
|
- 3.17.4.0
|
||||||
- 3.17.3.1
|
- 3.17.3.1
|
||||||
- 3.17.3.0
|
|
||||||
- 3.17.2.2
|
|
||||||
- 3.17.2.1
|
|
||||||
- 3.17.2.0
|
|
||||||
- 3.17.1.5
|
|
||||||
- 3.17.1.4
|
|
||||||
- 3.17.1.3
|
|
||||||
- 3.17.1.2
|
|
||||||
- 3.17.1.1
|
|
||||||
- 3.17.1.0
|
|
||||||
- Any other version
|
- Any other version
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
14
.github/ISSUE_TEMPLATE/need-help.yml
vendored
14
.github/ISSUE_TEMPLATE/need-help.yml
vendored
@ -31,6 +31,7 @@ body:
|
|||||||
- 1.17
|
- 1.17
|
||||||
- 1.18
|
- 1.18
|
||||||
- 1.19
|
- 1.19
|
||||||
|
- 1.20
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
@ -39,6 +40,9 @@ body:
|
|||||||
label: What CommandPanels version are you using?
|
label: What CommandPanels version are you using?
|
||||||
options:
|
options:
|
||||||
- latest
|
- latest
|
||||||
|
- 3.20.0.3
|
||||||
|
- 3.20.0.2
|
||||||
|
- 3.20.0.1
|
||||||
- 3.19.0.3
|
- 3.19.0.3
|
||||||
- 3.19.0.2
|
- 3.19.0.2
|
||||||
- 3.19.0.1
|
- 3.19.0.1
|
||||||
@ -64,16 +68,6 @@ body:
|
|||||||
- 3.17.4.1
|
- 3.17.4.1
|
||||||
- 3.17.4.0
|
- 3.17.4.0
|
||||||
- 3.17.3.1
|
- 3.17.3.1
|
||||||
- 3.17.3.0
|
|
||||||
- 3.17.2.2
|
|
||||||
- 3.17.2.1
|
|
||||||
- 3.17.2.0
|
|
||||||
- 3.17.1.5
|
|
||||||
- 3.17.1.4
|
|
||||||
- 3.17.1.3
|
|
||||||
- 3.17.1.2
|
|
||||||
- 3.17.1.1
|
|
||||||
- 3.17.1.0
|
|
||||||
- Any other version
|
- Any other version
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
|||||||
# Project exclude paths
|
# Project exclude paths
|
||||||
/out/
|
/out/
|
||||||
/target/
|
/target/
|
||||||
|
.idea/
|
||||||
|
.github
|
@ -9,8 +9,5 @@
|
|||||||
<module name="CommandPanels" />
|
<module name="CommandPanels" />
|
||||||
</profile>
|
</profile>
|
||||||
</annotationProcessing>
|
</annotationProcessing>
|
||||||
<bytecodeTargetLevel>
|
|
||||||
<module name="CommandPanels" target="1.8" />
|
|
||||||
</bytecodeTargetLevel>
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -5,10 +5,5 @@
|
|||||||
<file url="file://$PROJECT_DIR$/resource_editor" charset="UTF-8" />
|
<file url="file://$PROJECT_DIR$/resource_editor" charset="UTF-8" />
|
||||||
<file url="file://$PROJECT_DIR$/resource_example" charset="UTF-8" />
|
<file url="file://$PROJECT_DIR$/resource_example" charset="UTF-8" />
|
||||||
<file url="file://$PROJECT_DIR$/src" charset="UTF-8" />
|
<file url="file://$PROJECT_DIR$/src" charset="UTF-8" />
|
||||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
|
||||||
<file url="file://$PROJECT_DIR$/src/main/resource" charset="UTF-8" />
|
|
||||||
<file url="file://$PROJECT_DIR$/src/main/resource_editor" charset="UTF-8" />
|
|
||||||
<file url="file://$PROJECT_DIR$/src/main/resource_example" charset="UTF-8" />
|
|
||||||
<file url="file://$PROJECT_DIR$/src/me/rockyhawk/commandpanels" charset="UTF-8" />
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -6,21 +6,41 @@
|
|||||||
<option name="name" value="Central Repository" />
|
<option name="name" value="Central Repository" />
|
||||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
|
||||||
<option name="id" value="jeff-media-public" />
|
|
||||||
<option name="name" value="jeff-media-public" />
|
|
||||||
<option name="url" value="https://hub.jeff-media.com/nexus/repository/jeff-media-public/" />
|
|
||||||
</remote-repository>
|
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="jitpack.io" />
|
<option name="id" value="jitpack.io" />
|
||||||
<option name="name" value="jitpack.io" />
|
<option name="name" value="jitpack.io" />
|
||||||
<option name="url" value="https://jitpack.io" />
|
<option name="url" value="https://jitpack.io" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="jeff-media-public" />
|
||||||
|
<option name="name" value="jeff-media-public" />
|
||||||
|
<option name="url" value="https://hub.jeff-media.com/nexus/repository/jeff-media-public/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="io.papermc" />
|
||||||
|
<option name="name" value="io.papermc" />
|
||||||
|
<option name="url" value="https://papermc.io/repo/repository/maven-releases/" />
|
||||||
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="sonatype" />
|
<option name="id" value="sonatype" />
|
||||||
<option name="name" value="sonatype" />
|
<option name="name" value="sonatype" />
|
||||||
<option name="url" value="https://oss.sonatype.org/content/groups/public/" />
|
<option name="url" value="https://oss.sonatype.org/content/groups/public/" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="io.papermc" />
|
||||||
|
<option name="name" value="io.papermc" />
|
||||||
|
<option name="url" value="https://repo.papermc.io/repository/maven-public/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="codemc-repo" />
|
||||||
|
<option name="name" value="codemc-repo" />
|
||||||
|
<option name="url" value="https://repo.codemc.io/repository/maven-public/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="opencollab-snapshot" />
|
||||||
|
<option name="name" value="opencollab-snapshot" />
|
||||||
|
<option name="url" value="https://repo.opencollab.dev/main/" />
|
||||||
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="placeholderapi" />
|
<option name="id" value="placeholderapi" />
|
||||||
<option name="name" value="placeholderapi" />
|
<option name="name" value="placeholderapi" />
|
||||||
@ -32,14 +52,9 @@
|
|||||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="ess-repo" />
|
<option name="id" value="oraxen" />
|
||||||
<option name="name" value="ess-repo" />
|
<option name="name" value="Oraxen Repository" />
|
||||||
<option name="url" value="http://repo.ess3.net/content/groups/essentials" />
|
<option name="url" value="https://repo.oraxen.com/#/releases" />
|
||||||
</remote-repository>
|
|
||||||
<remote-repository>
|
|
||||||
<option name="id" value="BenCodez Repo" />
|
|
||||||
<option name="name" value="BenCodez Repo" />
|
|
||||||
<option name="url" value="https://nexus.bencodez.com/repository/maven-public/" />
|
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="phoenix" />
|
<option name="id" value="phoenix" />
|
||||||
@ -47,9 +62,24 @@
|
|||||||
<option name="url" value="https://nexus.phoenixdevt.fr/repository/maven-public/" />
|
<option name="url" value="https://nexus.phoenixdevt.fr/repository/maven-public/" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="papermc" />
|
<option name="id" value="BenCodez Repo" />
|
||||||
<option name="name" value="papermc" />
|
<option name="name" value="BenCodez Repo" />
|
||||||
<option name="url" value="https://repo.papermc.io/repository/maven-public/" />
|
<option name="url" value="https://nexus.bencodez.com/repository/maven-public/" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="central" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="oraxen" />
|
||||||
|
<option name="name" value="Oraxen Repository" />
|
||||||
|
<option name="url" value="https://repo.oraxen.com/releases" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="github" />
|
||||||
|
<option name="name" value="github" />
|
||||||
|
<option name="url" value="https://maven.pkg.github.com/xap3y/skullcreator" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="jitpack-repo" />
|
<option name="id" value="jitpack-repo" />
|
||||||
@ -67,14 +97,9 @@
|
|||||||
<option name="url" value="https://hub.spigotmc.org/nexus/content/repositories/snapshots/" />
|
<option name="url" value="https://hub.spigotmc.org/nexus/content/repositories/snapshots/" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="vault" />
|
<option name="id" value="jeff-media-public" />
|
||||||
<option name="name" value="vault" />
|
<option name="name" value="jeff-media-public" />
|
||||||
<option name="url" value="https://dev.bukkit.org/projects/vault" />
|
<option name="url" value="https://repo.jeff-media.com/public/" />
|
||||||
</remote-repository>
|
|
||||||
<remote-repository>
|
|
||||||
<option name="id" value="ess-repo" />
|
|
||||||
<option name="name" value="ess-repo" />
|
|
||||||
<option name="url" value="https://repo.ess3.net/content/groups/essentials" />
|
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="jboss.community" />
|
<option name="id" value="jboss.community" />
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.arcaniax:HeadDatabase-API:1.3.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/arcaniax/HeadDatabase-API/1.3.1/HeadDatabase-API-1.3.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/arcaniax/HeadDatabase-API/1.3.1/HeadDatabase-API-1.3.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/arcaniax/HeadDatabase-API/1.3.1/HeadDatabase-API-1.3.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.bencodez:advancedcore:3.6.4">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/bencodez/advancedcore/3.6.4/advancedcore-3.6.4.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/bencodez/advancedcore/3.6.4/advancedcore-3.6.4-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/bencodez/advancedcore/3.6.4/advancedcore-3.6.4-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.bencodez:votingplugin:6.11.3">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/bencodez/votingplugin/6.11.3/votingplugin-6.11.3.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/bencodez/votingplugin/6.11.3/votingplugin-6.11.3-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/bencodez/votingplugin/6.11.3/votingplugin-6.11.3-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.github.MilkBowl:VaultAPI:1.7">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/MilkBowl/VaultAPI/1.7/VaultAPI-1.7.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/MilkBowl/VaultAPI/1.7/VaultAPI-1.7-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/MilkBowl/VaultAPI/1.7/VaultAPI-1.7-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.github.Realizedd:TokenManager:3.2.4">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/Realizedd/TokenManager/3.2.4/TokenManager-3.2.4.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/Realizedd/TokenManager/3.2.4/TokenManager-3.2.4-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/Realizedd/TokenManager/3.2.4/TokenManager-3.2.4-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.github.Ssomar-Developement:SCore:3.9.43">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/Ssomar-Developement/SCore/3.9.43/SCore-3.9.43.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/Ssomar-Developement/SCore/3.9.43/SCore-3.9.43-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/github/Ssomar-Developement/SCore/3.9.43/SCore-3.9.43-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.google.code.findbugs:jsr305:2.0.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.google.code.gson:gson:2.10">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.10/gson-2.10.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.10/gson-2.10-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/code/gson/gson/2.10/gson-2.10-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.google.errorprone:error_prone_annotations:2.11.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.google.guava:failureaccess:1.0.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.google.guava:guava:31.1-jre">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/31.1-jre/guava-31.1-jre.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/31.1-jre/guava-31.1-jre-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/guava/31.1-jre/guava-31.1-jre-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.google.j2objc:j2objc-annotations:1.3">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.googlecode.json-simple:json-simple:1.1.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.mojang:authlib:1.5.21">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/mojang/authlib/1.5.21/authlib-1.5.21.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/mojang/authlib/1.5.21/authlib-1.5.21-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/mojang/authlib/1.5.21/authlib-1.5.21-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: com.zaxxer:HikariCP:3.4.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.1/HikariCP-3.4.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.1/HikariCP-3.4.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/zaxxer/HikariCP/3.4.1/HikariCP-3.4.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: commons-codec:commons-codec:1.9">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.9/commons-codec-1.9.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.9/commons-codec-1.9-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-codec/commons-codec/1.9/commons-codec-1.9-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: commons-io:commons-io:2.11.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.11.0/commons-io-2.11.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-io/commons-io/2.11.0/commons-io-2.11.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: commons-lang:commons-lang:2.6">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/commons-lang/commons-lang/2.6/commons-lang-2.6-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: de.jeff_media:ChestSortAPI:13.0.0-SNAPSHOT">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/de/jeff_media/ChestSortAPI/13.0.0-SNAPSHOT/ChestSortAPI-13.0.0-20220205.090010-5.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/de/jeff_media/ChestSortAPI/13.0.0-SNAPSHOT/ChestSortAPI-13.0.0-20220205.090010-5-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/de/jeff_media/ChestSortAPI/13.0.0-SNAPSHOT/ChestSortAPI-13.0.0-20220205.090010-5-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: io.leangen.geantyref:geantyref:1.3.11">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/leangen/geantyref/geantyref/1.3.11/geantyref-1.3.11.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/leangen/geantyref/geantyref/1.3.11/geantyref-1.3.11-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/leangen/geantyref/geantyref/1.3.11/geantyref-1.3.11-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: io.lumine:MythicLib-dist:1.5.1-SNAPSHOT">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/lumine/MythicLib-dist/1.5.1-SNAPSHOT/MythicLib-dist-1.5.1-20230324.231231-6.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/lumine/MythicLib-dist/1.5.1-SNAPSHOT/MythicLib-dist-1.5.1-20230324.231231-6-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/lumine/MythicLib-dist/1.5.1-SNAPSHOT/MythicLib-dist-1.5.1-20230324.231231-6-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: io.papermc:paperlib:1.0.6">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/papermc/paperlib/1.0.6/paperlib-1.0.6.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/papermc/paperlib/1.0.6/paperlib-1.0.6-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/io/papermc/paperlib/1.0.6/paperlib-1.0.6-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: junit:junit:4.10">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.10/junit-4.10-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: me.clip:placeholderapi:2.11.3">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/me/clip/placeholderapi/2.11.3/placeholderapi-2.11.3.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/me/clip/placeholderapi/2.11.3/placeholderapi-2.11.3-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/me/clip/placeholderapi/2.11.3/placeholderapi-2.11.3-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.Indyuce:MMOItems-API:6.9.2-SNAPSHOT">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/Indyuce/MMOItems-API/6.9.2-SNAPSHOT/MMOItems-API-6.9.2-20230324.230733-5.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/Indyuce/MMOItems-API/6.9.2-SNAPSHOT/MMOItems-API-6.9.2-20230324.230733-5-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/Indyuce/MMOItems-API/6.9.2-SNAPSHOT/MMOItems-API-6.9.2-20230324.230733-5-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.essentialsx:1_12Provider:2.19.7">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/1_12Provider/2.19.7/1_12Provider-2.19.7.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/1_12Provider/2.19.7/1_12Provider-2.19.7-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/1_12Provider/2.19.7/1_12Provider-2.19.7-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.essentialsx:1_8Provider:2.19.7">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/1_8Provider/2.19.7/1_8Provider-2.19.7.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/1_8Provider/2.19.7/1_8Provider-2.19.7-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/1_8Provider/2.19.7/1_8Provider-2.19.7-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.essentialsx:BaseProviders:2.19.7">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/BaseProviders/2.19.7/BaseProviders-2.19.7.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/BaseProviders/2.19.7/BaseProviders-2.19.7-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/BaseProviders/2.19.7/BaseProviders-2.19.7-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.essentialsx:EssentialsX:2.19.7">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/EssentialsX/2.19.7/EssentialsX-2.19.7.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/EssentialsX/2.19.7/EssentialsX-2.19.7-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/EssentialsX/2.19.7/EssentialsX-2.19.7-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.essentialsx:NMSReflectionProvider:2.19.7">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/NMSReflectionProvider/2.19.7/NMSReflectionProvider-2.19.7.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/NMSReflectionProvider/2.19.7/NMSReflectionProvider-2.19.7-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/NMSReflectionProvider/2.19.7/NMSReflectionProvider-2.19.7-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.essentialsx:PaperProvider:2.19.7">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/PaperProvider/2.19.7/PaperProvider-2.19.7.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/PaperProvider/2.19.7/PaperProvider-2.19.7-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/essentialsx/PaperProvider/2.19.7/PaperProvider-2.19.7-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-nbt:4.13.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-nbt/4.13.0/adventure-nbt-4.13.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-nbt/4.13.0/adventure-nbt-4.13.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-nbt/4.13.0/adventure-nbt-4.13.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-platform-api:4.3.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-api/4.3.0/adventure-platform-api-4.3.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-api/4.3.0/adventure-platform-api-4.3.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-api/4.3.0/adventure-platform-api-4.3.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-platform-bukkit:4.3.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-bukkit/4.3.0/adventure-platform-bukkit-4.3.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-bukkit/4.3.0/adventure-platform-bukkit-4.3.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-bukkit/4.3.0/adventure-platform-bukkit-4.3.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-platform-facet:4.3.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-facet/4.3.0/adventure-platform-facet-4.3.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-facet/4.3.0/adventure-platform-facet-4.3.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-facet/4.3.0/adventure-platform-facet-4.3.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-platform-viaversion:4.3.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-viaversion/4.3.0/adventure-platform-viaversion-4.3.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-viaversion/4.3.0/adventure-platform-viaversion-4.3.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-platform-viaversion/4.3.0/adventure-platform-viaversion-4.3.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-text-serializer-bungeecord:4.3.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-bungeecord/4.3.0/adventure-text-serializer-bungeecord-4.3.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-bungeecord/4.3.0/adventure-text-serializer-bungeecord-4.3.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-bungeecord/4.3.0/adventure-text-serializer-bungeecord-4.3.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-text-serializer-gson:4.13.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-gson/4.13.0/adventure-text-serializer-gson-4.13.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-gson/4.13.0/adventure-text-serializer-gson-4.13.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-gson/4.13.0/adventure-text-serializer-gson-4.13.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-text-serializer-gson-legacy-impl:4.13.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-gson-legacy-impl/4.13.0/adventure-text-serializer-gson-legacy-impl-4.13.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-gson-legacy-impl/4.13.0/adventure-text-serializer-gson-legacy-impl-4.13.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-gson-legacy-impl/4.13.0/adventure-text-serializer-gson-legacy-impl-4.13.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:adventure-text-serializer-legacy:4.13.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-legacy/4.13.0/adventure-text-serializer-legacy-4.13.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-legacy/4.13.0/adventure-text-serializer-legacy-4.13.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/adventure-text-serializer-legacy/4.13.0/adventure-text-serializer-legacy-4.13.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:examination-api:1.3.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/examination-api/1.3.0/examination-api-1.3.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/examination-api/1.3.0/examination-api-1.3.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/examination-api/1.3.0/examination-api-1.3.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.kyori:examination-string:1.3.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/examination-string/1.3.0/examination-string-1.3.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/examination-string/1.3.0/examination-string-1.3.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/kyori/examination-string/1.3.0/examination-string-1.3.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: net.md-5:bungeecord-chat:1.16-R0.4">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/md-5/bungeecord-chat/1.16-R0.4/bungeecord-chat-1.16-R0.4.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/md-5/bungeecord-chat/1.16-R0.4/bungeecord-chat-1.16-R0.4-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/net/md-5/bungeecord-chat/1.16-R0.4/bungeecord-chat-1.16-R0.4-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.apache.commons:commons-lang3:3.3.2">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.apache.logging.log4j:log4j-api:2.0-beta9">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-api/2.0-beta9/log4j-api-2.0-beta9-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.apache.logging.log4j:log4j-core:2.0-beta9">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/apache/logging/log4j/log4j-core/2.0-beta9/log4j-core-2.0-beta9-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.bstats:bstats-base:2.2.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-base/2.2.1/bstats-base-2.2.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-base/2.2.1/bstats-base-2.2.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-base/2.2.1/bstats-base-2.2.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.bstats:bstats-bukkit:3.0.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-bukkit/3.0.1/bstats-bukkit-3.0.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-bukkit/3.0.1/bstats-bukkit-3.0.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-bukkit/3.0.1/bstats-bukkit-3.0.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.bstats:bstats-velocity:2.2.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-velocity/2.2.1/bstats-velocity-2.2.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-velocity/2.2.1/bstats-velocity-2.2.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bstats/bstats-velocity/2.2.1/bstats-velocity-2.2.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.bukkit:bukkit:1.13.1-R0.1-SNAPSHOT">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bukkit/bukkit/1.13.1-R0.1-SNAPSHOT/bukkit-1.13.1-R0.1-20181022.190036-99.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bukkit/bukkit/1.13.1-R0.1-SNAPSHOT/bukkit-1.13.1-R0.1-20181022.190036-99-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/bukkit/bukkit/1.13.1-R0.1-SNAPSHOT/bukkit-1.13.1-R0.1-20181022.190036-99-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.checkerframework:checker-qual:3.14.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.14.0/checker-qual-3.14.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.14.0/checker-qual-3.14.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/3.14.0/checker-qual-3.14.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.hamcrest:hamcrest-core:1.1">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.jetbrains:annotations:19.0.0">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/19.0.0/annotations-19.0.0.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/19.0.0/annotations-19.0.0-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/19.0.0/annotations-19.0.0-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.slf4j:slf4j-api:1.7.25">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.slf4j:slf4j-simple:1.7.5">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-simple/1.7.5/slf4j-simple-1.7.5-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.spigotmc:spigot-api:1.19.3-R0.1-SNAPSHOT">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.19.3-R0.1-SNAPSHOT/spigot-api-1.19.3-R0.1-20230314.163538-56.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.19.3-R0.1-SNAPSHOT/spigot-api-1.19.3-R0.1-20230314.163538-56-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spigotmc/spigot-api/1.19.3-R0.1-SNAPSHOT/spigot-api-1.19.3-R0.1-20230314.163538-56-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.spongepowered:configurate-core:4.1.2">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spongepowered/configurate-core/4.1.2/configurate-core-4.1.2.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spongepowered/configurate-core/4.1.2/configurate-core-4.1.2-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spongepowered/configurate-core/4.1.2/configurate-core-4.1.2-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.spongepowered:configurate-yaml:4.1.2">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spongepowered/configurate-yaml/4.1.2/configurate-yaml-4.1.2.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spongepowered/configurate-yaml/4.1.2/configurate-yaml-4.1.2-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/spongepowered/configurate-yaml/4.1.2/configurate-yaml-4.1.2-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: org.yaml:snakeyaml:1.33">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.33/snakeyaml-1.33.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.33/snakeyaml-1.33-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/yaml/snakeyaml/1.33/snakeyaml-1.33-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,13 +0,0 @@
|
|||||||
<component name="libraryTable">
|
|
||||||
<library name="Maven: xyz.upperlevel.spigot.book:spigot-book-api:1.6">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/xyz/upperlevel/spigot/book/spigot-book-api/1.6/spigot-book-api-1.6.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/xyz/upperlevel/spigot/book/spigot-book-api/1.6/spigot-book-api-1.6-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/xyz/upperlevel/spigot/book/spigot-book-api/1.6/spigot-book-api-1.6-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
</component>
|
|
@ -1,18 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="EntryPointsManager">
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
<list size="1">
|
|
||||||
<item index="0" class="java.lang.String" itemvalue="org.bukkit.event.EventHandler" />
|
|
||||||
</list>
|
|
||||||
</component>
|
|
||||||
<component name="MavenProjectsManager">
|
<component name="MavenProjectsManager">
|
||||||
<option name="originalFiles">
|
<option name="originalFiles">
|
||||||
<list>
|
<list>
|
||||||
<option value="$PROJECT_DIR$/pom.xml" />
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
|
<option name="workspaceImportForciblyTurnedOn" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17 (2)" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="17" project-jdk-type="JavaSDK" />
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
|
||||||
</component>
|
|
||||||
</project>
|
</project>
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
<module version="4">
|
||||||
<component name="FacetManager">
|
<component name="FacetManager">
|
||||||
<facet type="minecraft" name="Minecraft">
|
<facet type="minecraft" name="Minecraft">
|
||||||
<configuration>
|
<configuration>
|
||||||
@ -11,82 +11,4 @@
|
|||||||
</configuration>
|
</configuration>
|
||||||
</facet>
|
</facet>
|
||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
|
||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/resource" type="java-resource" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/resource_editor" type="java-resource" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/resource_example" type="java-resource" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="spigot" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-minimessage:4.11.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-api:4.11.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-key:4.11.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:examination-api:1.3.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:examination-string:1.3.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: de.jeff_media:ChestSortAPI:13.0.0-SNAPSHOT" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.jetbrains:annotations:19.0.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.19.3-R0.1-SNAPSHOT" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:31.1-jre" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.errorprone:error_prone_annotations:2.11.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.10" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.16-R0.4" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.33" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.mojang:authlib:1.5.21" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-lang3:3.3.2" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-core:2.0-beta9" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-codec:commons-codec:1.9" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-api:2.0-beta9" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:2.0.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-io:commons-io:2.11.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.bencodez:votingplugin:6.11.3" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bstats:bstats-velocity:2.2.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bstats:bstats-base:2.2.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.bencodez:advancedcore:3.6.4" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.zaxxer:HikariCP:3.4.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-simple:1.7.5" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: xyz.upperlevel.spigot.book:spigot-book-api:1.6" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: me.clip:placeholderapi:2.11.3" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bstats:bstats-bukkit:3.0.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-bukkit:4.3.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-api:4.3.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-bungeecord:4.3.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-legacy:4.13.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-nbt:4.13.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-gson:4.13.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-gson-legacy-impl:4.13.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-facet:4.3.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-viaversion:4.3.0" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.MilkBowl:VaultAPI:1.7" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13.1-R0.1-SNAPSHOT" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.10" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.Indyuce:MMOItems-API:6.9.2-SNAPSHOT" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: io.lumine:MythicLib-dist:1.5.1-SNAPSHOT" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.Realizedd:TokenManager:3.2.4" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.arcaniax:HeadDatabase-API:1.3.1" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.Ssomar-Developement:SCore:3.9.43" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.essentialsx:EssentialsX:2.19.7" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: io.papermc:paperlib:1.0.6" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.essentialsx:BaseProviders:2.19.7" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.essentialsx:PaperProvider:2.19.7" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.essentialsx:NMSReflectionProvider:2.19.7" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.essentialsx:1_8Provider:2.19.7" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.essentialsx:1_12Provider:2.19.7" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spongepowered:configurate-yaml:4.1.2" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spongepowered:configurate-core:4.1.2" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: io.leangen.geantyref:geantyref:1.3.11" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.checkerframework:checker-qual:3.14.0" level="project" />
|
|
||||||
</component>
|
|
||||||
</module>
|
</module>
|
@ -11,8 +11,6 @@
|
|||||||
## Partner
|
## Partner
|
||||||
ReviveNode is a leading Minecraft hosting provider that offers affordable and high-quality server hosting solutions. Their focus on performance, reliability, and customer support makes them the perfect partner for CommandPanels.
|
ReviveNode is a leading Minecraft hosting provider that offers affordable and high-quality server hosting solutions. Their focus on performance, reliability, and customer support makes them the perfect partner for CommandPanels.
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
We have proudly partnered with [ReviveNode](http://billing.revivenode.com/aff.php?aff=379)!
|
We have proudly partnered with [ReviveNode](http://billing.revivenode.com/aff.php?aff=379)!
|
||||||
CommandPanels users have been offered 15% off on the first month by using the Promocode: **PANELS**
|
CommandPanels users have been offered 15% off on the first month by using the Promocode: **PANELS**
|
||||||
|
|
||||||
|
2
jitpack.yml
Normal file
2
jitpack.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
jdk:
|
||||||
|
- openjdk17
|
106
pom.xml
106
pom.xml
@ -4,7 +4,7 @@
|
|||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>groupId</groupId>
|
<groupId>me.rockyhawk.commandpanels</groupId>
|
||||||
<artifactId>CommandPanels</artifactId>
|
<artifactId>CommandPanels</artifactId>
|
||||||
<version>DEV</version>
|
<version>DEV</version>
|
||||||
|
|
||||||
@ -43,6 +43,14 @@
|
|||||||
<pattern>org.bukkit.craftbukkit.libs.org.apache.commons.io</pattern>
|
<pattern>org.bukkit.craftbukkit.libs.org.apache.commons.io</pattern>
|
||||||
<shadedPattern>org.apache.commons.io</shadedPattern>
|
<shadedPattern>org.apache.commons.io</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.bstats</pattern>
|
||||||
|
<shadedPattern>me.rockyhawk.commandpanels.bstats</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>de.tr7zw.changeme.nbtapi</pattern>
|
||||||
|
<shadedPattern>me.rockyhawk.commandpanels.nbtapi</shadedPattern>
|
||||||
|
</relocation>
|
||||||
</relocations>
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
@ -64,8 +72,12 @@
|
|||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
<repository>
|
<repository>
|
||||||
<id>spigot-repo</id>
|
<id>jitpack.io</id>
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>io.papermc</id>
|
||||||
|
<url>https://repo.papermc.io/repository/maven-public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>minecraft-repo</id>
|
<id>minecraft-repo</id>
|
||||||
@ -77,11 +89,7 @@
|
|||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jeff-media-public</id>
|
<id>jeff-media-public</id>
|
||||||
<url>https://hub.jeff-media.com/nexus/repository/jeff-media-public/</url>
|
<url>https://repo.jeff-media.com/public/</url>
|
||||||
</repository>
|
|
||||||
<repository>
|
|
||||||
<id>BenCodez Repo</id>
|
|
||||||
<url>https://nexus.bencodez.com/repository/maven-public/</url>
|
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>ess-repo</id>
|
<id>ess-repo</id>
|
||||||
@ -91,21 +99,42 @@
|
|||||||
<id>placeholderapi</id>
|
<id>placeholderapi</id>
|
||||||
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
|
||||||
<id>jitpack.io</id>
|
|
||||||
<url>https://jitpack.io</url>
|
|
||||||
</repository>
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>phoenix</id>
|
<id>phoenix</id>
|
||||||
<url>https://nexus.phoenixdevt.fr/repository/maven-public/</url>
|
<url>https://nexus.phoenixdevt.fr/repository/maven-public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>spigot-repo</id>
|
||||||
|
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>codemc-repo</id>
|
||||||
|
<url>https://repo.codemc.io/repository/maven-public/</url>
|
||||||
|
<layout>default</layout>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>opencollab-snapshot</id>
|
||||||
|
<url>https://repo.opencollab.dev/main/</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>de.tr7zw</groupId>
|
||||||
|
<artifactId>item-nbt-api</artifactId>
|
||||||
|
<version>2.14.1-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bstats</groupId>
|
||||||
|
<artifactId>bstats-bukkit</artifactId>
|
||||||
|
<version>3.0.2</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.kyori</groupId>
|
<groupId>net.kyori</groupId>
|
||||||
<artifactId>adventure-text-minimessage</artifactId>
|
<artifactId>adventure-text-minimessage</artifactId>
|
||||||
<version>4.11.0</version>
|
<version>4.17.0</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -117,60 +146,42 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.20-R0.1-SNAPSHOT</version>
|
<version>1.20.5-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.mojang</groupId>
|
<groupId>com.mojang</groupId>
|
||||||
<artifactId>authlib</artifactId>
|
<artifactId>authlib</artifactId>
|
||||||
<version>1.5.21</version>
|
<version>3.11.50</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
<version>2.11.0</version>
|
<version>2.14.0</version>
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.bencodez</groupId>
|
|
||||||
<artifactId>votingplugin</artifactId>
|
|
||||||
<version>LATEST</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>me.clip</groupId>
|
<groupId>me.clip</groupId>
|
||||||
<artifactId>placeholderapi</artifactId>
|
<artifactId>placeholderapi</artifactId>
|
||||||
<version>2.11.3</version>
|
<version>2.11.6</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.MilkBowl</groupId>
|
<groupId>com.github.MilkBowl</groupId>
|
||||||
<artifactId>VaultAPI</artifactId>
|
<artifactId>VaultAPI</artifactId>
|
||||||
<version>1.7</version>
|
<version>1.7.1</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.Indyuce</groupId>
|
<groupId>net.Indyuce</groupId>
|
||||||
<artifactId>MMOItems-API</artifactId>
|
<artifactId>MMOItems-API</artifactId>
|
||||||
<version>LATEST</version>
|
<version>6.10-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.lumine</groupId>
|
<groupId>io.lumine</groupId>
|
||||||
<artifactId>MythicLib-dist</artifactId>
|
<artifactId>MythicLib-dist</artifactId>
|
||||||
<version>1.5.1-SNAPSHOT</version>
|
<version>1.6.2-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.github.Realizedd</groupId>
|
|
||||||
<artifactId>TokenManager</artifactId>
|
|
||||||
<version>LATEST</version>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -180,15 +191,26 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.Ssomar-Developement</groupId>
|
<groupId>com.github.LoneDev6</groupId>
|
||||||
<artifactId>SCore</artifactId>
|
<artifactId>api-itemsadder</artifactId>
|
||||||
<version>LATEST</version>
|
<version>3.6.1</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.papermc</groupId>
|
||||||
|
<artifactId>paperlib</artifactId>
|
||||||
|
<version>1.0.8</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.essentialsx</groupId>
|
<groupId>net.essentialsx</groupId>
|
||||||
<artifactId>EssentialsX</artifactId>
|
<artifactId>EssentialsX</artifactId>
|
||||||
<version>2.19.7</version>
|
<version>2.20.1</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.geysermc.floodgate</groupId>
|
||||||
|
<artifactId>api</artifactId>
|
||||||
|
<version>2.2.2-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -8,7 +8,6 @@ config:
|
|||||||
refresh-panels: true
|
refresh-panels: true
|
||||||
refresh-delay: 20
|
refresh-delay: 20
|
||||||
panel-blocks: true
|
panel-blocks: true
|
||||||
ingame-editor: true
|
|
||||||
hotbar-items: true
|
hotbar-items: true
|
||||||
custom-commands: true
|
custom-commands: true
|
||||||
auto-register-commands: false
|
auto-register-commands: false
|
||||||
@ -17,7 +16,7 @@ config:
|
|||||||
stop-sound: true
|
stop-sound: true
|
||||||
disabled-world-message: true
|
disabled-world-message: true
|
||||||
panel-snooper: false
|
panel-snooper: false
|
||||||
allow-unsafe-mini-message: false
|
enable-import-command: false
|
||||||
format:
|
format:
|
||||||
tag: '&6[&bCommandPanels&6] '
|
tag: '&6[&bCommandPanels&6] '
|
||||||
perms: '&cNo permission.'
|
perms: '&cNo permission.'
|
||||||
@ -29,6 +28,7 @@ config:
|
|||||||
offline: 'Offline'
|
offline: 'Offline'
|
||||||
offlineHeadValue: 'eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmU1Mjg2YzQ3MGY2NmZmYTFhMTgzMzFjYmZmYjlhM2MyYTQ0MjRhOGM3MjU5YzQ0MzZmZDJlMzU1ODJhNTIyIn19fQ=='
|
offlineHeadValue: 'eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmU1Mjg2YzQ3MGY2NmZmYTFhMTgzMzFjYmZmYjlhM2MyYTQ0MjRhOGM3MjU5YzQ0MzZmZDJlMzU1ODJhNTIyIn19fQ=='
|
||||||
input: '&cYour Input is too long!'
|
input: '&cYour Input is too long!'
|
||||||
|
disabled: '&cThis feature is disabled in your plugin config.'
|
||||||
input:
|
input:
|
||||||
input-cancel: cancel
|
input-cancel: cancel
|
||||||
input-cancelled: '&cCancelled!'
|
input-cancelled: '&cCancelled!'
|
||||||
@ -37,7 +37,7 @@ input:
|
|||||||
- '&aEnter Input for Command'
|
- '&aEnter Input for Command'
|
||||||
- '&cType &4%cp-args% &cto Cancel the command'
|
- '&cType &4%cp-args% &cto Cancel the command'
|
||||||
hexcodes:
|
hexcodes:
|
||||||
start_tag: '#'
|
start_tag: '&#'
|
||||||
end_tag: ''
|
end_tag: ''
|
||||||
placeholders:
|
placeholders:
|
||||||
primary:
|
primary:
|
||||||
@ -48,7 +48,6 @@ placeholders:
|
|||||||
end: '}'
|
end: '}'
|
||||||
updater:
|
updater:
|
||||||
auto-update: false
|
auto-update: false
|
||||||
minor-updates-only: true
|
|
||||||
update-checks: true
|
update-checks: true
|
||||||
purchase:
|
purchase:
|
||||||
currency:
|
currency:
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
version: 3.19.0.3
|
version: 3.21.4.4
|
||||||
main: me.rockyhawk.commandpanels.CommandPanels
|
main: me.rockyhawk.commandpanels.CommandPanels
|
||||||
name: CommandPanels
|
name: CommandPanels
|
||||||
author: RockyHawk
|
author: RockyHawk
|
||||||
api-version: '1.13'
|
api-version: '1.13'
|
||||||
description: Fully Custom GUIs. Make your Server Professional.
|
description: Fully Custom GUIs. Make your Server Professional.
|
||||||
softdepend: [Essentials, PlaceholderAPI, Vault, HeadDatabase, TokenManager, VotingPlugin, MMOItems, ChestSort]
|
softdepend: [Essentials, PlaceholderAPI, Vault, HeadDatabase, TokenManager, VotingPlugin, MMOItems, ChestSort, floodgate]
|
||||||
commands:
|
commands:
|
||||||
commandpanel:
|
commandpanel:
|
||||||
description: Open a command panel.
|
description: Open a command panel.
|
||||||
@ -18,6 +18,10 @@ commands:
|
|||||||
description: Change data values for players
|
description: Change data values for players
|
||||||
usage: /commandpaneldata
|
usage: /commandpaneldata
|
||||||
aliases: [cpdata]
|
aliases: [cpdata]
|
||||||
|
commandpanelupdate:
|
||||||
|
description: Refresh/update panel/s for player
|
||||||
|
usage: /commandpanelupdate
|
||||||
|
aliases: [ cpu, cpanelu ]
|
||||||
commandpaneldebug:
|
commandpaneldebug:
|
||||||
description: Enable and Disable debug mode globally
|
description: Enable and Disable debug mode globally
|
||||||
usage: /commandpaneldebug
|
usage: /commandpaneldebug
|
||||||
@ -73,6 +77,8 @@ permissions:
|
|||||||
default: op
|
default: op
|
||||||
commandpanel.data:
|
commandpanel.data:
|
||||||
default: op
|
default: op
|
||||||
|
commandpanel.refresh:
|
||||||
|
default: op
|
||||||
commandpanel.edit:
|
commandpanel.edit:
|
||||||
default: op
|
default: op
|
||||||
commandpanel.list:
|
commandpanel.list:
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
panels:
|
|
||||||
BottomSettings:
|
|
||||||
perm: default
|
|
||||||
rows: 3
|
|
||||||
title: '&8Bottom Settings'
|
|
||||||
panelType:
|
|
||||||
- static
|
|
||||||
pre-load-commands:
|
|
||||||
- event= CommandPanels_EditorOpened
|
|
||||||
commands-on-close:
|
|
||||||
- event= CommandPanels_EditorClosed
|
|
||||||
item:
|
|
||||||
'0':
|
|
||||||
material: BARRIER
|
|
||||||
stack: 1
|
|
||||||
name: '&cExit'
|
|
||||||
commands:
|
|
||||||
- event= CommandPanels_EditorClosed
|
|
||||||
- cpc
|
|
||||||
'4':
|
|
||||||
material: CHEST
|
|
||||||
stack: 1
|
|
||||||
name: '&fPanel Settings'
|
|
||||||
commands:
|
|
||||||
- "event= CommandPanels_OpenPanelSettings"
|
|
||||||
'6':
|
|
||||||
material: COOKIE
|
|
||||||
stack: 1
|
|
||||||
name: '&fItem Settings'
|
|
||||||
commands:
|
|
||||||
- "event= CommandPanels_OpenItemSettings"
|
|
||||||
#'8':
|
|
||||||
# material: COMPASS
|
|
||||||
# stack: 1
|
|
||||||
# name: '&fItem Sections'
|
|
||||||
# lore:
|
|
||||||
# - "&cIN PROGRESS"
|
|
||||||
# commands:
|
|
||||||
# - "event= CommandPanels_OpenItemSections"
|
|
@ -1,227 +0,0 @@
|
|||||||
panels:
|
|
||||||
ItemEditMenu:
|
|
||||||
perm: default
|
|
||||||
rows: 3
|
|
||||||
title: '&8Item Settings'
|
|
||||||
panelType:
|
|
||||||
- static
|
|
||||||
custom-messages:
|
|
||||||
input-message:
|
|
||||||
- "&e[&bCommand Panels Editor&e]"
|
|
||||||
- "&fEnter your value in the chat bar below."
|
|
||||||
item:
|
|
||||||
'4':
|
|
||||||
material: FLINT_AND_STEEL
|
|
||||||
name: '&fPlayer Input'
|
|
||||||
lore:
|
|
||||||
- "&7Add a player input to your item."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [command]"
|
|
||||||
- "&7- edit [line number] [command]"
|
|
||||||
- "&7- insert [line number] [command]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_player-input
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_iteminput %cp-player-input%"
|
|
||||||
'5':
|
|
||||||
material: NAME_TAG
|
|
||||||
name: '&fItem Name'
|
|
||||||
lore:
|
|
||||||
- "&7Choose a name for your item."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_name
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemname %cp-player-input%"
|
|
||||||
'6':
|
|
||||||
material: ITEM_FRAME
|
|
||||||
name: '&fItem Stack'
|
|
||||||
lore:
|
|
||||||
- "&7Choose a number from 1 to 64."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_stack
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemstack %cp-player-input%"
|
|
||||||
'7':
|
|
||||||
material: ENCHANTED_BOOK
|
|
||||||
name: '&fEnchantments'
|
|
||||||
lore:
|
|
||||||
- "&7Add enchantments to your item."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [type] [level]"
|
|
||||||
- "&7- edit [line number] [type] [level]"
|
|
||||||
- "&7- insert [line number] [type] [level]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
- ""
|
|
||||||
- "&7For example: add KNOCKBACK 3"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_enchanted
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemenchantment %cp-player-input%"
|
|
||||||
'8':
|
|
||||||
material: PAPER
|
|
||||||
name: '&fItem NBT Data'
|
|
||||||
lore:
|
|
||||||
- "&7You can create custom NBT for your item."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [name] [value]"
|
|
||||||
- "&7- remove [name]"
|
|
||||||
- ""
|
|
||||||
- "&7For example: add example_data this is the value"
|
|
||||||
commands:
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemnbt %cp-player-input%"
|
|
||||||
'18':
|
|
||||||
material: LAVA_BUCKET
|
|
||||||
name: '&cDelete Item'
|
|
||||||
lore:
|
|
||||||
- "&7Enter 'confirm' to delete the item."
|
|
||||||
commands:
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemdelete %cp-player-input%"
|
|
||||||
'9':
|
|
||||||
material: REDSTONE_BLOCK
|
|
||||||
name: '&fEditing Item: %cp-item-slot%'
|
|
||||||
lore:
|
|
||||||
- "&7Click here to change the"
|
|
||||||
- "&7slot number you are editing."
|
|
||||||
commands:
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemslot %cp-player-input%"
|
|
||||||
'0':
|
|
||||||
material: ENDER_CHEST
|
|
||||||
name: '&fMove Item'
|
|
||||||
lore:
|
|
||||||
- "&7Enter a slot to move this item to."
|
|
||||||
commands:
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemmove %cp-player-input%"
|
|
||||||
'1':
|
|
||||||
material: STONE
|
|
||||||
name: '&fItem Material'
|
|
||||||
lore:
|
|
||||||
- "&7Choose a material for your item."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_material
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemmaterial %cp-player-input%"
|
|
||||||
'13':
|
|
||||||
material: COBBLESTONE
|
|
||||||
name: '&fItem ID'
|
|
||||||
lore:
|
|
||||||
- "&7Material ID for Minecraft 1.12 and below."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_id
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemid %cp-player-input%"
|
|
||||||
'14':
|
|
||||||
material: PAINTING
|
|
||||||
name: '&fCustom Model Data'
|
|
||||||
lore:
|
|
||||||
- "&7Enter Custom Model Data for your item."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_customdata
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemmodeldata %cp-player-input%"
|
|
||||||
'15':
|
|
||||||
material: ANVIL
|
|
||||||
name: '&fItem Durability'
|
|
||||||
lore:
|
|
||||||
- "&7Enter a number if you want the item to be damaged."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_damage
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemdurability %cp-player-input%"
|
|
||||||
'16':
|
|
||||||
material: LEATHER_HELMET
|
|
||||||
name: '&fArmour Colour'
|
|
||||||
lore:
|
|
||||||
- "&7Enter a value for your armour to be coloured."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_leatherarmor
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemarmour %cp-player-input%"
|
|
||||||
'17':
|
|
||||||
material: POTION
|
|
||||||
name: '&fPotion Effect'
|
|
||||||
lore:
|
|
||||||
- "&7Choose a potion effect to be applied."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_potion
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itempotion %cp-player-input%"
|
|
||||||
'23':
|
|
||||||
material: FEATHER
|
|
||||||
name: '&fItem Lore'
|
|
||||||
lore:
|
|
||||||
- "&7Add a lore to your item."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [text]"
|
|
||||||
- "&7- edit [line number] [text]"
|
|
||||||
- "&7- insert [line number] [text]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_lore
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemlore %cp-player-input%"
|
|
||||||
'24':
|
|
||||||
material: MAGMA_CREAM
|
|
||||||
name: '&fItem Commands'
|
|
||||||
lore:
|
|
||||||
- "&7Add commands to your item."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [command]"
|
|
||||||
- "&7- edit [line number] [command]"
|
|
||||||
- "&7- insert [line number] [command]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_commands
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemcommands %cp-player-input%"
|
|
||||||
'25':
|
|
||||||
material: MELON_SEEDS
|
|
||||||
name: '&fItem Duplicates'
|
|
||||||
lore:
|
|
||||||
- "&7Enter slots to duplicate this item to."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_duplicate
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemduplicate %cp-player-input%"
|
|
||||||
'26':
|
|
||||||
material: SLIME_BALL
|
|
||||||
name: '&fItem Types'
|
|
||||||
lore:
|
|
||||||
- "&7Add item types to your item."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [text]"
|
|
||||||
- "&7- edit [line number] [text]"
|
|
||||||
- "&7- insert [line number] [text]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorItem_itemType
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_itemtypes %cp-player-input%"
|
|
@ -1,271 +0,0 @@
|
|||||||
panels:
|
|
||||||
PanelEditMenu:
|
|
||||||
perm: default
|
|
||||||
rows: 3
|
|
||||||
title: '&8Panel Settings'
|
|
||||||
panelType:
|
|
||||||
- static
|
|
||||||
custom-messages:
|
|
||||||
input-message:
|
|
||||||
- "&e[&bCommand Panels Editor&e]"
|
|
||||||
- "&fEnter your value in the chat bar below."
|
|
||||||
item:
|
|
||||||
'3':
|
|
||||||
material: PUMPKIN_SEEDS
|
|
||||||
name: '&fEmpty Slot Item ID'
|
|
||||||
lore:
|
|
||||||
- "&7Material ID for Minecraft 1.12 and below."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_emptyID
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelemptyid %cp-player-input%"
|
|
||||||
'4':
|
|
||||||
material: MELON_SEEDS
|
|
||||||
name: '&fEmpty Slot Item'
|
|
||||||
lore:
|
|
||||||
- "&7This item will replace all"
|
|
||||||
- "&7of the empty slots."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_empty
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelempty %cp-player-input%"
|
|
||||||
'5':
|
|
||||||
material: COBBLESTONE
|
|
||||||
name: '&fEnabled Worlds'
|
|
||||||
lore:
|
|
||||||
- "&7Add Enabled Worlds."
|
|
||||||
- "&7The panel will only open in them."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [world]"
|
|
||||||
- "&7- edit [line number] [world]"
|
|
||||||
- "&7- insert [line number] [world]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_enabled-worlds
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelenabledworlds %cp-player-input%"
|
|
||||||
'6':
|
|
||||||
material: REDSTONE_BLOCK
|
|
||||||
name: '&fDisabled Worlds'
|
|
||||||
lore:
|
|
||||||
- "&7Add Disabled Worlds."
|
|
||||||
- "&7The panel will not open in them."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [world]"
|
|
||||||
- "&7- edit [line number] [world]"
|
|
||||||
- "&7- insert [line number] [world]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_disabled-worlds
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_paneldisabledworlds %cp-player-input%"
|
|
||||||
'7':
|
|
||||||
material: BEACON
|
|
||||||
name: '&fPanel Permission'
|
|
||||||
lore:
|
|
||||||
- "&7Change the permission for your Panel."
|
|
||||||
- "&7Use 'default' to disable this feature."
|
|
||||||
- "&7The permission will be commandpanel.panel.[text]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_perm
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelpermission %cp-player-input%"
|
|
||||||
'8':
|
|
||||||
material: NOTE_BLOCK
|
|
||||||
name: '&fPanel Open Sound'
|
|
||||||
lore:
|
|
||||||
- "&7Choose a sound when your panel opens."
|
|
||||||
- "&7Make sure this is all uppercase."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_sound-on-open
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelopensound %cp-player-input%"
|
|
||||||
'0':
|
|
||||||
material: LAVA_BUCKET
|
|
||||||
name: '&cDelete Panel'
|
|
||||||
lore:
|
|
||||||
- "&7Enter 'confirm' to delete the panel."
|
|
||||||
commands:
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_paneldelete %cp-player-input%"
|
|
||||||
'9':
|
|
||||||
material: NAME_TAG
|
|
||||||
name: '&fPanel Name: %cp-panel-name%'
|
|
||||||
lore:
|
|
||||||
- "&7Choose the name for your panel."
|
|
||||||
commands:
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelname %cp-player-input%"
|
|
||||||
'21':
|
|
||||||
material: FEATHER
|
|
||||||
name: '&fNo Permission Custom Message'
|
|
||||||
lore:
|
|
||||||
- "&7Add a No Permission custom message."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_custom-messages.perm
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelpermissionmessage %cp-player-input%"
|
|
||||||
'12':
|
|
||||||
material: FEATHER
|
|
||||||
name: '&fMaximum Input Custom Message'
|
|
||||||
lore:
|
|
||||||
- "&7Add a Player Input Maximum custom message."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_custom-messages.input
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelmaxinputmessage %cp-player-input%"
|
|
||||||
'13':
|
|
||||||
material: FEATHER
|
|
||||||
name: '&fPlayer Input Custom Message'
|
|
||||||
lore:
|
|
||||||
- "&7Add a Player Input custom message."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [text]"
|
|
||||||
- "&7- edit [line number] [text]"
|
|
||||||
- "&7- insert [line number] [text]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_custom-messages.player-input
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelplayerinputmessage %cp-player-input%"
|
|
||||||
'14':
|
|
||||||
material: BOOK
|
|
||||||
name: '&fPanel Title'
|
|
||||||
lore:
|
|
||||||
- "&7Change your panel title."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_title
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_paneletitle %cp-player-input%"
|
|
||||||
'15':
|
|
||||||
material: LADDER
|
|
||||||
name: '&fPanel Rows'
|
|
||||||
lore:
|
|
||||||
- "&7How many rows the panel should be 1-6."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_rows
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelrows %cp-player-input%"
|
|
||||||
'16':
|
|
||||||
material: LEVER
|
|
||||||
name: '&fPanel Refresh Delay'
|
|
||||||
lore:
|
|
||||||
- "&7Refresh delay measured in ticks."
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_refresh-delay
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelrefreshdelay %cp-player-input%"
|
|
||||||
'17':
|
|
||||||
material: SLIME_BALL
|
|
||||||
name: '&fPanel Types'
|
|
||||||
lore:
|
|
||||||
- "&7Add Panel Types."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [text]"
|
|
||||||
- "&7- edit [line number] [text]"
|
|
||||||
- "&7- insert [line number] [text]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_panelType
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_paneltype %cp-player-input%"
|
|
||||||
'22':
|
|
||||||
material: MAGMA_CREAM
|
|
||||||
name: '&fPanel Commands to Open Panel'
|
|
||||||
lore:
|
|
||||||
- "&7Commands that can be used to"
|
|
||||||
- "&7open this panel."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [command]"
|
|
||||||
- "&7- edit [line number] [command]"
|
|
||||||
- "&7- insert [line number] [command]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_commands
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelcommands %cp-player-input%"
|
|
||||||
'23':
|
|
||||||
material: MAGMA_CREAM
|
|
||||||
name: '&fCommands Before Panel Open'
|
|
||||||
lore:
|
|
||||||
- "&7Commands before the panel has opened."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [command]"
|
|
||||||
- "&7- edit [line number] [command]"
|
|
||||||
- "&7- insert [line number] [command]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_pre-load-commands
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelprecommands %cp-player-input%"
|
|
||||||
'24':
|
|
||||||
material: MAGMA_CREAM
|
|
||||||
name: '&fCommands On Panel Open'
|
|
||||||
lore:
|
|
||||||
- "&7Commands when the panel has opened."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [command]"
|
|
||||||
- "&7- edit [line number] [command]"
|
|
||||||
- "&7- insert [line number] [command]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_commands-on-open
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelopencommands %cp-player-input%"
|
|
||||||
'25':
|
|
||||||
material: MAGMA_CREAM
|
|
||||||
name: '&fCommands On Panel Close'
|
|
||||||
lore:
|
|
||||||
- "&7Commands when the panel is closing."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [command]"
|
|
||||||
- "&7- edit [line number] [command]"
|
|
||||||
- "&7- insert [line number] [command]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_commands-on-close
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_panelclosecommands %cp-player-input%"
|
|
||||||
'26':
|
|
||||||
material: MAGMA_CREAM
|
|
||||||
name: '&fOutside Panel Commands'
|
|
||||||
lore:
|
|
||||||
- "&7Add commands when clicking outside the panel."
|
|
||||||
- ""
|
|
||||||
- "&7Options"
|
|
||||||
- "&7- add [command]"
|
|
||||||
- "&7- edit [line number] [command]"
|
|
||||||
- "&7- insert [line number] [command]"
|
|
||||||
- "&7- remove [line number]"
|
|
||||||
commands:
|
|
||||||
- event= CPEditorPanel_outside-commands
|
|
||||||
- cpc
|
|
||||||
player-input:
|
|
||||||
- "event= CPEditor_paneloutsidecommands %cp-player-input%"
|
|
@ -1,6 +1,6 @@
|
|||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
# | CommandPanels Legacy Example File
|
# | CommandPanels Legacy Example File
|
||||||
# | By RockyHawk v2.3
|
# | Official Panel v2.4
|
||||||
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
panels:
|
panels:
|
||||||
@ -107,7 +107,8 @@ panels:
|
|||||||
'32':
|
'32':
|
||||||
material: COMPASS
|
material: COMPASS
|
||||||
stack: 12
|
stack: 12
|
||||||
enchanted: true
|
enchanted:
|
||||||
|
- true
|
||||||
name: '&cClick Me'
|
name: '&cClick Me'
|
||||||
lore:
|
lore:
|
||||||
- '&fI will teleport you home!'
|
- '&fI will teleport you home!'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
# | CommandPanels Example File
|
# | CommandPanels Example File
|
||||||
# | By RockyHawk v3.1
|
# | Official Panel v3.1
|
||||||
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
panels:
|
panels:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
# | CommandPanels Example File
|
# | CommandPanels Example File
|
||||||
# | By RockyHawk v3.1
|
# | Official Panel v3.2
|
||||||
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
panels:
|
panels:
|
||||||
@ -20,102 +20,102 @@ panels:
|
|||||||
name: ''
|
name: ''
|
||||||
animate0:
|
animate0:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'1':
|
'1':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate1:
|
animate1:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'2':
|
'2':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate2:
|
animate2:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'3':
|
'3':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate3:
|
animate3:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'5':
|
'5':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate9:
|
animate9:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'6':
|
'6':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate10:
|
animate10:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'7':
|
'7':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate11:
|
animate11:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'12':
|
'12':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate4:
|
animate4:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'14':
|
'14':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate8:
|
animate8:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'16':
|
'16':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate12:
|
animate12:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'21':
|
'21':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate5:
|
animate5:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'22':
|
'22':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate6:
|
animate6:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'23':
|
'23':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate7:
|
animate7:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'25':
|
'25':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate13:
|
animate13:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
'26':
|
'26':
|
||||||
material: AIR
|
material: AIR
|
||||||
stack: 1
|
stack: 1
|
||||||
name: ''
|
name: ''
|
||||||
animate14:
|
animate14:
|
||||||
material: PUFFERFISH
|
material: PUFFERFISH
|
||||||
name: '&eRhys the Pufferfish'
|
name: '&ePopper the Pufferfish'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
# | CommandPanels Example File
|
# | CommandPanels Example File
|
||||||
# | By RockyHawk v3.1, Fixed by Minecraft ICT (ajh123)
|
# | Official Panel v3.2
|
||||||
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
panels:
|
panels:
|
||||||
@ -177,5 +177,4 @@ panels:
|
|||||||
- ''
|
- ''
|
||||||
- '&8Player Browser made by:'
|
- '&8Player Browser made by:'
|
||||||
- '&8TinyTank800'
|
- '&8TinyTank800'
|
||||||
- '&8MinecraftICT (ajh123)'
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
# | CommandPanels Example File
|
# | CommandPanels Example File
|
||||||
# | By RockyHawk v3.1
|
# | Official Panel v3.2
|
||||||
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
panels:
|
panels:
|
||||||
@ -73,18 +73,18 @@ panels:
|
|||||||
- placeholder= [item:APPLE]
|
- placeholder= [item:APPLE]
|
||||||
- refresh
|
- refresh
|
||||||
'21':
|
'21':
|
||||||
material: POTION
|
material: GOLDEN_APPLE
|
||||||
name: '&fClick to heal the player'
|
name: '&fClick to heal the player'
|
||||||
potion: INSTANT_HEAL
|
|
||||||
lore:
|
lore:
|
||||||
- '&7Uses the /heal command so that'
|
- '&7Uses the /heal command if'
|
||||||
- '&7the player needs permission'
|
- '&7the player has permission'
|
||||||
commands:
|
commands:
|
||||||
- heal
|
- heal
|
||||||
'24':
|
'24':
|
||||||
material: BOW
|
material: BOW
|
||||||
name: '&fThis bow is enchanted'
|
name: '&fThis bow is enchanted'
|
||||||
enchanted: true
|
enchanted:
|
||||||
|
- true
|
||||||
'26':
|
'26':
|
||||||
material: LEATHER_CHESTPLATE
|
material: LEATHER_CHESTPLATE
|
||||||
name: '&eYellow &fArmor'
|
name: '&eYellow &fArmor'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
# | CommandPanels Template File
|
# | CommandPanels Template File
|
||||||
# | By RockyHawk v1.1
|
# | Official Panel v1.1
|
||||||
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
# | https://www.spigotmc.org/resources/command-panels-custom-guis.67788/
|
||||||
# |------------------------------------------------------------------------
|
# |------------------------------------------------------------------------
|
||||||
panels:
|
panels:
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package me.rockyhawk.commandpanels;
|
package me.rockyhawk.commandpanels;
|
||||||
|
|
||||||
import com.bencodez.votingplugin.VotingPluginHooks;
|
import com.google.common.collect.ImmutableMultimap;
|
||||||
import io.lumine.mythic.lib.api.item.NBTItem;
|
import io.lumine.mythic.lib.api.item.NBTItem;
|
||||||
import me.rockyhawk.commandpanels.api.CommandPanelsAPI;
|
import me.rockyhawk.commandpanels.api.CommandPanelsAPI;
|
||||||
import me.rockyhawk.commandpanels.api.Panel;
|
import me.rockyhawk.commandpanels.api.Panel;
|
||||||
import me.rockyhawk.commandpanels.classresources.ExecuteOpenVoids;
|
import me.rockyhawk.commandpanels.classresources.ExecuteOpenVoids;
|
||||||
import me.rockyhawk.commandpanels.classresources.GetCustomHeads;
|
import me.rockyhawk.commandpanels.classresources.MiniMessageUtils;
|
||||||
|
import me.rockyhawk.commandpanels.classresources.customheads.GetCustomHeads;
|
||||||
import me.rockyhawk.commandpanels.classresources.HasSections;
|
import me.rockyhawk.commandpanels.classresources.HasSections;
|
||||||
import me.rockyhawk.commandpanels.classresources.ItemCreation;
|
import me.rockyhawk.commandpanels.classresources.ItemCreation;
|
||||||
import me.rockyhawk.commandpanels.classresources.placeholders.expansion.CpPlaceholderExpansion;
|
import me.rockyhawk.commandpanels.classresources.placeholders.expansion.CpPlaceholderExpansion;
|
||||||
@ -16,15 +17,19 @@ import me.rockyhawk.commandpanels.classresources.placeholders.CreateText;
|
|||||||
import me.rockyhawk.commandpanels.classresources.placeholders.HexColours;
|
import me.rockyhawk.commandpanels.classresources.placeholders.HexColours;
|
||||||
import me.rockyhawk.commandpanels.classresources.placeholders.Placeholders;
|
import me.rockyhawk.commandpanels.classresources.placeholders.Placeholders;
|
||||||
import me.rockyhawk.commandpanels.commands.*;
|
import me.rockyhawk.commandpanels.commands.*;
|
||||||
import me.rockyhawk.commandpanels.commandtags.CommandTags;
|
import me.rockyhawk.commandpanels.commandtags.CommandRunner;
|
||||||
import me.rockyhawk.commandpanels.completetabs.CpTabComplete;
|
import me.rockyhawk.commandpanels.completetabs.CpTabComplete;
|
||||||
|
import me.rockyhawk.commandpanels.completetabs.UpdateTabComplete;
|
||||||
import me.rockyhawk.commandpanels.customcommands.Commandpanelcustom;
|
import me.rockyhawk.commandpanels.customcommands.Commandpanelcustom;
|
||||||
import me.rockyhawk.commandpanels.datamanager.DebugManager;
|
import me.rockyhawk.commandpanels.datamanager.DebugManager;
|
||||||
import me.rockyhawk.commandpanels.datamanager.PanelDataLoader;
|
import me.rockyhawk.commandpanels.datamanager.PanelDataLoader;
|
||||||
|
import me.rockyhawk.commandpanels.datamanager.PanelDataPlayerManager;
|
||||||
import me.rockyhawk.commandpanels.editor.*;
|
import me.rockyhawk.commandpanels.editor.*;
|
||||||
|
import me.rockyhawk.commandpanels.floodgatecp.OpenFloodgateGUI;
|
||||||
import me.rockyhawk.commandpanels.generatepanels.Commandpanelsgenerate;
|
import me.rockyhawk.commandpanels.generatepanels.Commandpanelsgenerate;
|
||||||
import me.rockyhawk.commandpanels.generatepanels.GenUtils;
|
import me.rockyhawk.commandpanels.generatepanels.GenUtils;
|
||||||
import me.rockyhawk.commandpanels.generatepanels.TabCompleteGenerate;
|
import me.rockyhawk.commandpanels.generatepanels.TabCompleteGenerate;
|
||||||
|
import me.rockyhawk.commandpanels.interactives.OutsideClickEvent;
|
||||||
import me.rockyhawk.commandpanels.interactives.input.UserInputUtils;
|
import me.rockyhawk.commandpanels.interactives.input.UserInputUtils;
|
||||||
import me.rockyhawk.commandpanels.interactives.Commandpanelrefresher;
|
import me.rockyhawk.commandpanels.interactives.Commandpanelrefresher;
|
||||||
import me.rockyhawk.commandpanels.interactives.OpenOnJoin;
|
import me.rockyhawk.commandpanels.interactives.OpenOnJoin;
|
||||||
@ -32,6 +37,8 @@ import me.rockyhawk.commandpanels.ioclasses.nbt.NBTManager;
|
|||||||
import me.rockyhawk.commandpanels.ioclasses.legacy.LegacyVersion;
|
import me.rockyhawk.commandpanels.ioclasses.legacy.LegacyVersion;
|
||||||
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
||||||
import me.rockyhawk.commandpanels.ioclasses.legacy.PlayerHeads;
|
import me.rockyhawk.commandpanels.ioclasses.legacy.PlayerHeads;
|
||||||
|
import me.rockyhawk.commandpanels.ioclasses.potions.ClassicPotionData;
|
||||||
|
import me.rockyhawk.commandpanels.ioclasses.potions.LegacyPotionData;
|
||||||
import me.rockyhawk.commandpanels.openpanelsmanager.*;
|
import me.rockyhawk.commandpanels.openpanelsmanager.*;
|
||||||
import me.rockyhawk.commandpanels.openwithitem.HotbarItemLoader;
|
import me.rockyhawk.commandpanels.openwithitem.HotbarItemLoader;
|
||||||
import me.rockyhawk.commandpanels.openwithitem.SwapItemEvent;
|
import me.rockyhawk.commandpanels.openwithitem.SwapItemEvent;
|
||||||
@ -42,10 +49,14 @@ import me.rockyhawk.commandpanels.panelblocks.Commandpanelblocks;
|
|||||||
import me.rockyhawk.commandpanels.panelblocks.PanelBlockOnClick;
|
import me.rockyhawk.commandpanels.panelblocks.PanelBlockOnClick;
|
||||||
import me.rockyhawk.commandpanels.playerinventoryhandler.InventorySaver;
|
import me.rockyhawk.commandpanels.playerinventoryhandler.InventorySaver;
|
||||||
import me.rockyhawk.commandpanels.playerinventoryhandler.ItemStackSerializer;
|
import me.rockyhawk.commandpanels.playerinventoryhandler.ItemStackSerializer;
|
||||||
|
import me.rockyhawk.commandpanels.playerinventoryhandler.pickupevent.EntityPickupEvent;
|
||||||
|
import me.rockyhawk.commandpanels.playerinventoryhandler.pickupevent.legacyPlayerEvent;
|
||||||
import me.rockyhawk.commandpanels.updater.Updater;
|
import me.rockyhawk.commandpanels.updater.Updater;
|
||||||
import net.milkbowl.vault.economy.Economy;
|
import net.milkbowl.vault.economy.Economy;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.io.input.CharSequenceReader;
|
import org.apache.commons.io.input.CharSequenceReader;
|
||||||
|
import org.bstats.bukkit.Metrics;
|
||||||
|
import org.bstats.charts.SingleLineChart;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Color;
|
import org.bukkit.Color;
|
||||||
@ -64,10 +75,8 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
|
|
||||||
public class CommandPanels extends JavaPlugin{
|
public class CommandPanels extends JavaPlugin{
|
||||||
public VotingPluginHooks votingPlugin;
|
|
||||||
public YamlConfiguration config;
|
public YamlConfiguration config;
|
||||||
public Economy econ = null;
|
public Economy econ = null;
|
||||||
public boolean openWithItem = false; //this will be true if there is a panel with open-with-item
|
public boolean openWithItem = false; //this will be true if there is a panel with open-with-item
|
||||||
@ -81,19 +90,25 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
//get alternate classes
|
//get alternate classes
|
||||||
public PanelDownloader downloader = new PanelDownloader(this);
|
public PanelDownloader downloader = new PanelDownloader(this);
|
||||||
|
|
||||||
public CommandTags commandTags = new CommandTags(this);
|
public CommandRunner commandRunner = new CommandRunner(this);
|
||||||
public PanelDataLoader panelData = new PanelDataLoader(this);
|
public PanelDataLoader panelData = new PanelDataLoader(this);
|
||||||
|
public PanelDataPlayerManager panelDataPlayers = new PanelDataPlayerManager(this);
|
||||||
|
|
||||||
public Placeholders placeholders = new Placeholders(this);
|
public Placeholders placeholders = new Placeholders(this);
|
||||||
public DebugManager debug = new DebugManager(this);
|
public DebugManager debug = new DebugManager(this);
|
||||||
public CreateText tex = new CreateText(this);
|
public CreateText tex = new CreateText(this);
|
||||||
public HexColours hex = new HexColours(this);
|
public HexColours hex = new HexColours(this);
|
||||||
|
|
||||||
|
public MiniMessageUtils miniMessage = null;
|
||||||
|
|
||||||
public ExecuteOpenVoids openVoids = new ExecuteOpenVoids(this);
|
public ExecuteOpenVoids openVoids = new ExecuteOpenVoids(this);
|
||||||
public ItemCreation itemCreate = new ItemCreation(this);
|
public ItemCreation itemCreate = new ItemCreation(this);
|
||||||
public HasSections has = new HasSections(this);
|
public HasSections has = new HasSections(this);
|
||||||
public GetCustomHeads customHeads = new GetCustomHeads(this);
|
public GetCustomHeads customHeads = new GetCustomHeads(this);
|
||||||
public Updater updater = new Updater(this);
|
public Updater updater = new Updater(this);
|
||||||
public PlayerHeads getHeads = new PlayerHeads(this);
|
public PlayerHeads getHeads = new PlayerHeads(this);
|
||||||
|
public ClassicPotionData classicPotion = new ClassicPotionData(this);
|
||||||
|
public LegacyPotionData legacyPotion = new LegacyPotionData(this);
|
||||||
public LegacyVersion legacy = new LegacyVersion(this);
|
public LegacyVersion legacy = new LegacyVersion(this);
|
||||||
|
|
||||||
public OpenPanelsLoader openPanels = new OpenPanelsLoader(this);
|
public OpenPanelsLoader openPanels = new OpenPanelsLoader(this);
|
||||||
@ -112,6 +127,9 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
Bukkit.getLogger().info("[CommandPanels] RockyHawk's CommandPanels v" + this.getDescription().getVersion() + " Plugin Loading...");
|
Bukkit.getLogger().info("[CommandPanels] RockyHawk's CommandPanels v" + this.getDescription().getVersion() + " Plugin Loading...");
|
||||||
|
|
||||||
|
//Initialise classes that are not used externally
|
||||||
|
new OpenFloodgateGUI(this);
|
||||||
|
|
||||||
//register config files
|
//register config files
|
||||||
this.blockConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "blocks.yml"));
|
this.blockConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "blocks.yml"));
|
||||||
panelData.dataConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "data.yml"));
|
panelData.dataConfig = YamlConfiguration.loadConfiguration(new File(getDataFolder() + File.separator + "data.yml"));
|
||||||
@ -147,9 +165,10 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//setup class files
|
//setup class files
|
||||||
|
new Metrics(this, 5097);
|
||||||
this.setupEconomy();
|
this.setupEconomy();
|
||||||
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
||||||
new Metrics(this);
|
this.getServer().getMessenger().registerOutgoingPluginChannel(this, "my:psb");
|
||||||
Objects.requireNonNull(this.getCommand("commandpanel")).setExecutor(new Commandpanel(this));
|
Objects.requireNonNull(this.getCommand("commandpanel")).setExecutor(new Commandpanel(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanel")).setTabCompleter(new CpTabComplete(this));
|
Objects.requireNonNull(this.getCommand("commandpanel")).setTabCompleter(new CpTabComplete(this));
|
||||||
|
|
||||||
@ -159,6 +178,9 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
Objects.requireNonNull(this.getCommand("commandpaneldata")).setTabCompleter(new DataTabComplete(this));
|
Objects.requireNonNull(this.getCommand("commandpaneldata")).setTabCompleter(new DataTabComplete(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpaneldata")).setExecutor(new Commandpanelsdata(this));
|
Objects.requireNonNull(this.getCommand("commandpaneldata")).setExecutor(new Commandpanelsdata(this));
|
||||||
|
|
||||||
|
Objects.requireNonNull(this.getCommand("commandpanelupdate")).setTabCompleter(new UpdateTabComplete(this));
|
||||||
|
Objects.requireNonNull(this.getCommand("commandpanelupdate")).setExecutor(new Commandpanelsupdate(this));
|
||||||
|
|
||||||
Objects.requireNonNull(this.getCommand("commandpanelimport")).setExecutor(new CommandPanelImport(this));
|
Objects.requireNonNull(this.getCommand("commandpanelimport")).setExecutor(new CommandPanelImport(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanelimport")).setTabCompleter(new ImportTabComplete(this));
|
Objects.requireNonNull(this.getCommand("commandpanelimport")).setTabCompleter(new ImportTabComplete(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpaneledit")).setExecutor(new CommandPanelsEditor(this));
|
Objects.requireNonNull(this.getCommand("commandpaneledit")).setExecutor(new CommandPanelsEditor(this));
|
||||||
@ -169,12 +191,36 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
Objects.requireNonNull(this.getCommand("commandpanelversion")).setExecutor(new Commandpanelversion(this));
|
Objects.requireNonNull(this.getCommand("commandpanelversion")).setExecutor(new Commandpanelversion(this));
|
||||||
Objects.requireNonNull(this.getCommand("commandpanellist")).setExecutor(new Commandpanelslist(this));
|
Objects.requireNonNull(this.getCommand("commandpanellist")).setExecutor(new Commandpanelslist(this));
|
||||||
this.getServer().getPluginManager().registerEvents(new Utils(this), this);
|
this.getServer().getPluginManager().registerEvents(new Utils(this), this);
|
||||||
|
|
||||||
this.getServer().getPluginManager().registerEvents(inventorySaver, this);
|
this.getServer().getPluginManager().registerEvents(inventorySaver, this);
|
||||||
|
if(this.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_12)){
|
||||||
|
this.getServer().getPluginManager().registerEvents(new EntityPickupEvent(this), this);
|
||||||
|
}else{
|
||||||
|
this.getServer().getPluginManager().registerEvents(new legacyPlayerEvent(this), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Check all the minimessage classes exist before loading
|
||||||
|
Class.forName("net.kyori.adventure.text.Component");
|
||||||
|
Class.forName("net.kyori.adventure.text.format.TextDecoration");
|
||||||
|
Class.forName("net.kyori.adventure.text.minimessage.MiniMessage");
|
||||||
|
Class.forName("net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer");
|
||||||
|
miniMessage = new MiniMessageUtils(this);
|
||||||
|
} catch (ClassNotFoundException ignore) {
|
||||||
|
//do not initialise miniMessage
|
||||||
|
}
|
||||||
|
|
||||||
this.getServer().getPluginManager().registerEvents(inputUtils, this);
|
this.getServer().getPluginManager().registerEvents(inputUtils, this);
|
||||||
|
this.getServer().getPluginManager().registerEvents(panelDataPlayers, this);
|
||||||
this.getServer().getPluginManager().registerEvents(new UtilsPanelsLoader(this), this);
|
this.getServer().getPluginManager().registerEvents(new UtilsPanelsLoader(this), this);
|
||||||
this.getServer().getPluginManager().registerEvents(new GenUtils(this), this);
|
this.getServer().getPluginManager().registerEvents(new GenUtils(this), this);
|
||||||
this.getServer().getPluginManager().registerEvents(new ItemFallManager(this), this);
|
this.getServer().getPluginManager().registerEvents(new ItemFallManager(this), this);
|
||||||
this.getServer().getPluginManager().registerEvents(new OpenOnJoin(this), this);
|
this.getServer().getPluginManager().registerEvents(new OpenOnJoin(this), this);
|
||||||
|
this.getServer().getPluginManager().registerEvents(new OutsideClickEvent(this), this);
|
||||||
|
|
||||||
|
if (this.getServer().getPluginManager().isPluginEnabled("floodgate")) {
|
||||||
|
this.getServer().getPluginManager().registerEvents(new OpenFloodgateGUI(this), this);
|
||||||
|
}
|
||||||
|
|
||||||
//load in the updater if requested
|
//load in the updater if requested
|
||||||
if (Objects.requireNonNull(config.getString("updater.update-checks")).equalsIgnoreCase("true")) {
|
if (Objects.requireNonNull(config.getString("updater.update-checks")).equalsIgnoreCase("true")) {
|
||||||
@ -187,7 +233,7 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//load in all built in command tags
|
//load in all built in command tags
|
||||||
commandTags.registerBuiltInTags();
|
commandRunner.registerBuiltInTags();
|
||||||
|
|
||||||
//if refresh-panels set to false, don't load this
|
//if refresh-panels set to false, don't load this
|
||||||
if(Objects.requireNonNull(config.getString("config.refresh-panels")).equalsIgnoreCase("true")){
|
if(Objects.requireNonNull(config.getString("config.refresh-panels")).equalsIgnoreCase("true")){
|
||||||
@ -215,10 +261,6 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
if (!Bukkit.getVersion().contains("1.8")) {
|
if (!Bukkit.getVersion().contains("1.8")) {
|
||||||
this.getServer().getPluginManager().registerEvents(new SwapItemEvent(this), this);
|
this.getServer().getPluginManager().registerEvents(new SwapItemEvent(this), this);
|
||||||
}
|
}
|
||||||
//if VotingPlugin is enabled
|
|
||||||
if (getServer().getPluginManager().isPluginEnabled("VotingPlugin")) {
|
|
||||||
votingPlugin= VotingPluginHooks.getInstance();
|
|
||||||
}
|
|
||||||
//if plugin ChestSort is enabled
|
//if plugin ChestSort is enabled
|
||||||
if(getServer().getPluginManager().isPluginEnabled("ChestSort")){
|
if(getServer().getPluginManager().isPluginEnabled("ChestSort")){
|
||||||
this.getServer().getPluginManager().registerEvents(new UtilsChestSortEvent(this), this);
|
this.getServer().getPluginManager().registerEvents(new UtilsChestSortEvent(this), this);
|
||||||
@ -227,7 +269,7 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
//save the example_top.yml file and the template.yml file
|
//save the example_top.yml file and the template.yml file
|
||||||
if (!this.panelsf.exists()) {
|
if (!this.panelsf.exists()) {
|
||||||
try {
|
try {
|
||||||
if(legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
if(legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
||||||
FileConfiguration exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("exampleLegacy.yml")));
|
FileConfiguration exampleFileConfiguration = YamlConfiguration.loadConfiguration(getReaderFromStream(this.getResource("exampleLegacy.yml")));
|
||||||
exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example.yml"));
|
exampleFileConfiguration.save(new File(this.panelsf + File.separator + "example.yml"));
|
||||||
}else {
|
}else {
|
||||||
@ -257,14 +299,14 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
//do hotbar items
|
//do hotbar items
|
||||||
hotbar.reloadHotbarSlots();
|
hotbar.reloadHotbarSlots();
|
||||||
|
|
||||||
|
//load all known players for data
|
||||||
|
panelDataPlayers.reloadAllPlayers();
|
||||||
|
|
||||||
//add custom charts bStats
|
//add custom charts bStats
|
||||||
Metrics metrics = new Metrics(this);
|
Metrics metrics = new Metrics(this, 5097);
|
||||||
metrics.addCustomChart(new Metrics.SingleLineChart("panels_amount", new Callable<Integer>() {
|
metrics.addCustomChart(new SingleLineChart("panels_amount", () -> {
|
||||||
@Override
|
|
||||||
public Integer call() throws Exception {
|
|
||||||
//this is the total panels loaded
|
//this is the total panels loaded
|
||||||
return panelList.size();
|
return panelList.size();
|
||||||
}
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
//get tag
|
//get tag
|
||||||
@ -307,13 +349,30 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
assert renamedMeta != null;
|
assert renamedMeta != null;
|
||||||
//hiding attributes will add an NBT tag
|
//hiding attributes will add an NBT tag
|
||||||
if(hideAttributes) {
|
if(hideAttributes) {
|
||||||
renamedMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
|
||||||
renamedMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
|
||||||
renamedMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
renamedMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS);
|
||||||
|
renamedMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
|
||||||
|
//HIDE_ADDITIONAL_TOOLTIP was added into 1.20.5 api
|
||||||
|
if(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_21) ||
|
||||||
|
(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_20) && legacy.MINOR_VERSION >= 5)){
|
||||||
|
renamedMeta.addItemFlags(ItemFlag.valueOf("HIDE_ADDITIONAL_TOOLTIP"));
|
||||||
|
}
|
||||||
|
//HIDE_POTION_EFFECTS was removed in the 1.20.5 api
|
||||||
|
if(legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_19) ||
|
||||||
|
(legacy.MAJOR_VERSION == MinecraftVersions.v1_20 && legacy.MINOR_VERSION <= 4)){
|
||||||
|
renamedMeta.addItemFlags(ItemFlag.valueOf("HIDE_POTION_EFFECTS"));
|
||||||
|
}
|
||||||
|
//HIDE_ARMOR_TRIM was added into 1.20 api
|
||||||
|
if(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_20)){
|
||||||
|
renamedMeta.addItemFlags(ItemFlag.HIDE_ARMOR_TRIM);
|
||||||
|
}
|
||||||
//HIDE_DYE was added into 1.17 api
|
//HIDE_DYE was added into 1.17 api
|
||||||
if(legacy.LOCAL_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_17)){
|
if(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_17)){
|
||||||
renamedMeta.addItemFlags(ItemFlag.HIDE_DYE);
|
renamedMeta.addItemFlags(ItemFlag.HIDE_DYE);
|
||||||
}
|
}
|
||||||
|
//setAttributeModifiers was added into 1.14 api
|
||||||
|
if(legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_14)){
|
||||||
|
renamedMeta.setAttributeModifiers(ImmutableMultimap.of());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (customName != null) {
|
if (customName != null) {
|
||||||
renamedMeta.setDisplayName(customName);
|
renamedMeta.setDisplayName(customName);
|
||||||
@ -445,6 +504,9 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
if (p.hasPermission("commandpanel.version")) {
|
if (p.hasPermission("commandpanel.version")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpv " + ChatColor.WHITE + "Display the current version.");
|
p.sendMessage(ChatColor.GOLD + "/cpv " + ChatColor.WHITE + "Display the current version.");
|
||||||
}
|
}
|
||||||
|
if (p.hasPermission("commandpanel.refresh")) {
|
||||||
|
p.sendMessage(ChatColor.GOLD + "/cpu <player> [position:all] " + ChatColor.WHITE + "Update a panel for a player while it is still open.");
|
||||||
|
}
|
||||||
if (p.hasPermission("commandpanel.update")) {
|
if (p.hasPermission("commandpanel.update")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpv latest " + ChatColor.WHITE + "Download the latest update upon server reload/restart.");
|
p.sendMessage(ChatColor.GOLD + "/cpv latest " + ChatColor.WHITE + "Download the latest update upon server reload/restart.");
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpv [version:cancel] " + ChatColor.WHITE + "Download an update upon server reload/restart.");
|
p.sendMessage(ChatColor.GOLD + "/cpv [version:cancel] " + ChatColor.WHITE + "Download an update upon server reload/restart.");
|
||||||
@ -453,7 +515,7 @@ public class CommandPanels extends JavaPlugin{
|
|||||||
p.sendMessage(ChatColor.GOLD + "/cpe <panel file> " + ChatColor.WHITE + "Export panel to the Online Editor.");
|
p.sendMessage(ChatColor.GOLD + "/cpe <panel file> " + ChatColor.WHITE + "Export panel to the Online Editor.");
|
||||||
}
|
}
|
||||||
if (p.hasPermission("commandpanel.import")) {
|
if (p.hasPermission("commandpanel.import")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpi [file name] [URL] " + ChatColor.WHITE + "Downloads a panel from a raw link online.");
|
p.sendMessage(ChatColor.GOLD + "/cpi <file name> <URL> " + ChatColor.WHITE + "Downloads a panel from a raw link online.");
|
||||||
}
|
}
|
||||||
if (p.hasPermission("commandpanel.list")) {
|
if (p.hasPermission("commandpanel.list")) {
|
||||||
p.sendMessage(ChatColor.GOLD + "/cpl " + ChatColor.WHITE + "Lists the currently loaded panels.");
|
p.sendMessage(ChatColor.GOLD + "/cpl " + ChatColor.WHITE + "Lists the currently loaded panels.");
|
||||||
|
@ -1,718 +0,0 @@
|
|||||||
package me.rockyhawk.commandpanels;
|
|
||||||
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import com.google.gson.JsonParser;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
|
||||||
import org.bukkit.plugin.ServicePriority;
|
|
||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
|
||||||
import java.io.*;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.zip.GZIPOutputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* bStats collects some data for plugin authors.
|
|
||||||
* <p>
|
|
||||||
* Check out https://bStats.org/ to learn more about bStats!
|
|
||||||
*/
|
|
||||||
@SuppressWarnings({"WeakerAccess", "unused"})
|
|
||||||
public class Metrics {
|
|
||||||
|
|
||||||
static {
|
|
||||||
// You can use the property to disable the check in your test environment
|
|
||||||
if (System.getProperty("bstats.relocatecheck") == null || !System.getProperty("bstats.relocatecheck").equals("false")) {
|
|
||||||
// Maven's Relocate is clever and changes strings, too. So we have to use this little "trick" ... :D
|
|
||||||
final String defaultPackage = new String(
|
|
||||||
new byte[]{'o', 'r', 'g', '.', 'b', 's', 't', 'a', 't', 's', '.', 'b', 'u', 'k', 'k', 'i', 't'});
|
|
||||||
final String examplePackage = new String(new byte[]{'y', 'o', 'u', 'r', '.', 'p', 'a', 'c', 'k', 'a', 'g', 'e'});
|
|
||||||
// We want to make sure nobody just copy & pastes the example and use the wrong package names
|
|
||||||
if (Metrics.class.getPackage().getName().equals(defaultPackage) || Metrics.class.getPackage().getName().equals(examplePackage)) {
|
|
||||||
throw new IllegalStateException("bStats Metrics class has not been relocated correctly!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The version of this bStats class
|
|
||||||
public static final int B_STATS_VERSION = 1;
|
|
||||||
|
|
||||||
// The url to which the data is sent
|
|
||||||
private static final String URL = "https://bStats.org/submitData/bukkit";
|
|
||||||
|
|
||||||
// Is bStats enabled on this server?
|
|
||||||
private boolean enabled;
|
|
||||||
|
|
||||||
// Should failed requests be logged?
|
|
||||||
private static boolean logFailedRequests;
|
|
||||||
|
|
||||||
// Should the sent data be logged?
|
|
||||||
private static boolean logSentData;
|
|
||||||
|
|
||||||
// Should the response text be logged?
|
|
||||||
private static boolean logResponseStatusText;
|
|
||||||
|
|
||||||
// The uuid of the server
|
|
||||||
private static String serverUUID;
|
|
||||||
|
|
||||||
// The plugin
|
|
||||||
private final Plugin plugin;
|
|
||||||
|
|
||||||
// A list with all custom charts
|
|
||||||
private final List<CustomChart> charts = new ArrayList<>();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param plugin The plugin which stats should be submitted.
|
|
||||||
*/
|
|
||||||
public Metrics(Plugin plugin) {
|
|
||||||
if (plugin == null) {
|
|
||||||
throw new IllegalArgumentException("Plugin cannot be null!");
|
|
||||||
}
|
|
||||||
this.plugin = plugin;
|
|
||||||
|
|
||||||
// Get the config file
|
|
||||||
File bStatsFolder = new File(plugin.getDataFolder().getParentFile(), "bStats");
|
|
||||||
File configFile = new File(bStatsFolder, "config.yml");
|
|
||||||
YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile);
|
|
||||||
|
|
||||||
// Check if the config file exists
|
|
||||||
if (!config.isSet("serverUuid")) {
|
|
||||||
|
|
||||||
// Add default values
|
|
||||||
config.addDefault("enabled", true);
|
|
||||||
// Every server gets it's unique random id.
|
|
||||||
config.addDefault("serverUuid", UUID.randomUUID().toString());
|
|
||||||
// Should failed request be logged?
|
|
||||||
config.addDefault("logFailedRequests", false);
|
|
||||||
// Should the sent data be logged?
|
|
||||||
config.addDefault("logSentData", false);
|
|
||||||
// Should the response text be logged?
|
|
||||||
config.addDefault("logResponseStatusText", false);
|
|
||||||
|
|
||||||
// Inform the server owners about bStats
|
|
||||||
config.options().header(
|
|
||||||
"bStats collects some data for plugin authors like how many servers are using their plugins.\n" +
|
|
||||||
"To honor their work, you should not disable it.\n" +
|
|
||||||
"This has nearly no effect on the server performance!\n" +
|
|
||||||
"Check out https://bStats.org/ to learn more :)"
|
|
||||||
).copyDefaults(true);
|
|
||||||
try {
|
|
||||||
config.save(configFile);
|
|
||||||
} catch (IOException ignored) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load the data
|
|
||||||
enabled = config.getBoolean("enabled", true);
|
|
||||||
serverUUID = config.getString("serverUuid");
|
|
||||||
logFailedRequests = config.getBoolean("logFailedRequests", false);
|
|
||||||
logSentData = config.getBoolean("logSentData", false);
|
|
||||||
logResponseStatusText = config.getBoolean("logResponseStatusText", false);
|
|
||||||
|
|
||||||
if (enabled) {
|
|
||||||
boolean found = false;
|
|
||||||
// Search for all other bStats Metrics classes to see if we are the first one
|
|
||||||
for (Class<?> service : Bukkit.getServicesManager().getKnownServices()) {
|
|
||||||
try {
|
|
||||||
service.getField("B_STATS_VERSION"); // Our identifier :)
|
|
||||||
found = true; // We aren't the first
|
|
||||||
break;
|
|
||||||
} catch (NoSuchFieldException ignored) { }
|
|
||||||
}
|
|
||||||
// Register our service
|
|
||||||
Bukkit.getServicesManager().register(Metrics.class, this, plugin, ServicePriority.Normal);
|
|
||||||
if (!found) {
|
|
||||||
// We are the first!
|
|
||||||
startSubmitting();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if bStats is enabled.
|
|
||||||
*
|
|
||||||
* @return Whether bStats is enabled or not.
|
|
||||||
*/
|
|
||||||
public boolean isEnabled() {
|
|
||||||
return enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a custom chart.
|
|
||||||
*
|
|
||||||
* @param chart The chart to add.
|
|
||||||
*/
|
|
||||||
public void addCustomChart(CustomChart chart) {
|
|
||||||
if (chart == null) {
|
|
||||||
throw new IllegalArgumentException("Chart cannot be null!");
|
|
||||||
}
|
|
||||||
charts.add(chart);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts the Scheduler which submits our data every 30 minutes.
|
|
||||||
*/
|
|
||||||
private void startSubmitting() {
|
|
||||||
final Timer timer = new Timer(true); // We use a timer cause the Bukkit scheduler is affected by server lags
|
|
||||||
timer.scheduleAtFixedRate(new TimerTask() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (!plugin.isEnabled()) { // Plugin was disabled
|
|
||||||
timer.cancel();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler
|
|
||||||
// Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;)
|
|
||||||
Bukkit.getScheduler().runTask(plugin, () -> submitData());
|
|
||||||
}
|
|
||||||
}, 1000 * 60 * 5, 1000 * 60 * 30);
|
|
||||||
// Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start
|
|
||||||
// WARNING: Changing the frequency has no effect but your plugin WILL be blocked/deleted!
|
|
||||||
// WARNING: Just don't do it!
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the plugin specific data.
|
|
||||||
* This method is called using Reflection.
|
|
||||||
*
|
|
||||||
* @return The plugin specific data.
|
|
||||||
*/
|
|
||||||
public JsonObject getPluginData() {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
|
|
||||||
String pluginName = plugin.getDescription().getName();
|
|
||||||
String pluginVersion = plugin.getDescription().getVersion();
|
|
||||||
|
|
||||||
data.addProperty("pluginName", pluginName); // Append the name of the plugin
|
|
||||||
data.addProperty("pluginVersion", pluginVersion); // Append the version of the plugin
|
|
||||||
JsonArray customCharts = new JsonArray();
|
|
||||||
for (CustomChart customChart : charts) {
|
|
||||||
// Add the data of the custom charts
|
|
||||||
JsonObject chart = customChart.getRequestJsonObject();
|
|
||||||
if (chart == null) { // If the chart is null, we skip it
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
customCharts.add(chart);
|
|
||||||
}
|
|
||||||
data.add("customCharts", customCharts);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the server specific data.
|
|
||||||
*
|
|
||||||
* @return The server specific data.
|
|
||||||
*/
|
|
||||||
private JsonObject getServerData() {
|
|
||||||
// Minecraft specific data
|
|
||||||
int playerAmount;
|
|
||||||
try {
|
|
||||||
// Around MC 1.8 the return type was changed to a collection from an array,
|
|
||||||
// This fixes java.lang.NoSuchMethodError: org.bukkit.Bukkit.getOnlinePlayers()Ljava/util/Collection;
|
|
||||||
Method onlinePlayersMethod = Class.forName("org.bukkit.Server").getMethod("getOnlinePlayers");
|
|
||||||
playerAmount = onlinePlayersMethod.getReturnType().equals(Collection.class)
|
|
||||||
? ((Collection<?>) onlinePlayersMethod.invoke(Bukkit.getServer())).size()
|
|
||||||
: ((Player[]) onlinePlayersMethod.invoke(Bukkit.getServer())).length;
|
|
||||||
} catch (Exception e) {
|
|
||||||
playerAmount = Bukkit.getOnlinePlayers().size(); // Just use the new method if the Reflection failed
|
|
||||||
}
|
|
||||||
int onlineMode = Bukkit.getOnlineMode() ? 1 : 0;
|
|
||||||
String bukkitVersion = Bukkit.getVersion();
|
|
||||||
String bukkitName = Bukkit.getName();
|
|
||||||
|
|
||||||
// OS/Java specific data
|
|
||||||
String javaVersion = System.getProperty("java.version");
|
|
||||||
String osName = System.getProperty("os.name");
|
|
||||||
String osArch = System.getProperty("os.arch");
|
|
||||||
String osVersion = System.getProperty("os.version");
|
|
||||||
int coreCount = Runtime.getRuntime().availableProcessors();
|
|
||||||
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
|
|
||||||
data.addProperty("serverUUID", serverUUID);
|
|
||||||
|
|
||||||
data.addProperty("playerAmount", playerAmount);
|
|
||||||
data.addProperty("onlineMode", onlineMode);
|
|
||||||
data.addProperty("bukkitVersion", bukkitVersion);
|
|
||||||
data.addProperty("bukkitName", bukkitName);
|
|
||||||
|
|
||||||
data.addProperty("javaVersion", javaVersion);
|
|
||||||
data.addProperty("osName", osName);
|
|
||||||
data.addProperty("osArch", osArch);
|
|
||||||
data.addProperty("osVersion", osVersion);
|
|
||||||
data.addProperty("coreCount", coreCount);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Collects the data and sends it afterwards.
|
|
||||||
*/
|
|
||||||
private void submitData() {
|
|
||||||
final JsonObject data = getServerData();
|
|
||||||
|
|
||||||
JsonArray pluginData = new JsonArray();
|
|
||||||
// Search for all other bStats Metrics classes to get their plugin data
|
|
||||||
for (Class<?> service : Bukkit.getServicesManager().getKnownServices()) {
|
|
||||||
try {
|
|
||||||
service.getField("B_STATS_VERSION"); // Our identifier :)
|
|
||||||
|
|
||||||
for (RegisteredServiceProvider<?> provider : Bukkit.getServicesManager().getRegistrations(service)) {
|
|
||||||
try {
|
|
||||||
Object plugin = provider.getService().getMethod("getPluginData").invoke(provider.getProvider());
|
|
||||||
if (plugin instanceof JsonObject) {
|
|
||||||
pluginData.add((JsonObject) plugin);
|
|
||||||
} else { // old bstats version compatibility
|
|
||||||
try {
|
|
||||||
Class<?> jsonObjectJsonSimple = Class.forName("org.json.simple.JSONObject");
|
|
||||||
if (plugin.getClass().isAssignableFrom(jsonObjectJsonSimple)) {
|
|
||||||
Method jsonStringGetter = jsonObjectJsonSimple.getDeclaredMethod("toJSONString");
|
|
||||||
jsonStringGetter.setAccessible(true);
|
|
||||||
String jsonString = (String) jsonStringGetter.invoke(plugin);
|
|
||||||
JsonObject object = new JsonParser().parse(jsonString).getAsJsonObject();
|
|
||||||
pluginData.add(object);
|
|
||||||
}
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
// minecraft version 1.14+
|
|
||||||
if (logFailedRequests) {
|
|
||||||
this.plugin.getLogger().log(Level.SEVERE, "Encountered unexpected exception", e);
|
|
||||||
}
|
|
||||||
continue; // continue looping since we cannot do any other thing.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (NullPointerException | NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { }
|
|
||||||
}
|
|
||||||
} catch (NoSuchFieldException ignored) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
data.add("plugins", pluginData);
|
|
||||||
|
|
||||||
// Create a new thread for the connection to the bStats server
|
|
||||||
new Thread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
// Send the data
|
|
||||||
sendData(plugin, data);
|
|
||||||
} catch (Exception e) {
|
|
||||||
// Something went wrong! :(
|
|
||||||
if (logFailedRequests) {
|
|
||||||
plugin.getLogger().log(Level.WARNING, "Could not submit plugin stats of " + plugin.getName(), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the data to the bStats server.
|
|
||||||
*
|
|
||||||
* @param plugin Any plugin. It's just used to get a logger instance.
|
|
||||||
* @param data The data to send.
|
|
||||||
* @throws Exception If the request failed.
|
|
||||||
*/
|
|
||||||
private static void sendData(Plugin plugin, JsonObject data) throws Exception {
|
|
||||||
if (data == null) {
|
|
||||||
throw new IllegalArgumentException("Data cannot be null!");
|
|
||||||
}
|
|
||||||
if (Bukkit.isPrimaryThread()) {
|
|
||||||
throw new IllegalAccessException("This method must not be called from the main thread!");
|
|
||||||
}
|
|
||||||
if (logSentData) {
|
|
||||||
plugin.getLogger().info("Sending data to bStats: " + data.toString());
|
|
||||||
}
|
|
||||||
HttpsURLConnection connection = (HttpsURLConnection) new URL(URL).openConnection();
|
|
||||||
|
|
||||||
// Compress the data to save bandwidth
|
|
||||||
byte[] compressedData = compress(data.toString());
|
|
||||||
|
|
||||||
// Add headers
|
|
||||||
connection.setRequestMethod("POST");
|
|
||||||
connection.addRequestProperty("Accept", "application/json");
|
|
||||||
connection.addRequestProperty("Connection", "close");
|
|
||||||
connection.addRequestProperty("Content-Encoding", "gzip"); // We gzip our request
|
|
||||||
connection.addRequestProperty("Content-Length", String.valueOf(compressedData.length));
|
|
||||||
connection.setRequestProperty("Content-Type", "application/json"); // We send our data in JSON format
|
|
||||||
connection.setRequestProperty("User-Agent", "MC-Server/" + B_STATS_VERSION);
|
|
||||||
|
|
||||||
// Send data
|
|
||||||
connection.setDoOutput(true);
|
|
||||||
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
|
|
||||||
outputStream.write(compressedData);
|
|
||||||
outputStream.flush();
|
|
||||||
outputStream.close();
|
|
||||||
|
|
||||||
InputStream inputStream = connection.getInputStream();
|
|
||||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
|
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder();
|
|
||||||
String line;
|
|
||||||
while ((line = bufferedReader.readLine()) != null) {
|
|
||||||
builder.append(line);
|
|
||||||
}
|
|
||||||
bufferedReader.close();
|
|
||||||
if (logResponseStatusText) {
|
|
||||||
plugin.getLogger().info("Sent data to bStats and received response: " + builder.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gzips the given String.
|
|
||||||
*
|
|
||||||
* @param str The string to gzip.
|
|
||||||
* @return The gzipped String.
|
|
||||||
* @throws IOException If the compression failed.
|
|
||||||
*/
|
|
||||||
private static byte[] compress(final String str) throws IOException {
|
|
||||||
if (str == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
|
||||||
GZIPOutputStream gzip = new GZIPOutputStream(outputStream);
|
|
||||||
gzip.write(str.getBytes(StandardCharsets.UTF_8));
|
|
||||||
gzip.close();
|
|
||||||
return outputStream.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom chart.
|
|
||||||
*/
|
|
||||||
public static abstract class CustomChart {
|
|
||||||
|
|
||||||
// The id of the chart
|
|
||||||
final String chartId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
*/
|
|
||||||
CustomChart(String chartId) {
|
|
||||||
if (chartId == null || chartId.isEmpty()) {
|
|
||||||
throw new IllegalArgumentException("ChartId cannot be null or empty!");
|
|
||||||
}
|
|
||||||
this.chartId = chartId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private JsonObject getRequestJsonObject() {
|
|
||||||
JsonObject chart = new JsonObject();
|
|
||||||
chart.addProperty("chartId", chartId);
|
|
||||||
try {
|
|
||||||
JsonObject data = getChartData();
|
|
||||||
if (data == null) {
|
|
||||||
// If the data is null we don't send the chart.
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
chart.add("data", data);
|
|
||||||
} catch (Throwable t) {
|
|
||||||
if (logFailedRequests) {
|
|
||||||
Bukkit.getLogger().log(Level.WARNING, "Failed to get data for custom chart with id " + chartId, t);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return chart;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract JsonObject getChartData() throws Exception;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom simple pie.
|
|
||||||
*/
|
|
||||||
public static class SimplePie extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<String> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public SimplePie(String chartId, Callable<String> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected JsonObject getChartData() throws Exception {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
String value = callable.call();
|
|
||||||
if (value == null || value.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.addProperty("value", value);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom advanced pie.
|
|
||||||
*/
|
|
||||||
public static class AdvancedPie extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Integer>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public AdvancedPie(String chartId, Callable<Map<String, Integer>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected JsonObject getChartData() throws Exception {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
JsonObject values = new JsonObject();
|
|
||||||
Map<String, Integer> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
|
||||||
if (entry.getValue() == 0) {
|
|
||||||
continue; // Skip this invalid
|
|
||||||
}
|
|
||||||
allSkipped = false;
|
|
||||||
values.addProperty(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
if (allSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.add("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom drilldown pie.
|
|
||||||
*/
|
|
||||||
public static class DrilldownPie extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Map<String, Integer>>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public DrilldownPie(String chartId, Callable<Map<String, Map<String, Integer>>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JsonObject getChartData() throws Exception {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
JsonObject values = new JsonObject();
|
|
||||||
Map<String, Map<String, Integer>> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean reallyAllSkipped = true;
|
|
||||||
for (Map.Entry<String, Map<String, Integer>> entryValues : map.entrySet()) {
|
|
||||||
JsonObject value = new JsonObject();
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, Integer> valueEntry : map.get(entryValues.getKey()).entrySet()) {
|
|
||||||
value.addProperty(valueEntry.getKey(), valueEntry.getValue());
|
|
||||||
allSkipped = false;
|
|
||||||
}
|
|
||||||
if (!allSkipped) {
|
|
||||||
reallyAllSkipped = false;
|
|
||||||
values.add(entryValues.getKey(), value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (reallyAllSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.add("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom single line chart.
|
|
||||||
*/
|
|
||||||
public static class SingleLineChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Integer> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public SingleLineChart(String chartId, Callable<Integer> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected JsonObject getChartData() throws Exception {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
int value = callable.call();
|
|
||||||
if (value == 0) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.addProperty("value", value);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom multi line chart.
|
|
||||||
*/
|
|
||||||
public static class MultiLineChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Integer>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public MultiLineChart(String chartId, Callable<Map<String, Integer>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected JsonObject getChartData() throws Exception {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
JsonObject values = new JsonObject();
|
|
||||||
Map<String, Integer> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
|
||||||
if (entry.getValue() == 0) {
|
|
||||||
continue; // Skip this invalid
|
|
||||||
}
|
|
||||||
allSkipped = false;
|
|
||||||
values.addProperty(entry.getKey(), entry.getValue());
|
|
||||||
}
|
|
||||||
if (allSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.add("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom simple bar chart.
|
|
||||||
*/
|
|
||||||
public static class SimpleBarChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, Integer>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public SimpleBarChart(String chartId, Callable<Map<String, Integer>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected JsonObject getChartData() throws Exception {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
JsonObject values = new JsonObject();
|
|
||||||
Map<String, Integer> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
for (Map.Entry<String, Integer> entry : map.entrySet()) {
|
|
||||||
JsonArray categoryValues = new JsonArray();
|
|
||||||
categoryValues.add(entry.getValue());
|
|
||||||
values.add(entry.getKey(), categoryValues);
|
|
||||||
}
|
|
||||||
data.add("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a custom advanced bar chart.
|
|
||||||
*/
|
|
||||||
public static class AdvancedBarChart extends CustomChart {
|
|
||||||
|
|
||||||
private final Callable<Map<String, int[]>> callable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class constructor.
|
|
||||||
*
|
|
||||||
* @param chartId The id of the chart.
|
|
||||||
* @param callable The callable which is used to request the chart data.
|
|
||||||
*/
|
|
||||||
public AdvancedBarChart(String chartId, Callable<Map<String, int[]>> callable) {
|
|
||||||
super(chartId);
|
|
||||||
this.callable = callable;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected JsonObject getChartData() throws Exception {
|
|
||||||
JsonObject data = new JsonObject();
|
|
||||||
JsonObject values = new JsonObject();
|
|
||||||
Map<String, int[]> map = callable.call();
|
|
||||||
if (map == null || map.isEmpty()) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean allSkipped = true;
|
|
||||||
for (Map.Entry<String, int[]> entry : map.entrySet()) {
|
|
||||||
if (entry.getValue().length == 0) {
|
|
||||||
continue; // Skip this invalid
|
|
||||||
}
|
|
||||||
allSkipped = false;
|
|
||||||
JsonArray categoryValues = new JsonArray();
|
|
||||||
for (int categoryValue : entry.getValue()) {
|
|
||||||
categoryValues.add(categoryValue);
|
|
||||||
}
|
|
||||||
values.add(entry.getKey(), categoryValues);
|
|
||||||
}
|
|
||||||
if (allSkipped) {
|
|
||||||
// Null = skip the chart
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
data.add("values", values);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -45,7 +45,7 @@ public class Utils implements Listener {
|
|||||||
//if the panel is clicked on the outside area of the GUI
|
//if the panel is clicked on the outside area of the GUI
|
||||||
if (panel.getConfig().contains("outside-commands")) {
|
if (panel.getConfig().contains("outside-commands")) {
|
||||||
try {
|
try {
|
||||||
plugin.commandTags.runCommands(panel,PanelPosition.Top,p, panel.getConfig().getStringList("outside-commands"),e.getClick());
|
plugin.commandRunner.runCommands(panel,PanelPosition.Top,p, panel.getConfig().getStringList("outside-commands"),e.getClick());
|
||||||
}catch(Exception s){
|
}catch(Exception s){
|
||||||
plugin.debug(s,p);
|
plugin.debug(s,p);
|
||||||
}
|
}
|
||||||
@ -87,23 +87,24 @@ public class Utils implements Listener {
|
|||||||
panel = plugin.openPanels.getOpenPanel(p.getName(),position);
|
panel = plugin.openPanels.getOpenPanel(p.getName(),position);
|
||||||
|
|
||||||
//this loops through all the items in the panel
|
//this loops through all the items in the panel
|
||||||
boolean foundSlot = false;
|
String foundSlot = null;
|
||||||
for(String slot : Objects.requireNonNull(panel.getConfig().getConfigurationSection("item")).getKeys(false)){
|
for(String item : Objects.requireNonNull(panel.getConfig().getConfigurationSection("item")).getKeys(false)){
|
||||||
|
String slot = plugin.tex.placeholdersNoColour(panel, position, p, item);
|
||||||
if (slot.equals(Integer.toString(clickedSlot))) {
|
if (slot.equals(Integer.toString(clickedSlot))) {
|
||||||
foundSlot = true;
|
foundSlot = item;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!foundSlot){
|
if(foundSlot == null){
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//get the section of the slot that was clicked
|
//get the section of the slot that was clicked
|
||||||
String section = plugin.has.hasSection(panel,position,panel.getConfig().getConfigurationSection("item." + clickedSlot), p);
|
String section = plugin.has.hasSection(panel,position,panel.getConfig().getConfigurationSection("item." + foundSlot), p);
|
||||||
|
|
||||||
if(panel.getConfig().contains("item." + clickedSlot + section + ".itemType")){
|
if(panel.getConfig().contains("item." + foundSlot + section + ".itemType")){
|
||||||
if(panel.getConfig().getStringList("item." + clickedSlot + section + ".itemType").contains("placeable")){
|
if(panel.getConfig().getStringList("item." + foundSlot + section + ".itemType").contains("placeable")){
|
||||||
//skip if the item is a placeable
|
//skip if the item is a placeable
|
||||||
e.setCancelled(false);
|
e.setCancelled(false);
|
||||||
return;
|
return;
|
||||||
@ -115,26 +116,14 @@ public class Utils implements Listener {
|
|||||||
p.updateInventory();
|
p.updateInventory();
|
||||||
|
|
||||||
//if an item has an area for input instead of commands
|
//if an item has an area for input instead of commands
|
||||||
if(panel.getConfig().contains("item." + clickedSlot + section + ".player-input")) {
|
if(panel.getConfig().contains("item." + foundSlot + section + ".player-input")) {
|
||||||
plugin.inputUtils.playerInput.put(p,new PlayerInput(panel,panel.getConfig().getStringList("item." + clickedSlot + section + ".player-input"),e.getClick()));
|
plugin.inputUtils.playerInput.put(p,new PlayerInput(panel,panel.getConfig().getStringList("item." + foundSlot + section + ".player-input"),e.getClick()));
|
||||||
plugin.inputUtils.sendMessage(panel,position,p);
|
plugin.inputUtils.sendMessage(panel,position,p);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(panel.getConfig().contains("item." + clickedSlot + section + ".commands")) {
|
if(panel.getConfig().contains("item." + foundSlot + section + ".commands")) {
|
||||||
List<String> commands = panel.getConfig().getStringList("item." + clickedSlot + section + ".commands");
|
List<String> commands = panel.getConfig().getStringList("item." + foundSlot + section + ".commands");
|
||||||
if (commands.size() != 0) {
|
if (!commands.isEmpty()) {
|
||||||
//this will replace a sequence tag command with the commands from the sequence
|
|
||||||
List<String> commandsAfterSequence = commands;
|
|
||||||
for (int i = 0; commands.size() - 1 >= i; i++) {
|
|
||||||
if(commands.get(i).startsWith("sequence=")){
|
|
||||||
String locationOfSequence = commands.get(i).split("\\s")[1];
|
|
||||||
List<String> commandsSequence = panel.getConfig().getStringList(locationOfSequence);
|
|
||||||
commandsAfterSequence.remove(i);
|
|
||||||
commandsAfterSequence.addAll(i,commandsSequence);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
commands = commandsAfterSequence;
|
|
||||||
|
|
||||||
for (int i = 0; commands.size() > i; i++) {
|
for (int i = 0; commands.size() > i; i++) {
|
||||||
try {
|
try {
|
||||||
commands.set(i, commands.get(i).replaceAll("%cp-clicked%", e.getCurrentItem().getType().toString()));
|
commands.set(i, commands.get(i).replaceAll("%cp-clicked%", e.getCurrentItem().getType().toString()));
|
||||||
@ -142,12 +131,13 @@ public class Utils implements Listener {
|
|||||||
commands.set(i, commands.get(i).replaceAll("%cp-clicked%", "AIR"));
|
commands.set(i, commands.get(i).replaceAll("%cp-clicked%", "AIR"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (panel.getConfig().contains("item." + clickedSlot + section + ".multi-paywall")) {
|
if (panel.getConfig().contains("item." + foundSlot + section + ".multi-paywall")) {
|
||||||
plugin.commandTags.runMultiPaywall(panel,position,p,
|
plugin.commandRunner.runMultiPaywall(panel,position,p,
|
||||||
panel.getConfig().getStringList("item." + clickedSlot + section + ".multi-paywall"),
|
panel.getConfig().getStringList("item." + foundSlot + section + ".multi-paywall"),
|
||||||
commands,e.getClick());
|
commands,e.getClick());
|
||||||
} else
|
} else {
|
||||||
plugin.commandTags.runCommands(panel,position,p,commands,e.getClick());
|
plugin.commandRunner.runCommands(panel, position, p, commands, e.getClick());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ public class Panel{
|
|||||||
public ItemStack getHotbarItem(Player p){
|
public ItemStack getHotbarItem(Player p){
|
||||||
if (this.getConfig().contains("open-with-item.pre-load-commands")) {
|
if (this.getConfig().contains("open-with-item.pre-load-commands")) {
|
||||||
try {
|
try {
|
||||||
plugin.commandTags.runCommands(this,PanelPosition.Top,p, this.getConfig().getStringList("open-with-item.pre-load-commands"));
|
plugin.commandRunner.runCommands(this,PanelPosition.Top,p, this.getConfig().getStringList("open-with-item.pre-load-commands"), null);
|
||||||
}catch(Exception s){
|
}catch(Exception s){
|
||||||
plugin.debug(s,p);
|
plugin.debug(s,p);
|
||||||
}
|
}
|
||||||
@ -99,7 +99,7 @@ public class Panel{
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
//add NBT to item and return the ItemStack
|
//add NBT to item and return the ItemStack
|
||||||
return plugin.nbt.setNBT(s, "CommandPanelsHotbar", panelName + ":" + slot);
|
return plugin.nbt.setNBT(s, "CommandPanelsHotbar", "string_" + panelName + ":" + slot);
|
||||||
}catch(Exception e) {
|
}catch(Exception e) {
|
||||||
//return air if null
|
//return air if null
|
||||||
return new ItemStack(Material.AIR);
|
return new ItemStack(Material.AIR);
|
||||||
|
@ -82,7 +82,7 @@ public class ExecuteOpenVoids {
|
|||||||
//execute commands once the panel opens
|
//execute commands once the panel opens
|
||||||
if (panel.getConfig().contains("commands-on-open")) {
|
if (panel.getConfig().contains("commands-on-open")) {
|
||||||
try {
|
try {
|
||||||
plugin.commandTags.runCommands(panel,position,p, panel.getConfig().getStringList("commands-on-open"));
|
plugin.commandRunner.runCommands(panel,position,p, panel.getConfig().getStringList("commands-on-open"), null);
|
||||||
}catch(Exception s){
|
}catch(Exception s){
|
||||||
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " " + "commands-on-open: " + panel.getConfig().getString("commands-on-open")));
|
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " " + "commands-on-open: " + panel.getConfig().getString("commands-on-open")));
|
||||||
}
|
}
|
||||||
@ -155,7 +155,7 @@ public class ExecuteOpenVoids {
|
|||||||
public void beforeLoadCommands(Panel panel,PanelPosition pos, Player p){
|
public void beforeLoadCommands(Panel panel,PanelPosition pos, Player p){
|
||||||
if (panel.getConfig().contains("pre-load-commands")) {
|
if (panel.getConfig().contains("pre-load-commands")) {
|
||||||
try {
|
try {
|
||||||
plugin.commandTags.runCommands(panel,pos,p, panel.getConfig().getStringList("pre-load-commands"));
|
plugin.commandRunner.runCommands(panel,pos,p, panel.getConfig().getStringList("pre-load-commands"), null);
|
||||||
}catch(Exception s){
|
}catch(Exception s){
|
||||||
plugin.debug(s,p);
|
plugin.debug(s,p);
|
||||||
}
|
}
|
||||||
|
@ -1,150 +0,0 @@
|
|||||||
package me.rockyhawk.commandpanels.classresources;
|
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
|
||||||
import com.mojang.authlib.properties.Property;
|
|
||||||
import com.mojang.authlib.properties.PropertyMap;
|
|
||||||
import me.rockyhawk.commandpanels.CommandPanels;
|
|
||||||
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
|
||||||
import org.json.simple.JSONArray;
|
|
||||||
import org.json.simple.JSONObject;
|
|
||||||
import org.json.simple.parser.JSONParser;
|
|
||||||
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLConnection;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class GetCustomHeads {
|
|
||||||
CommandPanels plugin;
|
|
||||||
public GetCustomHeads(CommandPanels pl) {
|
|
||||||
this.plugin = pl;
|
|
||||||
}
|
|
||||||
|
|
||||||
//contains cached player name and then base64 value (clears on /cpr reload)
|
|
||||||
//also will clear if the map reaches a length of 1000 which is roughly 135 KB RAM usage
|
|
||||||
public HashMap<String, String> playerHeadTextures = new HashMap<>();
|
|
||||||
|
|
||||||
public String getHeadBase64(ItemStack head) {
|
|
||||||
if (plugin.getHeads.ifSkullOrHead(head.getType().toString()) && head.hasItemMeta()) {
|
|
||||||
try {
|
|
||||||
SkullMeta meta = (SkullMeta) head.getItemMeta();
|
|
||||||
assert meta != null;
|
|
||||||
if (!meta.hasOwner()) {
|
|
||||||
Field fld = meta.getClass().getDeclaredField("profile");
|
|
||||||
fld.setAccessible(true);
|
|
||||||
GameProfile prof = (GameProfile) fld.get(meta);
|
|
||||||
Iterator itr = prof.getProperties().get("textures").iterator();
|
|
||||||
if (itr.hasNext()) {
|
|
||||||
Property var5 = (Property) itr.next();
|
|
||||||
return var5.getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch(Exception exc){/*skip return null*/}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
//getting the head from a Player Name
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public ItemStack getPlayerHead(String name) {
|
|
||||||
byte id = 0;
|
|
||||||
if (plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_15)) {
|
|
||||||
id = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
//get texture if already cached
|
|
||||||
if(playerHeadTextures.containsKey(name)) {
|
|
||||||
return getCustomHead(playerHeadTextures.get(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Fetch the player UUID from the Mojang API
|
|
||||||
URL uuidUrl = new URL("https://api.mojang.com/users/profiles/minecraft/" + name);
|
|
||||||
URLConnection uuidConnection = uuidUrl.openConnection();
|
|
||||||
uuidConnection.setConnectTimeout(2000); // Set connection timeout to 2 seconds
|
|
||||||
uuidConnection.setReadTimeout(2000); // Set read timeout to 2 seconds
|
|
||||||
Reader uuidReader = new InputStreamReader(uuidConnection.getInputStream(), StandardCharsets.UTF_8);
|
|
||||||
JSONObject uuidResponse = (JSONObject) new JSONParser().parse(uuidReader);
|
|
||||||
String uuid = (String) uuidResponse.get("id");
|
|
||||||
|
|
||||||
// Fetch the skin texture from the Mojang API using the player UUID
|
|
||||||
URL texturesUrl = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid);
|
|
||||||
URLConnection texturesConnection = texturesUrl.openConnection();
|
|
||||||
texturesConnection.setConnectTimeout(2000); // Set connection timeout to 2 seconds
|
|
||||||
texturesConnection.setReadTimeout(2000); // Set read timeout to 2 seconds
|
|
||||||
Reader texturesReader = new InputStreamReader(texturesConnection.getInputStream(), StandardCharsets.UTF_8);
|
|
||||||
JSONObject texturesResponse = (JSONObject) new JSONParser().parse(texturesReader);
|
|
||||||
JSONArray propertiesArray = (JSONArray) texturesResponse.get("properties");
|
|
||||||
JSONObject texturesProperty = (JSONObject) propertiesArray.get(0);
|
|
||||||
String base64Texture = (String) texturesProperty.get("value");
|
|
||||||
playerHeadTextures.put(name, base64Texture);
|
|
||||||
|
|
||||||
// Create a custom head using the Base64 texture string
|
|
||||||
return getCustomHead(base64Texture);
|
|
||||||
} catch (Exception e) {
|
|
||||||
// Fallback to setting the owner if the Mojang API request fails
|
|
||||||
ItemStack itemStack = new ItemStack(Material.matchMaterial(plugin.getHeads.playerHeadString()), 1, id);
|
|
||||||
SkullMeta meta = (SkullMeta) itemStack.getItemMeta();
|
|
||||||
meta.setOwner(name);
|
|
||||||
itemStack.setItemMeta(meta);
|
|
||||||
return itemStack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//used to get heads from Base64 Textures
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
public ItemStack getCustomHead(String b64stringtexture) {
|
|
||||||
//get head from base64
|
|
||||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
|
||||||
PropertyMap propertyMap = profile.getProperties();
|
|
||||||
if (propertyMap == null) {
|
|
||||||
throw new IllegalStateException("Profile doesn't contain a property map");
|
|
||||||
} else {
|
|
||||||
propertyMap.put("textures", new Property("textures", b64stringtexture));
|
|
||||||
byte id = 0;
|
|
||||||
if(plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_15)){
|
|
||||||
id = 3;
|
|
||||||
}
|
|
||||||
ItemStack head = new ItemStack(Material.matchMaterial(plugin.getHeads.playerHeadString()), 1,id);
|
|
||||||
ItemMeta headMeta = head.getItemMeta();
|
|
||||||
assert headMeta != null;
|
|
||||||
|
|
||||||
Field profileField;
|
|
||||||
Method setProfileMethod = null;
|
|
||||||
try {
|
|
||||||
profileField = headMeta.getClass().getDeclaredField("profile");
|
|
||||||
profileField.setAccessible(true);
|
|
||||||
profileField.set(headMeta, profile);
|
|
||||||
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e1) {
|
|
||||||
try {
|
|
||||||
setProfileMethod = headMeta.getClass().getDeclaredMethod("setProfile", GameProfile.class);
|
|
||||||
} catch (NoSuchMethodException ignore) {}
|
|
||||||
} catch (SecurityException ignored) {}
|
|
||||||
try {
|
|
||||||
if (setProfileMethod == null) {
|
|
||||||
profileField = headMeta.getClass().getDeclaredField("profile");
|
|
||||||
profileField.setAccessible(true);
|
|
||||||
profileField.set(headMeta, profile);
|
|
||||||
} else {
|
|
||||||
setProfileMethod.setAccessible(true);
|
|
||||||
setProfileMethod.invoke(headMeta, profile);
|
|
||||||
}
|
|
||||||
} catch (Exception e1) {
|
|
||||||
plugin.debug(e1,null);
|
|
||||||
}
|
|
||||||
|
|
||||||
head.setItemMeta(headMeta);
|
|
||||||
return head;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,9 +9,7 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
public class HasSections {
|
public class HasSections {
|
||||||
CommandPanels plugin;
|
CommandPanels plugin;
|
||||||
@ -20,33 +18,43 @@ public class HasSections {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String hasSection(Panel panel, PanelPosition position, ConfigurationSection cf, Player p) {
|
public String hasSection(Panel panel, PanelPosition position, ConfigurationSection cf, Player p) {
|
||||||
for (int count = 0; cf.getKeys(false).size() > count; count++) {
|
// Use a TreeMap to automatically sort the sections by the extracted number.
|
||||||
String setName;
|
Map<Integer, String> sortedSections = new TreeMap<>();
|
||||||
if(cf.isSet("has" + count)) {
|
|
||||||
setName = "has" + count;
|
// Loop through the section names and filter for the ones starting with "has".
|
||||||
}else{
|
for (String key : cf.getKeys(false)) {
|
||||||
|
if (!cf.isConfigurationSection(key)) continue;
|
||||||
|
|
||||||
|
// Check if the section starts with "has" and is followed by a number.
|
||||||
|
if (key.startsWith("has")) {
|
||||||
|
try {
|
||||||
|
// Extract the number after "has" and put it in the map for sorting.
|
||||||
|
int number = Integer.parseInt(key.substring(3));
|
||||||
|
sortedSections.put(number, key);
|
||||||
|
} catch (NumberFormatException ignore) {
|
||||||
|
// If the section name doesn't have a valid number after "has", skip it.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String hasSection : sortedSections.values()) {
|
||||||
|
if (!cf.isConfigurationSection(hasSection)) continue;
|
||||||
|
|
||||||
|
ConfigurationSection currentSection = cf.getConfigurationSection(hasSection);
|
||||||
|
int numberOfConditions = currentSection.getKeys(false).size();
|
||||||
|
|
||||||
|
Boolean currentBlockResult = null; // This will store the result of the current block (a set of conditions combined by AND or OR).
|
||||||
|
String previousOperator = "AND"; // Default logical operator to start with.
|
||||||
|
|
||||||
|
for (int a = 0; a < numberOfConditions; a++) {
|
||||||
|
if (!currentSection.isSet("value" + a) || !currentSection.isSet("compare" + a)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean endProcess = true;
|
String value = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, currentSection.getString("value" + a)));
|
||||||
//loop through possible values and compares for hypothetical and operators
|
String compare = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, currentSection.getString("compare" + a)));
|
||||||
for (int a = 0; cf.getConfigurationSection(setName).getKeys(false).size() > a; a++) {
|
|
||||||
if(cf.isSet(setName + ".value" + a) && cf.isSet(setName + ".compare" + a)){
|
|
||||||
//ensure the endProcess variable has been reset for another operation
|
|
||||||
endProcess = true;
|
|
||||||
//get the values of this statement
|
|
||||||
String value;
|
|
||||||
String compare;
|
|
||||||
try {
|
|
||||||
value = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, cf.getString(setName + ".value" + a)));
|
|
||||||
compare = ChatColor.stripColor(plugin.tex.placeholders(panel, position, p, cf.getString(setName + ".compare" + a)));
|
|
||||||
}catch (Exception e) {
|
|
||||||
//if errors getting text return
|
|
||||||
plugin.debug(e,p);
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
String operator = "AND";
|
String operator = "AND"; // Default operator for the current condition.
|
||||||
if (compare.endsWith(" OR")) {
|
if (compare.endsWith(" OR")) {
|
||||||
compare = compare.substring(0, compare.length() - 3);
|
compare = compare.substring(0, compare.length() - 3);
|
||||||
operator = "OR";
|
operator = "OR";
|
||||||
@ -54,39 +62,40 @@ public class HasSections {
|
|||||||
compare = compare.substring(0, compare.length() - 4);
|
compare = compare.substring(0, compare.length() - 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
//list of values with the or operator
|
|
||||||
HashSet<String> values = doOperators(new HashSet<>(Collections.singletonList(value)));
|
HashSet<String> values = doOperators(new HashSet<>(Collections.singletonList(value)));
|
||||||
//go through all values with the or operator
|
boolean localResult = false; // This tracks the result of the current condition.
|
||||||
for (String val : values) {
|
for (String val : values) {
|
||||||
if (hasProcess(setName, val, compare, p)) {
|
if (hasProcess(val, compare)) {
|
||||||
endProcess = false;
|
localResult = true;
|
||||||
//if it is true and it is OR, there is no need to check the next value in the line
|
|
||||||
if(operator.equals("OR")){
|
|
||||||
a++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(endProcess){
|
|
||||||
//check if the operator link between the next value/compare is OR
|
|
||||||
if(operator.equals("OR")){
|
|
||||||
//I can just continue because the algorithm already assumes the last sequence was true
|
|
||||||
endProcess = false;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (currentBlockResult == null) {
|
||||||
|
// Initialize the result of the block with the result of the first condition.
|
||||||
|
currentBlockResult = localResult;
|
||||||
|
} else {
|
||||||
|
// Combine the result of the current condition with the block result based on the previous operator.
|
||||||
|
if (previousOperator.equals("AND")) {
|
||||||
|
currentBlockResult = currentBlockResult && localResult;
|
||||||
|
} else if (previousOperator.equals("OR")) {
|
||||||
|
currentBlockResult = currentBlockResult || localResult;
|
||||||
}
|
}
|
||||||
//if the has section is false move to the next has section
|
|
||||||
if(endProcess){
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
//proceed if none of the values were false
|
|
||||||
return "." + setName + hasSection(panel, position, cf.getConfigurationSection(setName), p);
|
previousOperator = operator; // Update the operator for the next condition.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentBlockResult != null && currentBlockResult) {
|
||||||
|
// If the result of this section is true, check nested sections.
|
||||||
|
return "." + hasSection + hasSection(panel, position, currentSection, p);
|
||||||
|
}
|
||||||
|
// If the result is false, continue to the next 'has' section.
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private HashSet<String> doOperators(HashSet<String> value){
|
private HashSet<String> doOperators(HashSet<String> value){
|
||||||
for(String val : value){
|
for(String val : value){
|
||||||
if(val.contains(" OR ")){
|
if(val.contains(" OR ")){
|
||||||
@ -98,7 +107,7 @@ public class HasSections {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasProcess(String setName, String value, String compare,Player p){
|
private boolean hasProcess(String value, String compare){
|
||||||
//check to see if the value should be reversed
|
//check to see if the value should be reversed
|
||||||
boolean outputValue = true;
|
boolean outputValue = true;
|
||||||
if(value.startsWith("NOT ")){
|
if(value.startsWith("NOT ")){
|
||||||
@ -106,26 +115,18 @@ public class HasSections {
|
|||||||
outputValue = false;
|
outputValue = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//the original has sections as TinyTank800 wanted to keep them
|
|
||||||
if(setName.startsWith("hasvalue")) {
|
|
||||||
return compare.equals(value) == outputValue;
|
|
||||||
}
|
|
||||||
if(setName.startsWith("hasperm")) {
|
|
||||||
return p.hasPermission(value) == outputValue;
|
|
||||||
}
|
|
||||||
if(setName.startsWith("hasgreater")) {
|
|
||||||
return (Long.parseLong(compare) >= Long.parseLong(value)) == outputValue;
|
|
||||||
}
|
|
||||||
//the current has section with all the functions implemented inside it
|
//the current has section with all the functions implemented inside it
|
||||||
if(setName.startsWith("has")) {
|
|
||||||
if(value.endsWith(" HASPERM")) {
|
if(value.endsWith(" HASPERM")) {
|
||||||
return Bukkit.getPlayer(value.substring(0, value.length()-8)).hasPermission(compare) == outputValue;
|
String playername = value.substring(0, value.length()-8);
|
||||||
|
Player player = Bukkit.getPlayerExact(playername);
|
||||||
|
if(player != null){
|
||||||
|
return player.hasPermission(compare) == outputValue;
|
||||||
|
}
|
||||||
}else if(value.endsWith(" ISGREATER")) {
|
}else if(value.endsWith(" ISGREATER")) {
|
||||||
return (new BigDecimal(compare).compareTo(new BigDecimal(value.substring(0, value.length()-10))) <= 0 == outputValue);
|
return (new BigDecimal(compare).compareTo(new BigDecimal(value.substring(0, value.length()-10).replace(",",""))) <= 0 == outputValue);
|
||||||
}else{
|
}else{
|
||||||
return compare.equals(value) == outputValue;
|
return compare.equals(value) == outputValue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package me.rockyhawk.commandpanels.classresources;
|
package me.rockyhawk.commandpanels.classresources;
|
||||||
|
|
||||||
|
import dev.lone.itemsadder.api.CustomStack;
|
||||||
import me.arcaniax.hdb.api.HeadDatabaseAPI;
|
import me.arcaniax.hdb.api.HeadDatabaseAPI;
|
||||||
import me.rockyhawk.commandpanels.CommandPanels;
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
import me.rockyhawk.commandpanels.api.Panel;
|
import me.rockyhawk.commandpanels.api.Panel;
|
||||||
|
import me.rockyhawk.commandpanels.classresources.customheads.SavedCustomHead;
|
||||||
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
||||||
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
import me.rockyhawk.commandpanels.openpanelsmanager.PanelPosition;
|
||||||
import net.Indyuce.mmoitems.MMOItems;
|
import net.Indyuce.mmoitems.MMOItems;
|
||||||
@ -24,14 +26,9 @@ import org.bukkit.inventory.meta.*;
|
|||||||
import org.bukkit.inventory.meta.trim.ArmorTrim;
|
import org.bukkit.inventory.meta.trim.ArmorTrim;
|
||||||
import org.bukkit.inventory.meta.trim.TrimMaterial;
|
import org.bukkit.inventory.meta.trim.TrimMaterial;
|
||||||
import org.bukkit.inventory.meta.trim.TrimPattern;
|
import org.bukkit.inventory.meta.trim.TrimPattern;
|
||||||
import org.bukkit.map.MapCanvas;
|
|
||||||
import org.bukkit.map.MapRenderer;
|
|
||||||
import org.bukkit.map.MapView;
|
|
||||||
import org.bukkit.potion.PotionData;
|
|
||||||
import org.bukkit.potion.PotionType;
|
import org.bukkit.potion.PotionType;
|
||||||
|
|
||||||
import javax.swing.*;
|
import java.lang.reflect.Method;
|
||||||
import java.io.File;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -54,7 +51,7 @@ public class ItemCreation {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
ItemStack s = null;
|
ItemStack s = null;
|
||||||
boolean hideAttributes = true;
|
boolean hideAttributes = false;
|
||||||
String mat;
|
String mat;
|
||||||
String matraw;
|
String matraw;
|
||||||
String skullname;
|
String skullname;
|
||||||
@ -87,7 +84,7 @@ public class ItemCreation {
|
|||||||
if (matraw.split("\\s")[0].equalsIgnoreCase("cps=") || matraw.split("\\s")[0].toLowerCase().equals("cpo=")) {
|
if (matraw.split("\\s")[0].equalsIgnoreCase("cps=") || matraw.split("\\s")[0].toLowerCase().equals("cpo=")) {
|
||||||
skullname = p.getUniqueId().toString();
|
skullname = p.getUniqueId().toString();
|
||||||
mat = plugin.getHeads.playerHeadString();
|
mat = plugin.getHeads.playerHeadString();
|
||||||
if(plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
||||||
id = 3;
|
id = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,11 +92,55 @@ public class ItemCreation {
|
|||||||
if (matraw.split("\\s")[0].equalsIgnoreCase("hdb=")) {
|
if (matraw.split("\\s")[0].equalsIgnoreCase("hdb=")) {
|
||||||
skullname = "hdb";
|
skullname = "hdb";
|
||||||
mat = plugin.getHeads.playerHeadString();
|
mat = plugin.getHeads.playerHeadString();
|
||||||
if(plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
||||||
id = 3;
|
id = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Oraxen support, uses itemID (eg, oraxen= coin)
|
||||||
|
if (matraw.split("\\s")[0].equalsIgnoreCase("oraxen=")) {
|
||||||
|
String itemID = matraw.split("\\s")[1];
|
||||||
|
try {
|
||||||
|
// Load the OraxenItems class
|
||||||
|
Class<?> oraxenItemsClass = Class.forName("io.th0rgal.oraxen.api.OraxenItems");
|
||||||
|
|
||||||
|
// Retrieve the 'getItemById' method from the OraxenItems class
|
||||||
|
Method getItemByIdMethod = oraxenItemsClass.getMethod("getItemById", String.class);
|
||||||
|
getItemByIdMethod.setAccessible(true);
|
||||||
|
|
||||||
|
// Invoke the 'getItemById' method with the itemID
|
||||||
|
Object oraxenItem = getItemByIdMethod.invoke(null, itemID); // static method, so pass 'null'
|
||||||
|
|
||||||
|
// Ensure that the method returned a valid Oraxen item
|
||||||
|
if (oraxenItem != null) {
|
||||||
|
// Now we need to invoke 'getReferenceClone' on the OraxenItem object
|
||||||
|
Method getReferenceCloneMethod = oraxenItem.getClass().getMethod("getReferenceClone");
|
||||||
|
getReferenceCloneMethod.setAccessible(true);
|
||||||
|
ItemStack stack = (ItemStack) getReferenceCloneMethod.invoke(oraxenItem);
|
||||||
|
|
||||||
|
// Check if stack is not null
|
||||||
|
if (stack != null) {
|
||||||
|
s = stack;
|
||||||
|
normalCreation = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
plugin.debug(e, null);
|
||||||
|
// Handle the error or inform the player
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//ItemsAdder support, needs namespaceID (eg, itemsadder= money:coin)
|
||||||
|
if (matraw.split("\\s")[0].equalsIgnoreCase("itemsadder=")) {
|
||||||
|
String namespaceID = matraw.split("\\s")[1];
|
||||||
|
CustomStack stack = CustomStack.getInstance(namespaceID);
|
||||||
|
if(stack != null) {
|
||||||
|
s = stack.getItemStack().clone();
|
||||||
|
normalCreation = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//creates custom MMOItems items
|
//creates custom MMOItems items
|
||||||
if(matraw.split("\\s")[0].equalsIgnoreCase("mmo=") && plugin.getServer().getPluginManager().isPluginEnabled("MMOItems")){
|
if(matraw.split("\\s")[0].equalsIgnoreCase("mmo=") && plugin.getServer().getPluginManager().isPluginEnabled("MMOItems")){
|
||||||
String itemType = matraw.split("\\s")[1];
|
String itemType = matraw.split("\\s")[1];
|
||||||
@ -125,7 +166,7 @@ public class ItemCreation {
|
|||||||
|
|
||||||
//creates item from custom-items section of panel
|
//creates item from custom-items section of panel
|
||||||
if(matraw.split("\\s")[0].equalsIgnoreCase("cpi=")){
|
if(matraw.split("\\s")[0].equalsIgnoreCase("cpi=")){
|
||||||
s = makeCustomItemFromConfig(panel,position,panel.getConfig().getConfigurationSection("custom-item." + matraw.split("\\s")[1]), p, true, true, true);
|
s = makeCustomItemFromConfig(panel,position,panel.getConfig().getConfigurationSection("custom-item." + matraw.split("\\s")[1]), p, true, true, false);
|
||||||
normalCreation = false;
|
normalCreation = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +180,7 @@ public class ItemCreation {
|
|||||||
if (matraw.split("\\s")[1].equalsIgnoreCase("self")) {
|
if (matraw.split("\\s")[1].equalsIgnoreCase("self")) {
|
||||||
//if cps= self
|
//if cps= self
|
||||||
meta = (SkullMeta) s.getItemMeta();
|
meta = (SkullMeta) s.getItemMeta();
|
||||||
if(!plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)) {
|
if(!plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)) {
|
||||||
try {
|
try {
|
||||||
assert meta != null;
|
assert meta != null;
|
||||||
meta.setOwningPlayer(Bukkit.getOfflinePlayer(UUID.fromString(skullname)));
|
meta.setOwningPlayer(Bukkit.getOfflinePlayer(UUID.fromString(skullname)));
|
||||||
@ -189,19 +230,22 @@ public class ItemCreation {
|
|||||||
if(itemSection.contains("itemType")){
|
if(itemSection.contains("itemType")){
|
||||||
//if hidden, reverse
|
//if hidden, reverse
|
||||||
if(itemSection.getStringList("itemType").contains("noAttributes")){
|
if(itemSection.getStringList("itemType").contains("noAttributes")){
|
||||||
hideAttributes = false;
|
hideAttributes = true;
|
||||||
}
|
|
||||||
if(itemSection.getStringList("itemType").contains("noNBT")){
|
|
||||||
addNBT = false;
|
|
||||||
}
|
}
|
||||||
if(itemSection.getStringList("itemType").contains("placeable")){
|
if(itemSection.getStringList("itemType").contains("placeable")){
|
||||||
addNBT = false;
|
addNBT = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(addNBT){
|
if(itemSection.contains("nbt")){
|
||||||
s = plugin.nbt.setNBT(s);
|
//ItemStack item, ConfigurationSection section, Player player, Panel panel, PanelPosition position
|
||||||
|
plugin.nbt.applyNBTRecursively(s, itemSection.getConfigurationSection("nbt"), p, panel, position);
|
||||||
|
//plugin.nbt.applyNBTRecursively("", itemSection.getConfigurationSection("nbt"), s, p, panel, position);
|
||||||
}
|
}
|
||||||
|
if(addNBT){
|
||||||
|
plugin.nbt.setNBT(s, "CommandPanelsItem","boolean_" + "true");
|
||||||
|
}
|
||||||
|
|
||||||
if (itemSection.contains("enchanted")) {
|
if (itemSection.contains("enchanted")) {
|
||||||
try {
|
try {
|
||||||
ItemMeta EnchantMeta;
|
ItemMeta EnchantMeta;
|
||||||
@ -240,7 +284,6 @@ public class ItemCreation {
|
|||||||
patterns.add(new Pattern(DyeColor.valueOf(dyePattern[0]), PatternType.valueOf(dyePattern[1]))); //load patterns in config: RED,STRIPE_TOP
|
patterns.add(new Pattern(DyeColor.valueOf(dyePattern[0]), PatternType.valueOf(dyePattern[1]))); //load patterns in config: RED,STRIPE_TOP
|
||||||
}
|
}
|
||||||
bannerMeta.setPatterns(patterns);
|
bannerMeta.setPatterns(patterns);
|
||||||
bannerMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
|
||||||
s.setItemMeta(bannerMeta);
|
s.setItemMeta(bannerMeta);
|
||||||
}
|
}
|
||||||
}catch(Exception ignore){
|
}catch(Exception ignore){
|
||||||
@ -283,27 +326,22 @@ public class ItemCreation {
|
|||||||
|
|
||||||
if (itemSection.contains("potion")) {
|
if (itemSection.contains("potion")) {
|
||||||
//if the item is a potion, give it an effect
|
//if the item is a potion, give it an effect
|
||||||
|
String[] effectType = plugin.tex.placeholdersNoColour(panel,position,p,itemSection.getString("potion")).split("\\s");
|
||||||
|
//potion legacy or current
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_19) ||
|
||||||
|
(plugin.legacy.MAJOR_VERSION == MinecraftVersions.v1_20 && plugin.legacy.MINOR_VERSION <= 4)){
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.equals(MinecraftVersions.v1_8)){
|
||||||
|
plugin.classicPotion.applyPotionEffect(p, s, effectType);
|
||||||
|
}else {
|
||||||
|
plugin.legacyPotion.applyPotionEffect(p, s, effectType);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
try {
|
try {
|
||||||
PotionMeta potionMeta = (PotionMeta)s.getItemMeta();
|
PotionMeta potionMeta = (PotionMeta)s.getItemMeta();
|
||||||
String[] effectType = plugin.tex.placeholdersNoColour(panel,position,p,itemSection.getString("potion")).split("\\s");
|
|
||||||
assert potionMeta != null;
|
assert potionMeta != null;
|
||||||
boolean extended = false;
|
PotionType newData = PotionType.valueOf(effectType[0].toUpperCase());
|
||||||
boolean upgraded = false;
|
|
||||||
//create data
|
|
||||||
if(effectType.length >= 2){
|
|
||||||
if(effectType[1].equalsIgnoreCase("true")){
|
|
||||||
extended = true;
|
|
||||||
}
|
|
||||||
if(effectType.length == 3){
|
|
||||||
if(effectType[2].equalsIgnoreCase("true")){
|
|
||||||
upgraded = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PotionData newData = new PotionData(PotionType.valueOf(effectType[0].toUpperCase()),extended,upgraded);
|
|
||||||
//set meta
|
//set meta
|
||||||
potionMeta.setBasePotionData(newData);
|
potionMeta.setBasePotionType(newData);
|
||||||
potionMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
|
|
||||||
s.setItemMeta(potionMeta);
|
s.setItemMeta(potionMeta);
|
||||||
} catch (Exception er) {
|
} catch (Exception er) {
|
||||||
//don't add the effect
|
//don't add the effect
|
||||||
@ -311,10 +349,23 @@ public class ItemCreation {
|
|||||||
p.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + plugin.config.getString("config.format.error") + " potion: " + itemSection.getString("potion")));
|
p.sendMessage(plugin.tex.colour(plugin.tag + ChatColor.RED + plugin.config.getString("config.format.error") + " potion: " + itemSection.getString("potion")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(itemSection.contains("potion-color")){
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_11)){
|
||||||
|
String[] rgb = Objects.requireNonNull(itemSection.getString("potion-color")).split(",");
|
||||||
|
Color color = Color.fromRGB(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]), Integer.parseInt(rgb[2]));
|
||||||
|
PotionMeta potionMeta = (PotionMeta)s.getItemMeta();
|
||||||
|
assert potionMeta != null;
|
||||||
|
potionMeta.setColor(color);
|
||||||
|
s.setItemMeta(potionMeta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (itemSection.contains("damage")) {
|
if (itemSection.contains("damage")) {
|
||||||
//change the damage amount (placeholders accepted)
|
//change the damage amount (placeholders accepted)
|
||||||
//if the damage is not unbreakable and should be a value
|
//if the damage is not unbreakable and should be a value
|
||||||
if (plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)) {
|
if (plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)) {
|
||||||
try {
|
try {
|
||||||
s.setDurability(Short.parseShort(Objects.requireNonNull(plugin.tex.placeholders(panel,position,p, itemSection.getString("damage")))));
|
s.setDurability(Short.parseShort(Objects.requireNonNull(plugin.tex.placeholders(panel,position,p, itemSection.getString("damage")))));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -327,8 +378,7 @@ public class ItemCreation {
|
|||||||
ItemMeta unbreak = s.getItemMeta();
|
ItemMeta unbreak = s.getItemMeta();
|
||||||
unbreak.setUnbreakable(true);
|
unbreak.setUnbreakable(true);
|
||||||
s.setItemMeta(unbreak);
|
s.setItemMeta(unbreak);
|
||||||
}
|
}else {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Damageable itemDamage = (Damageable) s.getItemMeta();
|
Damageable itemDamage = (Damageable) s.getItemMeta();
|
||||||
itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.tex.placeholders(panel, position, p, itemSection.getString("damage")))));
|
itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.tex.placeholders(panel, position, p, itemSection.getString("damage")))));
|
||||||
@ -339,13 +389,9 @@ public class ItemCreation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (itemSection.contains("nbt")) {
|
|
||||||
for(String key : itemSection.getConfigurationSection("nbt").getKeys(false)){
|
|
||||||
s = plugin.nbt.setNBT(s,key,itemSection.getString("nbt." + key));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 1.20 Trim Feature for Player Armor
|
// 1.20 Trim Feature for Player Armor
|
||||||
if(plugin.legacy.LOCAL_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_20) && itemSection.contains("trim")){
|
if(plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_20) && itemSection.contains("trim")){
|
||||||
// trim: <Material> <Pattern>
|
// trim: <Material> <Pattern>
|
||||||
String trim = itemSection.getString("trim");
|
String trim = itemSection.getString("trim");
|
||||||
String[] trimList = trim.split("\\s");
|
String[] trimList = trim.split("\\s");
|
||||||
@ -375,7 +421,7 @@ public class ItemCreation {
|
|||||||
//check that the panel is already open and not running commands when opening
|
//check that the panel is already open and not running commands when opening
|
||||||
if (itemSection.contains("refresh-commands") && plugin.openPanels.hasPanelOpen(p.getName(), panel.getName(), position)) {
|
if (itemSection.contains("refresh-commands") && plugin.openPanels.hasPanelOpen(p.getName(), panel.getName(), position)) {
|
||||||
try {
|
try {
|
||||||
plugin.commandTags.runCommands(panel,position,p,itemSection.getStringList("refresh-commands"));
|
plugin.commandRunner.runCommands(panel,position,p,itemSection.getStringList("refresh-commands"), null);
|
||||||
}catch(Exception ex){
|
}catch(Exception ex){
|
||||||
plugin.debug(ex,p);
|
plugin.debug(ex,p);
|
||||||
}
|
}
|
||||||
@ -385,7 +431,7 @@ public class ItemCreation {
|
|||||||
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " material: " + itemSection.getString("material")));
|
p.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.error") + " material: " + itemSection.getString("material")));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
plugin.setName(panel,s, itemSection.getString("name"), itemSection.getStringList("lore"), p, placeholders, colours, hideAttributes);
|
s = plugin.setName(panel,s, itemSection.getString("name"), itemSection.getStringList("lore"), p, placeholders, colours, hideAttributes);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -416,7 +462,7 @@ public class ItemCreation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
||||||
if (cont.getDurability() != 0 && !cont.getType().toString().equals("SKULL_ITEM")) {
|
if (cont.getDurability() != 0 && !cont.getType().toString().equals("SKULL_ITEM")) {
|
||||||
file.set("panels." + panelName + ".item." + i + ".ID", cont.getDurability());
|
file.set("panels." + panelName + ".item." + i + ".ID", cont.getDurability());
|
||||||
}
|
}
|
||||||
@ -434,14 +480,7 @@ public class ItemCreation {
|
|||||||
}
|
}
|
||||||
if(plugin.getHeads.ifSkullOrHead(cont.getType().toString())){
|
if(plugin.getHeads.ifSkullOrHead(cont.getType().toString())){
|
||||||
if(!Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("%") && !Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("=")) {
|
if(!Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("%") && !Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("=")) {
|
||||||
SkullMeta meta = (SkullMeta) cont.getItemMeta();
|
file.set("panels." + panelName + ".item." + i + ".material", plugin.getHeads.playerHeadString());
|
||||||
if (plugin.customHeads.getHeadBase64(cont) != null && !plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)) {
|
|
||||||
//inject base64 here, disable for legacy as is not working
|
|
||||||
file.set("panels." + panelName + ".item." + i + ".material", "cps= " + plugin.customHeads.getHeadBase64(cont));
|
|
||||||
} else if (meta.hasOwner()) {
|
|
||||||
//check for skull owner
|
|
||||||
file.set("panels." + panelName + ".item." + i + ".material", "cps= " + meta.getOwner());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -455,13 +494,35 @@ public class ItemCreation {
|
|||||||
//not a banner
|
//not a banner
|
||||||
file.set("panels." + panelName + ".item." + i + ".banner", null);
|
file.set("panels." + panelName + ".item." + i + ".banner", null);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
//potion legacy PotionData or current PotionType
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_19) ||
|
||||||
|
(plugin.legacy.MAJOR_VERSION == MinecraftVersions.v1_20 && plugin.legacy.MINOR_VERSION <= 4)){
|
||||||
|
if(plugin.legacyPotion.retrievePotionData(cont) != null) {
|
||||||
|
file.set("panels." + panelName + ".item." + i + ".potion", plugin.legacyPotion.retrievePotionData(cont));
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
PotionMeta potionMeta = (PotionMeta) cont.getItemMeta();
|
||||||
|
assert potionMeta != null;
|
||||||
|
String potionType = potionMeta.getBasePotionType().toString(); // Gets the potion type as a string rather than bukkit type
|
||||||
|
file.set("panels." + panelName + ".item." + i + ".potion", potionType);
|
||||||
|
}
|
||||||
|
}catch(Exception ignore){
|
||||||
|
//not a banner
|
||||||
|
file.set("panels." + panelName + ".item." + i + ".potion", null);
|
||||||
|
}
|
||||||
file.set("panels." + panelName + ".item." + i + ".stack", cont.getAmount());
|
file.set("panels." + panelName + ".item." + i + ".stack", cont.getAmount());
|
||||||
if(!cont.getEnchantments().isEmpty()){
|
if(!cont.getEnchantments().isEmpty()){
|
||||||
file.set("panels." + panelName + ".item." + i + ".enchanted", "true");
|
Map<Enchantment, Integer> enchantments = cont.getEnchantments();
|
||||||
|
List<String> newEnchantments = new ArrayList<>();
|
||||||
|
for(Enchantment enchantment : enchantments.keySet()){
|
||||||
|
newEnchantments.add(enchantment.getKey().getKey() + " " + enchantments.get(enchantment));
|
||||||
|
}
|
||||||
|
file.set("panels." + panelName + ".item." + i + ".enchanted", newEnchantments);
|
||||||
}
|
}
|
||||||
file.set("panels." + panelName + ".item." + i + ".name", Objects.requireNonNull(cont.getItemMeta()).getDisplayName());
|
file.set("panels." + panelName + ".item." + i + ".name", Objects.requireNonNull(cont.getItemMeta()).getDisplayName());
|
||||||
file.set("panels." + panelName + ".item." + i + ".lore", Objects.requireNonNull(cont.getItemMeta()).getLore());
|
file.set("panels." + panelName + ".item." + i + ".lore", Objects.requireNonNull(cont.getItemMeta()).getLore());
|
||||||
if(plugin.legacy.LOCAL_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_14)){
|
if(plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_14)){
|
||||||
file.set("panels." + panelName + ".item." + i + ".customdata", Objects.requireNonNull(cont.getItemMeta()).getCustomModelData());
|
file.set("panels." + panelName + ".item." + i + ".customdata", Objects.requireNonNull(cont.getItemMeta()).getCustomModelData());
|
||||||
}
|
}
|
||||||
}catch(Exception n){
|
}catch(Exception n){
|
||||||
@ -477,11 +538,14 @@ public class ItemCreation {
|
|||||||
Material, Name, Lore, Enchanted, Potion
|
Material, Name, Lore, Enchanted, Potion
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public boolean isIdentical(ItemStack one, ItemStack two){
|
public boolean isIdentical(ItemStack one, ItemStack two, Boolean nbtCheck){
|
||||||
//check material
|
//check material
|
||||||
if (one.getType() != two.getType()) {
|
if (one.getType() != two.getType()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if(one.hasItemMeta() != two.hasItemMeta()){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
//check for name
|
//check for name
|
||||||
try {
|
try {
|
||||||
if (!one.getItemMeta().getDisplayName().equals(two.getItemMeta().getDisplayName())) {
|
if (!one.getItemMeta().getDisplayName().equals(two.getItemMeta().getDisplayName())) {
|
||||||
@ -490,6 +554,13 @@ public class ItemCreation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch(Exception ignore){}
|
}catch(Exception ignore){}
|
||||||
|
//check for ID 1.12.2 and below
|
||||||
|
try {
|
||||||
|
if (plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12) &&
|
||||||
|
(one.getDurability() != two.getDurability())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}catch(Exception ignore){}
|
||||||
//check for lore
|
//check for lore
|
||||||
try {
|
try {
|
||||||
if (!one.getItemMeta().getLore().equals(two.getItemMeta().getLore())) {
|
if (!one.getItemMeta().getLore().equals(two.getItemMeta().getLore())) {
|
||||||
@ -498,9 +569,27 @@ public class ItemCreation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}catch(Exception ignore){}
|
}catch(Exception ignore){}
|
||||||
|
//check for custom model data
|
||||||
|
try {
|
||||||
|
if (plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_14)){
|
||||||
|
if (one.getItemMeta().getCustomModelData() != (two.getItemMeta().getCustomModelData())) {
|
||||||
|
if(one.getItemMeta().hasCustomModelData()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch(Exception ignore){}
|
||||||
|
//check for nbt
|
||||||
|
if(nbtCheck) {
|
||||||
|
try {
|
||||||
|
if (!plugin.nbt.hasSameNBT(one, two)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (Exception ignore) {}
|
||||||
|
}
|
||||||
//check for damage
|
//check for damage
|
||||||
try {
|
try {
|
||||||
if(plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_12)){
|
||||||
if(one.getDurability() != two.getDurability()) {
|
if(one.getDurability() != two.getDurability()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -514,19 +603,21 @@ public class ItemCreation {
|
|||||||
} catch (Exception ignore) {}
|
} catch (Exception ignore) {}
|
||||||
//check for potions
|
//check for potions
|
||||||
try {
|
try {
|
||||||
|
//choose between legacy PotionData (pre 1.20.5) or PotionType
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_19) ||
|
||||||
|
(plugin.legacy.MAJOR_VERSION == MinecraftVersions.v1_20 && plugin.legacy.MINOR_VERSION <= 4)){
|
||||||
|
String potionOne = plugin.legacyPotion.retrievePotionData(one);
|
||||||
|
String potionTwo = plugin.legacyPotion.retrievePotionData(two);
|
||||||
|
if(!potionOne.equals(potionTwo)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//post 1.20.5 compare
|
||||||
PotionMeta meta1 = (PotionMeta) one.getItemMeta();
|
PotionMeta meta1 = (PotionMeta) one.getItemMeta();
|
||||||
PotionMeta meta2 = (PotionMeta) two.getItemMeta();
|
PotionMeta meta2 = (PotionMeta) two.getItemMeta();
|
||||||
//different duration
|
if (meta1.getBasePotionType().toString().compareTo(meta2.getBasePotionType().toString()) != 0){
|
||||||
if(meta1.getBasePotionData().isExtended() != meta2.getBasePotionData().isExtended()){
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//different upgrade
|
|
||||||
if(meta1.getBasePotionData().isUpgraded() != meta2.getBasePotionData().isUpgraded()){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//different potion type
|
|
||||||
if (meta1.getBasePotionData().getType().compareTo(meta2.getBasePotionData().getType()) != 0){
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}catch(Exception ignore){}
|
}catch(Exception ignore){}
|
||||||
//check for enchantments
|
//check for enchantments
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
package me.rockyhawk.commandpanels.classresources;
|
||||||
|
|
||||||
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class MiniMessageUtils {
|
||||||
|
|
||||||
|
CommandPanels plugin;
|
||||||
|
public MiniMessageUtils(CommandPanels pl) {
|
||||||
|
this.plugin = pl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
MiniMessage is used here as an alternative to the standard Minecraft colour codes &
|
||||||
|
As MiniMessage does not accept legacy colour codes at any point, which is
|
||||||
|
a possibility when using Minecraft colour codes, running a try/catch allows for
|
||||||
|
MiniMessage to be used anywhere and ignored when legacy colour codes are found.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public String doMiniMessageLegacy(String string) {
|
||||||
|
MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||||
|
try {
|
||||||
|
Component component = miniMessage.deserialize(string);
|
||||||
|
return LegacyComponentSerializer.builder()
|
||||||
|
.character('&')
|
||||||
|
.hexColors()
|
||||||
|
.build()
|
||||||
|
.serialize(component);
|
||||||
|
}catch (Exception e){
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> doMiniMessageLegacy(List<String> strings) {
|
||||||
|
return strings.stream()
|
||||||
|
.map(this::doMiniMessageLegacy)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Component doMiniMessage(String string) {
|
||||||
|
LegacyComponentSerializer legacyComponentSerializer = LegacyComponentSerializer.builder().hexColors().character('&').build();
|
||||||
|
Component component = legacyComponentSerializer.deserialize(string.replace('§', '&'));
|
||||||
|
|
||||||
|
return MiniMessage.miniMessage().deserialize(MiniMessage.miniMessage().serialize(component.decoration(TextDecoration.ITALIC, false))
|
||||||
|
.replace("\\<", "<").replace("\\", "").replace("\n", "<br>")).decoration(TextDecoration.ITALIC, false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Component> doMiniMessage(List<String> strings) {
|
||||||
|
return strings.stream()
|
||||||
|
.map(this::doMiniMessage)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
@ -1,11 +0,0 @@
|
|||||||
package me.rockyhawk.commandpanels.classresources;
|
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
|
||||||
|
|
||||||
public class SerializerUtils {
|
|
||||||
|
|
||||||
public static Component serializeText(String msg){
|
|
||||||
return MiniMessage.miniMessage().deserialize(msg);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,34 @@
|
|||||||
|
package me.rockyhawk.commandpanels.classresources.customheads;
|
||||||
|
|
||||||
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import me.rockyhawk.commandpanels.classresources.customheads.methods.CustomHeadGameProfile;
|
||||||
|
import me.rockyhawk.commandpanels.classresources.customheads.methods.CustomHeadPlayerProfile;
|
||||||
|
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class GetCustomHeads {
|
||||||
|
CustomHeadGameProfile gameProfileHeadClass;
|
||||||
|
CustomHeadPlayerProfile playerProfileHeadClass;
|
||||||
|
CommandPanels plugin;
|
||||||
|
|
||||||
|
public GetCustomHeads(CommandPanels pl) {
|
||||||
|
this.plugin = pl;
|
||||||
|
gameProfileHeadClass = new CustomHeadGameProfile(pl);
|
||||||
|
playerProfileHeadClass = new CustomHeadPlayerProfile();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getCustomHead(String base64){
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_18)){
|
||||||
|
return playerProfileHeadClass.getCustomHead(base64);
|
||||||
|
}else{
|
||||||
|
return gameProfileHeadClass.getCustomHead(base64);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public ItemStack getPlayerHead(String playerName){
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_21)){
|
||||||
|
return playerProfileHeadClass.getPlayerHead(playerName);
|
||||||
|
}else{
|
||||||
|
return gameProfileHeadClass.getPlayerHead(playerName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package me.rockyhawk.commandpanels.classresources.customheads;
|
||||||
|
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class SavedCustomHead {
|
||||||
|
public String base64;
|
||||||
|
public ItemStack headItem;
|
||||||
|
public boolean isValid; // true if the head was successfully fetched, false otherwise
|
||||||
|
public long lastAttempt; // timestamp of the last attempt
|
||||||
|
|
||||||
|
public SavedCustomHead(ItemStack head, String base64value, boolean isValidAttempt) {
|
||||||
|
base64 = base64value;
|
||||||
|
headItem = head;
|
||||||
|
isValid = isValidAttempt;
|
||||||
|
lastAttempt = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,185 @@
|
|||||||
|
package me.rockyhawk.commandpanels.classresources.customheads.methods;
|
||||||
|
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import com.mojang.authlib.properties.Property;
|
||||||
|
import com.mojang.authlib.properties.PropertyMap;
|
||||||
|
import me.rockyhawk.commandpanels.CommandPanels;
|
||||||
|
import me.rockyhawk.commandpanels.classresources.customheads.SavedCustomHead;
|
||||||
|
import me.rockyhawk.commandpanels.ioclasses.legacy.MinecraftVersions;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class CustomHeadGameProfile {
|
||||||
|
CommandPanels plugin;
|
||||||
|
public CustomHeadGameProfile(CommandPanels pl) {
|
||||||
|
this.plugin = pl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HashMap<String, SavedCustomHead> savedCustomHeads = new HashMap<>();
|
||||||
|
|
||||||
|
//getting the head from a Player Name
|
||||||
|
public ItemStack getPlayerHead(String name) {
|
||||||
|
byte id = 0;
|
||||||
|
if (plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_15)) {
|
||||||
|
id = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
//get texture if already cached
|
||||||
|
if (savedCustomHeads.containsKey(name)) {
|
||||||
|
if (!savedCustomHeads.get(name).isValid && (System.currentTimeMillis() - savedCustomHeads.get(name).lastAttempt) < 60000) {
|
||||||
|
// If the last attempt was less than 60 seconds ago and was invalid, return null or a default item
|
||||||
|
return new ItemStack(Material.valueOf(plugin.getHeads.playerHeadString()));
|
||||||
|
}
|
||||||
|
if(savedCustomHeads.get(name).isValid) {
|
||||||
|
return savedCustomHeads.get(name).headItem; // Return cached item if valid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//create ItemStack
|
||||||
|
ItemStack itemStack = new ItemStack(Material.matchMaterial(plugin.getHeads.playerHeadString()), 1, id);
|
||||||
|
|
||||||
|
//Run fallback code, if API call fails, use legacy setOwner
|
||||||
|
SkullMeta meta = (SkullMeta) itemStack.getItemMeta();
|
||||||
|
meta.setOwner(name);
|
||||||
|
itemStack.setItemMeta(meta);
|
||||||
|
|
||||||
|
// Fetch and cache the texture asynchronously
|
||||||
|
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
|
||||||
|
try {
|
||||||
|
if(plugin.debug.consoleDebug){
|
||||||
|
plugin.getServer().getConsoleSender().sendMessage(plugin.tex.colour(plugin.tag +
|
||||||
|
ChatColor.WHITE +
|
||||||
|
"Download & Cache Head Texture for " + name));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetch the player UUID from the Mojang API
|
||||||
|
URL uuidUrl = new URL("https://api.mojang.com/users/profiles/minecraft/" + name);
|
||||||
|
URLConnection uuidConnection = uuidUrl.openConnection();
|
||||||
|
uuidConnection.setConnectTimeout(2000); // Set connection timeout to 2 seconds
|
||||||
|
uuidConnection.setReadTimeout(2000); // Set read timeout to 2 seconds
|
||||||
|
//Json is simple and structured so a hard code solution will avoid the need for a library
|
||||||
|
String uuidReader = new Scanner(uuidConnection.getInputStream(),
|
||||||
|
StandardCharsets.UTF_8.name()).useDelimiter("\\A").next();
|
||||||
|
String uuid = uuidReader.split("\"id\" : \"")[1].split("\"")[0];
|
||||||
|
|
||||||
|
// Fetch the skin texture from the Mojang API using the player UUID
|
||||||
|
URL texturesUrl = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid);
|
||||||
|
URLConnection texturesConnection = texturesUrl.openConnection();
|
||||||
|
texturesConnection.setConnectTimeout(2000); // Set connection timeout to 2 seconds
|
||||||
|
texturesConnection.setReadTimeout(2000); // Set read timeout to 2 seconds
|
||||||
|
//Json is simple and structured so a hard code solution will avoid the need for a library
|
||||||
|
String valueReader = new Scanner(texturesConnection.getInputStream(),
|
||||||
|
StandardCharsets.UTF_8.name()).useDelimiter("\\A").next();
|
||||||
|
String value = valueReader.split("\"value\" : \"")[1].split("\"")[0];
|
||||||
|
|
||||||
|
// Once the API call is finished, update the ItemStack on the main thread
|
||||||
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
|
itemStack.setItemMeta(getCustomHead(name, value).getItemMeta());
|
||||||
|
savedCustomHeads.put(name, new SavedCustomHead(itemStack, value, true));
|
||||||
|
});
|
||||||
|
} catch (Exception ignore) {
|
||||||
|
Bukkit.getScheduler().runTask(plugin, () -> {
|
||||||
|
//do not overwrite a valid cached head
|
||||||
|
if(savedCustomHeads.containsKey(name) && savedCustomHeads.get(name).isValid){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
savedCustomHeads.put(name, new SavedCustomHead(null, null, false)); // Mark as invalid
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return itemStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
//will also use cached heads feature to get heads if player name is provided
|
||||||
|
public ItemStack getCustomHead(String playerName, String b64stringtexture) {
|
||||||
|
//check for any saved heads
|
||||||
|
if(savedCustomHeads.containsKey(playerName)) {
|
||||||
|
if (savedCustomHeads.get(playerName).base64 != null) {
|
||||||
|
return savedCustomHeads.get(playerName).headItem;
|
||||||
|
}
|
||||||
|
savedCustomHeads.get(playerName).isValid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//clear cached textures list until length limit is reached
|
||||||
|
Iterator<Map.Entry<String, SavedCustomHead>> iterator = savedCustomHeads.entrySet().iterator();
|
||||||
|
while (savedCustomHeads.size() > 2000 && iterator.hasNext()) {
|
||||||
|
iterator.next(); // Move to next entry
|
||||||
|
iterator.remove(); // Remove the entry
|
||||||
|
}
|
||||||
|
|
||||||
|
//if saved head is not found from player name, get head manually
|
||||||
|
return getCustomHead(b64stringtexture);
|
||||||
|
}
|
||||||
|
|
||||||
|
//used to get heads from Base64 Textures
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public ItemStack getCustomHead(String b64stringtexture) {
|
||||||
|
//get head from base64
|
||||||
|
GameProfile profile = new GameProfile(UUID.randomUUID(), "");
|
||||||
|
PropertyMap propertyMap = profile.getProperties();
|
||||||
|
if (propertyMap == null) {
|
||||||
|
throw new IllegalStateException("Profile doesn't contain a property map");
|
||||||
|
} else {
|
||||||
|
propertyMap.put("textures", new Property("textures", b64stringtexture));
|
||||||
|
byte id = 0;
|
||||||
|
if(plugin.legacy.MAJOR_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_15)){
|
||||||
|
id = 3;
|
||||||
|
}
|
||||||
|
ItemStack head = new ItemStack(Material.matchMaterial(plugin.getHeads.playerHeadString()), 1,id);
|
||||||
|
ItemMeta headMeta = head.getItemMeta();
|
||||||
|
assert headMeta != null;
|
||||||
|
|
||||||
|
Field profileField;
|
||||||
|
Method setProfileMethod = null;
|
||||||
|
try {
|
||||||
|
// Attempt to access the 'profile' field directly
|
||||||
|
// Also writes to 'serializedProfile' field as one cannot be null while the other is not
|
||||||
|
// This block is mainly for 1.20.2+ versions
|
||||||
|
profileField = headMeta.getClass().getDeclaredField("profile");
|
||||||
|
Field serializedProfileField = headMeta.getClass().getDeclaredField("serializedProfile");
|
||||||
|
|
||||||
|
profileField.setAccessible(true);
|
||||||
|
serializedProfileField.setAccessible(true);
|
||||||
|
|
||||||
|
profileField.set(headMeta, profile);
|
||||||
|
serializedProfileField.set(headMeta, profile); // Assuming serializedProfile is of the same type
|
||||||
|
} catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e1) {
|
||||||
|
try {
|
||||||
|
// This block covers versions that have a 'setProfile' method instead of direct field access
|
||||||
|
// Likely for versions prior to 1.20.2
|
||||||
|
setProfileMethod = headMeta.getClass().getDeclaredMethod("setProfile", GameProfile.class);
|
||||||
|
} catch (NoSuchMethodException ignore) {}
|
||||||
|
} catch (SecurityException ignored) {}
|
||||||
|
try {
|
||||||
|
if (setProfileMethod == null) {
|
||||||
|
// Attempt to access the 'profile' field directly
|
||||||
|
// This block is a generic fallback for versions lacking the 'setProfile' method
|
||||||
|
profileField = headMeta.getClass().getDeclaredField("profile");
|
||||||
|
profileField.setAccessible(true);
|
||||||
|
profileField.set(headMeta, profile);
|
||||||
|
} else {
|
||||||
|
// Use the 'setProfile' method if it was found
|
||||||
|
setProfileMethod.setAccessible(true);
|
||||||
|
setProfileMethod.invoke(headMeta, profile);
|
||||||
|
}
|
||||||
|
} catch (Exception e1) {
|
||||||
|
plugin.debug(e1,null);
|
||||||
|
}
|
||||||
|
|
||||||
|
head.setItemMeta(headMeta);
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,118 @@
|
|||||||
|
package me.rockyhawk.commandpanels.classresources.customheads.methods;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
|
import org.bukkit.profile.PlayerProfile;
|
||||||
|
import org.bukkit.profile.PlayerTextures;
|
||||||
|
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class CustomHeadPlayerProfile {
|
||||||
|
//cached itemstacks stored for access
|
||||||
|
public HashMap<String, ItemStack> savedCustomHeads = new HashMap<>();
|
||||||
|
|
||||||
|
//Using the PlayerProfile API for getting custom heads
|
||||||
|
public ItemStack getCustomHead(String base64Texture) {
|
||||||
|
//check for any saved heads
|
||||||
|
if(savedCustomHeads.containsKey(base64Texture)) {
|
||||||
|
return savedCustomHeads.get(base64Texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
//clear cached textures list until length limit is reached
|
||||||
|
Iterator<Map.Entry<String, ItemStack>> iterator = savedCustomHeads.entrySet().iterator();
|
||||||
|
while (savedCustomHeads.size() > 2000 && iterator.hasNext()) {
|
||||||
|
iterator.next(); // Move to next entry
|
||||||
|
iterator.remove(); // Remove the entry
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new player head ItemStack
|
||||||
|
ItemStack skull = new ItemStack(Material.PLAYER_HEAD, 1);
|
||||||
|
SkullMeta skullMeta = (SkullMeta) skull.getItemMeta();
|
||||||
|
|
||||||
|
// Create a new PlayerProfile
|
||||||
|
UUID uuid = UUID.randomUUID(); // Unique ID for the profile
|
||||||
|
PlayerProfile profile = Bukkit.createPlayerProfile(uuid);
|
||||||
|
|
||||||
|
// Decode the base64 texture and extract the texture URL
|
||||||
|
String decodedTexture = extractSkinUrlFromBase64(base64Texture);
|
||||||
|
|
||||||
|
// Set the skin URL using PlayerTextures
|
||||||
|
PlayerTextures textures = profile.getTextures();
|
||||||
|
try {
|
||||||
|
// Using a URL object for the texture
|
||||||
|
textures.setSkin(new URL(decodedTexture));
|
||||||
|
} catch (MalformedURLException ignore) {} // Base64 has no URL, ignore
|
||||||
|
|
||||||
|
// Apply the textures to the profile
|
||||||
|
profile.setTextures(textures);
|
||||||
|
|
||||||
|
// Apply the PlayerProfile to the SkullMeta
|
||||||
|
skullMeta.setOwnerProfile(profile);
|
||||||
|
|
||||||
|
// Set the modified SkullMeta back to the ItemStack
|
||||||
|
skull.setItemMeta(skullMeta);
|
||||||
|
|
||||||
|
savedCustomHeads.put(base64Texture, skull);
|
||||||
|
return skull;
|
||||||
|
}
|
||||||
|
|
||||||
|
// New method to get a player head by player name
|
||||||
|
public ItemStack getPlayerHead(String playerName) {
|
||||||
|
//check for any saved heads
|
||||||
|
if(savedCustomHeads.containsKey(playerName)) {
|
||||||
|
return savedCustomHeads.get(playerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
//clear cached textures list until length limit is reached
|
||||||
|
Iterator<Map.Entry<String, ItemStack>> iterator = savedCustomHeads.entrySet().iterator();
|
||||||
|
while (savedCustomHeads.size() > 2000 && iterator.hasNext()) {
|
||||||
|
iterator.next(); // Move to next entry
|
||||||
|
iterator.remove(); // Remove the entry
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new player head ItemStack
|
||||||
|
ItemStack skull = new ItemStack(Material.PLAYER_HEAD, 1);
|
||||||
|
SkullMeta skullMeta = (SkullMeta) skull.getItemMeta();
|
||||||
|
|
||||||
|
// Get the OfflinePlayer object for the provided player name
|
||||||
|
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerName);
|
||||||
|
|
||||||
|
// Create a PlayerProfile from the player's UUID
|
||||||
|
UUID playerUUID = offlinePlayer.getUniqueId();
|
||||||
|
PlayerProfile profile = Bukkit.createPlayerProfile(playerUUID);
|
||||||
|
|
||||||
|
// Apply the PlayerProfile to the SkullMeta
|
||||||
|
skullMeta.setOwnerProfile(profile);
|
||||||
|
|
||||||
|
// Set the modified SkullMeta back to the ItemStack
|
||||||
|
skull.setItemMeta(skullMeta);
|
||||||
|
|
||||||
|
savedCustomHeads.put(playerName, skull);
|
||||||
|
return skull;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to extract the skin URL from the base64 texture
|
||||||
|
private String extractSkinUrlFromBase64(String base64Texture) {
|
||||||
|
// Decode the base64 string
|
||||||
|
byte[] decodedBytes = Base64.getDecoder().decode(base64Texture);
|
||||||
|
String decodedString = new String(decodedBytes);
|
||||||
|
|
||||||
|
// Parse the decoded string as JSON
|
||||||
|
JsonObject jsonObject = JsonParser.parseString(decodedString).getAsJsonObject();
|
||||||
|
|
||||||
|
// Navigate to "textures" -> "SKIN" -> "url"
|
||||||
|
JsonObject textures = jsonObject.getAsJsonObject("textures");
|
||||||
|
JsonObject skin = textures.getAsJsonObject("SKIN");
|
||||||
|
|
||||||
|
// Return the URL if it exists
|
||||||
|
return skin.has("url") ? skin.get("url").getAsString() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -37,6 +37,7 @@ public class ItemFallManager implements Listener {
|
|||||||
|
|
||||||
e.getPlayer().getWorld().dropItem(e.getPlayer().getLocation(),stack);
|
e.getPlayer().getWorld().dropItem(e.getPlayer().getLocation(),stack);
|
||||||
}else if(e.getPanel().getConfig().getStringList("item." + item + ".itemType").contains("returnItem")){
|
}else if(e.getPanel().getConfig().getStringList("item." + item + ".itemType").contains("returnItem")){
|
||||||
|
//Remove item is listed just because website is not updated yet.
|
||||||
ItemStack stack = e.getPlayer().getOpenInventory().getTopInventory().getItem(Integer.parseInt(item));
|
ItemStack stack = e.getPlayer().getOpenInventory().getTopInventory().getItem(Integer.parseInt(item));
|
||||||
if(stack == null || stack.getType() == Material.AIR){
|
if(stack == null || stack.getType() == Material.AIR){
|
||||||
continue;
|
continue;
|
||||||
|
@ -74,7 +74,9 @@ public class CreateText {
|
|||||||
//change colour
|
//change colour
|
||||||
for(String temp : setpapi){
|
for(String temp : setpapi){
|
||||||
try {
|
try {
|
||||||
setpapi.set(tempInt, plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', temp)));
|
setpapi.set(tempInt,
|
||||||
|
plugin.hex.translateHexColorCodes(
|
||||||
|
ChatColor.translateAlternateColorCodes('&', temp)));
|
||||||
}catch(NullPointerException ignore){}
|
}catch(NullPointerException ignore){}
|
||||||
tempInt += 1;
|
tempInt += 1;
|
||||||
}
|
}
|
||||||
@ -84,7 +86,11 @@ public class CreateText {
|
|||||||
//regular string papi, but only colours so Player doesn't need to be there
|
//regular string papi, but only colours so Player doesn't need to be there
|
||||||
public String colour(String setpapi) {
|
public String colour(String setpapi) {
|
||||||
try {
|
try {
|
||||||
setpapi = plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi));
|
if(plugin.miniMessage != null){
|
||||||
|
setpapi = plugin.miniMessage.doMiniMessageLegacy(setpapi);
|
||||||
|
}
|
||||||
|
setpapi = ChatColor.translateAlternateColorCodes('&', setpapi);
|
||||||
|
setpapi = plugin.hex.translateHexColorCodes(setpapi);
|
||||||
return setpapi;
|
return setpapi;
|
||||||
}catch(NullPointerException e){
|
}catch(NullPointerException e){
|
||||||
return setpapi;
|
return setpapi;
|
||||||
@ -105,7 +111,11 @@ public class CreateText {
|
|||||||
public String placeholders(Panel panel, PanelPosition position, Player p, String setpapi) {
|
public String placeholders(Panel panel, PanelPosition position, Player p, String setpapi) {
|
||||||
try {
|
try {
|
||||||
setpapi = attachPlaceholders(panel,position, p,setpapi);
|
setpapi = attachPlaceholders(panel,position, p,setpapi);
|
||||||
setpapi = plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi));
|
if(plugin.miniMessage != null){
|
||||||
|
setpapi = plugin.miniMessage.doMiniMessageLegacy(setpapi);
|
||||||
|
}
|
||||||
|
setpapi = ChatColor.translateAlternateColorCodes('&', setpapi);
|
||||||
|
setpapi = plugin.hex.translateHexColorCodes(setpapi);
|
||||||
return setpapi;
|
return setpapi;
|
||||||
}catch(NullPointerException e){
|
}catch(NullPointerException e){
|
||||||
return setpapi;
|
return setpapi;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user