mirror of
https://github.com/TotalFreedomMC/TotalFreedomMod.git
synced 2024-05-20 19:41:24 +00:00
Compare commits
230 commits
7.0.0
...
developmen
Author | SHA1 | Date | |
---|---|---|---|
30e38d44a9 | |||
ea418bb916 | |||
7d1705c79f | |||
2551d184ca | |||
f9eabf27d5 | |||
846154a723 | |||
804614d011 | |||
2c22c6c52d | |||
5ef0f29ffe | |||
11134f4109 | |||
e7992c7eb4 | |||
82e966dfb0 | |||
f457c4cde2 | |||
004a0f3d7c | |||
cf5199f28e | |||
43c68579e5 | |||
127ee7d9f9 | |||
c873fd4abc | |||
fa90e1d239 | |||
b711ed517f | |||
2618d97a3e | |||
1c4647290a | |||
f00f67a844 | |||
850f12103c | |||
7d71fc0a29 | |||
a33fd0d978 | |||
7fd77f3cbb | |||
2eb0ab4cb1 | |||
2612aaec31 | |||
6e7ad73152 | |||
af6411b82c | |||
e9ba958a4e | |||
8cff0124ea | |||
1162f10ebb | |||
35965b0b10 | |||
1253732f77 | |||
7ce173e02b | |||
aa20a6e579 | |||
e1bee32163 | |||
4d006ed172 | |||
a29392cab2 | |||
1ecfb0b066 | |||
706229004c | |||
a4adfa9bee | |||
225ade8753 | |||
bf2323bed2 | |||
8cbfde8bbc | |||
a42cb6aff9 | |||
5849947c6b | |||
01fdf766ee | |||
afe755f5c1 | |||
5f97e68e0e | |||
1b5bbd1c05 | |||
2ecfb88604 | |||
8356e831a5 | |||
ab00cb840f | |||
bb2ddf1129 | |||
bba5ec922b | |||
58c21bb1aa | |||
f190bbeac1 | |||
42143c1163 | |||
6453e4efca | |||
9155ac90b5 | |||
1e1367d08f | |||
3f690e2ca1 | |||
abfa3b977c | |||
a395197305 | |||
b5b71f8bb2 | |||
c592b1f141 | |||
f0ba148b81 | |||
a8826c22cc | |||
17629f9366 | |||
725375a597 | |||
30fb1ebbd5 | |||
78e85787e6 | |||
2636f2c768 | |||
68adaed997 | |||
ecce62f6b4 | |||
cf9fdc6fe4 | |||
a728ec24d4 | |||
74a71b1843 | |||
4d469cdc0a | |||
4c287ca9b8 | |||
912bc1a1e4 | |||
a598c933ec | |||
936f0b621e | |||
387ea6f71e | |||
e122c4c5fa | |||
180cd81132 | |||
d814853036 | |||
a1ecf88109 | |||
5a6a5ff75d | |||
fdba119d5d | |||
087b8dd7ea | |||
213a43380e | |||
8a31b4c5c0 | |||
3818aab454 | |||
61857dd06f | |||
bd647afe92 | |||
0e12f5e792 | |||
69f17ef2d7 | |||
aebe1acec2 | |||
938b3aa630 | |||
6772333eb4 | |||
0204961834 | |||
2f332a8c42 | |||
e288668c92 | |||
caeda219fa | |||
e50101df43 | |||
ee1b27fa0d | |||
6ca61d9c6c | |||
2d18d461fe | |||
47e6386907 | |||
0a9b95bfce | |||
fedf80b834 | |||
2bdf14f38c | |||
b1062fbb6c | |||
f00f075551 | |||
44ff621d73 | |||
032e54e2d4 | |||
3ca9835257 | |||
f69feed469 | |||
8253f94ac4 | |||
54cb0cfac4 | |||
a4c81f202c | |||
da82b27016 | |||
daf0126f45 | |||
f6d46b6178 | |||
a2d11d4b93 | |||
23caa4e853 | |||
a51f5c9bbf | |||
ee804d52ff | |||
dc490659c1 | |||
0d09c3a550 | |||
4c3f188bb8 | |||
e2ccd14eb3 | |||
af1df22812 | |||
f380898bb7 | |||
464ed85f1b | |||
7dd235b166 | |||
1474a80875 | |||
f45466ee24 | |||
d70b7bbec2 | |||
541c66c3de | |||
77fd4ff66a | |||
d901cbaa81 | |||
538ed7020d | |||
18e6ef16be | |||
a335a2acf7 | |||
2eb6cc0036 | |||
dccc315869 | |||
33aca2a482 | |||
0582c2e5be | |||
159eda73a1 | |||
101987cc17 | |||
6874b2ce13 | |||
3be0ffba4e | |||
da2d25252b | |||
c8a4382a7b | |||
3f89f3f48e | |||
871acc2eeb | |||
a9c9979b1c | |||
fc3fe871b3 | |||
e99aaa2eb4 | |||
62529a6171 | |||
0caf972248 | |||
4ac9844534 | |||
d99f3e657b | |||
92bbb62379 | |||
e4a0943af2 | |||
36bd8c0fad | |||
d77f59435b | |||
a08fd2afb6 | |||
6fd075fe96 | |||
f57fc56f4a | |||
a6ca6b122c | |||
064e73f58b | |||
32138b2e59 | |||
e1c3bad4d0 | |||
4e78027f0c | |||
721f4f9fc3 | |||
24ad2611a9 | |||
c238f251f2 | |||
02848e3439 | |||
9550f54e2b | |||
39dade78e3 | |||
5b6d8b01a4 | |||
96bc83cead | |||
be700a90ce | |||
6d1fce1716 | |||
d3665f31fe | |||
4188cb80fa | |||
62fe72d99b | |||
f4749559d2 | |||
ed815794ed | |||
0c12a19d1d | |||
96d47e8e0c | |||
3027e2a18c | |||
06025b2e69 | |||
da7e8f64aa | |||
a498104777 | |||
8c7bf365a0 | |||
eedb7a5375 | |||
d047cfc8ff | |||
9ff5da8d8f | |||
ac615f54f7 | |||
21af722e23 | |||
b1196fcf00 | |||
d170f6d323 | |||
9dd0298f56 | |||
bdf4ca84e0 | |||
7258d7f1bf | |||
8a504bff07 | |||
c00e64f736 | |||
9e73db0f24 | |||
951c061d77 | |||
579d3e0719 | |||
9777733d04 | |||
05e118dcb4 | |||
7a0d6f49f4 | |||
19f1b7f6bd | |||
b12afbdc1f | |||
49e77d4f93 | |||
eb9107bedf | |||
951c699ed0 | |||
6895e46375 | |||
1cf46c7337 | |||
407b63e48b | |||
be562fe722 | |||
928ab41d7f |
8
.github/workflows/gradle.yml
vendored
8
.github/workflows/gradle.yml
vendored
|
@ -6,10 +6,12 @@ jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v2
|
||||||
- name: Set up JDK 17
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v1
|
uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
|
distribution: temurin
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
cache: gradle
|
||||||
- name: Build with Gradle
|
- name: Build with Gradle
|
||||||
run: chmod a+x gradlew && ./gradlew build -x buildProperties
|
run: chmod a+x gradlew && ./gradlew build --no-daemon
|
||||||
|
|
|
@ -8,7 +8,7 @@ This plugin was originally coded by StevenLawson (Madgeek1450), with Jerom van d
|
||||||
involved in its development some time later. It consists of over 85 custom coded commands and a large variety of
|
involved in its development some time later. It consists of over 85 custom coded commands and a large variety of
|
||||||
distinguishable features not included in any other plugin. The plugin has since its beginning grown immensely. Together,
|
distinguishable features not included in any other plugin. The plugin has since its beginning grown immensely. Together,
|
||||||
with the main TotalFreedom server, TotalFreedomMod has a long-standing reputation of effectiveness whilst maintaining a
|
with the main TotalFreedom server, TotalFreedomMod has a long-standing reputation of effectiveness whilst maintaining a
|
||||||
clear feeling of openness towards the administrators and the players themselves.
|
clear feeling of openness towards the administrators and the players themselves. TotalFreedomMod was forked to a new repository called TFPatches for faster development. The repository was renamed to TotalFreedomMC, which you are on now. When Wild1145 took ownership of TotalFreedom, it was further forked into a new organization, AtlasMediaGroup. This version still continues to receive updates, with some being backported from AtlasMediaGroup.
|
||||||
|
|
||||||
### Contributing
|
### Contributing
|
||||||
|
|
||||||
|
@ -16,8 +16,6 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) if you are interested in developin
|
||||||
|
|
||||||
For information on how TotalFreedomMod is licensed, please see [LICENSE.md](LICENSE.md).
|
For information on how TotalFreedomMod is licensed, please see [LICENSE.md](LICENSE.md).
|
||||||
|
|
||||||
For information on our security policy and reporting an issue, please see [SECURITY.md](SECURITY.md)
|
|
||||||
|
|
||||||
### Compiling
|
### Compiling
|
||||||
|
|
||||||
You need Maven to build. You'd also need to set the JDK version to Java 8 as that is the current standard as of now.
|
You need Gradle to build. You'd also need to set the JDK version to Java 17 as that is the current standard as of now.
|
||||||
|
|
50
SECURITY.md
50
SECURITY.md
|
@ -1,50 +0,0 @@
|
||||||
# Security Policy
|
|
||||||
|
|
||||||
## Supported Versions
|
|
||||||
|
|
||||||
We currently support the code running on the "main" branch and "development" branch of this repository. This is
|
|
||||||
supported in addition to those formal releases, but note anything not yet released should be treated as in-development.
|
|
||||||
|
|
||||||
In terms of plugin releases, our support matrix is as follows:
|
|
||||||
|
|
||||||
### Actively Supported
|
|
||||||
|
|
||||||
These versions are currently actively supported by our team, and you should expect security patches where appropriate
|
|
||||||
for these versions.
|
|
||||||
|
|
||||||
| Version | Supported | Support End: |
|
|
||||||
| ------------------- | ------------------ | ------------------------------ |
|
|
||||||
| 7.0.0 | :white_check_mark: | No Earlier than August 2021 |
|
|
||||||
|
|
||||||
### Legacy Supported
|
|
||||||
|
|
||||||
These versions are no longer under active development, however we will look to release critical secuirty patches where
|
|
||||||
appropriate.
|
|
||||||
|
|
||||||
| Version | Supported | Support End: |
|
|
||||||
| ------------------- | ------------------ | ------------ |
|
|
||||||
| 2021.04 | :white_check_mark: | July 2021 |
|
|
||||||
|
|
||||||
### No Longer Supported
|
|
||||||
|
|
||||||
These versions are no longer supported at all. It is strongly advised to update if you are running any of these
|
|
||||||
versions.
|
|
||||||
|
|
||||||
| Version | Supported | Support Ended: |
|
|
||||||
| ------------------- | ------------------ | ------------------- |
|
|
||||||
| 2021.02 | :x: | 6 June 2021 |
|
|
||||||
| 2020.11 | :x: | 3 May 2021 |
|
|
||||||
| 6.0.x (Pre-Release) | :x: | December 2020 |
|
|
||||||
| < 2020.11 | :x: | December 2020 |
|
|
||||||
| < 5.x | :x: | December 2020 |
|
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
|
||||||
|
|
||||||
If the report has minor security implications (ie we've added a super admin to a senior admins permission) please raise
|
|
||||||
an post on [our forums](https://forum.totalfreedom.me/) in the first instance. If you do not have a forum account and do
|
|
||||||
not wish to sign up, please e-mail us using the e-mail in the next sentence.
|
|
||||||
|
|
||||||
For security vulnerabilities that are more severe and that may pose a more significant threat to the servers running
|
|
||||||
this plugin, please e-mail os-security-reports [ AT ] atlas-media.co.uk - You can expect an automated response
|
|
||||||
immediately to acknowledge receipt of your e-mail, and one of our team will aim to respond within 72 hours and will work
|
|
||||||
with you on the best way to address your concerns.
|
|
112
build.gradle
112
build.gradle
|
@ -3,8 +3,8 @@ plugins {
|
||||||
id 'maven-publish'
|
id 'maven-publish'
|
||||||
id 'idea'
|
id 'idea'
|
||||||
id 'checkstyle'
|
id 'checkstyle'
|
||||||
id 'com.github.johnrengelman.shadow' version '7.0.0'
|
id 'com.github.johnrengelman.shadow' version '7.1.2'
|
||||||
id 'net.minecrell.plugin-yml.bukkit' version '0.5.0'
|
id 'net.minecrell.plugin-yml.bukkit' version '0.5.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
@ -13,8 +13,20 @@ repositories {
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
url = uri('https://jitpack.io')
|
url = uri('https://jitpack.io')
|
||||||
|
content {
|
||||||
|
includeGroup('com.github.vexsoftware')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maven {
|
||||||
|
url = uri('https://nexus.hc.to/content/repositories/pub_releases/')
|
||||||
|
content {
|
||||||
|
includeGroup('net.milkbowl.vault')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
maven { url = uri("https://papermc.io/repo/repository/maven-public/") }
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
url = uri('https://repo.codemc.org/repository/maven-public/')
|
url = uri('https://repo.codemc.org/repository/maven-public/')
|
||||||
}
|
}
|
||||||
|
@ -23,7 +35,6 @@ repositories {
|
||||||
url = uri('https://repo.codemc.org/repository/nms/')
|
url = uri('https://repo.codemc.org/repository/nms/')
|
||||||
content {
|
content {
|
||||||
includeGroup('org.spigotmc')
|
includeGroup('org.spigotmc')
|
||||||
includeGroup('net.ess3')
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +52,16 @@ repositories {
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
url = uri('https://m2.dv8tion.net/releases/')
|
url = uri('https://m2.dv8tion.net/releases/')
|
||||||
|
content {
|
||||||
|
includeGroup('net.dv8tion')
|
||||||
|
includeGroup('club.minnced')
|
||||||
|
includeGroup('com.google.code')
|
||||||
|
includeGroup('com.neovisionaries')
|
||||||
|
includeGroup('com.squareup')
|
||||||
|
includeGroup('org.apache.commons')
|
||||||
|
includeGroup('org.jetbrains.annotations')
|
||||||
|
includeGroup('org.slf4j.slf4j-api')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
|
@ -50,22 +71,6 @@ repositories {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri('https://repo.md-5.net/content/groups/public/')
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri('https://repo.dmulloy2.net/nexus/repository/public/')
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri('https://papermc.io/repo/repository/maven-public/')
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
|
||||||
url = uri('https://ci.ender.zone/plugin/repository/everything/')
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
url = uri('https://nexus.telesphoreo.me/repository/totalfreedom/')
|
url = uri('https://nexus.telesphoreo.me/repository/totalfreedom/')
|
||||||
content {
|
content {
|
||||||
|
@ -83,10 +88,7 @@ repositories {
|
||||||
maven {
|
maven {
|
||||||
url = uri('https://repo.essentialsx.net/releases/')
|
url = uri('https://repo.essentialsx.net/releases/')
|
||||||
content {
|
content {
|
||||||
content {
|
includeGroup('net.essentialsx')
|
||||||
includeGroup('net.essentialsx')
|
|
||||||
includeGroup('net.ess3')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@ -96,22 +98,20 @@ dependencies {
|
||||||
implementation('commons-io:commons-io:2.11.0')
|
implementation('commons-io:commons-io:2.11.0')
|
||||||
implementation('org.apache.commons:commons-lang3:3.12.0')
|
implementation('org.apache.commons:commons-lang3:3.12.0')
|
||||||
implementation('commons-codec:commons-codec:1.15')
|
implementation('commons-codec:commons-codec:1.15')
|
||||||
implementation('io.papermc:paperlib:1.0.6')
|
implementation('org.bstats:bstats-base:3.0.0')
|
||||||
implementation('org.bstats:bstats-base:2.2.1')
|
implementation('org.bstats:bstats-bukkit:3.0.0')
|
||||||
implementation('org.bstats:bstats-bukkit:2.2.1')
|
implementation('org.reflections:reflections:0.10.2')
|
||||||
implementation('org.reflections:reflections:0.9.12')
|
|
||||||
implementation('org.javassist:javassist:3.28.0-GA')
|
implementation('org.javassist:javassist:3.28.0-GA')
|
||||||
implementation('org.jetbrains:annotations:22.0.0')
|
implementation('org.jetbrains:annotations:23.0.0')
|
||||||
implementation('com.mattmalec:Pterodactyl4J:2.BETA_80')
|
implementation('com.mattmalec:Pterodactyl4J:2.BETA_92')
|
||||||
implementation('org.junit.jupiter:junit-jupiter:5.8.1')
|
implementation('com.squareup.okhttp3:okhttp:4.9.3')
|
||||||
implementation('org.projectlombok:lombok:1.18.20')
|
|
||||||
compileOnly('org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT')
|
compileOnly('org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT')
|
||||||
compileOnly('me.totalfreedom:BukkitTelnet:4.6.1')
|
compileOnly('me.totalfreedom:BukkitTelnet:4.7')
|
||||||
compileOnly('me.totalfreedom:TF-LibsDisguises:10.0.26-SNAPSHOT')
|
compileOnly('me.totalfreedom:TF-LibsDisguises:10.0.27-SNAPSHOT')
|
||||||
compileOnly('com.sk89q.worldedit:worldedit-bukkit:7.3.0-SNAPSHOT')
|
compileOnly('com.sk89q.worldedit:worldedit-bukkit:7.3.0-SNAPSHOT')
|
||||||
compileOnly('net.essentialsx:EssentialsX:2.19.0')
|
compileOnly('net.essentialsx:EssentialsX:2.19.2')
|
||||||
compileOnly('net.dv8tion:JDA:4.3.0_277')
|
compileOnly('net.dv8tion:JDA:4.3.0_277')
|
||||||
compileOnly('net.coreprotect:coreprotect:20.1')
|
compileOnly('net.coreprotect:coreprotect:20.4')
|
||||||
compileOnly('com.sk89q.worldguard:worldguard-bukkit:7.0.6')
|
compileOnly('com.sk89q.worldguard:worldguard-bukkit:7.0.6')
|
||||||
compileOnly('com.github.vexsoftware:votifier:v1.9')
|
compileOnly('com.github.vexsoftware:votifier:v1.9')
|
||||||
compileOnly('net.goldtreeservers:worldguardextraflags:4.0.0')
|
compileOnly('net.goldtreeservers:worldguardextraflags:4.0.0')
|
||||||
|
@ -139,22 +139,32 @@ static def getDate() {
|
||||||
return new Date().format('MM/dd/yyyy HH:mm')
|
return new Date().format('MM/dd/yyyy HH:mm')
|
||||||
}
|
}
|
||||||
|
|
||||||
def getGitHash() {
|
String getGitHash() {
|
||||||
def stdout = new ByteArrayOutputStream()
|
def stdout = new ByteArrayOutputStream()
|
||||||
exec {
|
try {
|
||||||
commandLine 'git', 'rev-parse', '--short', 'HEAD'
|
exec {
|
||||||
standardOutput = stdout
|
commandLine "git", "rev-parse", "--short", "HEAD"
|
||||||
|
standardOutput = stdout
|
||||||
|
ignoreExitValue = true
|
||||||
|
}
|
||||||
|
} catch (GradleException e) {
|
||||||
|
logger.error("Couldn't determine Git head because Git is not installed. " + e.getMessage())
|
||||||
}
|
}
|
||||||
return stdout.toString().trim()
|
return stdout.size() > 0 ? stdout.toString().trim() : "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
def getBuildNumber() {
|
String getBuildNumber() {
|
||||||
def stdout = new ByteArrayOutputStream()
|
def stdout = new ByteArrayOutputStream()
|
||||||
exec {
|
try {
|
||||||
commandLine 'git', 'rev-list', 'HEAD', '--count'
|
exec {
|
||||||
standardOutput = stdout
|
commandLine "git", "rev-list", "HEAD", "--count"
|
||||||
|
standardOutput = stdout
|
||||||
|
ignoreExitValue = true
|
||||||
|
}
|
||||||
|
} catch (GradleException e) {
|
||||||
|
logger.error("Couldn't determine build number because Git is not installed. " + e.getMessage())
|
||||||
}
|
}
|
||||||
return stdout.toString().trim()
|
return stdout.size() > 0 ? stdout.toString().trim() : "unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(Checkstyle) {
|
tasks.withType(Checkstyle) {
|
||||||
|
@ -193,6 +203,7 @@ shadowJar {
|
||||||
include(dependency('org.reflections:reflections'))
|
include(dependency('org.reflections:reflections'))
|
||||||
include(dependency('org.jetbrains:annotations'))
|
include(dependency('org.jetbrains:annotations'))
|
||||||
include(dependency('com.mattmalec:Pterodactyl4J'))
|
include(dependency('com.mattmalec:Pterodactyl4J'))
|
||||||
|
include(dependency('com.squareup:okhttp3'))
|
||||||
}
|
}
|
||||||
relocate 'org.bstats', 'me.totalfreedom.totalfreedommod'
|
relocate 'org.bstats', 'me.totalfreedom.totalfreedommod'
|
||||||
relocate 'io.papermc.lib', 'me.totalfreedom.totalfreedommod.paperlib'
|
relocate 'io.papermc.lib', 'me.totalfreedom.totalfreedommod.paperlib'
|
||||||
|
@ -204,15 +215,18 @@ tasks.build.dependsOn tasks.shadowJar
|
||||||
publishing {
|
publishing {
|
||||||
publications {
|
publications {
|
||||||
maven(MavenPublication) {
|
maven(MavenPublication) {
|
||||||
groupId = 'me.totalfreedom'
|
|
||||||
artifactId = 'TotalFreedomMod'
|
|
||||||
version = project.property('project.pluginVersion')
|
|
||||||
|
|
||||||
from components.java
|
from components.java
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jar {
|
||||||
|
into("META-INF/maven/$project.group/$project.name") {
|
||||||
|
from { generatePomFileForMavenPublication }
|
||||||
|
rename ".*", "pom.xml"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile) {
|
tasks.withType(JavaCompile) {
|
||||||
options.encoding = 'UTF-8'
|
options.encoding = 'UTF-8'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
project.pluginVersion=7.0.0
|
project.pluginVersion=7.1.0
|
||||||
project.buildAuthor=unknown
|
project.buildAuthor=unknown
|
||||||
project.buildCodeName=Ember
|
project.buildCodeName=Ember
|
||||||
org.gradle.cache=true
|
org.gradle.cache=true
|
||||||
|
|
|
@ -19,6 +19,7 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
public class LoginProcess extends FreedomService
|
public class LoginProcess extends FreedomService
|
||||||
{
|
{
|
||||||
|
@ -190,6 +191,22 @@ public class LoginProcess extends FreedomService
|
||||||
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||||
final PlayerData playerData = plugin.pl.getData(player);
|
final PlayerData playerData = plugin.pl.getData(player);
|
||||||
|
|
||||||
|
// Sends a message to the player if they have never joined before (or simply lack player data).
|
||||||
|
if (!event.getPlayer().hasPlayedBefore() && ConfigEntry.FIRST_JOIN_INFO_ENABLED.getBoolean())
|
||||||
|
{
|
||||||
|
new BukkitRunnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
for (String line : ConfigEntry.FIRST_JOIN_INFO.getStringList())
|
||||||
|
{
|
||||||
|
player.sendMessage(FUtil.colorize(line));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskLater(plugin, 20);
|
||||||
|
}
|
||||||
|
|
||||||
player.sendTitle(FUtil.colorize(ConfigEntry.SERVER_LOGIN_TITLE.getString()), FUtil.colorize(ConfigEntry.SERVER_LOGIN_SUBTITLE.getString()), 20, 100, 60);
|
player.sendTitle(FUtil.colorize(ConfigEntry.SERVER_LOGIN_TITLE.getString()), FUtil.colorize(ConfigEntry.SERVER_LOGIN_SUBTITLE.getString()), 20, 100, 60);
|
||||||
player.setOp(true);
|
player.setOp(true);
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
|
import com.google.common.base.Strings;
|
||||||
import com.mattmalec.pterodactyl4j.Permission;
|
import com.mattmalec.pterodactyl4j.Permission;
|
||||||
import com.mattmalec.pterodactyl4j.PowerAction;
|
|
||||||
import com.mattmalec.pterodactyl4j.PteroAction;
|
import com.mattmalec.pterodactyl4j.PteroAction;
|
||||||
import com.mattmalec.pterodactyl4j.PteroBuilder;
|
import com.mattmalec.pterodactyl4j.PteroBuilder;
|
||||||
import com.mattmalec.pterodactyl4j.application.entities.ApplicationUser;
|
import com.mattmalec.pterodactyl4j.application.entities.ApplicationUser;
|
||||||
|
@ -10,7 +10,6 @@ import com.mattmalec.pterodactyl4j.application.managers.UserAction;
|
||||||
import com.mattmalec.pterodactyl4j.client.entities.ClientServer;
|
import com.mattmalec.pterodactyl4j.client.entities.ClientServer;
|
||||||
import com.mattmalec.pterodactyl4j.client.entities.ClientSubuser;
|
import com.mattmalec.pterodactyl4j.client.entities.ClientSubuser;
|
||||||
import com.mattmalec.pterodactyl4j.client.entities.PteroClient;
|
import com.mattmalec.pterodactyl4j.client.entities.PteroClient;
|
||||||
import joptsimple.internal.Strings;
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
|
|
@ -1,98 +0,0 @@
|
||||||
package me.totalfreedom.totalfreedommod;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.ObjectInputStream;
|
|
||||||
import java.io.ObjectOutputStream;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import static me.totalfreedom.totalfreedommod.util.FUtil.SAVED_FLAGS_FILENAME;
|
|
||||||
|
|
||||||
public class SavedFlags extends FreedomService
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public Map<String, Boolean> getSavedFlags()
|
|
||||||
{
|
|
||||||
Map<String, Boolean> flags = null;
|
|
||||||
File input = new File(TotalFreedomMod.getPlugin().getDataFolder(), SAVED_FLAGS_FILENAME);
|
|
||||||
|
|
||||||
if (input.exists())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
try (FileInputStream fis = new FileInputStream(input); ObjectInputStream ois = new ObjectInputStream(fis))
|
|
||||||
{
|
|
||||||
flags = (HashMap<String, Boolean>)ois.readObject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getSavedFlag(String flag) throws Exception
|
|
||||||
{
|
|
||||||
Boolean flagValue = null;
|
|
||||||
|
|
||||||
Map<String, Boolean> flags = getSavedFlags();
|
|
||||||
|
|
||||||
if (flags != null)
|
|
||||||
{
|
|
||||||
if (flags.containsKey(flag))
|
|
||||||
{
|
|
||||||
flagValue = flags.get(flag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flagValue != null)
|
|
||||||
{
|
|
||||||
return flagValue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new Exception();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSavedFlag(String flag, boolean value)
|
|
||||||
{
|
|
||||||
Map<String, Boolean> flags = getSavedFlags();
|
|
||||||
|
|
||||||
if (flags == null)
|
|
||||||
{
|
|
||||||
flags = new HashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
flags.put(flag, value);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final FileOutputStream fos = new FileOutputStream(new File(plugin.getDataFolder(), SAVED_FLAGS_FILENAME));
|
|
||||||
final ObjectOutputStream oos = new ObjectOutputStream(fos);
|
|
||||||
oos.writeObject(flags);
|
|
||||||
oos.close();
|
|
||||||
fos.close();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,12 +1,13 @@
|
||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.minecraft.server.level.EntityPlayer;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.craftbukkit.v1_17_R1.CraftServer;
|
||||||
|
|
||||||
public class ServerInterface extends FreedomService
|
public class ServerInterface extends FreedomService
|
||||||
{
|
{
|
||||||
|
@ -35,16 +36,16 @@ public class ServerInterface extends FreedomService
|
||||||
|
|
||||||
public int purgeWhitelist()
|
public int purgeWhitelist()
|
||||||
{
|
{
|
||||||
Set<OfflinePlayer> whitelisted = Bukkit.getWhitelistedPlayers();
|
String[] whitelisted = getServer().getPlayerList().getWhitelisted();
|
||||||
int size = whitelisted.size();
|
int size = whitelisted.length;
|
||||||
for (OfflinePlayer player : Bukkit.getWhitelistedPlayers())
|
for (EntityPlayer player : getServer().getPlayerList().getPlayers())
|
||||||
{
|
{
|
||||||
Bukkit.getServer().getWhitelistedPlayers().remove(player);
|
getServer().getPlayerList().getWhitelist().remove(player.getProfile());
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Bukkit.reloadWhitelist();
|
getServer().getPlayerList().getWhitelist().save();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -56,16 +57,22 @@ public class ServerInterface extends FreedomService
|
||||||
|
|
||||||
public boolean isWhitelisted()
|
public boolean isWhitelisted()
|
||||||
{
|
{
|
||||||
return Bukkit.getServer().hasWhitelist();
|
return getServer().getPlayerList().getHasWhitelist();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<?> getWhitelisted()
|
public List<?> getWhitelisted()
|
||||||
{
|
{
|
||||||
return Collections.singletonList(Bukkit.getWhitelistedPlayers());
|
return Arrays.asList(getServer().getPlayerList().getWhitelisted());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVersion()
|
public String getVersion()
|
||||||
{
|
{
|
||||||
return Bukkit.getVersion();
|
return getServer().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private MinecraftServer getServer()
|
||||||
|
{
|
||||||
|
return ((CraftServer)Bukkit.getServer()).getServer();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,7 +76,6 @@ public class TotalFreedomMod extends JavaPlugin
|
||||||
public CommandLoader cl;
|
public CommandLoader cl;
|
||||||
// Services
|
// Services
|
||||||
public ServerInterface si;
|
public ServerInterface si;
|
||||||
public SavedFlags sf;
|
|
||||||
public WorldManager wm;
|
public WorldManager wm;
|
||||||
public LogViewer lv;
|
public LogViewer lv;
|
||||||
public AdminList al;
|
public AdminList al;
|
||||||
|
@ -187,7 +186,6 @@ public class TotalFreedomMod extends JavaPlugin
|
||||||
fsh = new FreedomServiceHandler();
|
fsh = new FreedomServiceHandler();
|
||||||
|
|
||||||
config = new MainConfig();
|
config = new MainConfig();
|
||||||
config.load();
|
|
||||||
|
|
||||||
if (FUtil.inDeveloperMode())
|
if (FUtil.inDeveloperMode())
|
||||||
{
|
{
|
||||||
|
@ -299,7 +297,6 @@ public class TotalFreedomMod extends JavaPlugin
|
||||||
{
|
{
|
||||||
// Start services
|
// Start services
|
||||||
si = new ServerInterface();
|
si = new ServerInterface();
|
||||||
sf = new SavedFlags();
|
|
||||||
wm = new WorldManager();
|
wm = new WorldManager();
|
||||||
lv = new LogViewer();
|
lv = new LogViewer();
|
||||||
sql = new SQLite();
|
sql = new SQLite();
|
||||||
|
@ -330,7 +327,7 @@ public class TotalFreedomMod extends JavaPlugin
|
||||||
snp = new SignBlocker();
|
snp = new SignBlocker();
|
||||||
ew = new EntityWiper();
|
ew = new EntityWiper();
|
||||||
vh = new VanishHandler();
|
vh = new VanishHandler();
|
||||||
ptero = new Pterodactyl();
|
//ptero = new Pterodactyl();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAdminUtils()
|
private void initAdminUtils()
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
package me.totalfreedom.totalfreedommod.bridge;
|
package me.totalfreedom.totalfreedommod.bridge;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.sql.Connection;
|
import java.sql.*;
|
||||||
import java.sql.DriverManager;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -196,7 +192,6 @@ public class CoreProtectBridge extends FreedomService
|
||||||
return (megabytes / 1024);
|
return (megabytes / 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wipes DB for the specified world
|
|
||||||
public void clearDatabase(World world)
|
public void clearDatabase(World world)
|
||||||
{
|
{
|
||||||
clearDatabase(world, false);
|
clearDatabase(world, false);
|
||||||
|
@ -264,12 +259,6 @@ public class CoreProtectBridge extends FreedomService
|
||||||
{
|
{
|
||||||
FLog.warning("Failed to delete the CoreProtect data for the " + world.getName());
|
FLog.warning("Failed to delete the CoreProtect data for the " + world.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
// This exits for flatlands wipes
|
|
||||||
if (shutdown)
|
|
||||||
{
|
|
||||||
server.shutdown();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
|
@ -280,27 +269,30 @@ public class CoreProtectBridge extends FreedomService
|
||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
||||||
|
|
||||||
|
// TODO: Rewrite this
|
||||||
if (data.hasInspection())
|
if (data.hasInspection())
|
||||||
{
|
{
|
||||||
|
int cooldownTime = 3;
|
||||||
|
|
||||||
|
// Cooldown check
|
||||||
|
if ((event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK)
|
||||||
|
&& cooldown.containsKey(player.getName()))
|
||||||
|
{
|
||||||
|
long secondsLeft = getSecondsLeft(cooldown.get(player.getName()), cooldownTime);
|
||||||
|
if (secondsLeft > 0L)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
player.sendMessage(ChatColor.RED + String.valueOf(secondsLeft) + " seconds left before next query.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actual lookup time
|
||||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK)
|
if (event.getAction() == Action.LEFT_CLICK_BLOCK)
|
||||||
{
|
{
|
||||||
if (block != null)
|
if (block != null)
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
||||||
int cooldownTime = 3;
|
|
||||||
|
|
||||||
if (cooldown.containsKey(player.getName()))
|
|
||||||
{
|
|
||||||
long secondsLeft = getSecondsLeft(cooldown.get(player.getName()), cooldownTime);
|
|
||||||
if (secondsLeft > 0L)
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
player.sendMessage(ChatColor.RED + String.valueOf(secondsLeft) + " seconds left before next query.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String[]> lookup = coreProtect.blockLookup(block, -1);
|
List<String[]> lookup = coreProtect.blockLookup(block, -1);
|
||||||
|
|
||||||
if (!plugin.al.isAdmin(player))
|
if (!plugin.al.isAdmin(player))
|
||||||
|
@ -320,8 +312,8 @@ public class CoreProtectBridge extends FreedomService
|
||||||
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
|
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
|
||||||
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
|
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
|
||||||
|
|
||||||
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- "
|
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- " +
|
||||||
+ ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
|
ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
|
||||||
|
|
||||||
for (String[] value : lookup)
|
for (String[] value : lookup)
|
||||||
{
|
{
|
||||||
|
@ -351,8 +343,8 @@ public class CoreProtectBridge extends FreedomService
|
||||||
|
|
||||||
int time = (int)(System.currentTimeMillis() / 1000L);
|
int time = (int)(System.currentTimeMillis() / 1000L);
|
||||||
|
|
||||||
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4")
|
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4") +
|
||||||
+ st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
|
st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> page = paged.getPage(1);
|
List<String> page = paged.getPage(1);
|
||||||
|
@ -369,91 +361,75 @@ public class CoreProtectBridge extends FreedomService
|
||||||
{
|
{
|
||||||
if (block != null)
|
if (block != null)
|
||||||
{
|
{
|
||||||
if (data.hasInspection())
|
BlockState blockState = block.getRelative(event.getBlockFace()).getState();
|
||||||
{
|
Block placedBlock = blockState.getBlock();
|
||||||
BlockState blockState = block.getRelative(event.getBlockFace()).getState();
|
event.setCancelled(true);
|
||||||
Block placedBlock = blockState.getBlock();
|
List<String[]> lookup = coreProtect.blockLookup(placedBlock, -1);
|
||||||
event.setCancelled(true);
|
|
||||||
List<String[]> lookup = coreProtect.blockLookup(placedBlock, -1);
|
|
||||||
|
|
||||||
|
if (lookup.isEmpty())
|
||||||
|
{
|
||||||
|
lookup = coreProtect.blockLookup(block, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!plugin.al.isAdmin(player))
|
||||||
|
{
|
||||||
|
cooldown.put(player.getName(), System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lookup != null)
|
||||||
|
{
|
||||||
if (lookup.isEmpty())
|
if (lookup.isEmpty())
|
||||||
{
|
{
|
||||||
lookup = coreProtect.blockLookup(block, -1);
|
player.sendMessage(net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector " + ChatColor.WHITE + "- " + "No block data found for this location");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cooldownTime = 3;
|
HISTORY_MAP.remove(event.getPlayer());
|
||||||
|
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
|
||||||
|
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
|
||||||
|
|
||||||
if (cooldown.containsKey(player.getName()))
|
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- " +
|
||||||
|
ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
|
||||||
|
|
||||||
|
for (String[] value : lookup)
|
||||||
{
|
{
|
||||||
long secondsLeft = getSecondsLeft(cooldown.get(player.getName()), cooldownTime);
|
CoreProtectAPI.ParseResult result = coreProtect.parseResult(value);
|
||||||
if (secondsLeft > 0L)
|
BlockData bl = result.getBlockData();
|
||||||
|
|
||||||
|
String s;
|
||||||
|
String st = "";
|
||||||
|
|
||||||
|
if (result.getActionString().equals("Placement"))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
s = " placed ";
|
||||||
player.sendMessage(ChatColor.RED + String.valueOf(secondsLeft) + " seconds left before next query.");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else if (result.getActionString().equals("Removal"))
|
||||||
|
{
|
||||||
|
s = " broke ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s = " interacted with ";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.isRolledBack())
|
||||||
|
{
|
||||||
|
st += "§m";
|
||||||
|
}
|
||||||
|
|
||||||
|
int time = (int)(System.currentTimeMillis() / 1000L);
|
||||||
|
|
||||||
|
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4") +
|
||||||
|
st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!plugin.al.isAdmin(player))
|
List<String> page = paged.getPage(1);
|
||||||
|
for (String entries : page)
|
||||||
{
|
{
|
||||||
cooldown.put(player.getName(), System.currentTimeMillis());
|
player.sendMessage(entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lookup != null)
|
player.sendMessage("Page 1/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>");
|
||||||
{
|
|
||||||
if (lookup.isEmpty())
|
|
||||||
{
|
|
||||||
player.sendMessage(net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector " + ChatColor.WHITE + "- " + "No block data found for this location");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HISTORY_MAP.remove(event.getPlayer());
|
|
||||||
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
|
|
||||||
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
|
|
||||||
|
|
||||||
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- "
|
|
||||||
+ ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
|
|
||||||
|
|
||||||
for (String[] value : lookup)
|
|
||||||
{
|
|
||||||
CoreProtectAPI.ParseResult result = coreProtect.parseResult(value);
|
|
||||||
BlockData bl = result.getBlockData();
|
|
||||||
|
|
||||||
String s;
|
|
||||||
String st = "";
|
|
||||||
|
|
||||||
if (result.getActionString().equals("Placement"))
|
|
||||||
{
|
|
||||||
s = " placed ";
|
|
||||||
}
|
|
||||||
else if (result.getActionString().equals("Removal"))
|
|
||||||
{
|
|
||||||
s = " broke ";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s = " interacted with ";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.isRolledBack())
|
|
||||||
{
|
|
||||||
st += "§m";
|
|
||||||
}
|
|
||||||
|
|
||||||
int time = (int)(System.currentTimeMillis() / 1000L);
|
|
||||||
|
|
||||||
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4")
|
|
||||||
+ st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> page = paged.getPage(1);
|
|
||||||
for (String entries : page)
|
|
||||||
{
|
|
||||||
player.sendMessage(entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
player.sendMessage("Page 1/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,20 @@
|
||||||
package me.totalfreedom.totalfreedommod.bridge;
|
package me.totalfreedom.totalfreedommod.bridge;
|
||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
|
import com.sk89q.worldedit.util.Location;
|
||||||
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
import com.sk89q.worldguard.WorldGuard;
|
||||||
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
import com.sk89q.worldguard.protection.flags.Flags;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
public class WorldGuardBridge extends FreedomService
|
public class WorldGuardBridge extends FreedomService
|
||||||
|
@ -23,6 +30,16 @@ public class WorldGuardBridge extends FreedomService
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean canEditCurrentWorld(Player player)
|
||||||
|
{
|
||||||
|
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
||||||
|
|
||||||
|
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||||
|
RegionQuery query = container.createQuery();
|
||||||
|
|
||||||
|
return query.testBuild(localPlayer.getLocation(), localPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
public RegionManager getRegionManager(World world)
|
public RegionManager getRegionManager(World world)
|
||||||
{
|
{
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.User;
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
@ -60,28 +60,39 @@ public class Command_ban extends FreedomCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
final String username;
|
final String username;
|
||||||
final List<String> ips = new ArrayList<>();
|
final String ip;
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
final Player player = getPlayer(args[0]);
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
final PlayerData entry = plugin.pl.getData(args[0]);
|
// Gets the IP using Essentials data if available
|
||||||
|
if (plugin.esb.isEnabled() && plugin.esb.getEssentialsUser(args[0]) != null)
|
||||||
if (entry == null)
|
|
||||||
{
|
{
|
||||||
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
|
User essUser = plugin.esb.getEssentialsUser(args[0]);
|
||||||
return true;
|
//
|
||||||
|
username = essUser.getName();
|
||||||
|
ip = essUser.getLastLoginAddress();
|
||||||
|
}
|
||||||
|
// Last resort - Getting the first result from the username itself
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerData entry = plugin.pl.getData(args[0]);
|
||||||
|
if (entry == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
username = entry.getName();
|
||||||
|
ip = entry.getIps().get(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
username = entry.getName();
|
|
||||||
ips.addAll(entry.getIps());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final PlayerData entry = plugin.pl.getData(player);
|
|
||||||
username = player.getName();
|
username = player.getName();
|
||||||
//ips.addAll(entry.getIps());/
|
ip = FUtil.getIp(player);
|
||||||
ips.add(FUtil.getIp(player));
|
|
||||||
|
|
||||||
// Deop
|
// Deop
|
||||||
player.setOp(false);
|
player.setOp(false);
|
||||||
|
@ -126,7 +137,6 @@ public class Command_ban extends FreedomCommand
|
||||||
|
|
||||||
// Ban player
|
// Ban player
|
||||||
Ban ban;
|
Ban ban;
|
||||||
|
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
ban = Ban.forPlayer(player, sender, null, reason);
|
ban = Ban.forPlayer(player, sender, null, reason);
|
||||||
|
@ -135,12 +145,8 @@ public class Command_ban extends FreedomCommand
|
||||||
{
|
{
|
||||||
ban = Ban.forPlayerName(username, sender, null, reason);
|
ban = Ban.forPlayerName(username, sender, null, reason);
|
||||||
}
|
}
|
||||||
|
ban.addIp(ip);
|
||||||
|
|
||||||
for (String ip : ips)
|
|
||||||
{
|
|
||||||
ban.addIp(ip);
|
|
||||||
ban.addIp(FUtil.getFuzzyIp(ip));
|
|
||||||
}
|
|
||||||
plugin.bm.addBan(ban);
|
plugin.bm.addBan(ban);
|
||||||
|
|
||||||
|
|
||||||
|
@ -154,7 +160,7 @@ public class Command_ban extends FreedomCommand
|
||||||
{
|
{
|
||||||
bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason);
|
bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason);
|
||||||
}
|
}
|
||||||
msg(sender, ChatColor.GRAY + username + " has been banned and IP is: " + StringUtils.join(ips, ", "));
|
msg(sender, ChatColor.GRAY + username + " has been banned and IP is: " + ip);
|
||||||
FUtil.adminAction(sender.getName(), bcast.toString(), true);
|
FUtil.adminAction(sender.getName(), bcast.toString(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +178,7 @@ public class Command_ban extends FreedomCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log ban
|
// Log ban
|
||||||
plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.BAN, reason));
|
plugin.pul.logPunishment(new Punishment(username, ip, sender.getName(), PunishmentType.BAN, reason));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,9 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
@ -20,6 +21,7 @@ import org.bukkit.entity.Player;
|
||||||
@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]")
|
@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]")
|
||||||
public class Command_cage extends FreedomCommand
|
public class Command_cage extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
if (args.length == 0)
|
if (args.length == 0)
|
||||||
|
@ -60,42 +62,58 @@ public class Command_cage extends FreedomCommand
|
||||||
final String s = args[1];
|
final String s = args[1];
|
||||||
switch (s)
|
switch (s)
|
||||||
{
|
{
|
||||||
case "head" -> {
|
case "head":
|
||||||
|
{
|
||||||
outerMaterial = Material.PLAYER_HEAD;
|
outerMaterial = Material.PLAYER_HEAD;
|
||||||
if (args.length >= 3)
|
if (args.length >= 3)
|
||||||
{
|
{
|
||||||
if (!FUtil.isValidUsername(args[2]))
|
|
||||||
{
|
|
||||||
msg("That is an invalid player name!", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
skullName = args[2];
|
skullName = args[2];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
outerMaterial = Material.SKELETON_SKULL;
|
outerMaterial = Material.SKELETON_SKULL;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case "block" -> {
|
case "block":
|
||||||
if (args.length == 3)
|
{
|
||||||
|
if (args.length >= 3)
|
||||||
{
|
{
|
||||||
String block = args[2].toUpperCase();
|
// Checks the validity of the Material and checks if it's a block.
|
||||||
if (Material.matchMaterial(block) != null && Objects.requireNonNull(Material.getMaterial(block)).isBlock())
|
// This is incredibly inefficient, as Spigot's isBlock() method in Material is an actual
|
||||||
|
// nightmare of switch-cases.
|
||||||
|
if (Material.matchMaterial(args[2]) != null && Material.matchMaterial(args[2]).isBlock())
|
||||||
{
|
{
|
||||||
outerMaterial = Material.matchMaterial(block);
|
outerMaterial = Material.matchMaterial(args[2]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
msg("The block you specified is invalid.", ChatColor.RED);
|
else
|
||||||
|
{
|
||||||
|
msg("Invalid block!", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("You must specify a block.", ChatColor.RED);
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (outerMaterial == Material.PLAYER_HEAD)
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Caging " + player.getName() + " in " + skullName, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Caging " + player.getName(), true);
|
||||||
|
}
|
||||||
|
|
||||||
Location location = player.getLocation().clone().add(0.0, 1.0, 0.0);
|
Location location = player.getLocation().clone().add(0.0, 1.0, 0.0);
|
||||||
|
|
||||||
if (skullName != null)
|
if (skullName != null)
|
||||||
|
@ -106,17 +124,9 @@ public class Command_cage extends FreedomCommand
|
||||||
{
|
{
|
||||||
fPlayer.getCageData().cage(location, outerMaterial, innerMaterial);
|
fPlayer.getCageData().cage(location, outerMaterial, innerMaterial);
|
||||||
}
|
}
|
||||||
|
player.setGameMode(GameMode.SURVIVAL);
|
||||||
|
|
||||||
player.setGameMode(GameMode.ADVENTURE);
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.CAGE, null));
|
||||||
|
|
||||||
if (outerMaterial == Material.PLAYER_HEAD)
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Caging " + player.getName() + " in " + skullName, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Caging " + player.getName(), true);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,11 @@ import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Shows the amount of coins you have or another player has", usage = "/<command> [playername]")
|
@CommandParameters(description = "Shows the amount of coins you or another player has. Also allows you to give coins to other players.", usage = "/<command> [player] | pay <player> <amount>")
|
||||||
public class Command_coins extends FreedomCommand
|
public class Command_coins extends FreedomCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
|
@ -21,34 +24,119 @@ public class Command_coins extends FreedomCommand
|
||||||
msg("The shop is currently disabled!", ChatColor.RED);
|
msg("The shop is currently disabled!", ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
Player p;
|
|
||||||
final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " ");
|
final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " ");
|
||||||
if (args.length > 0)
|
|
||||||
|
switch (args.length)
|
||||||
{
|
{
|
||||||
if (getPlayer(args[0]) != null)
|
// Mode for seeing how many coins the sender has (doesn't work from console)
|
||||||
|
case 0:
|
||||||
{
|
{
|
||||||
p = getPlayer(args[0]);
|
if (senderIsConsole)
|
||||||
}
|
{
|
||||||
else
|
msg("When used from the console, you must define a target player.");
|
||||||
{
|
}
|
||||||
msg(PLAYER_NOT_FOUND);
|
else
|
||||||
|
{
|
||||||
|
PlayerData playerData = getData(playerSender);
|
||||||
|
msg(prefix + ChatColor.GREEN + "You have " + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN
|
||||||
|
+ " coins.");
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
// Mode for seeing how many coins a player has.
|
||||||
{
|
case 1:
|
||||||
if (senderIsConsole)
|
|
||||||
{
|
{
|
||||||
msg(prefix + ChatColor.RED + "You are not a player, use /coins <playername>");
|
Player target = getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerData playerData = getData(target);
|
||||||
|
msg(prefix + ChatColor.GREEN + target.getName() + " has " + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins.");
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// Mode for paying another player coins
|
||||||
|
case 3:
|
||||||
{
|
{
|
||||||
p = playerSender;
|
if (args[0].equalsIgnoreCase("pay"))
|
||||||
|
{
|
||||||
|
checkPlayer();
|
||||||
|
|
||||||
|
final Player target = getPlayer(args[1]);
|
||||||
|
final PlayerData senderData = getData(playerSender);
|
||||||
|
|
||||||
|
int coinsToTransfer;
|
||||||
|
|
||||||
|
// Processes args[2]
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Prevents players from trying to be cheeky with negative numbers.
|
||||||
|
coinsToTransfer = Math.max(Math.abs(Integer.parseInt(args[2])), 1);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException ex)
|
||||||
|
{
|
||||||
|
msg("Invalid number: " + args[2], ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevents players from performing transactions they can't afford to do.
|
||||||
|
if (senderData.getCoins() < coinsToTransfer)
|
||||||
|
{
|
||||||
|
msg("You don't have enough coins to perform this transaction.", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerData playerData = getData(target);
|
||||||
|
playerData.setCoins(playerData.getCoins() + coinsToTransfer);
|
||||||
|
senderData.setCoins(senderData.getCoins() - coinsToTransfer);
|
||||||
|
|
||||||
|
msg(target, sender.getName()
|
||||||
|
+ ChatColor.GREEN + " has given you "
|
||||||
|
+ ChatColor.GOLD + coinsToTransfer
|
||||||
|
+ ChatColor.GREEN + " coin" + (coinsToTransfer > 1 ? "s" : "") + "!", ChatColor.GOLD);
|
||||||
|
|
||||||
|
msg("You have given "
|
||||||
|
+ ChatColor.GOLD + coinsToTransfer
|
||||||
|
+ ChatColor.GREEN + " coin" + (coinsToTransfer > 1 ? "s" : "")
|
||||||
|
+ " to " + ChatColor.GOLD + target.getName() + ChatColor.GREEN + ".", ChatColor.GREEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PlayerData playerData = plugin.pl.getData(p);
|
}
|
||||||
msg(prefix + ChatColor.GREEN + (args.length > 0 ? p.getName() + " has " : "You have ") + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins.");
|
|
||||||
return true;
|
@Override
|
||||||
|
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
List<String> options = new ArrayList<>(FUtil.getPlayerList());
|
||||||
|
|
||||||
|
options.add("pay");
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FUtil.getPlayerList();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
|
@ -43,7 +42,7 @@ public class Command_doom extends FreedomCommand
|
||||||
FUtil.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
|
FUtil.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
|
||||||
FUtil.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
|
FUtil.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
|
||||||
|
|
||||||
final String ip = Objects.requireNonNull(player.getAddress()).getAddress().getHostAddress().trim();
|
final String ip = FUtil.getIp(player);
|
||||||
|
|
||||||
// Remove from admin
|
// Remove from admin
|
||||||
Admin admin = getAdmin(player);
|
Admin admin = getAdmin(player);
|
||||||
|
@ -76,10 +75,7 @@ public class Command_doom extends FreedomCommand
|
||||||
// Ban player
|
// Ban player
|
||||||
Ban ban = Ban.forPlayer(player, sender);
|
Ban ban = Ban.forPlayer(player, sender);
|
||||||
ban.setReason((reason == null ? "FUCKOFF" : reason));
|
ban.setReason((reason == null ? "FUCKOFF" : reason));
|
||||||
for (String playerIp : plugin.pl.getData(player).getIps())
|
ban.addIp(ip);
|
||||||
{
|
|
||||||
ban.addIp(playerIp);
|
|
||||||
}
|
|
||||||
plugin.bm.addBan(ban);
|
plugin.bm.addBan(ban);
|
||||||
|
|
||||||
// Set gamemode to survival
|
// Set gamemode to survival
|
||||||
|
|
|
@ -1,40 +1,50 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Eject players that are riding you.", usage = "/<command>")
|
@CommandParameters(description = "Eject any entities that are riding you.", usage = "/<command>")
|
||||||
public class Command_eject extends FreedomCommand
|
public class Command_eject extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
/* Player.getShoulderEntityLeft() and Player.getShoulderEntityRight() are deprecated, however unless
|
||||||
|
Player.getPassengers() also includes shoulders (which isn't likely, given the official documentation doesn't
|
||||||
|
state an alternative method to use instead), these methods will continue to be used here. */
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
// Uses the size of the return value of Player.getPassengers() as the starting number of entities ejected
|
||||||
|
int count = playerSender.getPassengers().size();
|
||||||
|
|
||||||
List<String> names = new ArrayList<>();
|
// Removes any entities from the sender's shoulders
|
||||||
|
if (playerSender.getShoulderEntityLeft() != null)
|
||||||
for (Entity entity : playerSender.getPassengers())
|
|
||||||
{
|
{
|
||||||
names.add(entity.getName());
|
playerSender.setShoulderEntityLeft(null);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
if (playerSender.getShoulderEntityRight() != null)
|
||||||
|
{
|
||||||
|
playerSender.setShoulderEntityLeft(null);
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (names.isEmpty())
|
// Removes anything riding the sender
|
||||||
|
playerSender.eject();
|
||||||
|
|
||||||
|
if (count != 0)
|
||||||
|
{
|
||||||
|
msg(count + " entit" + (count == 1 ? "y was" : "ies were") + " ejected.", ChatColor.GREEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
msg("Nothing was ejected.", ChatColor.GREEN);
|
msg("Nothing was ejected.", ChatColor.GREEN);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Ejecting " + StringUtils.join(names, ", ") + ".", ChatColor.GREEN);
|
|
||||||
playerSender.eject();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import com.sk89q.worldedit.IncompleteRegionException;
|
|
||||||
import com.sk89q.worldedit.LocalSession;
|
|
||||||
import com.sk89q.worldedit.regions.Region;
|
|
||||||
import com.sk89q.worldguard.domains.DefaultDomain;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flags;
|
|
||||||
import com.sk89q.worldguard.protection.flags.RegionGroup;
|
|
||||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Make a WorldGuard region for an OP.", usage = "/<command> <playername> <name>", aliases = "mor")
|
|
||||||
public class Command_makeopregion extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
final Map<Flag<?>, Object> flags = new HashMap<Flag<?>, Object>()
|
|
||||||
{{
|
|
||||||
put(Flags.BLOCK_PLACE, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.BLOCK_BREAK, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.BUILD, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.PLACE_VEHICLE, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.DESTROY_VEHICLE, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.ENTITY_ITEM_FRAME_DESTROY, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.ENTITY_PAINTING_DESTROY, StateFlag.State.ALLOW);
|
|
||||||
put(net.goldtreeservers.worldguardextraflags.flags.Flags.WORLDEDIT, StateFlag.State.ALLOW);
|
|
||||||
}};
|
|
||||||
|
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length < 2)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
|
||||||
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
msg(FreedomCommand.PLAYER_NOT_FOUND);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String name = args[1];
|
|
||||||
|
|
||||||
LocalSession session = plugin.web.getWorldEditPlugin().getSession(playerSender);
|
|
||||||
|
|
||||||
Region selection;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
selection = session.getSelection(session.getSelectionWorld());
|
|
||||||
}
|
|
||||||
catch (IncompleteRegionException e)
|
|
||||||
{
|
|
||||||
msg("Please make a WorldEdit selection", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (selection == null)
|
|
||||||
{
|
|
||||||
msg("Please make a WorldEdit selection", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion region = new ProtectedCuboidRegion(name, selection.getMinimumPoint(), selection.getMaximumPoint());
|
|
||||||
|
|
||||||
DefaultDomain owners = new DefaultDomain();
|
|
||||||
owners.addPlayer(playerSender.getName());
|
|
||||||
owners.addPlayer(player.getName());
|
|
||||||
region.setOwners(owners);
|
|
||||||
region.setFlags(flags);
|
|
||||||
|
|
||||||
for (Flag<?> flag : flags.keySet())
|
|
||||||
{
|
|
||||||
region.setFlag(flag.getRegionGroupFlag(), RegionGroup.MEMBERS);
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionManager regionManager = plugin.wgb.getRegionManager(playerSender.getWorld());
|
|
||||||
|
|
||||||
regionManager.addRegion(region);
|
|
||||||
|
|
||||||
msg("Successfully created the region '" + name + "' for " + player.getName(), ChatColor.GREEN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -23,6 +23,7 @@ import org.bukkit.potion.PotionEffectType;
|
||||||
@CommandParameters(description = "Modify the current item you are holding.", usage = "/<command> <name <message> | lore <message> | enchant <enchantment> <level> | potion <effect> <duration> <amplifier> | attribute <name> <amount> | clear>", aliases = "mi")
|
@CommandParameters(description = "Modify the current item you are holding.", usage = "/<command> <name <message> | lore <message> | enchant <enchantment> <level> | potion <effect> <duration> <amplifier> | attribute <name> <amount> | clear>", aliases = "mi")
|
||||||
public class Command_modifyitem extends FreedomCommand
|
public class Command_modifyitem extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
|
|
@ -130,17 +130,19 @@ public class Command_mute extends FreedomCommand
|
||||||
{
|
{
|
||||||
playerdata.setMuted(true);
|
playerdata.setMuted(true);
|
||||||
player.sendTitle(ChatColor.RED + "You've been muted.", ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
player.sendTitle(ChatColor.RED + "You've been muted.", ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
||||||
|
|
||||||
|
if (quiet)
|
||||||
|
{
|
||||||
|
msg("Muted " + player.getName() + " quietly");
|
||||||
|
return true; // doesn't announce reason
|
||||||
|
}
|
||||||
|
|
||||||
|
FUtil.adminAction(sender.getName(), "Muting " + player.getName(), true);
|
||||||
|
|
||||||
if (reason != null)
|
if (reason != null)
|
||||||
{
|
{
|
||||||
msg(player, ChatColor.RED + "Reason: " + ChatColor.YELLOW + reason);
|
msg(player, ChatColor.RED + "Reason: " + ChatColor.YELLOW + reason);
|
||||||
}
|
}
|
||||||
if (quiet)
|
|
||||||
{
|
|
||||||
msg("Muted " + player.getName() + " quietly");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Muting " + player.getName(), true);
|
|
||||||
|
|
||||||
if (smite)
|
if (smite)
|
||||||
{
|
{
|
||||||
|
@ -178,4 +180,4 @@ public class Command_mute extends FreedomCommand
|
||||||
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,10 @@ public class Command_opall extends FreedomCommand
|
||||||
msg(player, YOU_ARE_OP);
|
msg(player, YOU_ARE_OP);
|
||||||
plugin.rm.updateDisplay(player);
|
plugin.rm.updateDisplay(player);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.recalculatePermissions();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Release parrots from your shoulders.", usage = "/<command>", aliases = "removeparrots")
|
|
||||||
public class Command_releaseparrots extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
Entity leftShoulderEntity = playerSender.getShoulderEntityLeft();
|
|
||||||
Entity rightShoulderEntity = playerSender.getShoulderEntityRight();
|
|
||||||
|
|
||||||
if (rightShoulderEntity == null && leftShoulderEntity == null)
|
|
||||||
{
|
|
||||||
msg("No parrots were detected on either of your shoulders.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (leftShoulderEntity != null && leftShoulderEntity.getType().equals(EntityType.PARROT))
|
|
||||||
{
|
|
||||||
playerSender.setShoulderEntityLeft(null);
|
|
||||||
msg("Removed the parrot on your left shoulder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rightShoulderEntity != null && rightShoulderEntity.getType().equals(EntityType.PARROT))
|
|
||||||
{
|
|
||||||
playerSender.setShoulderEntityRight(null);
|
|
||||||
msg("Removed the parrot on your right shoulder.");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Sets your experience level (XP).", usage = "/<command> [level]")
|
|
||||||
public class Command_setlevel extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int new_level;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
new_level = Integer.parseInt(args[0]);
|
|
||||||
|
|
||||||
if (new_level < 0)
|
|
||||||
{
|
|
||||||
new_level = 0;
|
|
||||||
}
|
|
||||||
else if (new_level > 50)
|
|
||||||
{
|
|
||||||
new_level = 50;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (NumberFormatException ex)
|
|
||||||
{
|
|
||||||
msg("Invalid level.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
playerSender.setLevel(new_level);
|
|
||||||
|
|
||||||
msg("Your XP level is now set to " + ChatColor.GOLD + new_level);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +1,8 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.lang3.EnumUtils;
|
import org.apache.commons.lang3.EnumUtils;
|
||||||
|
@ -55,6 +57,7 @@ public class Command_spawnmob extends FreedomCommand
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int max = ConfigEntry.SPAWNMOB_MAX.getInteger();
|
||||||
int amount = 1;
|
int amount = 1;
|
||||||
if (args.length > 1)
|
if (args.length > 1)
|
||||||
{
|
{
|
||||||
|
@ -69,9 +72,9 @@ public class Command_spawnmob extends FreedomCommand
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amount > 10 || amount < 1)
|
if (amount > max || amount < 1)
|
||||||
{
|
{
|
||||||
msg("Invalid amount: " + args[1] + ". Must be 1-10.", ChatColor.RED);
|
msg("Invalid amount: " + args[1] + ". Must be 1-" + max + ".", ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import com.earth2me.essentials.User;
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.User;
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
import me.totalfreedom.totalfreedommod.shop.ShopItem;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Trails rainbow wool behind you as you walk/fly.", usage = "/<command>")
|
@CommandParameters(description = "Trails rainbow wool behind you as you walk/fly.", usage = "/<command>")
|
||||||
public class Command_trail extends FreedomCommand
|
public class Command_trail extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
@ -13,6 +15,12 @@ public class Command_trail extends FreedomCommand
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
if (!plugin.pl.getData(playerSender).hasItem(ShopItem.RAINBOW_TRAIL))
|
||||||
|
{
|
||||||
|
msg("You didn't purchase the ability to have a " + ShopItem.RAINBOW_TRAIL.getName() + "! Purchase it from the shop.", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (plugin.tr.contains(playerSender))
|
if (plugin.tr.contains(playerSender))
|
||||||
{
|
{
|
||||||
plugin.tr.remove(playerSender);
|
plugin.tr.remove(playerSender);
|
||||||
|
@ -21,7 +29,7 @@ public class Command_trail extends FreedomCommand
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
plugin.tr.add(playerSender);
|
plugin.tr.add(playerSender);
|
||||||
msg("Trail enabled. Use \"/trail off\" to disable.");
|
msg("Trail enabled. Run this command again to disable it.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import com.earth2me.essentials.User;
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -22,20 +19,33 @@ public class Command_unban extends FreedomCommand
|
||||||
if (args.length > 0)
|
if (args.length > 0)
|
||||||
{
|
{
|
||||||
String username;
|
String username;
|
||||||
final PlayerData entry = plugin.pl.getData(args[0]);
|
String ip;
|
||||||
|
|
||||||
if (entry == null)
|
// Gets the IP using Essentials data if available
|
||||||
|
if (plugin.esb.isEnabled() && plugin.esb.getEssentialsUser(args[0]) != null)
|
||||||
{
|
{
|
||||||
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
|
User essUser = plugin.esb.getEssentialsUser(args[0]);
|
||||||
return true;
|
//
|
||||||
|
username = essUser.getName();
|
||||||
|
ip = essUser.getLastLoginAddress();
|
||||||
|
}
|
||||||
|
// Secondary method - using Essentials if available
|
||||||
|
else
|
||||||
|
{
|
||||||
|
final PlayerData entry = plugin.pl.getData(args[0]);
|
||||||
|
if (entry == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
username = entry.getName();
|
||||||
|
ip = entry.getIps().get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
username = entry.getName();
|
|
||||||
final List<String> ips = new ArrayList<>(entry.getIps());
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Unbanning " + username, true);
|
FUtil.adminAction(sender.getName(), "Unbanning " + username, true);
|
||||||
msg(username + " has been unbanned along with the following IPs: " + StringUtils.join(ips, ", "));
|
|
||||||
plugin.bm.removeBan(plugin.bm.getByUsername(username));
|
plugin.bm.removeBan(plugin.bm.getByUsername(username));
|
||||||
|
plugin.bm.removeBan(plugin.bm.getByIp(ip));
|
||||||
|
msg(username + " has been unbanned along with the IP: " + ip);
|
||||||
|
|
||||||
if (args.length >= 2)
|
if (args.length >= 2)
|
||||||
{
|
{
|
||||||
|
@ -45,20 +55,6 @@ public class Command_unban extends FreedomCommand
|
||||||
msg("Restored edits for: " + username);
|
msg("Restored edits for: " + username);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String ip : ips)
|
|
||||||
{
|
|
||||||
Ban ban = plugin.bm.getByIp(ip);
|
|
||||||
if (ban != null)
|
|
||||||
{
|
|
||||||
plugin.bm.removeBan(ban);
|
|
||||||
}
|
|
||||||
ban = plugin.bm.getByIp(FUtil.getFuzzyIp(ip));
|
|
||||||
if (ban != null)
|
|
||||||
{
|
|
||||||
plugin.bm.removeBan(ban);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -45,6 +45,8 @@ public enum ConfigEntry
|
||||||
MOB_LIMITER_DISABLE_GIANT(Boolean.class, "moblimiter.disable.giant"),
|
MOB_LIMITER_DISABLE_GIANT(Boolean.class, "moblimiter.disable.giant"),
|
||||||
MOB_LIMITER_DISABLE_SLIME(Boolean.class, "moblimiter.disable.slime"),
|
MOB_LIMITER_DISABLE_SLIME(Boolean.class, "moblimiter.disable.slime"),
|
||||||
//
|
//
|
||||||
|
SPAWNMOB_MAX(Integer.class, "spawnmob.max"),
|
||||||
|
//
|
||||||
HTTPD_ENABLED(Boolean.class, "httpd.enabled"),
|
HTTPD_ENABLED(Boolean.class, "httpd.enabled"),
|
||||||
HTTPD_HOST(String.class, "httpd.host"),
|
HTTPD_HOST(String.class, "httpd.host"),
|
||||||
HTTPD_REVERSE_PROXY(Boolean.class, "httpd.reverse_proxy"),
|
HTTPD_REVERSE_PROXY(Boolean.class, "httpd.reverse_proxy"),
|
||||||
|
@ -88,6 +90,7 @@ public enum ConfigEntry
|
||||||
DISCORD_ASSISTANT_EXECUTIVE_ROLE_ID(String.class, "discord.assistant_executive_role_id"),
|
DISCORD_ASSISTANT_EXECUTIVE_ROLE_ID(String.class, "discord.assistant_executive_role_id"),
|
||||||
DISCORD_EXECUTIVE_ROLE_ID(String.class, "discord.executive_role_id"),
|
DISCORD_EXECUTIVE_ROLE_ID(String.class, "discord.executive_role_id"),
|
||||||
DISCORD_SERVER_OWNER_ROLE_ID(String.class, "discord.server_owner_role_id"),
|
DISCORD_SERVER_OWNER_ROLE_ID(String.class, "discord.server_owner_role_id"),
|
||||||
|
DISCORD_INVITE_LINK(String.class, "discord.invite_link"),
|
||||||
//
|
//
|
||||||
PTERO_URL(String.class, "ptero.url"),
|
PTERO_URL(String.class, "ptero.url"),
|
||||||
PTERO_DEFAULT_EMAIL_DOMAIN(String.class, "ptero.default_email_domain"),
|
PTERO_DEFAULT_EMAIL_DOMAIN(String.class, "ptero.default_email_domain"),
|
||||||
|
@ -112,6 +115,7 @@ public enum ConfigEntry
|
||||||
SHOP_PRICES_STACKING_POTATO(Integer.class, "shop.prices.stacking_potato"),
|
SHOP_PRICES_STACKING_POTATO(Integer.class, "shop.prices.stacking_potato"),
|
||||||
SHOP_PRICES_CLOWN_FISH(Integer.class, "shop.prices.clown_fish"),
|
SHOP_PRICES_CLOWN_FISH(Integer.class, "shop.prices.clown_fish"),
|
||||||
SHOP_PRICES_LOGIN_MESSAGES(Integer.class, "shop.prices.login_messages"),
|
SHOP_PRICES_LOGIN_MESSAGES(Integer.class, "shop.prices.login_messages"),
|
||||||
|
SHOP_PRICES_RAINBOW_TRAIL(Integer.class, "shop.prices.rainbow_trail"),
|
||||||
//
|
//
|
||||||
ADMINLIST_CLEAN_THESHOLD_HOURS(Integer.class, "adminlist.clean_threshold_hours"),
|
ADMINLIST_CLEAN_THESHOLD_HOURS(Integer.class, "adminlist.clean_threshold_hours"),
|
||||||
ADMINLIST_CONSOLE_IS_ADMIN(Boolean.class, "adminlist.console_is_admin"),
|
ADMINLIST_CONSOLE_IS_ADMIN(Boolean.class, "adminlist.console_is_admin"),
|
||||||
|
@ -167,6 +171,8 @@ public enum ConfigEntry
|
||||||
ADMIN_INFO(List.class, "admininfo"),
|
ADMIN_INFO(List.class, "admininfo"),
|
||||||
VOTING_INFO(List.class, "votinginfo"),
|
VOTING_INFO(List.class, "votinginfo"),
|
||||||
MASTER_BUILDER_INFO(List.class, "masterbuilderinfo"),
|
MASTER_BUILDER_INFO(List.class, "masterbuilderinfo"),
|
||||||
|
FIRST_JOIN_INFO(List.class, "first_join_info.text"),
|
||||||
|
FIRST_JOIN_INFO_ENABLED(Boolean.class, "first_join_info.enabled"),
|
||||||
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
|
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
|
||||||
TOGGLE_CHAT(Boolean.class, "toggle_chat"),
|
TOGGLE_CHAT(Boolean.class, "toggle_chat"),
|
||||||
DEVELOPER_MODE(Boolean.class, "developer_mode"),
|
DEVELOPER_MODE(Boolean.class, "developer_mode"),
|
||||||
|
|
|
@ -10,9 +10,12 @@ import net.dv8tion.jda.api.entities.Member;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.chat.ClickEvent;
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||||
|
import net.md_5.bungee.api.chat.HoverEvent;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import net.md_5.bungee.api.chat.hover.content.Text;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -28,39 +31,66 @@ public class DiscordToMinecraftListener extends ListenerAdapter
|
||||||
{
|
{
|
||||||
Member member = event.getMember();
|
Member member = event.getMember();
|
||||||
String tag = getDisplay(member);
|
String tag = getDisplay(member);
|
||||||
StringBuilder message = new StringBuilder(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_AQUA + "Discord" + ChatColor.DARK_GRAY + "]");
|
|
||||||
Message msg = event.getMessage();
|
Message msg = event.getMessage();
|
||||||
|
|
||||||
|
ComponentBuilder emsg = new ComponentBuilder();
|
||||||
|
|
||||||
|
// Prefix
|
||||||
|
emsg.append(ChatColor.DARK_GRAY + "[");
|
||||||
|
TextComponent inviteLink = new TextComponent("Discord");
|
||||||
|
inviteLink.setColor(ChatColor.DARK_AQUA.asBungee());
|
||||||
|
inviteLink.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||||
|
new Text("Click here to get the invite link!")));
|
||||||
|
inviteLink.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL,
|
||||||
|
ConfigEntry.DISCORD_INVITE_LINK.getString()));
|
||||||
|
emsg.append(inviteLink);
|
||||||
|
emsg.append(ChatColor.DARK_GRAY + "] ", ComponentBuilder.FormatRetention.NONE);
|
||||||
|
|
||||||
|
// Tag (if they have one)
|
||||||
if (tag != null)
|
if (tag != null)
|
||||||
{
|
{
|
||||||
message.append(" ").append(tag);
|
emsg.append(tag);
|
||||||
}
|
|
||||||
message.append(" ").append(ChatColor.RED).append(ChatColor.stripColor(member.getEffectiveName())).append(ChatColor.DARK_GRAY).append(":").append(ChatColor.RESET);
|
|
||||||
ComponentBuilder builder = new ComponentBuilder(message.toString());
|
|
||||||
if (!msg.getContentDisplay().isEmpty())
|
|
||||||
{
|
|
||||||
builder.append(" ").append(ChatColor.stripColor(msg.getContentDisplay()));
|
|
||||||
message.append(" ").append(ChatColor.stripColor(msg.getContentDisplay())); // for logging
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emsg.append(" ");
|
||||||
|
|
||||||
|
// User
|
||||||
|
TextComponent user = new TextComponent(ChatColor.stripColor(member.getEffectiveName()));
|
||||||
|
user.setColor(ChatColor.RED.asBungee());
|
||||||
|
emsg.append(user);
|
||||||
|
|
||||||
|
// Message
|
||||||
|
emsg.append(ChatColor.DARK_GRAY + ": " + ChatColor.RESET
|
||||||
|
+ ChatColor.stripColor(msg.getContentDisplay()), ComponentBuilder.FormatRetention.NONE);
|
||||||
|
|
||||||
|
// Attachments
|
||||||
if (!msg.getAttachments().isEmpty())
|
if (!msg.getAttachments().isEmpty())
|
||||||
{
|
{
|
||||||
|
if (!msg.getContentDisplay().isEmpty())
|
||||||
|
emsg.append(" ");
|
||||||
|
|
||||||
for (Message.Attachment attachment : msg.getAttachments())
|
for (Message.Attachment attachment : msg.getAttachments())
|
||||||
{
|
{
|
||||||
attachment.getUrl();
|
TextComponent media = new TextComponent("[Media] ");
|
||||||
builder.append(" ");
|
media.setColor(ChatColor.YELLOW.asBungee());
|
||||||
TextComponent text = new TextComponent(ChatColor.YELLOW + "[Media]");
|
media.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, attachment.getUrl()));
|
||||||
text.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, attachment.getUrl()));
|
media.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(attachment.getUrl())));
|
||||||
builder.append(text);
|
|
||||||
message.append(" [Media]"); // for logging
|
emsg.append(media, ComponentBuilder.FormatRetention.NONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BaseComponent[] components = emsg.create();
|
||||||
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (TotalFreedomMod.getPlugin().pl.getData(player).doesDisplayDiscord())
|
if (TotalFreedomMod.getPlugin().pl.getData(player).doesDisplayDiscord())
|
||||||
{
|
{
|
||||||
player.spigot().sendMessage(builder.create());
|
player.spigot().sendMessage(components);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FLog.info(message.toString());
|
|
||||||
|
FLog.info(TextComponent.toLegacyText(components), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,10 @@ import java.util.HashSet;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.SplittableRandom;
|
import java.util.SplittableRandom;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
|
import me.totalfreedom.totalfreedommod.shop.ShopItem;
|
||||||
import me.totalfreedom.totalfreedommod.util.Groups;
|
import me.totalfreedom.totalfreedommod.util.Groups;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -18,7 +21,7 @@ import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
public class Trailer extends FreedomService
|
public class Trailer extends FreedomService
|
||||||
{
|
{
|
||||||
private final SplittableRandom random = new SplittableRandom();
|
private final SplittableRandom random = new SplittableRandom();
|
||||||
private final Set<String> trailPlayers = new HashSet<>(); // player name
|
private final Set<UUID> trailPlayers = new HashSet<>(); // player UUID
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
|
@ -33,17 +36,17 @@ public class Trailer extends FreedomService
|
||||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onPlayerMove(PlayerMoveEvent event)
|
public void onPlayerMove(PlayerMoveEvent event)
|
||||||
{
|
{
|
||||||
if (trailPlayers.isEmpty())
|
/* Doesn't continue any further if...
|
||||||
{
|
* - The trail list is empty
|
||||||
return;
|
* - The player doesn't have their trail enabled in the first place
|
||||||
}
|
* - The player doesn't have the trail item in the shop at all
|
||||||
|
* - The player doesn't have permission to modify blocks in their current world
|
||||||
if (!trailPlayers.contains(event.getPlayer().getName()))
|
*/
|
||||||
{
|
if (trailPlayers.isEmpty()
|
||||||
return;
|
|| !trailPlayers.contains(event.getPlayer().getUniqueId())
|
||||||
}
|
|| !plugin.pl.getData(event.getPlayer()).hasItem(ShopItem.RAINBOW_TRAIL)
|
||||||
|
|| plugin.wr.doRestrict(event.getPlayer())
|
||||||
if (event.getPlayer().getWorld().equals(plugin.wm.masterBuilderWorld.getWorld()))
|
|| !plugin.wgb.canEditCurrentWorld(event.getPlayer()))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -69,7 +72,7 @@ public class Trailer extends FreedomService
|
||||||
{
|
{
|
||||||
final Location trail_pos;
|
final Location trail_pos;
|
||||||
trail_pos = new Location(event.getPlayer().getWorld(), fromBlock.getX() + x, fromBlock.getY(), fromBlock.getZ() + z);
|
trail_pos = new Location(event.getPlayer().getWorld(), fromBlock.getX() + x, fromBlock.getY(), fromBlock.getZ() + z);
|
||||||
if (trailPlayers.contains(event.getPlayer().getName()) && plugin.cpb.isEnabled())
|
if (trailPlayers.contains(event.getPlayer().getUniqueId()) && plugin.cpb.isEnabled())
|
||||||
{
|
{
|
||||||
plugin.cpb.getCoreProtectAPI().logPlacement(event.getPlayer().getName(), trail_pos, material, data);
|
plugin.cpb.getCoreProtectAPI().logPlacement(event.getPlayer().getName(), trail_pos, material, data);
|
||||||
}
|
}
|
||||||
|
@ -79,16 +82,16 @@ public class Trailer extends FreedomService
|
||||||
|
|
||||||
public void remove(Player player)
|
public void remove(Player player)
|
||||||
{
|
{
|
||||||
trailPlayers.remove(player.getName());
|
trailPlayers.remove(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(Player player)
|
public void add(Player player)
|
||||||
{
|
{
|
||||||
trailPlayers.add(player.getName());
|
trailPlayers.add(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean contains(Player player)
|
public boolean contains(Player player)
|
||||||
{
|
{
|
||||||
return trailPlayers.contains(player.getName());
|
return trailPlayers.contains(player.getUniqueId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,19 +10,29 @@ public enum ShopItem
|
||||||
LIGHTNING_ROD("Lightning Rod", Material.BLAZE_ROD, 12, ConfigEntry.SHOP_PRICES_LIGHTNING_ROD, ChatColor.LIGHT_PURPLE, "lightningRod", "/lightningrod"),
|
LIGHTNING_ROD("Lightning Rod", Material.BLAZE_ROD, 12, ConfigEntry.SHOP_PRICES_LIGHTNING_ROD, ChatColor.LIGHT_PURPLE, "lightningRod", "/lightningrod"),
|
||||||
FIRE_BALL("Fire Ball", Material.FIRE_CHARGE, 14, ConfigEntry.SHOP_PRICES_FIRE_BALL, ChatColor.RED, "fireBall", "/fireball"),
|
FIRE_BALL("Fire Ball", Material.FIRE_CHARGE, 14, ConfigEntry.SHOP_PRICES_FIRE_BALL, ChatColor.RED, "fireBall", "/fireball"),
|
||||||
RIDEABLE_PEARL("Rideable Ender Pearl", Material.ENDER_PEARL, 16, ConfigEntry.SHOP_PRICES_RIDEABLE_PEARL, ChatColor.DARK_PURPLE, "rideablePearl", "/rideablepearl"),
|
RIDEABLE_PEARL("Rideable Ender Pearl", Material.ENDER_PEARL, 16, ConfigEntry.SHOP_PRICES_RIDEABLE_PEARL, ChatColor.DARK_PURPLE, "rideablePearl", "/rideablepearl"),
|
||||||
STACKING_POTATO("Stacking Potato", Material.POTATO, 20, ConfigEntry.SHOP_PRICES_STACKING_POTATO, ChatColor.YELLOW, "stackingPotato", "/stackingpotato"),
|
STACKING_POTATO("Stacking Potato", Material.POTATO, 19, ConfigEntry.SHOP_PRICES_STACKING_POTATO, ChatColor.YELLOW, "stackingPotato", "/stackingpotato"),
|
||||||
CLOWN_FISH("Clown Fish", Material.TROPICAL_FISH, 22, ConfigEntry.SHOP_PRICES_CLOWN_FISH, ChatColor.GOLD, "clownFish", "/clownfish"),
|
CLOWN_FISH("Clown Fish", Material.TROPICAL_FISH, 21, ConfigEntry.SHOP_PRICES_CLOWN_FISH, ChatColor.GOLD, "clownFish", "/clownfish"),
|
||||||
LOGIN_MESSAGES("Login Messages", Material.NAME_TAG, 24, ConfigEntry.SHOP_PRICES_LOGIN_MESSAGES, ChatColor.DARK_GREEN, "loginMessages", "/loginmessage");
|
LOGIN_MESSAGES("Login Messages", Material.NAME_TAG, 23, ConfigEntry.SHOP_PRICES_LOGIN_MESSAGES, ChatColor.DARK_GREEN, "loginMessages", "/loginmessage"),
|
||||||
|
RAINBOW_TRAIL("Rainbow Trail", Material.RED_WOOL, 25, ConfigEntry.SHOP_PRICES_RAINBOW_TRAIL, ChatColor.DARK_RED, "rainbowTrail", "/trail");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Shop GUI Layout:
|
Shop GUI Layout:
|
||||||
|
|
||||||
Dimensions: 9x4 = 36
|
Dimensions: 9x4 = 36
|
||||||
Key: g = Grappling Hook, l = Lightning Rod, f = Fire Ball, r = Rideable Ender Pearl, s = Stacking Potato, c = Clown Fish, x = Login Messages $ = Coins}
|
Key:
|
||||||
|
g = Grappling Hook,
|
||||||
|
l = Lightning Rod
|
||||||
|
f = Fire Ball
|
||||||
|
r = Rideable Ender Pearl
|
||||||
|
s = Stacking Potato
|
||||||
|
c = Clown Fish
|
||||||
|
x = Login Messages
|
||||||
|
t = Rainbow Trail
|
||||||
|
$ = Coins
|
||||||
|
|
||||||
---------
|
---------
|
||||||
-g-l-f-r-
|
-g-l-f-r-
|
||||||
--s-c-x--
|
-s-c-x-t-
|
||||||
--------$
|
--------$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -1,34 +1,6 @@
|
||||||
package me.totalfreedom.totalfreedommod.util;
|
package me.totalfreedom.totalfreedommod.util;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.DataOutputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.text.ParseException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.SplittableRandom;
|
|
||||||
import java.util.TimeZone;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||||
import me.totalfreedom.totalfreedommod.admin.AdminList;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
@ -48,12 +20,22 @@ import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.json.simple.JSONArray;
|
import org.json.simple.JSONArray;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static org.bukkit.Bukkit.getServer;
|
import static org.bukkit.Bukkit.getServer;
|
||||||
|
|
||||||
public class FUtil
|
public class FUtil
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final String SAVED_FLAGS_FILENAME = "savedflags.dat";
|
|
||||||
/* See https://github.com/TotalFreedom/License - None of the listed names may be removed.
|
/* See https://github.com/TotalFreedom/License - None of the listed names may be removed.
|
||||||
Leaving this list here for anyone running TFM on a cracked server:
|
Leaving this list here for anyone running TFM on a cracked server:
|
||||||
public static final List<String> DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "Telesphoreo", "CoolJWB");
|
public static final List<String> DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "Telesphoreo", "CoolJWB");
|
||||||
|
@ -65,19 +47,17 @@ public class FUtil
|
||||||
"604cbb51-842d-4b43-8b0a-d1d7c6cd2869", // Wild1145
|
"604cbb51-842d-4b43-8b0a-d1d7c6cd2869", // Wild1145
|
||||||
"e67d77c4-fff9-4cea-94cc-9f1f1ab7806b", // aggelosQQ
|
"e67d77c4-fff9-4cea-94cc-9f1f1ab7806b", // aggelosQQ
|
||||||
"0061326b-8b3d-44c8-830a-5f2d59f5dc1b", // scripthead
|
"0061326b-8b3d-44c8-830a-5f2d59f5dc1b", // scripthead
|
||||||
"78408086-1991-4c33-a571-d8fa325465b2", // Telesphoreo
|
|
||||||
"67ce0e28-3d6b-469c-ab71-304eec81b614", // CoolJWB
|
"67ce0e28-3d6b-469c-ab71-304eec81b614", // CoolJWB
|
||||||
"03b41e15-d03f-4025-86f5-f1812df200fa", // elmon_
|
"03b41e15-d03f-4025-86f5-f1812df200fa", // elmon_
|
||||||
"d018f2b8-ce60-4672-a45f-e580e0331299", // speednt
|
"d018f2b8-ce60-4672-a45f-e580e0331299", // speednt
|
||||||
"458de06f-36a5-4e1b-aaa6-ec1d1751c5b6", // SupItsDillon
|
"458de06f-36a5-4e1b-aaa6-ec1d1751c5b6", // SupItsDillon
|
||||||
"c8e5af82-6aba-4dd7-83e8-474381380cc9", // Paldiu
|
"c8e5af82-6aba-4dd7-83e8-474381380cc9", // Paldiu
|
||||||
"38ea7c82-7bdc-4f48-b7fd-0e93fc26813d", // AwesomePinch
|
|
||||||
"ba5aafba-9012-418f-9819-a7020d591068", // TFTWPhoenix
|
"ba5aafba-9012-418f-9819-a7020d591068", // TFTWPhoenix
|
||||||
"d6dd9740-40db-45f5-ab16-4ee16a633009", // Abhi
|
"d6dd9740-40db-45f5-ab16-4ee16a633009", // Abhi
|
||||||
"2e06e049-24c8-42e4-8bcf-d35372af31e6", // NotInSync
|
"2e06e049-24c8-42e4-8bcf-d35372af31e6", // NotInSync
|
||||||
"f97c0d7b-6413-4558-a409-88f09a8f9adb" // videogamesm12
|
"f97c0d7b-6413-4558-a409-88f09a8f9adb" // videogamesm12
|
||||||
);
|
);
|
||||||
public static final List<String> DEVELOPER_NAMES = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "Telesphoreo", "CoolJWB", "elmon_", "speednt", "SupItsDillon", "Paldiu", "AwesomePinch", "TFTWPhoenix", "abhithedev", "NotInSync", "videogamesm12");
|
public static final List<String> DEVELOPER_NAMES = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "CoolJWB", "elmon_", "speednt", "SupItsDillon", "Paldiu", "TFTWPhoenix", "abhithedev", "NotInSync", "videogamesm12");
|
||||||
public static final Map<String, ChatColor> CHAT_COLOR_NAMES = new HashMap<>();
|
public static final Map<String, ChatColor> CHAT_COLOR_NAMES = new HashMap<>();
|
||||||
public static final List<ChatColor> CHAT_COLOR_POOL = Arrays.asList(
|
public static final List<ChatColor> CHAT_COLOR_POOL = Arrays.asList(
|
||||||
ChatColor.DARK_RED,
|
ChatColor.DARK_RED,
|
||||||
|
@ -267,7 +247,7 @@ public class FUtil
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
FLog.severe("Failed to convert name to UUID:\n" + e);
|
FLog.severe("Failed to convert name to UUID:\n" + e.toString());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -275,7 +255,7 @@ public class FUtil
|
||||||
public static Response sendRequest(String endpoint, String method, List<String> headers, String body) throws IOException
|
public static Response sendRequest(String endpoint, String method, List<String> headers, String body) throws IOException
|
||||||
{
|
{
|
||||||
URL url = new URL(endpoint);
|
URL url = new URL(endpoint);
|
||||||
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
|
||||||
connection.setRequestMethod(method);
|
connection.setRequestMethod(method);
|
||||||
|
|
||||||
|
@ -405,17 +385,11 @@ public class FUtil
|
||||||
add("s");
|
add("s");
|
||||||
}};
|
}};
|
||||||
|
|
||||||
public static boolean isValidUsername(String s)
|
|
||||||
{
|
|
||||||
return s != null && s.matches("^[a-zA-Z0-9_]*$");
|
|
||||||
}
|
|
||||||
|
|
||||||
private static long a(String parse)
|
private static long a(String parse)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
regxList.forEach(obj ->
|
regxList.forEach(obj -> {
|
||||||
{
|
|
||||||
if (parse.endsWith(obj))
|
if (parse.endsWith(obj))
|
||||||
{
|
{
|
||||||
sb.append(parse.split(obj)[0]);
|
sb.append(parse.split(obj)[0]);
|
||||||
|
@ -574,7 +548,7 @@ public class FUtil
|
||||||
{
|
{
|
||||||
Field field = checkClass.getDeclaredField(name);
|
Field field = checkClass.getDeclaredField(name);
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
return (T)field.get(from);
|
return (T) field.get(from);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (NoSuchFieldException | IllegalAccessException ignored)
|
catch (NoSuchFieldException | IllegalAccessException ignored)
|
||||||
|
@ -656,7 +630,7 @@ public class FUtil
|
||||||
public static int randomInteger(int min, int max)
|
public static int randomInteger(int min, int max)
|
||||||
{
|
{
|
||||||
int range = max - min + 1;
|
int range = max - min + 1;
|
||||||
return (int)(Math.random() * range) + min;
|
return (int) (Math.random() * range) + min;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String randomString(int length)
|
public static String randomString(int length)
|
||||||
|
@ -778,7 +752,7 @@ public class FUtil
|
||||||
|
|
||||||
public static String getIp(Player player)
|
public static String getIp(Player player)
|
||||||
{
|
{
|
||||||
return Objects.requireNonNull(player.getAddress()).getAddress().getHostAddress().trim();
|
return player.getAddress().getAddress().getHostAddress().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getIp(PlayerLoginEvent event)
|
public static String getIp(PlayerLoginEvent event)
|
||||||
|
@ -794,7 +768,7 @@ public class FUtil
|
||||||
{
|
{
|
||||||
c1values[i] = Math.round(c1values[i] + factor * (c2values[i] - c1values[i]));
|
c1values[i] = Math.round(c1values[i] + factor * (c2values[i] - c1values[i]));
|
||||||
}
|
}
|
||||||
return Color.fromRGB((int)c1values[0], (int)c1values[1], (int)c1values[2]);
|
return Color.fromRGB((int) c1values[0], (int) c1values[1], (int) c1values[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isValidIPv4(String ip)
|
public static boolean isValidIPv4(String ip)
|
||||||
|
@ -861,8 +835,8 @@ public class FUtil
|
||||||
|
|
||||||
public static int getFakePlayerCount()
|
public static int getFakePlayerCount()
|
||||||
{
|
{
|
||||||
int i = AdminList.vanished.size();
|
int i = TotalFreedomMod.getPlugin().al.vanished.size();
|
||||||
for (String name : AdminList.vanished)
|
for (String name : TotalFreedomMod.getPlugin().al.vanished)
|
||||||
{
|
{
|
||||||
if (Bukkit.getPlayer(name) == null)
|
if (Bukkit.getPlayer(name) == null)
|
||||||
{
|
{
|
||||||
|
@ -892,7 +866,7 @@ public class FUtil
|
||||||
|
|
||||||
public int getPageCount()
|
public int getPageCount()
|
||||||
{
|
{
|
||||||
return (int)Math.ceil((double)size() / (double)epp);
|
return (int) Math.ceil((double) size() / (double) epp);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<T> getPage(int page)
|
public List<T> getPage(int page)
|
||||||
|
|
|
@ -45,140 +45,9 @@ public class Groups
|
||||||
Material.LIGHT_GRAY_SHULKER_BOX,
|
Material.LIGHT_GRAY_SHULKER_BOX,
|
||||||
Material.BLACK_SHULKER_BOX);
|
Material.BLACK_SHULKER_BOX);
|
||||||
|
|
||||||
public static final List<EntityType> MOB_TYPES = Arrays.asList(
|
public static final List<EntityType> MOB_TYPES = Arrays.stream(EntityType.values()).filter(EntityType::isAlive).filter(EntityType::isSpawnable).toList();
|
||||||
EntityType.BAT,
|
|
||||||
EntityType.BEE,
|
|
||||||
EntityType.BLAZE,
|
|
||||||
EntityType.CAVE_SPIDER,
|
|
||||||
EntityType.CHICKEN,
|
|
||||||
EntityType.CAT,
|
|
||||||
EntityType.COD,
|
|
||||||
EntityType.COW,
|
|
||||||
EntityType.CREEPER,
|
|
||||||
EntityType.DOLPHIN,
|
|
||||||
EntityType.DONKEY,
|
|
||||||
EntityType.DROWNED,
|
|
||||||
EntityType.ELDER_GUARDIAN,
|
|
||||||
EntityType.ENDERMAN,
|
|
||||||
EntityType.ENDERMITE,
|
|
||||||
EntityType.EVOKER,
|
|
||||||
EntityType.FOX,
|
|
||||||
EntityType.GHAST,
|
|
||||||
EntityType.GUARDIAN,
|
|
||||||
EntityType.HOGLIN,
|
|
||||||
EntityType.HORSE,
|
|
||||||
EntityType.HUSK,
|
|
||||||
EntityType.ILLUSIONER,
|
|
||||||
EntityType.IRON_GOLEM,
|
|
||||||
EntityType.LLAMA,
|
|
||||||
EntityType.MAGMA_CUBE,
|
|
||||||
EntityType.MUSHROOM_COW,
|
|
||||||
EntityType.MULE,
|
|
||||||
EntityType.OCELOT,
|
|
||||||
EntityType.PANDA,
|
|
||||||
EntityType.PARROT,
|
|
||||||
EntityType.PHANTOM,
|
|
||||||
EntityType.PIG,
|
|
||||||
EntityType.PIGLIN,
|
|
||||||
EntityType.PIGLIN_BRUTE,
|
|
||||||
EntityType.PILLAGER,
|
|
||||||
EntityType.POLAR_BEAR,
|
|
||||||
EntityType.PUFFERFISH,
|
|
||||||
EntityType.RABBIT,
|
|
||||||
EntityType.RAVAGER,
|
|
||||||
EntityType.SALMON,
|
|
||||||
EntityType.SHEEP,
|
|
||||||
EntityType.SHULKER,
|
|
||||||
EntityType.SILVERFISH,
|
|
||||||
EntityType.SKELETON,
|
|
||||||
EntityType.SKELETON_HORSE,
|
|
||||||
EntityType.SLIME,
|
|
||||||
EntityType.SNOWMAN,
|
|
||||||
EntityType.SPIDER,
|
|
||||||
EntityType.SQUID,
|
|
||||||
EntityType.STRAY,
|
|
||||||
EntityType.STRIDER,
|
|
||||||
EntityType.TRADER_LLAMA,
|
|
||||||
EntityType.TROPICAL_FISH,
|
|
||||||
EntityType.TURTLE,
|
|
||||||
EntityType.VEX,
|
|
||||||
EntityType.VILLAGER,
|
|
||||||
EntityType.VINDICATOR,
|
|
||||||
EntityType.WANDERING_TRADER,
|
|
||||||
EntityType.WITCH,
|
|
||||||
EntityType.WITHER_SKELETON,
|
|
||||||
EntityType.WOLF,
|
|
||||||
EntityType.ZOGLIN,
|
|
||||||
EntityType.ZOMBIE,
|
|
||||||
EntityType.ZOMBIE_HORSE,
|
|
||||||
EntityType.ZOMBIFIED_PIGLIN,
|
|
||||||
EntityType.ZOMBIE_VILLAGER);
|
|
||||||
|
|
||||||
public static final List<Material> SPAWN_EGGS = Arrays.asList(
|
public static final List<Material> SPAWN_EGGS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SPAWN_EGG")).toList();
|
||||||
Material.BAT_SPAWN_EGG,
|
|
||||||
Material.BEE_SPAWN_EGG,
|
|
||||||
Material.BLAZE_SPAWN_EGG,
|
|
||||||
Material.CAVE_SPIDER_SPAWN_EGG,
|
|
||||||
Material.CHICKEN_SPAWN_EGG,
|
|
||||||
Material.CAT_SPAWN_EGG,
|
|
||||||
Material.COD_SPAWN_EGG,
|
|
||||||
Material.COW_SPAWN_EGG,
|
|
||||||
Material.CREEPER_SPAWN_EGG,
|
|
||||||
Material.DOLPHIN_SPAWN_EGG,
|
|
||||||
Material.DONKEY_SPAWN_EGG,
|
|
||||||
Material.DROWNED_SPAWN_EGG,
|
|
||||||
Material.ELDER_GUARDIAN_SPAWN_EGG,
|
|
||||||
Material.ENDERMAN_SPAWN_EGG,
|
|
||||||
Material.ENDERMITE_SPAWN_EGG,
|
|
||||||
Material.EVOKER_SPAWN_EGG,
|
|
||||||
Material.FOX_SPAWN_EGG,
|
|
||||||
Material.GHAST_SPAWN_EGG,
|
|
||||||
Material.GUARDIAN_SPAWN_EGG,
|
|
||||||
Material.HOGLIN_SPAWN_EGG,
|
|
||||||
Material.HORSE_SPAWN_EGG,
|
|
||||||
Material.HUSK_SPAWN_EGG,
|
|
||||||
Material.LLAMA_SPAWN_EGG,
|
|
||||||
Material.MAGMA_CUBE_SPAWN_EGG,
|
|
||||||
Material.MOOSHROOM_SPAWN_EGG,
|
|
||||||
Material.MULE_SPAWN_EGG,
|
|
||||||
Material.OCELOT_SPAWN_EGG,
|
|
||||||
Material.PANDA_SPAWN_EGG,
|
|
||||||
Material.PARROT_SPAWN_EGG,
|
|
||||||
Material.PHANTOM_SPAWN_EGG,
|
|
||||||
Material.PIG_SPAWN_EGG,
|
|
||||||
Material.PIGLIN_SPAWN_EGG,
|
|
||||||
Material.PIGLIN_BRUTE_SPAWN_EGG,
|
|
||||||
Material.PILLAGER_SPAWN_EGG,
|
|
||||||
Material.POLAR_BEAR_SPAWN_EGG,
|
|
||||||
Material.PUFFERFISH_SPAWN_EGG,
|
|
||||||
Material.RABBIT_SPAWN_EGG,
|
|
||||||
Material.RAVAGER_SPAWN_EGG,
|
|
||||||
Material.SALMON_SPAWN_EGG,
|
|
||||||
Material.SHEEP_SPAWN_EGG,
|
|
||||||
Material.SHULKER_SPAWN_EGG,
|
|
||||||
Material.SILVERFISH_SPAWN_EGG,
|
|
||||||
Material.SKELETON_SPAWN_EGG,
|
|
||||||
Material.SKELETON_HORSE_SPAWN_EGG,
|
|
||||||
Material.SLIME_SPAWN_EGG,
|
|
||||||
Material.SPIDER_SPAWN_EGG,
|
|
||||||
Material.SQUID_SPAWN_EGG,
|
|
||||||
Material.STRAY_SPAWN_EGG,
|
|
||||||
Material.STRIDER_SPAWN_EGG,
|
|
||||||
Material.TRADER_LLAMA_SPAWN_EGG,
|
|
||||||
Material.TROPICAL_FISH_SPAWN_EGG,
|
|
||||||
Material.TURTLE_SPAWN_EGG,
|
|
||||||
Material.VEX_SPAWN_EGG,
|
|
||||||
Material.VILLAGER_SPAWN_EGG,
|
|
||||||
Material.VINDICATOR_SPAWN_EGG,
|
|
||||||
Material.WANDERING_TRADER_SPAWN_EGG,
|
|
||||||
Material.WITCH_SPAWN_EGG,
|
|
||||||
Material.WITHER_SKELETON_SPAWN_EGG,
|
|
||||||
Material.WOLF_SPAWN_EGG,
|
|
||||||
Material.ZOGLIN_SPAWN_EGG,
|
|
||||||
Material.ZOMBIE_SPAWN_EGG,
|
|
||||||
Material.ZOMBIE_HORSE_SPAWN_EGG,
|
|
||||||
Material.ZOMBIFIED_PIGLIN_SPAWN_EGG,
|
|
||||||
Material.ZOMBIE_VILLAGER_SPAWN_EGG);
|
|
||||||
|
|
||||||
public static final List<Material> BANNERS = Arrays.asList(
|
public static final List<Material> BANNERS = Arrays.asList(
|
||||||
Material.BLACK_BANNER,
|
Material.BLACK_BANNER,
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
package me.totalfreedom.totalfreedommod.world;
|
package me.totalfreedom.totalfreedommod.world;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -32,8 +29,6 @@ public class Flatlands extends CustomWorld
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
wipeFlatlandsIfFlagged();
|
|
||||||
|
|
||||||
final WorldCreator worldCreator = new WorldCreator(getName());
|
final WorldCreator worldCreator = new WorldCreator(getName());
|
||||||
worldCreator.generateStructures(false);
|
worldCreator.generateStructures(false);
|
||||||
worldCreator.type(WorldType.NORMAL);
|
worldCreator.type(WorldType.NORMAL);
|
||||||
|
@ -63,32 +58,4 @@ public class Flatlands extends CustomWorld
|
||||||
|
|
||||||
return world;
|
return world;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void wipeFlatlandsIfFlagged()
|
|
||||||
{
|
|
||||||
boolean doFlatlandsWipe = false;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
doFlatlandsWipe = plugin.sf.getSavedFlag("do_wipe_flatlands");
|
|
||||||
}
|
|
||||||
catch (Exception ignored)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
if (doFlatlandsWipe)
|
|
||||||
{
|
|
||||||
if (Bukkit.getServer().getWorld("flatlands") == null)
|
|
||||||
{
|
|
||||||
FLog.info("Wiping flatlands.");
|
|
||||||
plugin.sf.setSavedFlag("do_wipe_flatlands", false);
|
|
||||||
FileUtils.deleteQuietly(new File("./flatlands"));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FLog.severe("Can't wipe flatlands, it is already loaded.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,6 +84,8 @@ discord:
|
||||||
executive_role_id: ''
|
executive_role_id: ''
|
||||||
# Owner role ID
|
# Owner role ID
|
||||||
server_owner_role_id: ''
|
server_owner_role_id: ''
|
||||||
|
# Invite link for your Discord server
|
||||||
|
invite_link: 'https://discord.com/invite/PW4savJR9a'
|
||||||
|
|
||||||
# Pterodactyl (requires Discord verification to be enabled)
|
# Pterodactyl (requires Discord verification to be enabled)
|
||||||
ptero:
|
ptero:
|
||||||
|
@ -164,6 +166,7 @@ shop:
|
||||||
stacking_potato: 300
|
stacking_potato: 300
|
||||||
clown_fish: 1500
|
clown_fish: 1500
|
||||||
login_messages: 5000
|
login_messages: 5000
|
||||||
|
rainbow_trail: 1500
|
||||||
|
|
||||||
# Admin list
|
# Admin list
|
||||||
adminlist:
|
adminlist:
|
||||||
|
@ -211,7 +214,7 @@ allow:
|
||||||
fire_spread: false
|
fire_spread: false
|
||||||
fluid_spread: false
|
fluid_spread: false
|
||||||
lava_place: true
|
lava_place: true
|
||||||
lava_damage: false
|
lava_damage: true
|
||||||
water_place: true
|
water_place: true
|
||||||
tnt_minecarts: false
|
tnt_minecarts: false
|
||||||
explosions: false
|
explosions: false
|
||||||
|
@ -511,6 +514,10 @@ moblimiter:
|
||||||
slime: true
|
slime: true
|
||||||
giant: true
|
giant: true
|
||||||
|
|
||||||
|
# Spawnmob
|
||||||
|
spawnmob:
|
||||||
|
max: 25
|
||||||
|
|
||||||
# Flatlands
|
# Flatlands
|
||||||
flatlands:
|
flatlands:
|
||||||
generate: true
|
generate: true
|
||||||
|
@ -595,6 +602,14 @@ masterbuilderinfo:
|
||||||
- ' &2- Template:'
|
- ' &2- Template:'
|
||||||
- '&9https://forum.totalfreedom.me/d/336-master-builder-application-process'
|
- '&9https://forum.totalfreedom.me/d/336-master-builder-application-process'
|
||||||
|
|
||||||
|
# What new players will see upon joining for the first time.
|
||||||
|
first_join_info:
|
||||||
|
enabled: true
|
||||||
|
text:
|
||||||
|
- "&6Welcome to TotalFreedom -- the original Free-OP server!"
|
||||||
|
- "&eThe server's name doesn't mean we have no rules. Do &6/rules &efor a list of them."
|
||||||
|
- "&aNeed help getting started? Do &2/help &aor a list of commands!"
|
||||||
|
|
||||||
# Famous players - cannot be banned by username
|
# Famous players - cannot be banned by username
|
||||||
famous_players:
|
famous_players:
|
||||||
- honeydew
|
- honeydew
|
||||||
|
|
Loading…
Reference in a new issue