Compare commits

..
25 Commits
Author SHA1 Message Date
Minat0_ fce8399840 GitBook: [#66] [DiscordSRV] Updated to relevant | English 2022-08-17 01:12:37 +00:00
Minat0_ cc2fc201fe GitBook: [tuerkce] 15 pages modified 2021-08-30 16:39:59 +00:00
Minat0_ 373f41f9ee GitBook: [tuerkce] no pages and one asset modified 2021-08-30 16:20:48 +00:00
Minat0_ f1e4bbf043 GitBook: [tuerkce] 15 pages and one asset modified 2021-08-30 15:45:06 +00:00
Minat0_ b902f5f71d GitBook: [tuerkce] no pages and 6 assets modified 2021-08-30 15:13:27 +00:00
Minat0_ 6461b5bc8c GitBook: [tuerkce] no pages and 2 assets modified 2021-07-06 15:54:35 +00:00
Minat0_ 169ebe543e GitBook: [tuerkce] no pages and 2 assets modified 2021-07-06 15:30:59 +00:00
Minat0_ 6018c793d4 GitBook: [tuerkce] no pages and 2 assets modified 2021-07-05 10:04:52 +00:00
Minat0_ ded9077dda GitBook: [tuerkce] 15 pages modified 2021-07-02 17:06:41 +00:00
mehmet yılmaz 0dd519dabd GitBook: [tuerkce] 16 pages modified 2021-06-24 20:47:17 +00:00
mehmet yılmaz 9563fc383c GitBook: [tuerkce] one page modified 2021-06-24 20:24:32 +00:00
mehmet yılmaz 846574e613 GitBook: [tuerkce] one page modified 2021-06-24 20:24:15 +00:00
mehmet yılmaz cd40fdc704 GitBook: [tuerkce] 16 pages modified 2021-06-24 20:18:35 +00:00
mehmet yılmaz 7f01696a56 GitBook: [tuerkce] 15 pages modified 2021-06-24 19:54:39 +00:00
mehmet yılmaz 52da3def88 GitBook: [tuerkce] 16 pages modified 2021-06-24 19:43:35 +00:00
mehmet yılmaz baea60473a GitBook: [tuerkce] 15 pages modified 2021-06-24 19:10:13 +00:00
mehmet yılmaz 4d6d2b550a GitBook: [tuerkce] 2 pages and one asset modified 2021-06-24 18:59:38 +00:00
mehmet yılmaz ae99204f58 GitBook: [tuerkce] one page modified 2021-06-24 18:41:02 +00:00
mehmet yılmaz 03e95cfa23 GitBook: [tuerkce] one page modified 2021-06-24 18:35:56 +00:00
mehmet yılmaz 25f854b155 GitBook: [tuerkce] one page modified 2021-06-24 18:34:21 +00:00
mehmet yılmaz a32c751aaa GitBook: [tuerkce] one page modified 2021-06-24 18:31:58 +00:00
mehmet yılmaz e212e17bef GitBook: [tuerkce] one page modified 2021-06-24 18:26:26 +00:00
mehmet yılmaz 4a7036cd82 GitBook: [tuerkce] 7 pages modified 2021-06-24 18:15:07 +00:00
mehmet yılmaz d7d7620c24 GitBook: [tuerkce] 4 pages modified 2021-06-24 17:55:35 +00:00
mehmet yılmaz 3d545acda5 GitBook: [tuerkce] 2 pages modified 2021-06-24 17:54:20 +00:00
176 changed files with 5589 additions and 7662 deletions

No files matched your search

+12 -21
View File
@@ -11,28 +11,19 @@ on:
jobs:
build:
strategy:
fail-fast: false
max-parallel: 4
matrix:
java-version: [ 8, 11, 16 ]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: "Set up JDK ${{ matrix.java-version }}"
uses: actions/setup-java@v2
with:
java-version: "${{ matrix.java-version }}"
distribution: 'adopt'
cache: maven
- name: Build with Maven
run: mvn -B -U package --file pom.xml
- name: Upload a Build Artifact
if: "${{ matrix.java-version == 8 }}"
uses: actions/upload-artifact@v2
with:
name: SimpleClans
path: target/SimpleClans.jar
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Upload a Build Artifact
uses: actions/upload-artifact@v2
with:
name: SimpleClans
path: target/SimpleClans.jar
+29 -65
View File
@@ -1,38 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="MavenCustomPomFilePath">
<option name="mavenPomFileUrl" value="file://$MODULE_DIR$/dependency-reduced-pom.xml" />
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>SPIGOT</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$/src/main/java">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/src/main/resources">
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
</content>
<content url="file://$MODULE_DIR$/src/test/java">
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.16.4-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.16-R0.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.26" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.MilkBowl:VaultAPI:1.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13.1-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
<orderEntry type="library" name="Maven: org.bstats:bstats-bukkit:2.2.1" level="project" />
<orderEntry type="library" name="Maven: org.bstats:bstats-base:2.2.1" level="project" />
<orderEntry type="library" name="Maven: org.bstats:bstats-bukkit:1.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: me.clip:placeholderapi:2.10.9" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains:annotations:22.0.0" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains:annotations:16.0.2" level="project" />
<orderEntry type="library" name="Maven: io.papermc:paperlib:1.0.5" level="project" />
<orderEntry type="library" name="Maven: co.aikar:acf-paper:0.5.0-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: com.github.cryptomorin:XSeries:8.3.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.2" level="project" />
<orderEntry type="library" name="Maven: com.github.cryptomorin:XSeries:7.2.1" level="project" />
<orderEntry type="library" name="Maven: org.reflections:reflections:0.9.12" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.26.0-GA" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.4.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.0.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.1.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.4.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-bukkit:7.0.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-core:7.0.4" level="project" />
@@ -53,6 +63,7 @@
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.inject:javax.inject:1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpclient:4.5.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpcore:4.4.12" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-codec:commons-codec:1.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:jcl-over-slf4j:1.7.28" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-odf:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zipdriver:0.12.1" level="project" />
@@ -82,6 +93,8 @@
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-shed:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.dev.jna:jna:4.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mozilla:rhino-runtime:1.7.12" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: it.unimi.dsi:fastutil:8.2.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.flywaydb:flyway-core:3.0" level="project" />
@@ -92,54 +105,5 @@
<orderEntry type="library" scope="PROVIDED" name="Maven: com.plotsquared:plotsquared-api:3.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.plotsquared:plotsquared-bukkitapi:3.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.milkbowl.vault:VaultAPI:1.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.discordsrv:discordsrv:1.23.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.dv8tion:JDA:4.2.1_262" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okhttp3:okhttp:3.13.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.neovisionaries:nv-websocket-client:2.14" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sf.trove4j:trove4j:3.0.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: github.scarsz:configuralize:1.3.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.alexheretic:dynamics:4.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.alexheretic:fluent:2.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-jdk14:1.7.25" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-io:commons-io:2.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-collections:commons-collections:3.2.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-lang3:3.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-codec:commons-codec:1.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.vdurmont:emoji-java:5.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.json:json:20170516" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.zafarkhaja:java-semver:0.9.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.kevinsawicki:http-request:6.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-hla:1.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-dnssec:1.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-client:1.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-core:1.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.minidns:minidns-iterative-resolver:1.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-expression:5.2.7.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-core:5.2.7.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework:spring-jcl:5.2.7.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: dev.vankka:MCDiscordReserializer:4.2.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: dev.vankka:SimpleAST:2.2.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-api:4.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-key:4.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:examination-api:1.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.checkerframework:checker-qual:3.10.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:examination-string:1.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-legacy:4.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-gson:4.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-bukkit:4.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-api:4.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-bungeecord:4.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-nbt:4.9.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-serializer-gson-legacy-impl:4.9.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-facet:4.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-platform-viaversion:4.0.0-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.kyori:adventure-text-minimessage:4.1.0-20210316.192746" level="project" />
</component>
</module>
+9 -101
View File
@@ -4,8 +4,8 @@
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<name>SimpleClans</name>
<version>2.16.0</version>
<url>https://www.spigotmc.org/resources/simpleclans.71242/</url>
<version>2.15.1</version>
<url>http://dev.bukkit.org/server-mods/simpleclans/</url>
<build>
<resources>
<resource>
@@ -57,7 +57,7 @@
<configuration>
<relocations>
<relocation>
<pattern>org.bstats</pattern>
<pattern>org.bstats.bukkit</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.metrics</shadedPattern>
</relocation>
<relocation>
@@ -76,6 +76,10 @@
<pattern>com.cryptomorin.xseries</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.xseries</shadedPattern>
</relocation>
<relocation>
<pattern>org.reflections</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.reflections</shadedPattern>
</relocation>
</relocations>
<artifactSet>
<excludes>
@@ -119,10 +123,6 @@
<id>plotsquared</id>
<url>https://plotsquared.com/mvn/</url>
</repository>
<repository>
<id>Scarsz-Nexus</id>
<url>https://nexus.scarsz.me/content/groups/public/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
@@ -190,13 +190,13 @@
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>22.0.0</version>
<version>16.0.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.2</version>
<version>5.4.0</version>
<scope>test</scope>
<exclusions>
<exclusion>
@@ -309,98 +309,6 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.discordsrv</groupId>
<artifactId>discordsrv</artifactId>
<version>1.23.0</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>JDA</artifactId>
<groupId>net.dv8tion</groupId>
</exclusion>
<exclusion>
<artifactId>nv-websocket-client</artifactId>
<groupId>com.neovisionaries</groupId>
</exclusion>
<exclusion>
<artifactId>trove4j</artifactId>
<groupId>net.sf.trove4j</groupId>
</exclusion>
<exclusion>
<artifactId>configuralize</artifactId>
<groupId>github.scarsz</groupId>
</exclusion>
<exclusion>
<artifactId>slf4j-jdk14</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>commons-io</artifactId>
<groupId>commons-io</groupId>
</exclusion>
<exclusion>
<artifactId>commons-collections</artifactId>
<groupId>commons-collections</groupId>
</exclusion>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
<exclusion>
<artifactId>commons-codec</artifactId>
<groupId>commons-codec</groupId>
</exclusion>
<exclusion>
<artifactId>emoji-java</artifactId>
<groupId>com.vdurmont</groupId>
</exclusion>
<exclusion>
<artifactId>java-semver</artifactId>
<groupId>com.github.zafarkhaja</groupId>
</exclusion>
<exclusion>
<artifactId>http-request</artifactId>
<groupId>com.github.kevinsawicki</groupId>
</exclusion>
<exclusion>
<artifactId>minidns-hla</artifactId>
<groupId>org.minidns</groupId>
</exclusion>
<exclusion>
<artifactId>spring-expression</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>MCDiscordReserializer</artifactId>
<groupId>dev.vankka</groupId>
</exclusion>
<exclusion>
<artifactId>adventure-api</artifactId>
<groupId>net.kyori</groupId>
</exclusion>
<exclusion>
<artifactId>adventure-text-serializer-legacy</artifactId>
<groupId>net.kyori</groupId>
</exclusion>
<exclusion>
<artifactId>adventure-text-serializer-gson</artifactId>
<groupId>net.kyori</groupId>
</exclusion>
<exclusion>
<artifactId>adventure-platform-bukkit</artifactId>
<groupId>net.kyori</groupId>
</exclusion>
<exclusion>
<artifactId>adventure-text-minimessage</artifactId>
<groupId>net.kyori</groupId>
</exclusion>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<distributionManagement>
<repository>
+16 -17
View File
@@ -3,9 +3,9 @@
<modelVersion>4.0.0</modelVersion>
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<version>2.16.0</version>
<version>2.15.2</version>
<name>SimpleClans</name>
<url>https://www.spigotmc.org/resources/simpleclans.71242/</url>
<url>http://dev.bukkit.org/server-mods/simpleclans/</url>
<build>
<finalName>${project.name}</finalName>
@@ -65,7 +65,7 @@
<configuration>
<relocations>
<relocation>
<pattern>org.bstats</pattern>
<pattern>org.bstats.bukkit</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.metrics</shadedPattern>
</relocation>
<relocation>
@@ -84,6 +84,10 @@
<pattern>com.cryptomorin.xseries</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.xseries</shadedPattern>
</relocation>
<relocation>
<pattern>org.reflections</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.reflections</shadedPattern>
</relocation>
</relocations>
<artifactSet>
<excludes>
@@ -125,7 +129,7 @@
<dependency>
<groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId>
<version>2.2.1</version>
<version>1.7</version>
<scope>compile</scope>
</dependency>
<dependency>
@@ -137,7 +141,7 @@
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>22.0.0</version>
<version>16.0.2</version>
</dependency>
<dependency>
<groupId>io.papermc</groupId>
@@ -153,12 +157,17 @@
<dependency>
<groupId>com.github.cryptomorin</groupId>
<artifactId>XSeries</artifactId>
<version>8.3.0</version>
<version>7.2.1</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.12</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.2</version>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -219,12 +228,6 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.discordsrv</groupId>
<artifactId>discordsrv</artifactId>
<version>1.23.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<!-- Repositories -->
@@ -261,10 +264,6 @@
<id>plotsquared</id>
<url>https://plotsquared.com/mvn/</url>
</repository>
<repository>
<id>Scarsz-Nexus</id>
<url>https://nexus.scarsz.me/content/groups/public/</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
@@ -27,12 +27,10 @@ public class ChatBlock {
private boolean cropRight = true;
private boolean padRight = true;
@Deprecated
public void setCropRight(boolean cropRight) {
this.cropRight = cropRight;
}
@Deprecated
public void setPadRight(boolean padRight) {
this.padRight = padRight;
}
@@ -47,7 +45,6 @@ public class ChatBlock {
}
}
@Deprecated
public void setColumnSizes(String prefix, double... columnPercentages) {
int ll = LINE_LENGTH;
@@ -60,7 +57,6 @@ public class ChatBlock {
}
}
@Deprecated
public boolean hasContent() {
return !rows.isEmpty();
}
@@ -69,27 +65,22 @@ public class ChatBlock {
rows.add(contents);
}
public int size() {
return rows.size();
}
@Deprecated
public boolean isEmpty() {
return rows.isEmpty();
}
@Deprecated
public void clear() {
rows.clear();
}
@Deprecated
public boolean sendBlock(CommandSender player) {
return sendBlock(player, null, 0);
}
@Deprecated
public boolean sendBlock(CommandSender player, String prefix) {
return sendBlock(player, prefix, 0);
}
@@ -278,7 +269,6 @@ public class ChatBlock {
return (int) maxWidth;
}
@Deprecated
public static String centerInLine(String msg) {
return centerInLineOf(msg, LINE_LENGTH);
}
@@ -561,12 +551,10 @@ public class ChatBlock {
player.sendMessage(ChatUtils.parseColors(msg));
}
// ClanCommands#setbanner, LandCommands#Allow/BlockCommand/verify, StaffCommands#kick, etc
public static void sendMessageKey(@Nullable CommandSender receiver, @NotNull String key, @NotNull Object... args) {
sendMessage(receiver, lang(key, receiver, args));
}
@Deprecated
public void startColor(String color) {
this.color = color;
}
@@ -585,12 +573,10 @@ public class ChatBlock {
/**
* Colors each line
*/
@Deprecated
public static String[] say(String message) {
return colorize(wordWrap(message));
}
@Deprecated
public static String[] getColorizedMessage(String msg) {
return colorize(wordWrap(msg));
}
@@ -603,11 +589,11 @@ public class ChatBlock {
}
}
@Deprecated
public static @Nullable String colorize(String message) {
return colorizeBase(new String[]{message})[0];
}
private static @Nullable String[] colorizeBase(String[] message) {
if (message != null && message[0] != null && !message[0].isEmpty()) {
// Go through each line
@@ -4,14 +4,8 @@ import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.sacredlabyrinth.phaed.simpleclans.events.*;
import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.Placeholder;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLog;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.*;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
@@ -25,12 +19,10 @@ import java.sql.Timestamp;
import java.util.*;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.EconomyResponse.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent.Cause;
import static net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger.Operation.*;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
import static net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent.*;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
/**
* @author phaed
@@ -76,7 +68,7 @@ public class Clan implements Serializable, Comparable<Clan> {
this.lastUsed = (new Date()).getTime();
this.verified = verified;
this.capeUrl = "";
if (SimpleClans.getInstance().getSettingsManager().is(CLAN_FF_ON_BY_DEFAULT)) {
if (SimpleClans.getInstance().getSettingsManager().isClanFFOnByDefault()) {
friendlyFire = true;
}
}
@@ -113,15 +105,15 @@ public class Clan implements Serializable, Comparable<Clan> {
public void deposit(double amount, Player player) {
if (SimpleClans.getInstance().getPermissionsManager().playerHasMoney(player, amount)) {
if (SimpleClans.getInstance().getPermissionsManager().playerChargeMoney(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.deposit", player, amount));
addBb(player.getName(), AQUA + lang("bb.clan.deposit", amount));
player.sendMessage(ChatColor.AQUA + lang("player.clan.deposit", player, amount));
addBb(player.getName(), ChatColor.AQUA + lang("bb.clan.deposit", amount));
setBalance(getBalance() + amount);
SimpleClans.getInstance().getStorageManager().updateClan(this);
} else {
player.sendMessage(AQUA + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.AQUA + lang("not.sufficient.money", player));
}
} else {
player.sendMessage(AQUA + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.AQUA + lang("not.sufficient.money", player));
}
}
@@ -129,18 +121,11 @@ public class Clan implements Serializable, Comparable<Clan> {
* Deposits money to the clan
*/
public EconomyResponse deposit(@Nullable CommandSender sender, @NotNull Cause cause, double amount) {
EconomyResponse response = null;
if (amount < 0) {
response = NEGATIVE_VALUE;
return EconomyResponse.NEGATIVE_VALUE;
}
if (response == null) {
response = setBalance(sender, cause, DEPOSIT, getBalance() + amount);
}
SimpleClans.getInstance().getBankLogger().log(new BankLog(sender, this, response, DEPOSIT, cause, amount));
return response;
return setBalance(sender, cause, getBalance() + amount);
}
/**
@@ -150,12 +135,12 @@ public class Clan implements Serializable, Comparable<Clan> {
public void withdraw(double amount, Player player) {
if (getBalance() >= amount) {
if (SimpleClans.getInstance().getPermissionsManager().playerGrantMoney(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.withdraw", player, amount));
addBb(player.getName(), AQUA + lang("bb.clan.withdraw", amount));
player.sendMessage(ChatColor.AQUA + lang("player.clan.withdraw", player, amount));
addBb(player.getName(), ChatColor.AQUA + lang("bb.clan.withdraw", amount));
setBalance(getBalance() - amount);
}
} else {
player.sendMessage(AQUA + lang("clan.bank.not.enough.money", player));
player.sendMessage(ChatColor.AQUA + lang("clan.bank.not.enough.money", player));
}
}
@@ -163,22 +148,15 @@ public class Clan implements Serializable, Comparable<Clan> {
* Withdraws money from the clan
*/
public EconomyResponse withdraw(@Nullable CommandSender sender, @NotNull Cause cause, double amount) {
EconomyResponse response = null;
if (amount < 0) {
response = NEGATIVE_VALUE;
return EconomyResponse.NEGATIVE_VALUE;
}
if (getBalance() < amount) {
response = NOT_ENOUGH_BALANCE;
if (getBalance() >= amount) {
return setBalance(sender, cause, getBalance() - amount);
} else {
return EconomyResponse.NOT_ENOUGH_BALANCE;
}
if (response == null) {
response = setBalance(sender, cause, WITHDRAW, getBalance() - amount);
}
SimpleClans.getInstance().getBankLogger().log(new BankLog(sender, this, response, WITHDRAW, cause, amount));
return response;
}
/**
@@ -251,26 +229,21 @@ public class Clan implements Serializable, Comparable<Clan> {
* @param balance the balance to set
*/
public void setBalance(double balance) {
setBalance(null, Cause.API, SET, balance);
setBalance(null, Cause.API, balance);
}
public EconomyResponse setBalance(@Nullable CommandSender updater, @NotNull Cause cause, @NotNull BankLogger.Operation operation, double balance) {
EconomyResponse response = SUCCESS;
public EconomyResponse setBalance(@Nullable CommandSender updater, @NotNull Cause cause, double balance) {
ClanBalanceUpdateEvent event = new ClanBalanceUpdateEvent(updater, this, getBalance(), balance, cause);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
response = CANCELLED;
return EconomyResponse.CANCELLED;
}
this.balance = event.getNewBalance();
if (cause != Cause.LOADING) {
if (operation == SET) {
SimpleClans.getInstance().getBankLogger().log(new BankLog(updater, this, response, SET, cause, balance));
}
SimpleClans.getInstance().getStorageManager().updateClan(this);
}
return response;
return EconomyResponse.SUCCESS;
}
/**
@@ -342,8 +315,8 @@ public class Clan implements Serializable, Comparable<Clan> {
return -1;
}
int verifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getInt(PURGE_INACTIVE_CLAN_DAYS);
int unverifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getInt(PURGE_UNVERIFIED_CLAN_DAYS);
int verifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getPurgeClan();
int unverifiedClanInactiveDays = SimpleClans.getInstance().getSettingsManager().getPurgeUnverified();
return this.isVerified() ? verifiedClanInactiveDays : unverifiedClanInactiveDays;
}
@@ -491,7 +464,7 @@ public class Clan implements Serializable, Comparable<Clan> {
* Adds a bulletin board message without saving it to the database
*/
public void addBbWithoutSaving(String msg) {
while (bb.size() > SimpleClans.getInstance().getSettingsManager().getInt(BB_SIZE)) {
while (bb.size() > SimpleClans.getInstance().getSettingsManager().getBbSize()) {
bb.remove(0);
}
@@ -590,7 +563,7 @@ public class Clan implements Serializable, Comparable<Clan> {
*/
@Placeholder("is_verified")
public boolean isVerified() {
return !SimpleClans.getInstance().getSettingsManager().is(REQUIRE_VERIFICATION) || verified;
return !SimpleClans.getInstance().getSettingsManager().isRequireVerification() || verified;
}
@@ -647,7 +620,7 @@ public class Clan implements Serializable, Comparable<Clan> {
* @param packedBb the packedBb to set
*/
public void setPackedBb(String packedBb) {
this.bb = Helper.fromArrayToList(packedBb.split("[|]"));
this.bb = Helper.fromArray(packedBb.split("[|]"));
}
/**
@@ -665,7 +638,7 @@ public class Clan implements Serializable, Comparable<Clan> {
* @param packedAllies the packedAllies to set
*/
public void setPackedAllies(String packedAllies) {
this.allies = Helper.fromArrayToList(packedAllies.split("[|]"));
this.allies = Helper.fromArray(packedAllies.split("[|]"));
}
/**
@@ -683,14 +656,14 @@ public class Clan implements Serializable, Comparable<Clan> {
* @param packedRivals the packedRivals to set
*/
public void setPackedRivals(String packedRivals) {
this.rivals = Helper.fromArrayToList(packedRivals.split("[|]"));
this.rivals = Helper.fromArray(packedRivals.split("[|]"));
}
/**
* Returns a separator delimited string with all the ally clan's colored
* tags
*/
public String getAllyString(String sep, @Nullable CommandSender viewer) {
public String getAllyString(String sep) {
StringBuilder out = new StringBuilder();
for (String allyTag : getAllies()) {
@@ -704,25 +677,17 @@ public class Clan implements Serializable, Comparable<Clan> {
out = new StringBuilder(Helper.stripTrailing(out.toString(), sep));
if (out.toString().trim().isEmpty()) {
return lang("none", viewer);
return ChatColor.BLACK + "None";
}
return ChatUtils.parseColors(out.toString());
}
/**
* @deprecated use {@link Clan#getAllyString(String, CommandSender)}
*/
@Deprecated
public String getAllyString(String sep) {
return getAllyString(sep, null);
}
/**
* Returns a separator delimited string with all the rival clan's colored
* tags
*/
public String getRivalString(String sep, @Nullable CommandSender viewer) {
public String getRivalString(String sep) {
StringBuilder out = new StringBuilder();
for (String rivalTag : getRivals()) {
@@ -730,7 +695,7 @@ public class Clan implements Serializable, Comparable<Clan> {
if (rival != null) {
if (isWarring(rivalTag)) {
out.append(DARK_RED).append("[").append(ChatUtils.stripColors(rival.getColorTag()))
out.append(ChatColor.DARK_RED).append("[").append(ChatUtils.stripColors(rival.getColorTag()))
.append("]").append(sep);
} else {
out.append(rival.getColorTag()).append(sep);
@@ -742,20 +707,12 @@ public class Clan implements Serializable, Comparable<Clan> {
out = new StringBuilder(Helper.stripTrailing(out.toString(), sep));
if (out.toString().trim().isEmpty()) {
return lang("none", viewer);
return ChatColor.BLACK + "None";
}
return ChatUtils.parseColors(out.toString());
}
/**
* @deprecated use {@link Clan#getRivalString(String, CommandSender)}
*/
@Deprecated
public String getRivalString(String sep) {
return getRivalString(sep, null);
}
/**
* Returns a separator delimited string with all the leaders
*
@@ -814,8 +771,16 @@ public class Clan implements Serializable, Comparable<Clan> {
* @return the fee payers
*/
public Set<ClanPlayer> getFeePayers() {
PermissionsManager permissions = SimpleClans.getInstance().getPermissionsManager();
return getNonLeaders().stream().filter(cp -> !permissions.has(cp.toPlayer(), "simpleclans.member.bypass-fee")).collect(Collectors.toSet());
Set<ClanPlayer> feePayers = new HashSet<>();
getNonLeaders().forEach(cp -> {
OfflinePlayer op = Bukkit.getOfflinePlayer(cp.getUniqueId());
if (!SimpleClans.getInstance().getPermissionsManager().has(null, op, "simpleclans.member.bypass-fee")) {
feePayers.add(cp);
}
});
return feePayers;
}
/**
@@ -861,7 +826,6 @@ public class Clan implements Serializable, Comparable<Clan> {
return out;
}
/**
* Get all leaders in the clan
*
@@ -1076,9 +1040,9 @@ public class Clan implements Serializable, Comparable<Clan> {
public boolean reachedRivalLimit() {
int rivalCount = rivals.size();
int clanCount = SimpleClans.getInstance().getClanManager().getRivableClanCount() - 1;
double rivalPercent = SimpleClans.getInstance().getSettingsManager().getPercent(RIVAL_LIMIT_PERCENT);
int rivalPercent = SimpleClans.getInstance().getSettingsManager().getRivalLimitPercent();
double limit = ((double) clanCount) * (rivalPercent / ((double) 100));
double limit = ((double) clanCount) * (((double) rivalPercent) / ((double) 100));
return rivalCount > limit;
}
@@ -1090,7 +1054,7 @@ public class Clan implements Serializable, Comparable<Clan> {
cp.removePastClan(getColorTag());
cp.setClan(this);
cp.setLeader(false);
cp.setTrusted(SimpleClans.getInstance().getSettingsManager().is(CLAN_TRUST_MEMBERS_BY_DEFAULT));
cp.setTrusted(SimpleClans.getInstance().getSettingsManager().isClanTrustByDefault());
if (defaultRank != null) {
cp.setRank(defaultRank);
}
@@ -1133,7 +1097,7 @@ public class Clan implements Serializable, Comparable<Clan> {
SimpleClans.getInstance().getPermissionsManager().removeClanPlayerPermissions(cp);
cp.setClan(null);
cp.addPastClan(getColorTag() + (cp.isLeader() ? DARK_RED + "*" : ""));
cp.addPastClan(getColorTag() + (cp.isLeader() ? ChatColor.DARK_RED + "*" : ""));
cp.setLeader(false);
cp.setTrusted(false);
cp.setJoinDate(0);
@@ -1261,7 +1225,13 @@ public class Clan implements Serializable, Comparable<Clan> {
*/
@Placeholder("is_anyonline")
public boolean isAnyOnline() {
return members.stream().map(UUID::fromString).map(Bukkit::getPlayer).anyMatch(Objects::nonNull);
for (String member : members) {
if (Helper.isOnline(UUID.fromString(member))) {
return true;
}
}
return false;
}
/**
@@ -1274,7 +1244,7 @@ public class Clan implements Serializable, Comparable<Clan> {
List<ClanPlayer> online = getOnlineLeaders();
online.remove(cp);
double minimum = SimpleClans.getInstance().getSettingsManager().getPercent(CLAN_PERCENTAGE_ONLINE_TO_DEMOTE);
double minimum = SimpleClans.getInstance().getSettingsManager().getPercentageOnlineToDemote();
// all leaders minus the one being demoted
double totalLeaders = getLeaders().size() - 1;
double onlineLeaders = online.size();
@@ -1299,7 +1269,7 @@ public class Clan implements Serializable, Comparable<Clan> {
List<ClanPlayer> leaders = getLeaders();
for (ClanPlayer leader : leaders) {
if (leader.toPlayer() == null) {
if (!Helper.isOnline(leader.getUniqueId())) {
return false;
}
}
@@ -1319,7 +1289,7 @@ public class Clan implements Serializable, Comparable<Clan> {
continue;
}
if (leader.toPlayer() == null) {
if (!Helper.isOnline(leader.getName())) {
return false;
}
}
@@ -1338,7 +1308,7 @@ public class Clan implements Serializable, Comparable<Clan> {
continue;
}
if (leader.toPlayer() == null) {
if (!Helper.isOnline(leader.getUniqueId())) {
return false;
}
}
@@ -1358,7 +1328,7 @@ public class Clan implements Serializable, Comparable<Clan> {
* Announce message to a whole clan
*/
public void clanAnnounce(String playerName, String msg) {
String message = SimpleClans.getInstance().getSettingsManager().getColored(CLANCHAT_ANNOUNCEMENT_COLOR) + msg;
String message = SimpleClans.getInstance().getSettingsManager().getClanChatAnnouncementColor() + msg;
for (ClanPlayer cp : getMembers()) {
Player pl = cp.toPlayer();
@@ -1368,14 +1338,14 @@ public class Clan implements Serializable, Comparable<Clan> {
}
}
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(AQUA + "[" + lang("clan.announce") + AQUA + "] " + AQUA + "[" + Helper.getColorName(playerName) + WHITE + "] " + message);
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + lang("clan.announce") + ChatColor.AQUA + "] " + ChatColor.AQUA + "[" + Helper.getColorName(playerName) + ChatColor.WHITE + "] " + message);
}
/**
* Announce message to a all the leaders of a clan
*/
public void leaderAnnounce(String msg) {
String message = SimpleClans.getInstance().getSettingsManager().getColored(CLANCHAT_ANNOUNCEMENT_COLOR) + msg;
String message = SimpleClans.getInstance().getSettingsManager().getClanChatAnnouncementColor() + msg;
List<ClanPlayer> leaders = getLeaders();
@@ -1386,7 +1356,7 @@ public class Clan implements Serializable, Comparable<Clan> {
ChatBlock.sendMessage(pl, message);
}
}
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(AQUA + "[" + lang("leader.announce") + AQUA + "] " + WHITE + message);
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + lang("leader.announce") + ChatColor.AQUA + "] " + ChatColor.WHITE + message);
}
/**
@@ -1394,8 +1364,8 @@ public class Clan implements Serializable, Comparable<Clan> {
*/
public void addBb(String announcerName, String msg) {
if (isVerified()) {
addBb(SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + msg);
clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR) + "* " + SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + ChatUtils.parseColors(msg));
addBb(SimpleClans.getInstance().getSettingsManager().getBbColor() + msg);
clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + ChatUtils.parseColors(msg));
}
}
@@ -1404,8 +1374,8 @@ public class Clan implements Serializable, Comparable<Clan> {
*/
public void addBb(String announcerName, String msg, boolean updateLastUsed) {
if (isVerified()) {
addBb(SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + msg, updateLastUsed);
clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR) + "* " + SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR) + ChatUtils.parseColors(msg));
addBb(SimpleClans.getInstance().getSettingsManager().getBbColor() + msg, updateLastUsed);
clanAnnounce(announcerName, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + ChatUtils.parseColors(msg));
}
}
@@ -1424,14 +1394,14 @@ public class Clan implements Serializable, Comparable<Clan> {
public void displayBb(Player player, int maxSize) {
if (isVerified()) {
ChatBlock.sendBlank(player);
String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR);
String pageHeadingsColor = SimpleClans.getInstance().getSettingsManager().getColored(PAGE_HEADINGS_COLOR);
String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getBbAccentColor();
String pageHeadingsColor = SimpleClans.getInstance().getSettingsManager().getPageHeadingsColor();
ChatBlock.saySingle(player, lang("bulletin.board.header", bbAccentColor, pageHeadingsColor, getName()));
List<String> localBb;
if (maxSize == -1) {
localBb = bb;
maxSize = SimpleClans.getInstance().getSettingsManager().getInt(BB_SIZE);
maxSize = SimpleClans.getInstance().getSettingsManager().getBbSize();
} else {
localBb = new ArrayList<>(bb);
}
@@ -1441,7 +1411,7 @@ public class Clan implements Serializable, Comparable<Clan> {
for (String msg : localBb) {
if (!sendBbTime(player, msg)) {
String bbColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR);
String bbColor = SimpleClans.getInstance().getSettingsManager().getBbColor();
ChatBlock.sendMessage(player, bbAccentColor + "* " + bbColor + ChatUtils.parseColors(msg));
}
}
@@ -1463,8 +1433,8 @@ public class Clan implements Serializable, Comparable<Clan> {
return false;
}
long time = (System.currentTimeMillis() - Long.parseLong(msg.substring(0, index))) / 1000L;
String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_ACCENT_COLOR);
String bbColor = SimpleClans.getInstance().getSettingsManager().getColored(BB_COLOR);
String bbAccentColor = SimpleClans.getInstance().getSettingsManager().getBbAccentColor();
String bbColor = SimpleClans.getInstance().getSettingsManager().getBbColor();
msg = ChatUtils.parseColors(bbAccentColor + "* " + bbColor + msg.substring(++index));
TextComponent textComponent = new TextComponent(msg);
textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.fromLegacyText(
@@ -1493,10 +1463,10 @@ public class Clan implements Serializable, Comparable<Clan> {
}
if (announce) {
if (SimpleClans.getInstance().getSettingsManager().is(DISABLE_MESSAGES) && sender != null) {
if (SimpleClans.getInstance().getSettingsManager().isDisableMessages() && sender != null) {
this.clanAnnounce(sender.getName(), AQUA + lang("clan.has.been.disbanded", this.getName()));
} else {
SimpleClans.getInstance().getClanManager().serverAnnounce(AQUA + lang("clan.has.been.disbanded", this.getName()));
SimpleClans.getInstance().getClanManager().serverAnnounce(ChatColor.AQUA + lang("clan.has.been.disbanded", this.getName()));
}
}
@@ -1506,7 +1476,7 @@ public class Clan implements Serializable, Comparable<Clan> {
cp.setClan(null);
if (isVerified()) {
cp.addPastClan(getColorTag() + (cp.isLeader() ? DARK_RED + "*" : ""));
cp.addPastClan(getColorTag() + (cp.isLeader() ? ChatColor.DARK_RED + "*" : ""));
}
cp.setLeader(false);
@@ -1520,15 +1490,15 @@ public class Clan implements Serializable, Comparable<Clan> {
String disbanded = lang("clan.disbanded");
if (c.removeWarringClan(this)) {
c.addBb(disbanded, AQUA + lang("you.are.no.longer.at.war", c.getName(), getColorTag()));
c.addBb(disbanded, ChatColor.AQUA + lang("you.are.no.longer.at.war", c.getName(), getColorTag()));
}
if (c.removeRival(getTag())) {
c.addBb(disbanded, AQUA + lang("has.been.disbanded.rivalry.ended", getName()));
c.addBb(disbanded, ChatColor.AQUA + lang("has.been.disbanded.rivalry.ended", getName()));
}
if (c.removeAlly(getTag())) {
c.addBb(disbanded, AQUA + lang("has.been.disbanded.alliance.ended", getName()));
c.addBb(disbanded, ChatColor.AQUA + lang("has.been.disbanded.alliance.ended", getName()));
}
}
SimpleClans.getInstance().getRequestManager().removeRequest(getTag());
@@ -1578,7 +1548,7 @@ public class Clan implements Serializable, Comparable<Clan> {
warring.add(targetClan.getTag());
flags.put(WARRING_KEY, warring);
if (requestPlayer != null) {
this.addBb(requestPlayer.getName(), AQUA + lang("you.are.at.war",
this.addBb(requestPlayer.getName(), ChatColor.AQUA + lang("you.are.at.war",
this.getName(), targetClan.getColorTag()));
}
SimpleClans.getInstance().getStorageManager().updateClan(this);
@@ -1678,15 +1648,27 @@ public class Clan implements Serializable, Comparable<Clan> {
}
public String getTagLabel(boolean isLeader) {
SettingsManager sm = SimpleClans.getInstance().getSettingsManager();
String bracketColor = isLeader ? sm.getColored(TAG_BRACKET_LEADER_COLOR) : sm.getColored(TAG_BRACKET_COLOR);
String bracketDefaultColor = sm.getColored(TAG_DEFAULT_COLOR);
String bracketLeft = sm.getColored(TAG_BRACKET_LEFT);
String bracketRight = sm.getColored(TAG_BRACKET_RIGHT);
String tagSeparatorColor = isLeader ? sm.getColored(TAG_SEPARATOR_LEADER_COLOR) : sm.getColored(TAG_SEPARATOR_COLOR);
String tagSeparator = sm.getString(TAG_SEPARATOR_char);
SimpleClans plugin = SimpleClans.getInstance();
return bracketColor + bracketLeft + bracketDefaultColor + getColorTag() + bracketColor + bracketRight + tagSeparatorColor + tagSeparator;
if (isLeader) {
return plugin.getSettingsManager().getTagBracketLeaderColor() +
plugin.getSettingsManager().getTagBracketLeft() +
plugin.getSettingsManager().getTagDefaultColor() +
getColorTag() +
plugin.getSettingsManager().getTagBracketLeaderColor() +
plugin.getSettingsManager().getTagBracketRight() +
plugin.getSettingsManager().getTagSeparatorLeaderColor() +
plugin.getSettingsManager().getTagSeparator();
} else {
return plugin.getSettingsManager().getTagBracketColor() +
plugin.getSettingsManager().getTagBracketLeft() +
plugin.getSettingsManager().getTagDefaultColor() +
getColorTag() +
plugin.getSettingsManager().getTagBracketColor() +
plugin.getSettingsManager().getTagBracketRight() +
plugin.getSettingsManager().getTagSeparatorColor() +
plugin.getSettingsManager().getTagSeparator();
}
}
/**
@@ -2,7 +2,6 @@ package net.sacredlabyrinth.phaed.simpleclans;
import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.Placeholder;
import net.sacredlabyrinth.phaed.simpleclans.managers.ProtectionManager.Action;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -19,7 +18,6 @@ import java.time.temporal.ChronoUnit;
import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
/**
* @author phaed
@@ -433,11 +431,11 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
*/
@Placeholder("weighted_kills")
public double getWeightedKills() {
SettingsManager settings = SimpleClans.getInstance().getSettingsManager();
double kills = getRivalKills() * settings.getDouble(KILL_WEIGHTS_RIVAL) +
getNeutralKills() * settings.getDouble(KILL_WEIGHTS_NEUTRAL) +
getAllyKills() * settings.getDouble(KILL_WEIGHTS_ALLY) +
getCivilianKills() * settings.getDouble(KILL_WEIGHTS_CIVILIAN);
SimpleClans plugin = SimpleClans.getInstance();
double kills = ((double) getRivalKills() * plugin.getSettingsManager().getKwRival()) +
((double) getNeutralKills() * plugin.getSettingsManager().getKwNeutral()) +
((double) getAllyKills() * plugin.getSettingsManager().getKwAlly()) +
((double) getCivilianKills() * plugin.getSettingsManager().getKwCivilian());
if (kills < 0) {
return 0;
}
@@ -546,7 +544,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
* @param PackedPastClans the PackedPastClans to set
*/
public void setPackedPastClans(String PackedPastClans) {
this.pastClans = Helper.fromArrayToSet(PackedPastClans.split("[|]"));
this.pastClans = Helper.fromArray2(PackedPastClans.split("[|]"));
}
/**
@@ -628,7 +626,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
*/
public void setResignTimes(Map<String, Long> resignTimes) {
if (resignTimes != null) {
final int cooldown = SimpleClans.getInstance().getSettingsManager().getInt(REJOIN_COOLDOWN);
final int cooldown = SimpleClans.getInstance().getSettingsManager().getRejoinCooldown();
resignTimes.forEach((k, v) -> {
long timePassed = Instant.ofEpochMilli(v).until(Instant.now(), ChronoUnit.MINUTES);
if (timePassed < cooldown) {
@@ -741,8 +739,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
if (channelName != null) {
return Channel.valueOf(channelName);
}
} catch (IllegalArgumentException ignored) {
}
} catch (IllegalArgumentException ignored) {}
return Channel.NONE;
}
@@ -762,16 +759,13 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
}
@Deprecated
public void setGlobalChat(boolean globalChat) {
}
public void setGlobalChat(boolean globalChat) {}
@Deprecated
public void setAllyChat(boolean allyChat) {
}
public void setAllyChat(boolean allyChat) {}
@Deprecated
public void setClanChat(boolean clanChat) {
}
public void setClanChat(boolean clanChat) {}
public void setChannel(@NotNull Channel channel) {
flags.put("channel", channel.toString());
@@ -787,23 +781,13 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
SimpleClans.getInstance().getStorageManager().updateClanPlayer(this);
}
public boolean isInviteEnabled() {
return flags.getBoolean("invite", true);
}
public void setInviteEnabled(boolean inviteEnabled) {
flags.put("invite", inviteEnabled);
SimpleClans.getInstance().getStorageManager().updateClanPlayer(this);
}
@Deprecated
public boolean isCapeEnabled() {
return false;
}
@Deprecated
public void setCapeEnabled(boolean capeEnabled) {
}
public void setCapeEnabled(boolean capeEnabled) {}
@Placeholder("is_tag_enabled")
public boolean isTagEnabled() {
@@ -874,29 +858,10 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer> {
}
}
public void mute(Channel channel, boolean b) {
switch (channel) {
case CLAN:
clanChatMute = b;
break;
case ALLY:
allyChatMute = b;
}
}
/**
* @deprecated use {@link ClanPlayer#mute(Channel, boolean)}
*/
@Deprecated
public void setMuted(boolean b) {
clanChatMute = b;
}
/**
* @deprecated use {@link ClanPlayer#mute(Channel, boolean)}
*/
@Deprecated
public void setMutedAlly(boolean b) {
allyChatMute = b;
}
@@ -0,0 +1,60 @@
package net.sacredlabyrinth.phaed.simpleclans;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandMap;
import org.bukkit.command.PluginCommand;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.SimplePluginManager;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.Arrays;
public class CommandHelper {
private CommandHelper() {
}
public static void registerCommand(String... aliases) {
if (aliases != null) {
PluginCommand command = getCommand(aliases[0], SimpleClans.getInstance());
if (command != null) {
command.setAliases(Arrays.asList(aliases));
getCommandMap().register(SimpleClans.getInstance().getDescription().getName(), command);
}
}
}
private static PluginCommand getCommand(String name, Plugin plugin) {
PluginCommand command = null;
try {
Constructor<PluginCommand> c = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class);
c.setAccessible(true);
command = c.newInstance(name, plugin);
} catch (Exception e) {
e.printStackTrace();
}
return command;
}
private static CommandMap getCommandMap() {
CommandMap commandMap = null;
try {
if (Bukkit.getPluginManager() instanceof SimplePluginManager) {
Field f = SimplePluginManager.class.getDeclaredField("commandMap");
f.setAccessible(true);
commandMap = (CommandMap) f.get(Bukkit.getPluginManager());
}
} catch (Exception e) {
e.printStackTrace();
}
return commandMap;
}
}
@@ -0,0 +1,65 @@
package net.sacredlabyrinth.phaed.simpleclans;
import java.util.Date;
/**
* @author phaed
*/
public class DamageRecord {
private String victim;
private String attacker;
private Date time;
/**
* @param victim
* @param attacker
*/
public DamageRecord(String victim, String attacker) {
this.victim = victim;
this.attacker = attacker;
this.time = new Date();
}
/**
* @return the victim
*/
public String getVictim() {
return victim;
}
/**
* @param victim the victim to set
*/
public void setVictim(String victim) {
this.victim = victim;
}
/**
* @return the attacker
*/
public String getAttacker() {
return attacker;
}
/**
* @param attacker the attacker to set
*/
public void setAttacker(String attacker) {
this.attacker = attacker;
}
/**
* @return the time
*/
public Date getTime() {
return new Date(time.getTime());
}
/**
* @param time the time to set
*/
public void setTime(Date time) {
this.time = new Date(time.getTime());
}
}
@@ -1,10 +1,17 @@
package net.sacredlabyrinth.phaed.simpleclans;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.json.simple.JSONArray;
@@ -12,34 +19,47 @@ import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Map.Entry;
import java.util.function.Predicate;
import java.util.logging.Level;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils.stripColors;
/**
* @author phaed
*/
public class Helper {
private Helper() {
}
/**
* Dumps stacktrace to log
*/
@Deprecated
public static void dumpStackTrace() {
for (StackTraceElement el : Thread.currentThread().getStackTrace()) {
SimpleClans.debug(el.toString());
}
}
/**
* @deprecated use {@link KDRFormat}
*/
@Deprecated
public static String formatKDR(float kdr) {
DecimalFormat formatter = new DecimalFormat("#.#");
return formatter.format(kdr);
}
@NotNull
public static Locale forLanguageTag(@Nullable String languageTag) {
Locale defaultLanguage = SimpleClans.getInstance().getSettingsManager().getLanguage();
@@ -48,6 +68,21 @@ public class Helper {
}
return Locale.forLanguageTag(languageTag);
}
/**
* Gets the Player locale
*
* @param player the player
* @return the locale
*/
@Nullable
public static Locale getLocale(@NotNull Player player) {
ClanPlayer clanPlayer = SimpleClans.getInstance().getClanManager().getAnyClanPlayer(player.getUniqueId());
if (clanPlayer != null) {
return clanPlayer.getLocale();
}
return null;
}
public static @Nullable JSONObject parseJson(String json) {
if (json != null && !json.isEmpty()) {
@@ -59,71 +94,15 @@ public class Helper {
}
return null;
}
public static Set<Path> getPathsIn(String path, Predicate<? super Path> filter) {
Set<Path> files = new LinkedHashSet<>();
String packagePath = path.replace(".", "/");
try {
URI uri = SimpleClans.class.getProtectionDomain().getCodeSource().getLocation().toURI();
FileSystem fileSystem = FileSystems.newFileSystem(URI.create("jar:" + uri), Collections.emptyMap());
files = Files.walk(fileSystem.getPath(packagePath)).
filter(Objects::nonNull).
filter(filter).
collect(Collectors.toSet());
fileSystem.close();
} catch (URISyntaxException | IOException ex) {
SimpleClans.getInstance().getLogger().
log(Level.WARNING, "An error occurred while trying to load files: " + ex.getMessage(), ex);
}
return files;
}
public static Set<Class<?>> getClasses(String packageName) {
Set<Class<?>> classes = new LinkedHashSet<>();
Predicate<? super Path> filter = entry -> {
String path = entry.getFileName().toString();
return !path.contains("$") && path.endsWith(".class");
};
for (Path filesPath : getPathsIn(packageName, filter)) {
// Compatibility with different Java versions
String path = filesPath.toString();
if (path.charAt(0) == '/') {
path = path.substring(1);
}
String fileName = path.replace("/", ".").split(".class")[0];
try {
Class<?> clazz = Class.forName(fileName);
classes.add(clazz);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return classes;
}
@SuppressWarnings("unchecked")
public static <T> Set<Class<? extends T>> getSubTypesOf(String packageName, Class<?> type) {
return getClasses(packageName).stream().
filter(type::isAssignableFrom).
map(aClass -> ((Class<? extends T>) aClass)).
collect(Collectors.toSet());
}
/**
* Parses a list of ranks from the specified JSONObject
*
*
* @param jo the JSON Object
* @return a list of ranks or null if the JSON String is null/empty
*/
public static @Nullable List<Rank> ranksFromJson(@Nullable JSONObject jo) {
if (jo != null && !jo.isEmpty()) {
public static @Nullable List<Rank> ranksFromJson(@Nullable JSONObject jo) {
if (jo != null && !jo.isEmpty()) {
Object ranks = jo.get("ranks");
if (ranks != null) {
JSONArray array = (JSONArray) ranks;
@@ -143,7 +122,7 @@ public class Helper {
return rankList;
}
}
return null;
return null;
}
/**
@@ -153,83 +132,85 @@ public class Helper {
* @return the default rank or null if not found and/or it does not exist
*/
public static @Nullable String defaultRankFromJson(@Nullable JSONObject jo) {
if (jo != null && !jo.isEmpty()) {
if (jo != null && !jo.isEmpty()) {
if (!jo.containsKey("defaultRank")) {
return null;
} else {
return (String) jo.get("defaultRank");
}
}
return null;
return null;
}
/**
* Converts a list of ranks and the default rank to a JSON String
*
* @param ranks the ranks
*
* @param ranks the ranks
* @param defaultRank the default rank
* @return a JSON String
*/
@SuppressWarnings("unchecked")
public static String ranksToJson(List<Rank> ranks, @Nullable String defaultRank) {
if (ranks == null)
ranks = new ArrayList<>();
JSONArray array = new JSONArray();
for (Rank rank : ranks) {
JSONObject o = new JSONObject();
o.put("name", rank.getName());
o.put("displayName", rank.getDisplayName());
JSONArray permArray = new JSONArray();
permArray.addAll(rank.getPermissions());
o.put("permissions", permArray);
array.add(o);
}
JSONObject object = new JSONObject();
object.put("ranks", array);
object.put("defaultRank", defaultRank);
return object.toJSONString();
public static String ranksToJson(List<Rank> ranks, @Nullable String defaultRank) {
if (ranks == null)
ranks = new ArrayList<Rank>();
JSONArray array = new JSONArray();
for (Rank rank : ranks) {
JSONObject o = new JSONObject();
o.put("name", rank.getName());
o.put("displayName", rank.getDisplayName());
JSONArray permArray = new JSONArray();
for (String p : rank.getPermissions()) {
permArray.add(p);
}
o.put("permissions", permArray);
array.add(o);
}
JSONObject object = new JSONObject();
object.put("ranks", array);
object.put("defaultRank", defaultRank);
return object.toJSONString();
}
/**
* Converts a resign times map to a JSON String
*
*
* @param resignTimes
* @return a JSON String
*/
public static String resignTimesToJson(Map<String, Long> resignTimes) {
return JSONObject.toJSONString(resignTimes);
return JSONObject.toJSONString(resignTimes);
}
/**
* Converts a JSON String to a resign times map
*
*
* @param json JSON String
* @return a map
*/
@SuppressWarnings("unchecked")
public static Map<String, Long> resignTimesFromJson(String json) {
if (json != null) {
try {
return (Map<String, Long>) new JSONParser().parse(json);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
public static Map<String, Long> resignTimesFromJson(String json) {
if (json != null) {
try {
return (Map<String, Long>) new JSONParser().parse(json);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Returns the delay in seconds to the specified hour and minute.
*
* @param hour hour
*
* @param hour hour
* @param minute minute
* @return the delay in seconds
*/
public static long getDelayTo(int hour, int minute) {
if (hour < 0 || hour > 23) hour = 1;
if (minute < 0 || minute > 59) minute = 0;
if (hour < 0 || hour > 23) hour = 1;
if (minute < 0 || minute > 59) minute = 0;
LocalDateTime now = LocalDateTime.now();
LocalDateTime d = LocalDateTime.of(now.toLocalDate(), LocalTime.of(hour, minute));
long delay;
@@ -258,13 +239,191 @@ public class Helper {
return playerName;
}
/**
* Check for integer
*
* @param o
* @return
*/
public static boolean isInteger(Object o) {
return o instanceof java.lang.Integer;
}
/**
* Check for byte
*
* @param input
* @return
*/
public static boolean isByte(String input) {
try {
Byte.parseByte(input);
return true;
} catch (Exception ex) {
return false;
}
}
/**
* Check for short
*
* @param input
* @return
*/
public static boolean isShort(String input) {
try {
Short.parseShort(input);
return true;
} catch (Exception ex) {
return false;
}
}
/**
* Check for integer
*
* @param input
* @return
*/
public static boolean isInteger(String input) {
try {
Integer.parseInt(input);
return true;
} catch (Exception ex) {
return false;
}
}
/**
* Check for float
*
* @param input
* @return
*/
public static boolean isFloat(String input) {
try {
Float.parseFloat(input);
return true;
} catch (Exception ex) {
return false;
}
}
/**
* Check for string
*
* @param o
* @return
*/
public static boolean isString(Object o) {
return o instanceof java.lang.String;
}
/**
* Check for boolean
*
* @param o
* @return
*/
public static boolean isBoolean(Object o) {
return o instanceof java.lang.Boolean;
}
/**
* Remove a character from a string
*
* @param s
* @param c
* @return
*/
public static String removeChar(String s, char c) {
String r = "";
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != c) {
r += s.charAt(i);
}
}
return r;
}
/**
* Remove first character from a string
*
* @param s
* @param c
* @return
*/
public static String removeFirstChar(String s, char c) {
String r = "";
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != c) {
r += s.charAt(i);
break;
}
}
return r;
}
/**
* Capitalize first word of sentence
*
* @param content
* @return
*/
public static String capitalize(String content) {
if (content.length() < 2) {
return content;
}
String first = content.substring(0, 1).toUpperCase();
return first + content.substring(1);
}
/**
* Return plural word if count is bigger than one
*
* @param count
* @param word
* @param ending
* @return
*/
public static String plural(int count, String word, String ending) {
return count == 1 ? word : word + ending;
}
/**
* Hex value to ChatColor
*
* @param hexValue
* @return
*/
@NotNull
public static String toColor(@Nullable String hexValue) {
if (hexValue == null) {
return "";
}
if (hexValue.startsWith("&#")) {
return ChatUtils.parseColors(hexValue);
}
ChatColor color = ChatColor.getByChar(hexValue);
if (color == null) {
return "";
}
return color.toString();
}
/**
* Converts string array to ArrayList<String>, remove empty strings
*
* @param values
* @return
*/
public static List<String> fromArrayToList(String... values) {
public static List<String> fromArray(String... values) {
List<String> results = new ArrayList<>();
Collections.addAll(results, values);
results.remove("");
@@ -277,13 +436,25 @@ public class Helper {
* @param values
* @return
*/
public static Set<String> fromArrayToSet(String... values) {
public static Set<String> fromArray2(String... values) {
HashSet<String> results = new HashSet<>();
Collections.addAll(results, values);
results.remove("");
return results;
}
/**
* Converts a player array to ArrayList<Player>
*
* @param values
* @return
*/
public static List<Player> fromPlayerArray(Player... values) {
List<Player> results = new ArrayList<>();
Collections.addAll(results, values);
return results;
}
/**
* Converts ArrayList<String> to string array
*
@@ -291,21 +462,52 @@ public class Helper {
* @return
*/
public static String[] toArray(List<String> list) {
return list.toArray(new String[0]);
return list.toArray(new String[list.size()]);
}
/**
* Converts the Permission values array to a String array
*
*
* @return
*/
public static String[] fromPermissionArray() {
RankPermission[] permissions = RankPermission.values();
String[] sa = new String[permissions.length];
for (int i = 0; i < permissions.length; i++) {
sa[i] = permissions[i].toString();
RankPermission[] permissions = RankPermission.values();
String[] sa = new String[permissions.length];
for (int i = 0; i < permissions.length; i++) {
sa[i] = permissions[i].toString();
}
return sa;
}
/**
* Removes first item from a string array
*
* @param args
* @return
*/
public static String[] removeFirst(String[] args) {
List<String> out = fromArray(args);
if (!out.isEmpty()) {
out.remove(0);
}
return sa;
return toArray(out);
}
/**
* Converts a string array to a space separated string
*
* @param args
* @return
*/
public static String toMessage(String[] args) {
StringBuilder out = new StringBuilder();
for (String arg : args) {
out.append(arg).append(" ");
}
return out.toString().trim();
}
/**
@@ -342,6 +544,52 @@ public class Helper {
return stripTrailing(out, sep);
}
/**
* @deprecated use {@link ChatUtils#parseColors(String)}
*/
@Deprecated
public static String parseColors(String msg) {
return ChatUtils.parseColors(msg);
}
/**
* Removes color codes from strings
*
* @deprecated use {@link ChatUtils#stripColors(String)}
*/
@Deprecated
public static String stripColors(String msg) {
return ChatUtils.stripColors(msg);
}
/*
* Retrieves the last color code @param msg @return
*/
/**
* @param msg
* @return
*/
public static String getLastColorCode(String msg) {
msg = msg.replaceAll(String.valueOf((char) 194), "").trim();
if (msg.length() < 2) {
return "";
}
String one = msg.substring(msg.length() - 2, msg.length() - 1);
String two = msg.substring(msg.length() - 1);
if (one.equals("\u00a7")) {
return one + two;
}
if (one.equals("&")) {
return Helper.toColor(two);
}
return "";
}
/**
* Cleans up the tag from color codes and makes it lowercase
*
@@ -394,6 +642,43 @@ public class Helper {
return out;
}
/**
* Check whether a player is online
*
* @param playerName
* @return
*/
@Deprecated
public static boolean isOnline(String playerName) {
Collection<Player> online = getOnlinePlayers();
for (Player o : online) {
if (o.getName().equalsIgnoreCase(playerName)) {
return true;
}
}
return false;
}
/**
* Check whether a player is online
*
* @param playerUniqueId
* @return
*/
public static boolean isOnline(UUID playerUniqueId) {
Collection<Player> online = getOnlinePlayers();
for (Player o : online) {
if (o.getUniqueId().equals(playerUniqueId)) {
return true;
}
}
return false;
}
/**
* Remove offline players from a ClanPlayer array
*
@@ -412,6 +697,28 @@ public class Helper {
return out;
}
/**
* Test if a url is valid
*
* @param strUrl
* @return
*/
public static boolean testURL(String strUrl) {
try {
URL url = new URL(strUrl);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.connect();
if (urlConn.getResponseCode() != HttpURLConnection.HTTP_OK) {
return false;
}
} catch (IOException e) {
return false;
}
return true;
}
/**
* Escapes single quotes
*
@@ -446,6 +753,18 @@ public class Helper {
return loc.getBlockX() == loc2.getBlockX() && loc.getBlockY() == loc2.getBlockY() && loc.getBlockZ() == loc2.getBlockZ();
}
/**
* Whether the two locations refer to the same location, ignoring pitch and
* yaw
*
* @param loc
* @param loc2
* @return
*/
public static boolean isSameLocation(Location loc, Location loc2) {
return loc.getX() == loc2.getX() && loc.getY() == loc2.getY() && loc.getZ() == loc2.getZ();
}
/**
* Sorts a Map by value
*
@@ -463,6 +782,140 @@ public class Helper {
return result;
}
/**
* @deprecated use {@link VanishUtils#isVanished(CommandSender, Player)}
*/
@Deprecated
@Contract("_, null -> false")
public static boolean isVanished(@Nullable CommandSender viewer, @Nullable Player player) {
if (isVanished(player)) {
return true;
}
if (viewer instanceof Player && player != null) {
return !((Player) viewer).canSee(player);
}
return false;
}
/**
* @deprecated use {@link VanishUtils#isVanished(Player)}
*/
@Deprecated
@Contract("null -> false")
public static boolean isVanished(@Nullable Player player) {
if (player != null && player.hasMetadata("vanished") && !player.getMetadata("vanished").isEmpty()) {
return player.getMetadata("vanished").get(0).asBoolean();
}
return false;
}
@SuppressWarnings("unchecked")
public static Collection<Player> getOnlinePlayers() {
try {
Method method = Bukkit.class.getDeclaredMethod("getOnlinePlayers");
Object players = method.invoke(null);
if (players instanceof Player[]) {
return new ArrayList<>(Arrays.asList((Player[]) players));
} else {
return (Collection<Player>) players;
}
} catch (Exception e) {
e.printStackTrace();
}
return new ArrayList<>();
}
@Deprecated
@Nullable
public static Player getPlayer(String playerName) {
return Bukkit.getPlayerExact(playerName);
}
/**
* Formats the ally chat
*
* @param cp Sender
* @param msg The message
* @param placeholders The placeholders
* @return The formated message
*/
public static String formatAllyChat(ClanPlayer cp, String msg, Map<String, String> placeholders) {
SettingsManager sm = SimpleClans.getInstance().getSettingsManager();
String leaderColor = sm.getAllyChatLeaderColor();
String memberColor = sm.getAllyChatMemberColor();
String rank = cp.getRankId().isEmpty() ? null : ChatUtils.parseColors(cp.getRankDisplayName());
String rankFormat = rank != null ? ChatUtils.parseColors(sm.getAllyChatRank()).replace("%rank%", rank) : "";
String message = replacePlaceholders(sm.getAllyChatFormat(), cp, leaderColor, memberColor, rankFormat, msg);
if (placeholders != null) {
for (Entry<String, String> e : placeholders.entrySet()) {
message = message.replace("%"+e.getKey()+"%", e.getValue());
}
}
return message;
}
private static String replacePlaceholders(String messageFormat,
ClanPlayer cp,
String leaderColor,
String memberColor,
String rankFormat,
String msg) {
return ChatUtils.parseColors(messageFormat)
.replace("%clan%", Objects.requireNonNull(cp.getClan()).getColorTag())
.replace("%nick-color%", (cp.isLeader() ? leaderColor : memberColor))
.replace("%player%", cp.getName())
.replace("%rank%", rankFormat)
.replace("%message%", msg);
}
/**
* Formats the clan chat
*
* @param cp Sender
* @param msg The message
* @param placeholders The placeholders
* @return The formated message
*/
public static String formatClanChat(ClanPlayer cp, String msg, Map<String, String> placeholders) {
SettingsManager sm = SimpleClans.getInstance().getSettingsManager();
String leaderColor = sm.getClanChatLeaderColor();
String memberColor = sm.getClanChatMemberColor();
String rank = cp.getRankId().isEmpty() ? null : ChatUtils.parseColors(cp.getRankDisplayName());
String rankFormat = rank != null ? ChatUtils.parseColors(sm.getClanChatRank()).replace("%rank%", rank) : "";
String message = replacePlaceholders(sm.getClanChatFormat(), cp, leaderColor, memberColor, rankFormat, msg);
if (placeholders != null) {
for (Entry<String, String> e : placeholders.entrySet()) {
message = message.replace("%"+e.getKey()+"%", e.getValue());
}
}
return message;
}
/**
* Formats the chat in a way that the Clan Tag is always there, so infractors can be easily identified
*
* @param cp Sender
* @param msg The chat message
* @return The formatted message
*/
public static String formatSpyClanChat(ClanPlayer cp, String msg) {
msg = stripColors(msg);
if (msg.contains(stripColors(cp.getClan().getColorTag()))) {
return ChatColor.DARK_GRAY + msg;
} else {
return ChatColor.DARK_GRAY + "[" + cp.getTag() + "] " + msg;
}
}
/**
* Formats max inactive days to an infinity symbol if it's negative or 0
*
@@ -6,8 +6,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.REQUEST_MAX;
/**
* @author phaed
*/
@@ -180,6 +178,6 @@ public final class Request {
}
public boolean reachedRequestLimit() {
return askCount > SimpleClans.getInstance().getSettingsManager().getInt(REQUEST_MAX);
return askCount > SimpleClans.getInstance().getSettingsManager().getMaxAsksPerRequest();
}
}
@@ -6,8 +6,6 @@ import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.SimpleClansExpansion;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageMigration;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import net.sacredlabyrinth.phaed.simpleclans.listeners.*;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import net.sacredlabyrinth.phaed.simpleclans.loggers.CSVBankLogger;
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
import net.sacredlabyrinth.phaed.simpleclans.tasks.*;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
@@ -16,8 +14,6 @@ import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.UpdateChecker;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bstats.bukkit.Metrics;
import org.bstats.charts.SimplePie;
import org.bstats.charts.SingleLineChart;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginManager;
@@ -33,15 +29,12 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
/**
* @author Phaed
*/
public class SimpleClans extends JavaPlugin {
private final ArrayList<String> messages = new ArrayList<>();
private static SimpleClans instance;
private static LanguageResource languageResource;
private static final Logger logger = Logger.getLogger("SimpleClans");
@@ -53,12 +46,9 @@ public class SimpleClans extends JavaPlugin {
private PermissionsManager permissionsManager;
private TeleportManager teleportManager;
private ProtectionManager protectionManager;
private ChatManager chatManager;
private boolean hasUUID;
private static final Pattern ACF_PLACEHOLDER_PATTERN = Pattern.compile("\\{(?<key>[a-zA-Z]+?)}");
private BankLogger bankLogger;
/**
* @return the logger
*/
@@ -68,7 +58,7 @@ public class SimpleClans extends JavaPlugin {
}
public static void debug(String msg) {
if (getInstance().getSettingsManager().is(DEBUG)) {
if (getInstance().getSettingsManager().isDebugging()) {
logger.log(Level.INFO, msg);
}
}
@@ -93,7 +83,7 @@ public class SimpleClans extends JavaPlugin {
public void onEnable() {
instance = this;
new LanguageMigration(this).migrate();
settingsManager = new SettingsManager(this);
settingsManager = new SettingsManager();
languageResource = new LanguageResource();
this.hasUUID = UUIDMigration.canReturnUUID();
@@ -104,12 +94,10 @@ public class SimpleClans extends JavaPlugin {
teleportManager = new TeleportManager();
protectionManager = new ProtectionManager();
protectionManager.registerListeners();
chatManager = new ChatManager(this);
migrateChatFormat();
registerEvents();
permissionsManager.loadPermissions();
commandManager = new SCCommandManager(this);
bankLogger = new CSVBankLogger(this);
logStatus();
startTasks();
@@ -119,8 +107,8 @@ public class SimpleClans extends JavaPlugin {
}
private void logStatus() {
getLogger().info("Multithreading: " + SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS));
getLogger().info("BungeeCord: " + SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_BUNGEECORD));
getLogger().info("Multithreading: " + SimpleClans.getInstance().getSettingsManager().getUseThreads());
getLogger().info("BungeeCord: " + SimpleClans.getInstance().getSettingsManager().getUseBungeeCord());
getLogger().info("Help us translate SimpleClans to your language! " +
"Access https://crowdin.com/project/simpleclans/");
}
@@ -149,53 +137,53 @@ public class SimpleClans extends JavaPlugin {
}
private void startMetrics() {
Metrics metrics = new Metrics(this, 7131);
SettingsManager sm = getSettingsManager();
ClanManager cm = getClanManager();
String on = "enabled";
String off = "disabled";
metrics.addCustomChart(new SingleLineChart("clans", () -> cm.getClans().size()));
metrics.addCustomChart(new SingleLineChart("clan_players", () -> cm.getAllClanPlayers().size()));
metrics.addCustomChart(new SimplePie("language", () -> sm.getLanguage().toString()));
metrics.addCustomChart(new SimplePie("machine_language", () -> Locale.getDefault().toString()));
metrics.addCustomChart(new SimplePie("language_chooser", () -> sm.is(LANGUAGE_SELECTOR) ? on : off));
metrics.addCustomChart(new SimplePie("database", () -> sm.is(MYSQL_ENABLE) ? "MySQL" : "SQLite"));
metrics.addCustomChart(new SimplePie("save_periodically", () -> sm.is(PERFORMANCE_SAVE_PERIODICALLY) ? on : off));
metrics.addCustomChart(new SimplePie("save_interval", () -> sm.getString(PERFORMANCE_SAVE_INTERVAL)));
metrics.addCustomChart(new SimplePie("upkeep", () -> sm.is(ECONOMY_UPKEEP_ENABLED) ? on : off));
metrics.addCustomChart(new SimplePie("member_fee", () -> sm.is(ECONOMY_MEMBER_FEE_ENABLED) ? on : off));
metrics.addCustomChart(new SimplePie("rejoin_cooldown", () -> sm.is(ENABLE_REJOIN_COOLDOWN) ? on : off));
metrics.addCustomChart(new SimplePie("clan_verification", () -> sm.is(REQUIRE_VERIFICATION) ? on : off));
metrics.addCustomChart(new SimplePie("money_per_kill", () -> sm.is(ECONOMY_MONEY_PER_KILL) ? on : off));
metrics.addCustomChart(new SimplePie("threads", () -> sm.is(PERFORMANCE_USE_THREADS) ? on : off));
metrics.addCustomChart(new SimplePie("bungeecord", () -> sm.is(PERFORMANCE_USE_BUNGEECORD) ? on : off));
metrics.addCustomChart(new SimplePie("discord_chat", () -> sm.is(DISCORDCHAT_ENABLE) ? on : off));
Metrics metrics = new Metrics(this, 7131);
SettingsManager sm = getSettingsManager();
ClanManager cm = getClanManager();
String on = "enabled";
String off = "disabled";
metrics.addCustomChart(new Metrics.SingleLineChart("clans", () -> cm.getClans().size()));
metrics.addCustomChart(new Metrics.SingleLineChart("clan_players", () -> cm.getAllClanPlayers().size()));
metrics.addCustomChart(new Metrics.SimplePie("language", () -> sm.getLanguage().toString()));
metrics.addCustomChart(new Metrics.SimplePie("machine_language", () -> Locale.getDefault().toString()));
metrics.addCustomChart(new Metrics.SimplePie("language_chooser", () -> sm.isLanguagePerPlayer() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("database", () -> sm.isUseMysql() ? "MySQL" : "SQLite"));
metrics.addCustomChart(new Metrics.SimplePie("save_periodically", () -> sm.isSavePeriodically() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("save_interval", () -> String.valueOf(sm.getSaveInterval())));
metrics.addCustomChart(new Metrics.SimplePie("upkeep", () -> sm.isClanUpkeep() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("member_fee", () -> sm.isMemberFee() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("rejoin_cooldown", () -> sm.isRejoinCooldown() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("clan_verification", () -> sm.isRequireVerification() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("money_per_kill", () -> sm.isMoneyPerKill() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("threads", () -> sm.getUseThreads() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("bungeecord", () -> sm.getUseBungeeCord() ? on : off));
}
private void startTasks() {
if (getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) {
new SaveDataTask().start();
}
if (getSettingsManager().is(ECONOMY_MEMBER_FEE_ENABLED)) {
if (getSettingsManager().isSavePeriodically()) {
new SaveDataTask().start();
}
if (getSettingsManager().isMemberFee()) {
new CollectFeeTask().start();
}
if (getSettingsManager().is(ECONOMY_UPKEEP_ENABLED)) {
if (getSettingsManager().isClanUpkeep()) {
new CollectUpkeepTask().start();
new UpkeepWarningTask().start();
}
if (getSettingsManager().is(PERFORMANCE_HEAD_CACHING)) {
if (getSettingsManager().isCachePlayerHeads()) {
new PlayerHeadCacheTask(this).start();
}
}
@Override
public void onDisable() {
if (getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) {
getStorageManager().saveModified();
}
getServer().getScheduler().cancelTasks(this);
if (getSettingsManager().isSavePeriodically()) {
getStorageManager().saveModified();
}
getStorageManager().closeConnection();
getPermissionsManager().savePermissions();
getSettingsManager().loadAndSave();
}
/**
@@ -242,14 +230,6 @@ public class SimpleClans extends JavaPlugin {
return protectionManager;
}
public ChatManager getChatManager() {
return chatManager;
}
public BankLogger getBankLogger() {
return bankLogger;
}
/**
* @param key the path within the language file
* @return the lang
@@ -265,10 +245,13 @@ public class SimpleClans extends JavaPlugin {
}
@Nullable
public static String optionalLang(@NotNull String key, @Nullable ClanPlayer clanPlayer, Object... arguments) {
Locale locale = instance.getSettingsManager().getLanguage();
if (clanPlayer != null && instance.getSettingsManager().is(LANGUAGE_SELECTOR)) {
locale = clanPlayer.getLocale();
public static String optionalLang(@NotNull String key, @Nullable Player player, Object... arguments) {
Locale locale = getInstance().getSettingsManager().getLanguage();
if (player != null && instance.getSettingsManager().isLanguagePerPlayer()) {
Locale playerLocale = Helper.getLocale(player);
if (playerLocale != null) {
locale = playerLocale;
}
}
String lang = languageResource.getLang(key, locale);
@@ -283,25 +266,13 @@ public class SimpleClans extends JavaPlugin {
return MessageFormat.format(message, arguments);
}
@Nullable
public static String optionalLang(@NotNull String key, @Nullable Player player, Object... arguments) {
ClanPlayer clanPlayer = null;
if (player != null) {
clanPlayer = instance.getClanManager().getAnyClanPlayer(player.getUniqueId());
}
return optionalLang(key, clanPlayer, arguments);
}
@NotNull
public static String lang(@NotNull String key, @Nullable Player player, Object... arguments) {
String lang = optionalLang(key, player, arguments);
return (lang == null) ? key : lang;
}
@NotNull
public static String lang(@NotNull String key, @Nullable ClanPlayer clanPlayer, Object... arguments) {
String lang = optionalLang(key, clanPlayer, arguments);
return (lang == null) ? key : lang;
if (lang == null) {
return key;
}
return lang;
}
@NotNull
@@ -340,8 +311,7 @@ public class SimpleClans extends JavaPlugin {
return this.hasUUID;
}
@Deprecated
public void setUUID(boolean trueOrFalse) {
this.hasUUID = trueOrFalse;
}
}
}
@@ -6,8 +6,6 @@ import org.jetbrains.annotations.Nullable;
import java.util.UUID;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_TELEPORT_DELAY;
public class TeleportState {
private final UUID playerUniqueId;
private final Location playerLocation;
@@ -20,7 +18,7 @@ public class TeleportState {
this.destination = destination;
this.playerLocation = player.getLocation();
this.clanName = clanName;
this.counter = SimpleClans.getInstance().getSettingsManager().getInt(CLAN_TELEPORT_DELAY);
this.counter = SimpleClans.getInstance().getSettingsManager().getWaitSecs();
this.playerUniqueId = player.getUniqueId();
}
@@ -2,9 +2,12 @@ package net.sacredlabyrinth.phaed.simpleclans;
/**
* Possible vote values
*/
/**
*
* @author cc_madelg
*/
public enum VoteResult {
public enum VoteResult
{
ACCEPT, DENY
}
@@ -1,15 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.chat;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
public interface ChatHandler {
SimpleClans plugin = SimpleClans.getInstance();
SettingsManager settingsManager = plugin.getSettingsManager();
ChatManager chatManager = plugin.getChatManager();
void sendMessage(SCMessage message);
boolean canHandle(SCMessage.Source source);
}
@@ -1,80 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.chat;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class SCMessage {
private final Source source;
private final ClanPlayer.Channel channel;
private final ClanPlayer sender;
private List<ClanPlayer> receivers;
private String content;
/**
* Creates a message with initial parameters
*
* @param source The source of message
* @param channel The channel of clan player
* @param sender The clan player sender
* @param content The content of message
* @param receivers The clan players, who will receive the content
*/
public SCMessage(@NotNull Source source, @NotNull ClanPlayer.Channel channel, @NotNull ClanPlayer sender, String content, @NotNull List<ClanPlayer> receivers) {
this.source = source;
this.channel = channel;
this.sender = sender;
this.content = content;
this.receivers = receivers;
}
/**
* Creates a new SCMessage without receivers
*
* @see SCMessage#SCMessage(Source, ClanPlayer.Channel, ClanPlayer, String, List instantiate with initial receievers
*/
public SCMessage(@NotNull Source source, @NotNull ClanPlayer.Channel channel, @NotNull ClanPlayer sender, String content) {
this(source, channel, sender, content, new ArrayList<>());
}
public ClanPlayer.Channel getChannel() {
return channel;
}
public ClanPlayer getSender() {
return sender;
}
public String getContent() {
return content;
}
public Source getSource() {
return source;
}
public List<ClanPlayer> getReceivers() {
return receivers;
}
public void setContent(@NotNull String content) {
this.content = content;
}
public void setReceivers(@NotNull List<ClanPlayer> receivers) {
this.receivers = receivers;
}
/**
* The place where the message came from.
* Used by ChatHandlers to know which SCMessages they can handle.
*
* @see ChatHandler initiate the handler
*/
public enum Source {
SPIGOT, DISCORD, BUNGEE
}
}
@@ -1,49 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.chat.handlers;
import github.scarsz.discordsrv.dependencies.jda.api.entities.TextChannel;
import github.scarsz.discordsrv.util.DiscordUtil;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
import net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook;
import java.util.Objects;
import java.util.Optional;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_ENABLE;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_FORMAT_TO;
import static org.bukkit.Bukkit.getPluginManager;
/**
* Handles delivering messages from {@link Source#SPIGOT} to {@link Source#DISCORD}.
*/
public class DiscordChatHandler implements ChatHandler {
@Override
public void sendMessage(SCMessage message) {
if (message.getChannel() != CLAN) {
return;
}
String format = settingsManager.getString(DISCORDCHAT_FORMAT_TO);
String formattedMessage = chatManager.parseChatFormat(format, message);
Clan clan = message.getSender().getClan();
if (clan == null) {
return;
}
DiscordHook discordHook = Objects.requireNonNull(chatManager.getDiscordHook(), "DiscordHook cannot be null");
Optional<TextChannel> channel = discordHook.getChannel(clan.getTag());
channel.ifPresent(textChannel -> DiscordUtil.sendMessage(textChannel, formattedMessage));
}
@Override
public boolean canHandle(SCMessage.Source source) {
return source == SPIGOT && settingsManager.is(DISCORDCHAT_ENABLE) &&
getPluginManager().getPlugin("DiscordSRV") != null;
}
}
@@ -1,54 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.chat.handlers;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
import net.sacredlabyrinth.phaed.simpleclans.events.ChatEvent;
import org.bukkit.scheduler.BukkitRunnable;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.DISCORD;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_ENABLE;
import static org.bukkit.Bukkit.getPluginManager;
public class SpigotChatHandler implements ChatHandler {
@Override
public void sendMessage(SCMessage message) {
/*
TODO: Make it async, change Type to Channel in 3.0
*/
new BukkitRunnable() {
@Override
public void run() {
ChatEvent event = new ChatEvent(message.getContent(), message.getSender(), message.getReceivers(),
ChatEvent.Type.valueOf(message.getChannel().name()));
getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_FORMAT",
message.getSource() == SPIGOT ? message.getChannel() : message.getSource()));
String format = settingsManager.getString(configField);
String formattedMessage = chatManager.parseChatFormat(format, message, event.getPlaceholders());
plugin.getLogger().info(formattedMessage);
for (ClanPlayer cp : message.getReceivers()) {
ChatBlock.sendMessage(cp, formattedMessage);
}
}
}.runTask(plugin);
}
@Override
public boolean canHandle(SCMessage.Source source) {
return source == SPIGOT || (source == DISCORD && settingsManager.is(DISCORDCHAT_ENABLE) &&
getPluginManager().getPlugin("DiscordSRV") != null);
}
}
@@ -1,51 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.chat.handlers;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.DISCORD;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DISCORDCHAT_ENABLE;
import static org.bukkit.Bukkit.getPluginManager;
/**
* Handles delivering messages from {@link Source#SPIGOT} and {@link Source#DISCORD} to internal spy chat.
*/
public class SpyChatHandler implements ChatHandler {
@Override
public void sendMessage(SCMessage message) {
ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_SPYFORMAT",
message.getSource() == SPIGOT ? message.getChannel() : message.getSource()));
String format = settingsManager.getString(configField);
String formattedMessage = chatManager.parseChatFormat(format, message);
List<ClanPlayer> onlinePlayers = getOnlineClanPlayers().stream()
.filter(player -> plugin.getPermissionsManager().has(player.toPlayer(), "simpleclans.admin.all-seeing-eye"))
.filter(player -> !player.isMuted())
.collect(Collectors.toList());
onlinePlayers.removeAll(message.getReceivers());
onlinePlayers.forEach(receiver -> ChatBlock.sendMessage(receiver, formattedMessage));
}
@Override
public boolean canHandle(SCMessage.Source source) {
return source == SPIGOT || (source == DISCORD && settingsManager.is(DISCORDCHAT_ENABLE) &&
getPluginManager().getPlugin("DiscordSRV") != null);
}
private List<ClanPlayer> getOnlineClanPlayers() {
return plugin.getClanManager().getAllClanPlayers().stream().
filter(cp -> cp.toPlayer() != null).
collect(Collectors.toList());
}
}
@@ -6,8 +6,6 @@ import co.aikar.commands.CommandIssuer;
import co.aikar.commands.PaperCommandManager;
import co.aikar.locales.MessageKey;
import co.aikar.locales.MessageKeyProvider;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractAsyncCompletion;
import net.sacredlabyrinth.phaed.simpleclans.commands.completions.AbstractCompletion;
@@ -24,6 +22,7 @@ import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reflections.Reflections;
import java.lang.reflect.Modifier;
import java.util.Arrays;
@@ -33,7 +32,6 @@ import java.util.logging.Level;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.optionalLang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
public class SCCommandManager extends PaperCommandManager {
private final SimpleClans plugin;
@@ -46,8 +44,8 @@ public class SCCommandManager extends PaperCommandManager {
}
private void configure() {
enableUnstableAPI("help");
registerDependencies();
enableUnstableAPI("help");
addCommandReplacements();
registerContexts();
registerCommands();
@@ -62,13 +60,11 @@ public class SCCommandManager extends PaperCommandManager {
registerDependency(PermissionsManager.class, plugin.getPermissionsManager());
registerDependency(RequestManager.class, plugin.getRequestManager());
registerDependency(ProtectionManager.class, plugin.getProtectionManager());
registerDependency(ChatManager.class, plugin.getChatManager());
}
private void registerCompletions() {
Set<Class<? extends AbstractCompletion>> completions =
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.completions",
AbstractCompletion.class);
Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands.completions");
Set<Class<? extends AbstractCompletion>> completions = reflections.getSubTypesOf(AbstractCompletion.class);
plugin.getLogger().info(String.format("Registering %d command completions...", completions.size()));
for (Class<? extends AbstractCompletion> c : completions) {
if (Modifier.isAbstract(c.getModifiers())) {
@@ -94,9 +90,8 @@ public class SCCommandManager extends PaperCommandManager {
@SuppressWarnings("unchecked")
private void registerConditions() {
Set<Class<? extends AbstractCondition>> conditions =
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.conditions",
AbstractCondition.class);
Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands.conditions");
Set<Class<? extends AbstractCondition>> conditions = reflections.getSubTypesOf(AbstractCondition.class);
plugin.getLogger().info(String.format("Registering %d command conditions...", conditions.size()));
for (Class<? extends AbstractCondition> c : conditions) {
if (Modifier.isAbstract(c.getModifiers())) {
@@ -121,9 +116,8 @@ public class SCCommandManager extends PaperCommandManager {
@SuppressWarnings({"rawtypes", "unchecked"})
private void registerContexts() {
Set<Class<? extends AbstractContextResolver>> resolvers =
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands.contexts",
AbstractContextResolver.class);
Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands.contexts");
Set<Class<? extends AbstractContextResolver>> resolvers = reflections.getSubTypesOf(AbstractContextResolver.class);
plugin.getLogger().info(String.format("Registering %d command contexts...", resolvers.size()));
for (Class<? extends AbstractContextResolver> cr : resolvers) {
if (Modifier.isAbstract(cr.getModifiers())) {
@@ -144,8 +138,9 @@ public class SCCommandManager extends PaperCommandManager {
}
private void registerCommands() {
boolean forceCommandPriority = plugin.getSettingsManager().is(COMMANDS_FORCE_PRIORITY);
Set<Class<? extends BaseCommand>> commands = Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.commands", BaseCommand.class);
boolean forceCommandPriority = plugin.getSettingsManager().isForceCommandPriority();
Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.commands");
Set<Class<? extends BaseCommand>> commands = reflections.getSubTypesOf(BaseCommand.class);
plugin.getLogger().info(String.format("Registering %d base commands...", commands.size()));
for (Class<? extends BaseCommand> c : commands) {
//ACF already registers nested classes
@@ -165,16 +160,16 @@ public class SCCommandManager extends PaperCommandManager {
SettingsManager sm = plugin.getSettingsManager();
getCommandReplacements().addReplacements(
"basic_conditions", "not_blacklisted|not_banned",
"clan", sm.getString(COMMANDS_CLAN),
"deny", sm.getString(COMMANDS_DENY) + "|deny",
"more", sm.getString(COMMANDS_MORE),
"ally_chat", sm.getString(COMMANDS_ALLY),
"accept", sm.getString(COMMANDS_ACCEPT) + "|accept",
"clan_chat", sm.getString(COMMANDS_CLAN_CHAT)
"clan", sm.getCommandClan(),
"deny", sm.getCommandDeny() + "|deny",
"more", sm.getCommandMore(),
"ally_chat", sm.getCommandAlly(),
"accept", sm.getCommandAccept() + "|accept",
"clan_chat", sm.getCommandClanChat()
);
SUBCOMMANDS.forEach(s -> {
String command = optionalLang(s + ".command", (ClanPlayer) null);
String command = optionalLang(s + ".command", null);
if (command == null) {
command = s;
}
@@ -211,6 +206,7 @@ public class SCCommandManager extends PaperCommandManager {
};
//this.locales.loadLanguages();
}
return this.locales;
}
@@ -223,6 +219,6 @@ public class SCCommandManager extends PaperCommandManager {
"setdisplayname", "permissions", "tag", "deposit", "withdraw", "set", "status", "tp", "all", "everyone",
"lookup", "roster", "profile", "list", "create", "description", "start", "end", "admin", "help", "mod",
"setdefault", "removedefault", "land", "break", "interact", "place_block", "damage", "interact_entity",
"container", "permanent", "take", "give", "join", "leave", "mute", "confirm", "balance");
"container", "permanent", "take", "give");
}
}
@@ -2,67 +2,29 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.*;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.ALLY;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
import org.bukkit.entity.Player;
@CommandAlias("%ally_chat")
@Description("{@@command.description.ally}")
@CommandPermission("simpleclans.member.ally")
@Conditions("%basic_conditions|clan_member|can_chat:type=ALLY|rank:name=ALLY_CHAT")
@Conditions("%basic_conditions|clan_member|rank:name=ALLY_CHAT")
public class AllyChatCommand extends BaseCommand {
@Dependency
private ChatManager chatManager;
private ClanManager clanManager;
@Dependency
private SettingsManager settingsManager;
@Dependency
private StorageManager storageManager;
@Default
@HelpSearchTags("chat")
public void sendMessage(ClanPlayer cp, @Name("message") String message) {
chatManager.processChat(SPIGOT, ALLY, cp, message);
}
@Subcommand("%join")
public void join(ClanPlayer clanPlayer) {
if (clanPlayer.getChannel() == ALLY) {
ChatBlock.sendMessage(clanPlayer, lang("already.joined.ally.chat"));
@CommandCompletion("@chat_subcommands")
public void sendMessage(Player player, @Name("message") String message) {
if (!settingsManager.isAllyChatEnable()) {
return;
}
clanPlayer.setChannel(ALLY);
storageManager.updateClanPlayer(clanPlayer);
ChatBlock.sendMessage(clanPlayer, lang("joined.ally.chat"));
clanManager.processAllyChat(player, message);
}
@Subcommand("%leave")
public void leave(ClanPlayer clanPlayer) {
if (clanPlayer.getChannel() == ALLY) {
clanPlayer.setChannel(NONE);
storageManager.updateClanPlayer(clanPlayer);
ChatBlock.sendMessage(clanPlayer, lang("left.ally.chat", clanPlayer));
} else {
ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer));
}
}
@Subcommand("%mute")
public void mute(ClanPlayer clanPlayer) {
if (!clanPlayer.isMutedAlly()) {
clanPlayer.mute(ALLY, true);
ChatBlock.sendMessage(clanPlayer, lang("muted.ally.chat", clanPlayer));
} else {
clanPlayer.mute(ALLY, false);
ChatBlock.sendMessage(clanPlayer, lang("unmuted.ally.chat", clanPlayer));
}
}
}
@@ -5,10 +5,10 @@ import co.aikar.commands.annotation.*;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.EconomyResponse;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.BankDepositEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.BankWithdrawEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -48,6 +48,7 @@ public class BankCommand extends BaseCommand {
processWithdraw(player, clan, amount);
}
@SuppressWarnings("deprecation")
private void processWithdraw(Player player, Clan clan, double amount) {
if (!clan.isAllowWithdraw()) {
String message = getCurrentCommandManager().getCommandReplacements()
@@ -56,24 +57,19 @@ public class BankCommand extends BaseCommand {
return;
}
amount = Math.abs(amount);
/*
TODO: Remove at SimpleClans 3.0
*/
BankWithdrawEvent event = new BankWithdrawEvent(player, clan, amount);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
/*
* ——————————————————————————————————
*/
switch (clan.withdraw(player, ClanBalanceUpdateEvent.Cause.COMMAND, amount)) {
case SUCCESS:
if (permissions.playerGrantMoney(player, amount)) {
if (SimpleClans.getInstance().getPermissionsManager().playerGrantMoney(player, amount)) {
player.sendMessage(AQUA + lang("player.clan.withdraw", player, amount));
clan.addBb(player.getName(), AQUA + lang("bb.clan.withdraw", amount));
} else {
clan.setBalance(player, ClanBalanceUpdateEvent.Cause.REVERT, BankLogger.Operation.WITHDRAW, clan.getBalance() + amount);
clan.setBalance(player, ClanBalanceUpdateEvent.Cause.REVERT, clan.getBalance() + amount);
}
break;
case NOT_ENOUGH_BALANCE:
@@ -98,6 +94,7 @@ public class BankCommand extends BaseCommand {
processDeposit(player, clan, amount);
}
@SuppressWarnings("deprecation")
private void processDeposit(Player player, Clan clan, double amount) {
if (!clan.isAllowDeposit()) {
String message = getCurrentCommandManager().getCommandReplacements()
@@ -106,19 +103,11 @@ public class BankCommand extends BaseCommand {
return;
}
amount = Math.abs(amount);
/*
TODO: Remove at SimpleClans 3.0
*/
BankDepositEvent event = new BankDepositEvent(player, clan, amount);
Bukkit.getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
/*
* ——————————————————————————————————
*/
if (!permissions.playerHasMoney(player, amount)) {
player.sendMessage(AQUA + lang("not.sufficient.money", player));
return;
@@ -130,7 +119,7 @@ public class BankCommand extends BaseCommand {
clan.addBb(player.getName(), AQUA + lang("bb.clan.deposit", amount));
} else {
//Reverts the deposit if something went wrong with Vault
clan.setBalance(player, ClanBalanceUpdateEvent.Cause.REVERT, BankLogger.Operation.DEPOSIT, clan.getBalance() - amount);
clan.setBalance(player, ClanBalanceUpdateEvent.Cause.REVERT, clan.getBalance() - amount);
}
}
}
@@ -2,67 +2,29 @@ package net.sacredlabyrinth.phaed.simpleclans.commands.clan;
import co.aikar.commands.BaseCommand;
import co.aikar.commands.annotation.*;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
import org.bukkit.entity.Player;
@CommandAlias("%clan_chat")
@Conditions("%basic_conditions|clan_member|can_chat:type=CLAN")
@Conditions("%basic_conditions|clan_member")
@CommandPermission("simpleclans.member.chat")
@Description("{@@command.description.chat}")
public class ChatCommand extends BaseCommand {
@Dependency
private ChatManager chatManager;
private ClanManager clanManager;
@Dependency
private SettingsManager settingsManager;
@Dependency
private StorageManager storageManager;
@Default
@HelpSearchTags("chat")
public void sendMessage(ClanPlayer cp, @Name("message") String message) {
chatManager.processChat(SPIGOT, CLAN, cp, message);
}
@Subcommand("%join")
public void join(ClanPlayer clanPlayer) {
if (clanPlayer.getChannel() == CLAN) {
ChatBlock.sendMessage(clanPlayer, lang("already.joined.clan.chat"));
@CommandCompletion("@chat_subcommands")
public void sendMessage(Player player, ClanPlayer cp, @Name("message") String message) {
if (!settingsManager.getClanChatEnable()) {
return;
}
clanPlayer.setChannel(CLAN);
storageManager.updateClanPlayer(clanPlayer);
ChatBlock.sendMessage(clanPlayer, lang("joined.clan.chat"));
}
@Subcommand("%leave")
public void leave(ClanPlayer clanPlayer) {
if (clanPlayer.getChannel() == CLAN) {
clanPlayer.setChannel(NONE);
storageManager.updateClanPlayer(clanPlayer);
ChatBlock.sendMessage(clanPlayer, lang("left.clan.chat", clanPlayer));
} else {
ChatBlock.sendMessage(clanPlayer, lang("chat.didnt.join", clanPlayer));
}
}
@Subcommand("%mute")
public void mute(ClanPlayer clanPlayer) {
if (!clanPlayer.isMuted()) {
clanPlayer.mute(CLAN, true);
ChatBlock.sendMessage(clanPlayer, lang("muted.clan.chat", clanPlayer));
} else {
clanPlayer.mute(CLAN, false);
ChatBlock.sendMessage(clanPlayer, lang("unmuted.clan.chat", clanPlayer));
}
clanManager.processClanChat(player, cp.getTag(), message);
}
}
@@ -6,11 +6,11 @@ import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.conversation.ResignPrompt;
import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
import net.sacredlabyrinth.phaed.simpleclans.events.TagChangeEvent;
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
@@ -18,7 +18,6 @@ import java.util.List;
import java.util.Objects;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
@@ -50,7 +49,7 @@ public class ClanCommands extends BaseCommand {
List<ClanPlayer> onlineLeaders = Helper.stripOffLinePlayers(requestClan.getLeaders());
if (settings.is(WAR_START_REQUEST_ENABLED)) {
if (settings.isWarRequestEnabled()) {
if (!onlineLeaders.isEmpty()) {
requestManager.addWarStartRequest(requester, targetClan, requestClan);
ChatBlock.sendMessage(player, AQUA + lang("leaders.have.been.asked.to.accept.the.war.request",
@@ -68,13 +67,13 @@ public class ClanCommands extends BaseCommand {
@Conditions("verified|rank:name=WAR_END")
@Description("{@@command.description.war.end}")
@CommandCompletion("@warring_clans")
public void endWar(ClanPlayer cp, Clan issuerClan, @Name("clan") ClanInput other) {
public void endWar(Player player, ClanPlayer cp, Clan issuerClan, @Name("clan") ClanInput other) {
Clan war = other.getClan();
if (issuerClan.isWarring(war.getTag())) {
requestManager.addWarEndRequest(cp, war, issuerClan);
ChatBlock.sendMessage(cp, AQUA + lang("leaders.asked.to.end.rivalry", cp, war.getName()));
ChatBlock.sendMessage(player, AQUA + lang("leaders.asked.to.end.rivalry", player, war.getName()));
} else {
ChatBlock.sendMessage(cp, RED + lang("clans.not.at.war", cp));
ChatBlock.sendMessage(player, RED + lang("clans.not.at.war", player));
}
}
@@ -132,10 +131,6 @@ public class ClanCommands extends BaseCommand {
@Description("{@@command.description.invite}")
public void invite(Player sender, ClanPlayer cp, Clan clan,
@Conditions("not_banned|not_in_clan|online:ignore_vanished") @Name("player") ClanPlayerInput invited) {
if (!invited.getClanPlayer().isInviteEnabled()){
ChatBlock.sendMessage(sender, RED + lang("invitedplayer.invite.off", sender));
return;
}
Player invitedPlayer = invited.getClanPlayer().toPlayer();
if (invitedPlayer == null) return;
if (!permissions.has(invitedPlayer, "simpleclans.member.can-join")) {
@@ -154,7 +149,7 @@ public class ClanCommands extends BaseCommand {
return;
}
if (clan.getSize() >= settings.getInt(CLAN_MAX_MEMBERS) && settings.getInt(CLAN_MAX_MEMBERS) > 0) {
if (clan.getSize() >= settings.getMaxMembers()) {
ChatBlock.sendMessage(sender, RED + lang("the.clan.members.reached.limit", sender));
return;
}
@@ -185,7 +180,7 @@ public class ClanCommands extends BaseCommand {
@Description("{@@command.description.fee.set}")
public void setFee(Player player, Clan clan, @Name("fee") double fee) {
fee = Math.abs(fee);
double maxFee = settings.getDouble(ECONOMY_MAX_MEMBER_FEE);
double maxFee = settings.getMaxMemberFee();
if (fee > maxFee) {
ChatBlock.sendMessage(player, RED
+ lang("max.fee.allowed.is.0", player, maxFee));
@@ -223,14 +218,14 @@ public class ClanCommands extends BaseCommand {
@Conditions("verified|rank:name=DESCRIPTION")
@Description("{@@command.description.description}")
public void setDescription(Player player, Clan clan, @Name("description") String description) {
if (description.length() < settings.getInt(CLAN_MIN_DESCRIPTION_LENGTH)) {
if (description.length() < settings.getClanMinDescriptionLength()) {
ChatBlock.sendMessage(player, RED + lang("your.clan.description.must.be.longer.than",
player, settings.getInt(CLAN_MIN_DESCRIPTION_LENGTH)));
player, settings.getClanMinDescriptionLength()));
return;
}
if (description.length() > settings.getInt(CLAN_MAX_DESCRIPTION_LENGTH)) {
if (description.length() > settings.getClanMaxDescriptionLength()) {
ChatBlock.sendMessage(player, RED + lang("your.clan.description.cannot.be.longer.than",
player, settings.getInt(CLAN_MAX_DESCRIPTION_LENGTH)));
player, settings.getClanMaxDescriptionLength()));
return;
}
clan.setDescription(description);
@@ -297,7 +292,7 @@ public class ClanCommands extends BaseCommand {
ChatBlock.sendMessage(player, RED + lang("your.clans.are.already.allies", player));
return;
}
int maxAlliances = settings.getInt(CLAN_MAX_ALLIANCES);
int maxAlliances = settings.getClanMaxAlliances();
if (maxAlliances != -1) {
if (issuerClan.getAllies().size() >= maxAlliances) {
ChatBlock.sendMessage(player, lang("your.clan.reached.max.alliances", player));
@@ -359,31 +354,14 @@ public class ClanCommands extends BaseCommand {
clan.removePlayerFromClan(clanPlayer.getUniqueId());
}
@Subcommand("%resign %confirm")
@CommandPermission("simpleclans.member.resign")
@Description("{@@command.description.resign}")
@HelpSearchTags("leave")
public void resignConfirm(Player player, ClanPlayer cp, Clan clan) {
if (clan.isPermanent() || !clan.isLeader(player) || clan.getLeaders().size() > 1) {
clan.addBb(player.getName(), AQUA + lang("0.has.resigned", player.getName()));
cp.addResignTime(clan.getTag());
clan.removePlayerFromClan(player.getUniqueId());
ChatBlock.sendMessage(cp,AQUA + lang("resign.success", player));
} else if (clan.isLeader(player) && clan.getLeaders().size() == 1) {
clan.disband(player, true, false);
ChatBlock.sendMessage(cp, RED + lang("clan.has.been.disbanded", player, clan.getName()));
} else {
ChatBlock.sendMessage(cp, RED +
lang("last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan", player));
}
}
@Subcommand("%resign")
@CommandPermission("simpleclans.member.resign")
@Description("{@@command.description.resign}")
@HelpSearchTags("leave")
public void resign(@Conditions("clan_member") Player player) {
new SCConversation(plugin, player, new ResignPrompt()).begin();
new ConversationFactory(plugin)
.withFirstPrompt(new ResignPrompt())
.withLocalEcho(true)
.withTimeout(10)
.buildConversation(player).begin();
}
}
@@ -14,7 +14,6 @@ import org.bukkit.Location;
import org.bukkit.entity.Player;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
@CommandAlias("%clan")
@@ -36,7 +35,7 @@ public class HomeCommands extends BaseCommand {
@Conditions("rank:name=REGROUP_ME")
@Description("{@@command.description.regroup.me}")
public void regroupMe(Player player, ClanPlayer cp, Clan clan) {
if (!settings.is(ALLOW_REGROUP)) {
if (!settings.getAllowReGroupCommand()) {
ChatBlock.sendMessage(player, RED + lang("insufficient.permissions", player));
return;
}
@@ -60,7 +59,7 @@ public class HomeCommands extends BaseCommand {
@Conditions("rank:name=REGROUP_HOME")
@Description("{@@command.description.regroup.home}")
public void regroupHome(Player player, ClanPlayer cp, Clan clan) {
if (!settings.is(ALLOW_REGROUP)) {
if (!settings.getAllowReGroupCommand()) {
ChatBlock.sendMessage(player, RED + lang("insufficient.permissions", player));
return;
}
@@ -95,7 +94,7 @@ public class HomeCommands extends BaseCommand {
@Conditions("rank:name=HOME_SET")
@Description("{@@command.description.home.clear}")
public void clear(Player player, Clan clan) {
if (settings.is(CLAN_HOMEBASE_CAN_BE_SET_ONLY_ONCE) && clan.getHomeLocation() != null &&
if (settings.isHomebaseSetOnce() && clan.getHomeLocation() != null &&
!permissions.has(player, "simpleclans.mod.home")) {
ChatBlock.sendMessage(player, RED + lang("home.base.only.once", player));
return;
@@ -110,12 +109,12 @@ public class HomeCommands extends BaseCommand {
@CommandPermission("simpleclans.leader.home-set")
@Description("{@@command.description.home.set}")
public void set(Player player, ClanPlayer cp, Clan clan) {
if (settings.is(CLAN_HOMEBASE_CAN_BE_SET_ONLY_ONCE) && clan.getHomeLocation() != null &&
if (settings.isHomebaseSetOnce() && clan.getHomeLocation() != null &&
!permissions.has(player, "simpleclans.mod.home")) {
ChatBlock.sendMessage(player, RED + lang("home.base.only.once", player));
return;
}
if (settings.is(LAND_SET_BASE_ONLY_IN_LAND)) {
if (settings.isSetBaseOnlyInLand()) {
if (!protection.isOwner(player, player.getLocation())) {
ChatBlock.sendMessageKey(player, "you.can.only.set.base.in.your.land");
return;
@@ -14,8 +14,6 @@ import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.LAND_EDIT_ALL_LANDS;
@CommandAlias("%clan")
@Subcommand("%land")
@Conditions("%basic_conditions|land_sharing|own_land")
@@ -29,7 +27,7 @@ public class LandCommand extends BaseCommand {
private Set<Land> getLands(ClanPlayer cp, Location location) {
Player player = Objects.requireNonNull(cp.toPlayer());
if (settings.is(LAND_EDIT_ALL_LANDS)) {
if (settings.isEditAllLands()) {
return protection.getLands(player, location);
} else {
return protection.getLandsAt(location).stream().filter(l -> l.getOwners().contains(player.getUniqueId()))
@@ -13,7 +13,6 @@ import org.bukkit.entity.Player;
import java.util.Objects;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
@@ -49,7 +48,7 @@ public class LeaderCommands extends BaseCommand {
ChatBlock.sendMessage(player, RED + lang("player.is.not.a.leader.of.your.clan", player));
return;
}
if (clan.getLeaders().size() > 2 && settings.is(CLAN_CONFIRMATION_FOR_DEMOTE)) {
if (clan.getLeaders().size() > 2 && settings.isConfirmationForDemote()) {
requestManager.addDemoteRequest(cp, otherCp.getName(), clan);
ChatBlock.sendMessage(player, AQUA + lang("demotion.vote.has.been.requested.from.all.leaders",
player));
@@ -81,7 +80,7 @@ public class LeaderCommands extends BaseCommand {
ChatBlock.sendMessage(player, RED + lang("the.player.is.already.a.leader", player));
return;
}
if (settings.is(CLAN_CONFIRMATION_FOR_PROMOTE) && clan.getLeaders().size() > 1) {
if (settings.isConfirmationForPromote() && clan.getLeaders().size() > 1) {
requestManager.addPromoteRequest(cp, otherPl.getName(), clan);
ChatBlock.sendMessage(player, AQUA + lang("promotion.vote.has.been.requested.from.all.leaders",
player));
@@ -114,12 +113,12 @@ public class LeaderCommands extends BaseCommand {
ChatBlock.sendMessageKey(player, "your.clan.already.verified");
return;
}
if (!settings.is(ECONOMY_PURCHASE_CLAN_VERIFY)) {
if (!settings.isePurchaseVerification()) {
ChatBlock.sendMessageKey(player, "staff.member.verify.clan");
return;
}
int minToVerify = settings.getInt(CLAN_MIN_TO_VERIFY);
if (minToVerify > clan.getMembers().size()) {
int minToVerify = settings.getMinToVerify();
if (minToVerify > clan.getAllMembers().size()) {
ChatBlock.sendMessage(player, lang("your.clan.must.have.members.to.verify", player, minToVerify));
return;
}
@@ -5,8 +5,6 @@ import co.aikar.commands.annotation.*;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.conversation.CreateRankNamePrompt;
import net.sacredlabyrinth.phaed.simpleclans.conversation.RequestCanceller;
import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
import net.sacredlabyrinth.phaed.simpleclans.events.DeleteRankEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerRankUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
@@ -14,6 +12,8 @@ import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import java.util.Comparator;
@@ -82,8 +82,8 @@ public class RankCommand extends BaseCommand {
@CommandPermission("simpleclans.leader.rank.create")
@Description("{@@command.description.rank.create}")
public void create(Player player, Clan clan) {
SCConversation conversation = new SCConversation(plugin, player, new CreateRankNamePrompt(), 60);
conversation.addConversationCanceller(new RequestCanceller(player, RED + lang("rank.create.request.cancelled", player)));
Conversation conversation = new ConversationFactory(plugin).withFirstPrompt(new CreateRankNamePrompt())
.withLocalEcho(true).withTimeout(60).buildConversation(player);
conversation.getContext().setSessionData("clan", clan);
conversation.begin();
}
@@ -16,68 +16,61 @@ import static org.bukkit.ChatColor.AQUA;
@CommandAlias("%clan")
@Subcommand("%toggle")
@Conditions("%basic_conditions")
@Conditions("%basic_conditions|verified")
public class ToggleCommand extends BaseCommand {
@Dependency
private StorageManager storage;
@Conditions("verified")
public class Verified extends BaseCommand {
@Subcommand("%bb")
@CommandPermission("simpleclans.member.bb-toggle")
@Description("{@@command.description.toggle.bb}")
public void bb(Player player, ClanPlayer cp) {
toggle(player, "bbon", "bboff", cp.isBbEnabled(), cp::setBbEnabled);
}
@Subcommand("%bb")
@CommandPermission("simpleclans.member.bb-toggle")
@Description("{@@command.description.toggle.bb}")
public void bb(Player player, ClanPlayer cp) {
toggle(player, "bbon", "bboff", cp.isBbEnabled(), cp::setBbEnabled);
@Subcommand("%tag")
@CommandPermission("simpleclans.member.tag-toggle")
@Description("{@@command.description.toggle.tag}")
public void tag(Player player, ClanPlayer cp) {
toggle(player, "tagon", "tagoff", cp.isTagEnabled(), cp::setTagEnabled);
}
@Subcommand("%deposit")
@CommandPermission("simpleclans.leader.deposit-toggle")
@Conditions("leader")
@Description("{@@command.description.toggle.deposit}")
public void deposit(Player player, Clan clan) {
toggle(player, "depositon", "depositoff", clan.isAllowDeposit(),
clan::setAllowDeposit);
storage.updateClan(clan);
}
@Subcommand("%fee")
@CommandPermission("simpleclans.leader.fee")
@Conditions("rank:name=FEE_ENABLE|change_fee")
@Description("{@@command.description.toggle.fee}")
public void fee(Player player, Clan clan) {
toggle(player, "feeon", "feeoff", clan.isMemberFeeEnabled(),
clan::setMemberFeeEnabled);
storage.updateClan(clan);
}
@Subcommand("%withdraw")
@CommandPermission("simpleclans.leader.withdraw-toggle")
@Conditions("leader")
@Description("{@@command.description.toggle.withdraw}")
public void withdraw(Player player, Clan clan) {
toggle(player, "withdrawon", "withdrawoff", clan.isAllowWithdraw(),
clan::setAllowWithdraw);
storage.updateClan(clan);
}
storage.updateClanPlayer(cp);
}
@Subcommand("%invite")
@CommandPermission("simpleclans.anyone.invite-toggle")
@Description("{@@command.description.toggle.invite}")
public void invite(Player player, ClanPlayer cp) {
toggle(player, "inviteon", "inviteoff", cp.isInviteEnabled(), cp::setInviteEnabled);
@Subcommand("%tag")
@CommandPermission("simpleclans.member.tag-toggle")
@Description("{@@command.description.toggle.tag}")
public void tag(Player player, ClanPlayer cp) {
toggle(player, "tagon", "tagoff", cp.isTagEnabled(), cp::setTagEnabled);
storage.updateClanPlayer(cp);
}
@Subcommand("%deposit")
@CommandPermission("simpleclans.leader.deposit-toggle")
@Conditions("leader")
@Description("{@@command.description.toggle.deposit}")
public void deposit(Player player, Clan clan) {
toggle(player, "depositon", "depositoff", clan.isAllowDeposit(),
clan::setAllowDeposit);
storage.updateClan(clan);
}
@Subcommand("%fee")
@CommandPermission("simpleclans.leader.fee")
@Conditions("rank:name=FEE_ENABLE|change_fee")
@Description("{@@command.description.toggle.fee}")
public void fee(Player player, Clan clan) {
toggle(player, "feeon", "feeoff", clan.isMemberFeeEnabled(),
clan::setMemberFeeEnabled);
storage.updateClan(clan);
}
@Subcommand("%withdraw")
@CommandPermission("simpleclans.leader.withdraw-toggle")
@Conditions("leader")
@Description("{@@command.description.toggle.withdraw}")
public void withdraw(Player player, Clan clan) {
toggle(player, "withdrawon", "withdrawoff", clan.isAllowWithdraw(),
clan::setAllowWithdraw);
storage.updateClan(clan);
}
private void toggle(CommandSender sender, String onMessageKey, String offMessageKey, boolean status,
@@ -0,0 +1,44 @@
package net.sacredlabyrinth.phaed.simpleclans.commands.completions;
import co.aikar.commands.BukkitCommandCompletionContext;
import co.aikar.commands.InvalidCommandArgument;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
@SuppressWarnings("unused")
public class ChatSubcommandsCompletion extends AbstractSyncCompletion {
public ChatSubcommandsCompletion(@NotNull SimpleClans plugin) {
super(plugin);
}
@Override
public @NotNull String getId() {
return "chat_subcommands";
}
@Override
public Collection<String> getCompletions(BukkitCommandCompletionContext context) throws InvalidCommandArgument {
Player player = context.getPlayer();
if (player == null) {
return Collections.emptyList();
}
String leave = lang("leave", player);
List<String> subcommands = new ArrayList<>(Arrays.asList(lang("join", player), leave, lang("mute",
player)));
ClanPlayer cp = clanManager.getAnyClanPlayer(player.getUniqueId());
if (cp != null) {
if (cp.getChannel() == ClanPlayer.Channel.NONE) {
subcommands.remove(leave);
}
}
return subcommands;
}
}
@@ -23,7 +23,7 @@ public class ClanMembersCompletion extends AbstractSyncCompletion {
if (player != null) {
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
if (clan != null) {
return clan.getMembers().stream().map(ClanPlayer::getName).collect(Collectors.toList());
return clan.getAllMembers().stream().map(ClanPlayer::getName).collect(Collectors.toList());
}
}
return Collections.emptyList();
@@ -11,7 +11,6 @@ import java.time.LocalDateTime;
import static java.time.temporal.ChronoUnit.MINUTES;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
@SuppressWarnings("unused")
public class CanChangeFeeCondition extends AbstractCommandCondition {
@@ -27,7 +26,7 @@ public class CanChangeFeeCondition extends AbstractCommandCondition {
LocalDateTime now = LocalDateTime.now();
LocalDateTime collectTime = getCollectTime();
long interval = now.until(collectTime, MINUTES);
if (interval <= settingsManager.getInt(ECONOMY_MEMBER_FEE_LAST_MINUTE_CHANGE_INTERVAL) * HOUR_IN_MINUTES) {
if (interval <= settingsManager.geteMemberFeeLastMinuteChangeInterval() * HOUR_IN_MINUTES) {
BukkitCommandIssuer issuer = context.getIssuer();
String error = lang("cannot.change.member.fee.now", issuer);
if (interval <= 60) {
@@ -41,8 +40,8 @@ public class CanChangeFeeCondition extends AbstractCommandCondition {
private LocalDateTime getCollectTime() {
LocalDateTime now = LocalDateTime.now();
LocalDateTime collectTime = now.withHour(settingsManager.getInt(TASKS_COLLECT_FEE_HOUR))
.withMinute(settingsManager.getInt(TASKS_COLLECT_FEE_MINUTE));
LocalDateTime collectTime = now.withHour(settingsManager.getTasksCollectFeeHour())
.withMinute(settingsManager.getTasksCollectFeeMinute());
if (collectTime.isBefore(now)) {
collectTime = collectTime.plusDays(1);
}
@@ -1,31 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
import co.aikar.commands.BukkitCommandIssuer;
import co.aikar.commands.ConditionContext;
import co.aikar.commands.ConditionFailedException;
import co.aikar.commands.InvalidCommandArgument;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField;
public class CanChatCondition extends AbstractCommandCondition {
public CanChatCondition(@NotNull SimpleClans plugin) {
super(plugin);
}
@Override
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
String type = context.getConfigValue("type", (String) null).toUpperCase();
ConfigField chatEnabled = ConfigField.valueOf(type + "CHAT_ENABLE");
if (!settingsManager.is(chatEnabled)) {
throw new ConditionFailedException(lang(type.toLowerCase() + ".chat.disabled", context.getIssuer()));
}
}
@Override
public @NotNull String getId() {
return "can_chat";
}
}
@@ -7,8 +7,6 @@ import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.WAR_MAX_MEMBERS_DIFFERENCE;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.WAR_START_REQUEST_ENABLED;
public class CanWarTargetCondition extends AbstractParameterCondition<ClanInput> {
public CanWarTargetCondition(@NotNull SimpleClans plugin) {
@@ -34,8 +32,8 @@ public class CanWarTargetCondition extends AbstractParameterCondition<ClanInput>
throw new ConditionFailedException(lang("clans.already.at.war", issuer));
}
boolean isWarRequestEnabled = settingsManager.is(WAR_START_REQUEST_ENABLED);
int maxDifference = settingsManager.getInt(WAR_MAX_MEMBERS_DIFFERENCE);
boolean isWarRequestEnabled = settingsManager.isWarRequestEnabled();
int maxDifference = settingsManager.getMembersOnlineMaxDifference();
if (!isWarRequestEnabled && maxDifference >= 0) {
int difference = Math.abs(issuerClan.getOnlineMembers().size() - targetClan.getOnlineMembers().size());
@@ -1,14 +1,10 @@
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
import co.aikar.commands.BukkitCommandIssuer;
import co.aikar.commands.ConditionContext;
import co.aikar.commands.ConditionFailedException;
import co.aikar.commands.InvalidCommandArgument;
import co.aikar.commands.*;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.LAND_SHARING;
@SuppressWarnings("unused")
public class LandSharingCondition extends AbstractCommandCondition {
@@ -19,7 +15,7 @@ public class LandSharingCondition extends AbstractCommandCondition {
@Override
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
if (!settingsManager.is(LAND_SHARING)) {
if (!settingsManager.isLandSharing()) {
throw new ConditionFailedException(lang("land.sharing.disabled", context.getIssuer()));
}
}
@@ -9,7 +9,6 @@ import org.bukkit.ChatColor;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_MEMBER_FEE_ENABLED;
public class MemberFeeEnabledCondition extends AbstractCommandCondition {
public MemberFeeEnabledCondition(@NotNull SimpleClans plugin) {
@@ -18,7 +17,7 @@ public class MemberFeeEnabledCondition extends AbstractCommandCondition {
@Override
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
if (!settingsManager.is(ECONOMY_MEMBER_FEE_ENABLED)) {
if (!settingsManager.isMemberFee()) {
throw new ConditionFailedException(ChatColor.RED + lang("disabled.command",
context.getIssuer().getIssuer()));
}
@@ -6,10 +6,10 @@ import co.aikar.commands.ConditionFailedException;
import co.aikar.commands.InvalidCommandArgument;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_MIN_SIZE_TO_SET_ALLY;
import static org.bukkit.ChatColor.RED;
@SuppressWarnings("unused")
@@ -21,9 +21,9 @@ public class MinimumToAllyCondition extends AbstractCommandCondition {
@Override
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
Clan clan = Conditions.assertClanMember(clanManager, context.getIssuer());
if (clan.getSize() < settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_ALLY)) {
if (clan.getSize() < settingsManager.getClanMinSizeToAlly()) {
throw new ConditionFailedException(RED +
lang("minimum.to.make.alliance", context.getIssuer(), settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_ALLY)));
lang("minimum.to.make.alliance", context.getIssuer(), settingsManager.getClanMinSizeToAlly()));
}
}
@@ -9,7 +9,6 @@ import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.CLAN_MIN_SIZE_TO_SET_RIVAL;
import static org.bukkit.ChatColor.RED;
@SuppressWarnings("unused")
@@ -22,9 +21,9 @@ public class MinimumToRivalCondition extends AbstractCommandCondition {
public void validateCondition(ConditionContext<BukkitCommandIssuer> context) throws InvalidCommandArgument {
BukkitCommandIssuer issuer = context.getIssuer();
Clan clan = Conditions.assertClanMember(clanManager, issuer);
if (clan.getSize() < settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_RIVAL)) {
if (clan.getSize() < settingsManager.getClanMinSizeToRival()) {
throw new ConditionFailedException(RED + lang("min.players.rivalries", issuer,
settingsManager.getInt(CLAN_MIN_SIZE_TO_SET_RIVAL)));
settingsManager.getClanMinSizeToRival()));
}
}
@@ -9,8 +9,6 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.BLACKLISTED_WORLDS;
@SuppressWarnings("unused")
public class NotBlacklistedCondition extends AbstractCommandCondition {
@@ -24,7 +22,7 @@ public class NotBlacklistedCondition extends AbstractCommandCondition {
if (player != null) {
World world = player.getLocation().getWorld();
if (world != null) {
if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(world.getName())) {
if (settingsManager.isBlacklistedWorld(world.getName())) {
throw new ConditionFailedException();
}
}
@@ -1,12 +1,10 @@
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
import co.aikar.commands.*;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static org.bukkit.ChatColor.RED;
@@ -26,9 +24,7 @@ public class NotInClanCondition extends AbstractParameterCondition<ClanPlayerInp
public void validateCondition(ConditionContext<BukkitCommandIssuer> context,
BukkitCommandExecutionContext execContext, ClanPlayerInput value)
throws InvalidCommandArgument {
ClanPlayer clanPlayer = value.getClanPlayer();
debug(String.format("NotInClanCondition -> %s %s", clanPlayer.getName(), clanPlayer.getUniqueId()));
if (clanPlayer.getClan() != null) {
if (value.getClanPlayer().getClan() != null) {
throw new ConditionFailedException(RED + lang("the.player.is.already.member.of.another.clan",
execContext.getSender()));
}
@@ -1,14 +1,12 @@
package net.sacredlabyrinth.phaed.simpleclans.commands.conditions;
import co.aikar.commands.*;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
@SuppressWarnings("unused")
@@ -25,9 +23,7 @@ public class OnlineCondition extends AbstractParameterCondition<ClanPlayerInput>
@Override
public void validateCondition(ConditionContext<BukkitCommandIssuer> context, BukkitCommandExecutionContext execContext, ClanPlayerInput value) throws InvalidCommandArgument {
ClanPlayer clanPlayer = value.getClanPlayer();
debug(String.format("OnlineCondition -> %s %s", clanPlayer.getName(), clanPlayer.getUniqueId()));
Player player = clanPlayer.toPlayer();
Player player = value.getClanPlayer().toPlayer();
if (player != null) {
boolean isVanished = VanishUtils.isVanished(execContext.getSender(), player);
@@ -8,8 +8,6 @@ import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug;
@SuppressWarnings("unused")
public class PlayerClanMemberCondition extends AbstractParameterCondition<Player> {
public PlayerClanMemberCondition(@NotNull SimpleClans plugin) {
@@ -25,7 +23,6 @@ public class PlayerClanMemberCondition extends AbstractParameterCondition<Player
public void validateCondition(ConditionContext<BukkitCommandIssuer> context,
BukkitCommandExecutionContext execContext,
Player value) throws InvalidCommandArgument {
debug(String.format("PlayerClanMemberCondition -> %s %s", value.getName(), value.getUniqueId()));
Conditions.assertClanMember(clanManager, context.getIssuer());
}
@@ -9,8 +9,6 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
@SuppressWarnings("unused")
public class ClanPlayerInputContextResolver extends AbstractInputOnlyContextResolver<ClanPlayerInput> {
public ClanPlayerInputContextResolver(@NotNull SimpleClans plugin) {
@@ -24,9 +22,6 @@ public class ClanPlayerInputContextResolver extends AbstractInputOnlyContextReso
if (cp == null) {
@SuppressWarnings("deprecation")
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(arg);
if (!offlinePlayer.hasPlayedBefore()) {
throw new InvalidCommandArgument(lang("user.hasnt.played.before", context.getSender()));
}
cp = clanManager.getCreateClanPlayer(offlinePlayer.getUniqueId());
}
@@ -10,8 +10,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SERVER_NAME;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.DARK_GRAY;
@@ -32,7 +30,7 @@ public class Alliances extends Sendable {
continue;
}
chatBlock.addRow(" " + AQUA + clan.getName(), clan.getAllyString(DARK_GRAY + ", ", sender));
chatBlock.addRow(" " + AQUA + clan.getName(), clan.getAllyString(DARK_GRAY + ", "));
}
sendBlock();
@@ -40,9 +38,9 @@ public class Alliances extends Sendable {
private void sendHeader() {
ChatBlock.sendBlank(sender);
ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " +
ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " +
lang("alliances", sender) + " " + headColor +
Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(sender);
chatBlock.setAlignment("l", "l");
@@ -12,7 +12,6 @@ import java.util.Map;
import java.util.TreeMap;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.WHITE;
@@ -33,8 +32,8 @@ public class ClanCoords extends Sendable {
Player p = cpm.toPlayer();
if (p != null) {
String name = (cpm.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cpm.isTrusted() ?
sm.getColored(PAGE_TRUSTED_COLOR) : sm.getColored(PAGE_UNTRUSTED_COLOR))) + cpm.getName();
String name = (cpm.isLeader() ? sm.getPageLeaderColor() : (cpm.isTrusted() ?
sm.getPageTrustedColor() : sm.getPageUnTrustedColor())) + cpm.getName();
Location loc = p.getLocation();
int distance = (int) Math.ceil(loc.toVector().distance(player.getLocation().toVector()));
String coords = loc.getBlockX() + " " + loc.getBlockY() + " " + loc.getBlockZ();
@@ -58,8 +57,8 @@ public class ClanCoords extends Sendable {
chatBlock.setAlignment("l", "c", "c", "c");
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " +
lang("coords", player) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(player, sm.getPageClanNameColor() + clan.getName() + subColor + " " +
lang("coords", player) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(player);
chatBlock.addRow(" " + headColor + lang("name", player), lang("distance", player),
@@ -14,7 +14,6 @@ import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType.ORDINAL;
import static org.bukkit.ChatColor.*;
@@ -53,7 +52,7 @@ public class ClanList extends Sendable {
@Nullable String order) {
boolean ascending = order == null || lang("list.order.asc").equalsIgnoreCase(order);
if (type == null) {
type = sm.getString(LIST_DEFAULT_ORDER_BY);
type = sm.getListDefaultOrderBy();
}
if (type.equalsIgnoreCase(lang("list.type.size"))) {
return new RankingNumberResolver<>(clans, Clan::getSize, order != null && ascending, ORDINAL);
@@ -74,15 +73,15 @@ public class ClanList extends Sendable {
@NotNull
private List<Clan> getListableClans() {
List<Clan> clans = plugin.getClanManager().getClans();
clans = clans.stream().filter(clan -> clan.isVerified() || sm.is(SHOW_UNVERIFIED_ON_LIST))
clans = clans.stream().filter(clan -> clan.isVerified() || sm.isShowUnverifiedOnList())
.collect(Collectors.toList());
return clans;
}
private void sendHeader(List<Clan> clans) {
ChatBlock.sendBlank(sender);
ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " + lang("clans.lower", sender)
+ " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " + lang("clans.lower", sender)
+ " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(sender);
ChatBlock.sendMessage(sender, headColor + lang("total.clans", sender) + " " + subColor + clans.size());
ChatBlock.sendBlank(sender);
@@ -92,11 +91,12 @@ public class ClanList extends Sendable {
lang("kdr", sender), lang("members", sender));
}
@SuppressWarnings("deprecation")
private void addLine(RankingNumberResolver<Clan, ? extends Comparable<?>> ranking, Clan clan) {
String tag = sm.getColored(CLANCHAT_BRACKET_COLOR) + sm.getString(CLANCHAT_BRACKET_LEFT)
+ sm.getColored(TAG_DEFAULT_COLOR) + clan.getColorTag() + sm.getColored(CLANCHAT_BRACKET_COLOR)
+ sm.getString(CLANCHAT_BRACKET_RIGHT);
String name = (clan.isVerified() ? sm.getColored(PAGE_CLAN_NAME_COLOR) : GRAY) + clan.getName();
String tag = sm.getClanChatBracketColor() + sm.getClanChatTagBracketLeft()
+ sm.getTagDefaultColor() + clan.getColorTag() + sm.getClanChatBracketColor()
+ sm.getClanChatTagBracketRight();
String name = (clan.isVerified() ? sm.getPageClanNameColor() : GRAY) + clan.getName();
String fullname = tag + " " + name;
String size = WHITE + "" + clan.getSize();
String kdr = clan.isVerified() ? YELLOW + "" + KDRFormat.format(clan.getTotalKDR()) : "";
@@ -9,7 +9,6 @@ import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_LEADER_COLOR;
public class ClanProfile extends Sendable {
@@ -26,7 +25,7 @@ public class ClanProfile extends Sendable {
.replace("%clan_color_tag%", clan.getColorTag())
.replace("%clan_description%", getDescription())
.replace("%clan_status%", Helper.getFormattedClanStatus(clan, sender))
.replace("%clan_leaders%", clan.getLeadersString(sm.getColored(PAGE_LEADER_COLOR), subColor + ", "))
.replace("%clan_leaders%", clan.getLeadersString(sm.getPageLeaderColor(), subColor + ", "))
.replace("%clan_online_count%", String.valueOf(VanishUtils.getNonVanished(sender, clan).size()))
.replace("%clan_size%", String.valueOf(clan.getSize()))
.replace("%clan_kdr%", KDRFormat.format(clan.getTotalKDR()))
@@ -37,8 +36,8 @@ public class ClanProfile extends Sendable {
.replace("%clan_deaths%", String.valueOf(clan.getTotalDeaths()))
.replace("%clan_fee_enabled%", getFeeEnabled())
.replace("%clan_fee_value%", String.valueOf(clan.getMemberFee()))
.replace("%clan_allies%", clan.getAllyString(subColor + ", ", sender))
.replace("%clan_rivals%", clan.getRivalString(subColor + ", ", sender))
.replace("%clan_allies%", clan.getAllyString(subColor + ", "))
.replace("%clan_rivals%", clan.getRivalString(subColor + ", "))
.replace("%clan_founded%", clan.getFoundedString())
.replace("%clan_inactive_days%", String.valueOf(clan.getInactiveDays()))
.replace("%clan_max_inactive_days%", Helper.formatMaxInactiveDays(clan.getMaxInactiveDays()));
@@ -1,7 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.commands.data;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -10,7 +9,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
public class ClanRoster extends Sendable {
@@ -37,10 +35,10 @@ public class ClanRoster extends Sendable {
for (ClanPlayer cp : members) {
Player p = cp.toPlayer();
String name = (cp.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) : sm.getColored(PAGE_UNTRUSTED_COLOR)) + cp.getName();
String name = (cp.isTrusted() ? sm.getPageTrustedColor() : sm.getPageUnTrustedColor()) + cp.getName();
String lastSeen = p != null && p.isOnline() && !VanishUtils.isVanished(sender, p) ? GREEN + lang("online", sender) : WHITE + cp.getLastSeenDaysString(sender);
chatBlock.addRow(" " + name, YELLOW + ChatUtils.parseColors(cp.getRankDisplayName()) + RESET, lastSeen);
chatBlock.addRow(" " + name, YELLOW + Helper.parseColors(cp.getRankDisplayName()) + RESET, lastSeen);
}
}
@@ -50,22 +48,22 @@ public class ClanRoster extends Sendable {
for (ClanPlayer cp : leaders) {
Player p = cp.toPlayer();
String name = sm.getColored(PAGE_LEADER_COLOR) + cp.getName();
String name = sm.getPageLeaderColor() + cp.getName();
String lastSeen = p != null && p.isOnline() && !VanishUtils.isVanished(sender, p) ? GREEN + lang("online", sender)
: WHITE + cp.getLastSeenDaysString(sender);
chatBlock.addRow(" " + name, YELLOW + ChatUtils.parseColors(cp.getRankDisplayName()) + RESET, lastSeen);
chatBlock.addRow(" " + name, YELLOW + Helper.parseColors(cp.getRankDisplayName()) + RESET, lastSeen);
}
}
private void configureAndSendHeader() {
ChatBlock.sendBlank(sender);
ChatBlock.saySingle(sender, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " +
lang("roster", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(sender, sm.getPageClanNameColor() + clan.getName() + subColor + " " +
lang("roster", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(sender);
ChatBlock.sendMessage(sender, headColor + lang("legend", sender) + " " + sm.getColored(PAGE_LEADER_COLOR) +
lang("leader", sender) + headColor + ", " + sm.getColored(PAGE_TRUSTED_COLOR) + lang("trusted", sender) +
headColor + ", " + sm.getColored(PAGE_UNTRUSTED_COLOR) + lang("untrusted", sender));
ChatBlock.sendMessage(sender, headColor + lang("legend", sender) + " " + sm.getPageLeaderColor() +
lang("leader", sender) + headColor + ", " + sm.getPageTrustedColor() + lang("trusted", sender) +
headColor + ", " + sm.getPageUnTrustedColor() + lang("untrusted", sender));
ChatBlock.sendBlank(sender);
chatBlock.setFlexibility(false, true, false, true);
@@ -9,7 +9,6 @@ import java.text.NumberFormat;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
public class ClanStats extends Sendable {
@@ -37,15 +36,15 @@ public class ClanStats extends Sendable {
}
private void configureAndSendHeader() {
ChatBlock.saySingle(sender, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " +
lang("stats", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(sender, sm.getPageClanNameColor() + clan.getName() + subColor + " " +
lang("stats", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(sender);
ChatBlock.sendMessage(sender, headColor + lang("kdr", sender) + " = " + subColor +
lang("kill.death.ratio", sender));
ChatBlock.sendMessage(sender, headColor + lang("weights", sender) + " = " + lang("rival", sender)
+ ": " + subColor + sm.getDouble(KILL_WEIGHTS_RIVAL) + headColor + " " + lang("neutral", sender) + ": " + subColor +
sm.getDouble(KILL_WEIGHTS_NEUTRAL) + headColor + " " + lang("civilian", sender) + ": " + subColor +
sm.getDouble(KILL_WEIGHTS_CIVILIAN));
+ ": " + subColor + sm.getKwRival() + headColor + " " + lang("neutral", sender) + ": " + subColor +
sm.getKwNeutral() + headColor + " " + lang("civilian", sender) + ": " + subColor +
sm.getKwCivilian());
ChatBlock.sendBlank(sender);
chatBlock.setFlexibility(true, false, false, false, false, false, false);
@@ -57,8 +56,8 @@ public class ClanStats extends Sendable {
private void addRows(List<ClanPlayer> clanPlayers) {
for (ClanPlayer cpm : clanPlayers) {
String name = (cpm.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cpm.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) :
sm.getColored(PAGE_UNTRUSTED_COLOR)) + cpm.getName());
String name = (cpm.isLeader() ? sm.getPageLeaderColor() : (cpm.isTrusted() ? sm.getPageTrustedColor() :
sm.getPageUnTrustedColor())) + cpm.getName();
String rival = NumberFormat.getInstance().format(cpm.getRivalKills());
String neutral = NumberFormat.getInstance().format(cpm.getNeutralKills());
String civilian = NumberFormat.getInstance().format(cpm.getCivilianKills());
@@ -11,8 +11,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.Map;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_CLAN_NAME_COLOR;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR;
public class Kills extends Sendable {
@@ -55,9 +53,9 @@ public class Kills extends Sendable {
chatBlock.setFlexibility(true, false);
chatBlock.setAlignment("l", "c");
chatBlock.addRow(" " + headColor + lang("victim", player), lang("killcount", player));
ChatBlock.saySingle(player, sm.getColored(PAGE_CLAN_NAME_COLOR) + polled + subColor
ChatBlock.saySingle(player, sm.getPageClanNameColor() + polled + subColor
+ " " + lang("kills", player) + " " + headColor +
Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(player);
}
}
@@ -13,7 +13,6 @@ import java.math.BigDecimal;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
public class Leaderboard extends Sendable {
@@ -39,8 +38,8 @@ public class Leaderboard extends Sendable {
for (ClanPlayer cp : clanPlayers) {
boolean online = cp.toPlayer() != null;
String name = (cp.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cp.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR) :
sm.getColored(PAGE_UNTRUSTED_COLOR))) + cp.getName();
String name = (cp.isLeader() ? sm.getPageLeaderColor() : (cp.isTrusted() ? sm.getPageTrustedColor() :
sm.getPageUnTrustedColor())) + cp.getName();
String lastSeen = online ? GREEN + lang("online", sender) : WHITE + cp.getLastSeenDaysString(sender);
String clanTag = WHITE + lang("free.agent", sender);
@@ -56,8 +55,8 @@ public class Leaderboard extends Sendable {
private void configureAndSendHeader() {
ChatBlock.sendBlank(sender);
ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " + lang("leaderboard.command", sender)
+ " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " + lang("leaderboard.command", sender)
+ " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(sender);
ChatBlock.sendMessage(sender, headColor + lang("total.clan.players.0", sender, subColor +
clanPlayers.size()));
@@ -11,7 +11,6 @@ import org.jetbrains.annotations.Nullable;
import java.util.UUID;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
public class Lookup extends Sendable {
@@ -52,7 +51,7 @@ public class Lookup extends Sendable {
.replace("%player_last_seen%", target.getLastSeenString(sender))
.replace("%player_past_clans%", target.getPastClansString(headColor + ", "))
.replace("%player_inactive_days%", String.valueOf(target.getInactiveDays()))
.replace("%player_max_inactive_days%", Helper.formatMaxInactiveDays(sm.getInt(PURGE_INACTIVE_PLAYER_DAYS)))
.replace("%player_max_inactive_days%", Helper.formatMaxInactiveDays(sm.getPurgePlayers()))
.replace("%kill_type_line%", getKillTypeLine());
sender.sendMessage(lookup);
} else {
@@ -82,15 +81,15 @@ public class Lookup extends Sendable {
return lang("free.agent", sender);
}
if (target.isLeader()) {
return sm.getColored(PAGE_LEADER_COLOR) + lang("leader", sender);
return sm.getPageLeaderColor() + lang("leader", sender);
}
if (target.isTrusted()) {
return sm.getColored(PAGE_TRUSTED_COLOR) + lang("trusted", sender);
return sm.getPageTrustedColor() + lang("trusted", sender);
}
if (!target.getRankId().isEmpty()) {
return sm.getColored(PAGE_TRUSTED_COLOR) + lang("in.rank", sender);
return sm.getPageTrustedColor() + lang("in.rank", sender);
}
return sm.getColored(PAGE_UNTRUSTED_COLOR) + lang("untrusted", sender);
return sm.getPageUnTrustedColor() + lang("untrusted", sender);
}
@NotNull
@@ -10,8 +10,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.Map;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SERVER_NAME;
import static org.bukkit.ChatColor.*;
public class MostKilled extends Sendable {
@@ -66,8 +64,8 @@ public class MostKilled extends Sendable {
chatBlock.addRow(" " + headColor + lang("victim", player), headColor +
lang("killcount", player), headColor + lang("attacker", player));
ChatBlock.saySingle(player, sm.getColored(SERVER_NAME) + subColor + " " + lang("mostkilled",
player) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(player, sm.getServerName() + subColor + " " + lang("mostkilled",
player) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(player);
}
}
@@ -10,8 +10,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PAGE_SEPARATOR;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.SERVER_NAME;
import static org.bukkit.ChatColor.*;
public class Rivalries extends Sendable {
@@ -31,7 +29,7 @@ public class Rivalries extends Sendable {
continue;
}
chatBlock.addRow(" " + AQUA + clan.getName(), clan.getRivalString(DARK_GRAY + ", ", sender));
chatBlock.addRow(" " + AQUA + clan.getName(), clan.getRivalString(DARK_GRAY + ", "));
}
sendBlock();
@@ -39,8 +37,8 @@ public class Rivalries extends Sendable {
private void sendHeader() {
ChatBlock.sendBlank(sender);
ChatBlock.saySingle(sender, sm.getColored(SERVER_NAME) + subColor + " " +
lang("rivalries", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(sender, sm.getServerName() + subColor + " " +
lang("rivalries", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(sender);
ChatBlock.sendMessage(sender, headColor + lang("legend", sender) + DARK_RED + " [" +
lang("war", sender) + "]");
@@ -8,7 +8,6 @@ import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
public abstract class Sendable {
@@ -26,19 +25,19 @@ public abstract class Sendable {
sm = plugin.getSettingsManager();
cm = plugin.getClanManager();
this.sender = sender;
headColor = sm.getColored(PAGE_HEADINGS_COLOR);
subColor = sm.getColored(PAGE_SUBTITLE_COLOR);
headColor = sm.getPageHeadingsColor();
subColor = sm.getPageSubTitleColor();
}
protected void sendBlock() {
SettingsManager sm = plugin.getSettingsManager();
boolean more = chatBlock.sendBlock(sender, sm.getInt(PAGE_SIZE));
boolean more = chatBlock.sendBlock(sender, sm.getPageSize());
if (more) {
plugin.getStorageManager().addChatBlock(sender, chatBlock);
ChatBlock.sendBlank(sender);
ChatBlock.sendMessage(sender, sm.getColored(PAGE_HEADINGS_COLOR) + lang("view.next.page", sender,
sm.getString(COMMANDS_MORE)));
ChatBlock.sendMessage(sender, sm.getPageHeadingsColor() + lang("view.next.page", sender,
sm.getCommandMore()));
}
ChatBlock.sendBlank(sender);
}
@@ -9,7 +9,6 @@ import java.util.Collection;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
public class Vitals extends Sendable {
@@ -39,8 +38,8 @@ public class Vitals extends Sendable {
private void configureAndSendHeader() {
ChatBlock.sendBlank(sender);
ChatBlock.saySingle(sender, sm.getColored(PAGE_CLAN_NAME_COLOR) + clan.getName() + subColor + " " +
lang("vitals", sender) + " " + headColor + Helper.generatePageSeparator(sm.getString(PAGE_SEPARATOR)));
ChatBlock.saySingle(sender, sm.getPageClanNameColor() + clan.getName() + subColor + " " +
lang("vitals", sender) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(sender);
ChatBlock.sendMessage(sender, headColor + lang("weapons", sender) + ": " +
lang("0.s.sword.1.2.b.bow.3.4.a.arrow", sender, WHITE, DARK_GRAY, WHITE, DARK_GRAY, WHITE));
@@ -64,8 +63,8 @@ public class Vitals extends Sendable {
Player p = cpm.toPlayer();
if (p != null) {
String name = (cpm.isLeader() ? sm.getColored(PAGE_LEADER_COLOR) : (cpm.isTrusted() ? sm.getColored(PAGE_TRUSTED_COLOR)
: sm.getColored(PAGE_UNTRUSTED_COLOR))) + cpm.getName();
String name = (cpm.isLeader() ? sm.getPageLeaderColor() : (cpm.isTrusted() ? sm.getPageTrustedColor()
: sm.getPageUnTrustedColor())) + cpm.getName();
String health = cm.getHealthString(p.getHealth());
String hunger = cm.getHungerString(p.getFoodLevel());
String armor = cm.getArmorString(p.getInventory());
@@ -13,26 +13,23 @@ import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.commands.data.*;
import net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt;
import net.sacredlabyrinth.phaed.simpleclans.conversation.RequestCanceller;
import net.sacredlabyrinth.phaed.simpleclans.conversation.SCConversation;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.RequestManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.MainFrame;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanNamePrompt.NAME_KEY;
import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt.TAG_KEY;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.*;
@CommandAlias("%clan")
@@ -55,7 +52,7 @@ public class GeneralCommands extends BaseCommand {
@CommandAlias("%clan")
@HelpSearchTags("menu gui interface ui")
public void main(CommandSender sender) {
if (sender instanceof Player && settings.is(ENABLE_GUI)) {
if (sender instanceof Player && settings.isEnableGUI()) {
InventoryDrawer.open(new MainFrame((Player) sender));
} else {
help(sender, new CommandHelp(getCurrentCommandManager(),
@@ -77,8 +74,8 @@ public class GeneralCommands extends BaseCommand {
HashMap<Object, Object> initialData = new HashMap<>();
initialData.put(TAG_KEY, tag);
initialData.put(NAME_KEY, name);
SCConversation conversation = new SCConversation(plugin, player, new CreateClanTagPrompt(), initialData);
conversation.addConversationCanceller(new RequestCanceller(player, RED + lang("clan.create.request.cancelled", player)));
Conversation conversation = new ConversationFactory(plugin).withFirstPrompt(new CreateClanTagPrompt())
.withLocalEcho(true).withTimeout(60).withInitialSessionData(initialData).buildConversation(player);
conversation.begin();
}
@@ -94,8 +91,8 @@ public class GeneralCommands extends BaseCommand {
@CommandCompletion("@players")
@CommandPermission("simpleclans.anyone.lookup")
@Description("{@@command.description.lookup.other}")
public void lookup(CommandSender sender, @Name("player") ClanPlayerInput player) {
Lookup l = new Lookup(plugin, sender, player.getClanPlayer().getUniqueId());
public void lookup(CommandSender sender, @Name("player") OfflinePlayer player) {
Lookup l = new Lookup(plugin, sender, player.getUniqueId());
l.send();
}
@@ -161,7 +158,7 @@ public class GeneralCommands extends BaseCommand {
@CommandPermission("simpleclans.vip.resetkdr")
@Description("{@@command.description.resetkdr}")
public void resetKdr(Player player, ClanPlayer cp) {
if (!settings.is(ALLOW_RESET_KDR)) {
if (!settings.isAllowResetKdr()) {
ChatBlock.sendMessage(player, RED + lang("disabled.command", player));
return;
}
@@ -203,12 +200,12 @@ public class GeneralCommands extends BaseCommand {
return;
}
chatBlock.sendBlock(player, settings.getInt(PAGE_SIZE));
chatBlock.sendBlock(player, settings.getPageSize());
if (chatBlock.size() > 0) {
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, settings.getColored(PAGE_HEADINGS_COLOR) + lang("view.next.page", player,
settings.getString(COMMANDS_MORE)));
ChatBlock.sendMessage(player, settings.getPageHeadingsColor() + lang("view.next.page", player,
settings.getCommandMore()));
}
ChatBlock.sendBlank(player);
}
@@ -237,31 +234,6 @@ public class GeneralCommands extends BaseCommand {
mk.send();
}
@Subcommand("%list %balance")
@CommandPermission("simpleclans.anyone.list.balance")
@Description("{@@command.description.list.balance}")
public void listBalance(CommandSender sender) {
List<Clan> clans = cm.getClans();
if (clans.isEmpty()) {
sender.sendMessage(RED + lang("no.clans.have.been.created", sender));
return;
}
clans.sort(Comparator.comparingDouble(Clan::getBalance).reversed());
sender.sendMessage(lang("clan.list.balance.header", sender, settings.getColored(SERVER_NAME), clans.size()));
String lineFormat = lang("clan.list.balance.line", sender);
String leftBracket = settings.getColored(TAG_BRACKET_COLOR) + settings.getColored(TAG_BRACKET_LEFT);
String rightBracket = settings.getColored(TAG_BRACKET_COLOR) + settings.getColored(TAG_BRACKET_RIGHT);
for (int i = 0; i < 10 && i < clans.size(); i++) {
Clan clan = clans.get(i);
String name = " " + (clan.isVerified() ? settings.getColored(PAGE_CLAN_NAME_COLOR) : GRAY) + clan.getName();
String line = MessageFormat.format(lineFormat, i + 1, leftBracket, clan.getColorTag(),
rightBracket, name, clan.getBalance());
sender.sendMessage(line);
}
}
@Subcommand("%list")
@CommandPermission("simpleclans.anyone.list")
@Description("{@@command.description.list}")
@@ -7,7 +7,6 @@ import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.EconomyResponse;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import org.bukkit.command.CommandSender;
import static net.md_5.bungee.api.ChatColor.RED;
@@ -71,7 +70,7 @@ public class BankCommand extends BaseCommand {
Clan clan = clanInput.getClan();
amount = Math.abs(amount);
EconomyResponse response = clan.setBalance(sender, ClanBalanceUpdateEvent.Cause.COMMAND, BankLogger.Operation.SET, amount);
EconomyResponse response = clan.setBalance(sender, ClanBalanceUpdateEvent.Cause.COMMAND, amount);
if (response == EconomyResponse.SUCCESS) {
ChatBlock.sendMessage(sender, AQUA + lang("clan.admin.set", sender, clan.getName(), amount));
clan.addBb(sender.getName(), AQUA + lang("bb.clan.set", sender, amount));
@@ -8,7 +8,10 @@ import net.sacredlabyrinth.phaed.simpleclans.commands.ClanInput;
import net.sacredlabyrinth.phaed.simpleclans.commands.ClanPlayerInput;
import net.sacredlabyrinth.phaed.simpleclans.events.TagChangeEvent;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator;
@@ -23,7 +26,6 @@ import java.util.Objects;
import java.util.UUID;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.GLOBAL_FRIENDLY_FIRE;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
@@ -111,7 +113,7 @@ public class StaffCommands extends BaseCommand {
storage.saveModified();
plugin.reloadConfig();
LanguageResource.clearCache();
settings.loadAndSave();
settings.load();
storage.importFromDatabase();
permissions.loadPermissions();
@@ -192,10 +194,10 @@ public class StaffCommands extends BaseCommand {
@CommandPermission("simpleclans.mod.globalff")
@Description("{@@command.description.globalff.allow}")
public void allowGlobalFf(CommandSender sender) {
if (settings.is(GLOBAL_FRIENDLY_FIRE)) {
if (settings.isGlobalff()) {
ChatBlock.sendMessage(sender, AQUA + lang("global.friendly.fire.is.already.being.allowed", sender));
} else {
settings.set(GLOBAL_FRIENDLY_FIRE, true);
settings.setGlobalff(true);
ChatBlock.sendMessage(sender, AQUA + lang("global.friendly.fire.is.set.to.allowed", sender));
}
}
@@ -204,11 +206,11 @@ public class StaffCommands extends BaseCommand {
@CommandPermission("simpleclans.mod.globalff")
@Description("{@@command.description.globalff.auto}")
public void autoGlobalFf(CommandSender sender) {
if (!settings.is(GLOBAL_FRIENDLY_FIRE)) {
if (!settings.isGlobalff()) {
ChatBlock.sendMessage(sender, AQUA +
lang("global.friendy.fire.is.already.being.managed.by.each.clan", sender));
} else {
settings.set(GLOBAL_FRIENDLY_FIRE, false);
settings.setGlobalff(false);
ChatBlock.sendMessage(sender, AQUA + lang("global.friendy.fire.is.now.managed.by.each.clan",
sender));
}
@@ -278,14 +280,13 @@ public class StaffCommands extends BaseCommand {
@CommandPermission("simpleclans.admin.promote")
@Description("{@@command.description.admin.promote}")
public void promote(CommandSender sender, @Conditions("online|clan_member") @Name("player") ClanPlayerInput promote) {
ClanPlayer clanPlayer = promote.getClanPlayer();
Player promotePl = Objects.requireNonNull(clanPlayer.toPlayer());
Player promotePl = Objects.requireNonNull(promote.getClanPlayer().toPlayer());
if (!permissions.has(promotePl, "simpleclans.leader.promotable")) {
ChatBlock.sendMessage(sender, RED + lang("the.player.does.not.have.the.permissions.to.lead.a.clan",
sender));
return;
}
Clan clan = Objects.requireNonNull(clanPlayer.getClan());
Clan clan = Objects.requireNonNull(promote.getClanPlayer().getClan());
if (clan.isLeader(promotePl)) {
ChatBlock.sendMessage(sender, RED + lang("the.player.is.already.a.leader", sender));
return;
@@ -303,17 +304,12 @@ public class StaffCommands extends BaseCommand {
public void demote(CommandSender sender, @Conditions("clan_member") @Name("leader") ClanPlayerInput other) {
ClanPlayer otherCp = other.getClanPlayer();
Clan clan = Objects.requireNonNull(otherCp.getClan());
if (!otherCp.isLeader()) {
ChatBlock.sendMessage(sender, RED + lang("player.is.not.a.leader", sender));
return;
}
if (clan.getLeaders().size() == 1 && !clan.isPermanent()) {
if (clan.getLeaders().size() == 1) {
ChatBlock.sendMessage(sender, RED + lang("you.cannot.demote.the.last.leader", sender));
return;
}
clan.demote(otherCp.getUniqueId());
clan.addBb(sender.getName(), AQUA + lang("demoted.back.to.member", otherCp.getName()));
ChatBlock.sendMessage(sender, AQUA + lang("player.successfully.demoted", sender));
}
@@ -5,7 +5,9 @@ import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.PreCreateClanEvent;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
@@ -15,9 +17,6 @@ import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt.TAG_KEY;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
public class CreateClanNamePrompt extends StringPrompt {
public static final String NAME_KEY = "name";
@@ -66,16 +65,16 @@ public class CreateClanNamePrompt extends StringPrompt {
plugin.getClanManager().createClan(player, tag, name);
Clan clan = plugin.getClanManager().getClan(tag);
clan.addBb(player.getName(), AQUA +
clan.addBb(player.getName(), ChatColor.AQUA +
lang("clan.created", name));
plugin.getStorageManager().updateClan(clan);
if (plugin.getSettingsManager().is(REQUIRE_VERIFICATION)) {
boolean verified = !plugin.getSettingsManager().is(REQUIRE_VERIFICATION)
if (plugin.getSettingsManager().isRequireVerification()) {
boolean verified = !plugin.getSettingsManager().isRequireVerification()
|| plugin.getPermissionsManager().has(player, "simpleclans.mod.verify");
if (!verified) {
ChatBlock.sendMessage(player, AQUA +
ChatBlock.sendMessage(player, ChatColor.AQUA +
lang("get.your.clan.verified.to.access.advanced.features", player));
}
}
@@ -86,19 +85,19 @@ public class CreateClanNamePrompt extends StringPrompt {
private Prompt validateName(@NotNull SimpleClans plugin, @NotNull Player player, @NotNull String input) {
boolean bypass = plugin.getPermissionsManager().has(player, "simpleclans.mod.bypass");
if (!bypass) {
if (ChatUtils.stripColors(input).length() > plugin.getSettingsManager().getInt(CLAN_MAX_LENGTH)) {
return new MessagePromptImpl(RED +
if (ChatUtils.stripColors(input).length() > plugin.getSettingsManager().getClanMaxLength()) {
return new MessagePromptImpl(ChatColor.RED +
lang("your.clan.name.cannot.be.longer.than.characters", player,
plugin.getSettingsManager().getInt(CLAN_MAX_LENGTH)), this);
plugin.getSettingsManager().getClanMaxLength()), this);
}
if (ChatUtils.stripColors(input).length() <= plugin.getSettingsManager().getInt(CLAN_MIN_LENGTH)) {
return new MessagePromptImpl(RED +
if (ChatUtils.stripColors(input).length() <= plugin.getSettingsManager().getClanMinLength()) {
return new MessagePromptImpl(ChatColor.RED +
lang("your.clan.name.must.be.longer.than.characters", player,
plugin.getSettingsManager().getInt(CLAN_MIN_LENGTH)), this);
plugin.getSettingsManager().getClanMinLength()), this);
}
}
if (input.contains("&")) {
return new MessagePromptImpl(RED +
return new MessagePromptImpl(ChatColor.RED +
lang("your.clan.name.cannot.contain.color.codes", player), this);
}
@@ -18,11 +18,10 @@ public class CreateClanTagPrompt extends StringPrompt {
@Override
public @NotNull String getPromptText(@NotNull ConversationContext context) {
Player forWhom = (Player) context.getForWhom();
if (context.getSessionData(TAG_KEY) != null) {
return "";
}
return lang("insert.clan.tag", forWhom, lang("cancel", forWhom));
return lang("insert.clan.tag", (Player) context.getForWhom());
}
@Override
@@ -40,6 +39,7 @@ public class CreateClanTagPrompt extends StringPrompt {
Prompt errorPrompt = validateTag(plugin, player, input);
if (errorPrompt != null) return errorPrompt;
context.setSessionData(TAG_KEY, input);
return new CreateClanNamePrompt();
}
@@ -5,6 +5,7 @@ import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.CreateRankEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PreCreateRankEvent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
@@ -13,14 +14,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
public class CreateRankNamePrompt extends StringPrompt {
@Override
public @NotNull String getPromptText(@NotNull ConversationContext context) {
Player forWhom = (Player) context.getForWhom();
return lang("insert.rank.name", forWhom, lang("cancel", forWhom));
return lang("insert.rank.name", (Player) context.getForWhom());
}
@Override
@@ -35,18 +33,17 @@ public class CreateRankNamePrompt extends StringPrompt {
PreCreateRankEvent event = new PreCreateRankEvent(player, clan, rank);
Bukkit.getServer().getPluginManager().callEvent(event);
rank = event.getRankName();
if (event.isCancelled()) {
return null;
}
if (clan.hasRank(rank)) {
return new MessagePromptImpl(RED + lang("rank.already.exists", player), this);
return new MessagePromptImpl(ChatColor.RED + lang("rank.already.exists", player), this);
}
clan.createRank(rank);
Bukkit.getServer().getPluginManager().callEvent(new CreateRankEvent(player, clan, clan.getRank(rank)));
plugin.getStorageManager().updateClan(clan, true);
return new MessagePromptImpl(AQUA + lang("rank.created", player));
return new MessagePromptImpl(ChatColor.AQUA + lang("rank.created", player));
}
}
@@ -1,30 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.InactivityConversationCanceller;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static org.bukkit.ChatColor.RED;
public class InactivityCanceller extends InactivityConversationCanceller {
/**
* Creates an InactivityConversationCanceller.
*
* @param plugin The owning plugin.
* @param timeoutSeconds The number of seconds of inactivity to wait.
*/
public InactivityCanceller(@NotNull Plugin plugin, int timeoutSeconds) {
super(plugin, timeoutSeconds);
}
@Override
protected void cancelling(@NotNull Conversation conversation) {
Player forWhom = (Player) conversation.getForWhom();
forWhom.spigot().sendMessage(new TextComponent(RED + lang("you.did.not.answer.in.time", forWhom)));
}
}
@@ -5,11 +5,14 @@ import org.bukkit.conversations.Prompt;
import org.jetbrains.annotations.NotNull;
/**
*
* @author roinujnosde
*/
public class MessagePromptImpl extends org.bukkit.conversations.MessagePrompt {
private final String message;
private Prompt nextPrompt;
public MessagePromptImpl(String message) {
this.message = message;
}
@@ -28,4 +31,5 @@ public class MessagePromptImpl extends org.bukkit.conversations.MessagePrompt {
public @NotNull String getPromptText(@NotNull ConversationContext cc) {
return message;
}
}
@@ -1,48 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import org.bukkit.command.CommandSender;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationCanceller;
import org.bukkit.conversations.ConversationContext;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class RequestCanceller implements ConversationCanceller {
@NotNull
private final String cancelledMessage;
@NotNull
private final String escapeSequence;
public RequestCanceller(@NotNull String escapeSequence, @NotNull String cancelledMessage) {
this.escapeSequence = escapeSequence;
this.cancelledMessage = cancelledMessage;
}
public RequestCanceller(@NotNull CommandSender sender, @NotNull String cancelledMessage) {
this(lang("cancel", sender), cancelledMessage);
}
@Override
public void setConversation(@NotNull Conversation conversation) {
}
@Override
public boolean cancelBasedOnInput(@NotNull ConversationContext context, @NotNull String input) {
if (input.equalsIgnoreCase(escapeSequence)) {
context.getForWhom().sendRawMessage(cancelledMessage);
return true;
}
return false;
}
//a clone that is not a clone, nice one, Bukkit
@SuppressWarnings("MethodDoesntCallSuperMethod")
@NotNull
@Override
public ConversationCanceller clone() {
return new RequestCanceller(this.escapeSequence, this.cancelledMessage);
}
}
@@ -4,6 +4,7 @@ import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
@@ -15,8 +16,6 @@ import java.util.Arrays;
import java.util.Objects;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
/**
* @author roinujnosde
@@ -28,7 +27,7 @@ public class ResignPrompt extends StringPrompt {
final SimpleClans plugin = (SimpleClans) cc.getPlugin();
Player player = (Player) cc.getForWhom();
String yes = lang("yes", player);
String yes = lang("resign.yes", player);
ClanManager cm = Objects.requireNonNull(plugin).getClanManager();
ClanPlayer cp = cm.getCreateClanPlayer(player.getUniqueId());
Clan clan = cp.getClan();
@@ -38,28 +37,28 @@ public class ResignPrompt extends StringPrompt {
if (yes.equalsIgnoreCase(input)) {
if (clan.isPermanent() || !clan.isLeader(player) || clan.getLeaders().size() > 1) {
clan.addBb(player.getName(), AQUA + lang("0.has.resigned", player.getName()));
clan.addBb(player.getName(), ChatColor.AQUA + lang("0.has.resigned", player.getName()));
cp.addResignTime(clan.getTag());
clan.removePlayerFromClan(player.getUniqueId());
return new MessagePromptImpl(AQUA + lang("resign.success", player));
return new MessagePromptImpl(ChatColor.AQUA + lang("resign.success", player));
} else if (clan.isLeader(player) && clan.getLeaders().size() == 1) {
clan.disband(player, true, false);
return new MessagePromptImpl(RED + lang("clan.has.been.disbanded", player, clan.getName()));
return null;
} else {
return new MessagePromptImpl(RED + lang("last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan", player));
return new MessagePromptImpl(ChatColor.RED + lang("last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan", player));
}
} else {
return new MessagePromptImpl(RED + lang("resign.request.cancelled", player));
return new MessagePromptImpl(ChatColor.RED + lang("resign.request.cancelled", player));
}
}
@Override
public @NotNull String getPromptText(@NotNull ConversationContext cc) {
Player player = (Player) cc.getForWhom();
return RED + MessageFormat.format(
return ChatColor.RED + MessageFormat.format(
lang("resign.confirmation", player), Arrays.asList(
lang("yes", player), lang("cancel", player)));
lang("resign.yes", player), lang("resign.no", player)));
}
}
@@ -1,54 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import org.bukkit.conversations.Conversable;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationCanceller;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class SCConversation extends Conversation {
private static final Map<UUID, SCConversation> conversations = new HashMap<>();
public SCConversation(@NotNull Plugin plugin, @NotNull Conversable forWhom, @Nullable Prompt firstPrompt) {
this(plugin, forWhom, firstPrompt, new HashMap<>(), 10);
}
public SCConversation(@NotNull Plugin plugin, @NotNull Conversable forWhom, @Nullable Prompt firstPrompt, int timeout) {
this(plugin, forWhom, firstPrompt, new HashMap<>(), timeout);
}
public SCConversation(@NotNull Plugin plugin, @NotNull Conversable forWhom, @Nullable Prompt firstPrompt, @NotNull Map<Object, Object> initialSessionData) {
this(plugin, forWhom, firstPrompt, initialSessionData, 10);
}
public SCConversation(@NotNull Plugin plugin, @NotNull Conversable forWhom, @Nullable Prompt firstPrompt, @NotNull Map<Object, Object> initialSessionData, int timeout) {
super(plugin, forWhom, firstPrompt, initialSessionData);
this.setLocalEchoEnabled(true);
this.addConversationCanceller(new InactivityCanceller(plugin, timeout));
}
@Override
public void begin() {
UUID uniqueId = ((Player) getForWhom()).getUniqueId();
SCConversation oldConversation = conversations.get(uniqueId);
if (oldConversation != this && oldConversation != null) {
getForWhom().abandonConversation(oldConversation);
}
conversations.put(uniqueId, this);
super.begin();
}
public void addConversationCanceller(@NotNull ConversationCanceller canceller) {
canceller.setConversation(this);
cancellers.add(canceller);
}
}
@@ -1,25 +1,21 @@
package net.sacredlabyrinth.phaed.simpleclans.events;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author RoinujNosde
*/
public class ChatEvent extends Event implements Cancellable {
/*
* Todo: refactor Type to Channel in 3.0
*/
private static final HandlerList HANDLER_LIST = new HandlerList();
private String message;
private final ClanPlayer sender;
@@ -27,7 +23,7 @@ public class ChatEvent extends Event implements Cancellable {
private final Map<String, String> placeholders = new HashMap<>();
private final Type type;
private boolean cancelled;
public ChatEvent(String message, ClanPlayer sender, List<ClanPlayer> receivers, Type type) {
if (message == null || sender == null || receivers == null || type == null) {
throw new IllegalArgumentException("none of the args can be null");
@@ -36,7 +32,7 @@ public class ChatEvent extends Event implements Cancellable {
this.sender = sender;
this.receivers = receivers;
this.type = type;
}
}
@Override
public boolean isCancelled() {
@@ -51,10 +47,9 @@ public class ChatEvent extends Event implements Cancellable {
public enum Type {
ALLY, CLAN
}
/**
* Gets the chat type
*
* @return the chat type
*/
public Type getType() {
@@ -74,10 +69,10 @@ public class ChatEvent extends Event implements Cancellable {
* Adds a placeholder and its value to the chat message
*
* @param placeholderName the placeholder name
* @param value the String to be replaced
* @param value the String to be replaced
* @throws IllegalArgumentException if one of the args are null; if one of
* the args are empty; if the placeholder name equals "clan", "nick-color",
* "player", "rank" or "message"
* the args are empty; if the placeholder name equals "clan", "nick-color",
* "player", "rank" or "message"
*/
public void addPlaceholder(String placeholderName, String value) {
if (placeholderName == null || value == null) {
@@ -112,7 +107,6 @@ public class ChatEvent extends Event implements Cancellable {
/**
* Changes the chat message
*
* @param message the new message
*/
public void setMessage(String message) {
@@ -3,6 +3,7 @@ package net.sacredlabyrinth.phaed.simpleclans.events;
import net.sacredlabyrinth.phaed.simpleclans.ui.SCFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull;
@@ -1,482 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.hooks;
import github.scarsz.discordsrv.DiscordSRV;
import github.scarsz.discordsrv.api.Subscribe;
import github.scarsz.discordsrv.api.events.AccountLinkedEvent;
import github.scarsz.discordsrv.api.events.AccountUnlinkedEvent;
import github.scarsz.discordsrv.api.events.DiscordGuildMessageReceivedEvent;
import github.scarsz.discordsrv.dependencies.commons.lang3.StringUtils;
import github.scarsz.discordsrv.dependencies.emoji.EmojiParser;
import github.scarsz.discordsrv.dependencies.jda.api.Permission;
import github.scarsz.discordsrv.dependencies.jda.api.entities.*;
import github.scarsz.discordsrv.dependencies.jda.api.requests.RestAction;
import github.scarsz.discordsrv.dependencies.kyori.adventure.text.Component;
import github.scarsz.discordsrv.objects.managers.AccountLinkManager;
import github.scarsz.discordsrv.util.DiscordUtil;
import github.scarsz.discordsrv.util.MessageUtil;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.*;
import net.sacredlabyrinth.phaed.simpleclans.managers.ChatManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
import java.util.List;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.stream.Collectors;
import static github.scarsz.discordsrv.dependencies.jda.api.Permission.VIEW_CHANNEL;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.DISCORD;
import static net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook.DiscordAction.ADD;
import static net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook.DiscordAction.REMOVE;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
/**
* Hooks SimpleClans and Discord, using DiscordSRV.
* <p>
* On server' startup:
* </p>
* <ul>
* <li>Creates categories and channels, respecting discord's limits.</li>
* <li>Removes invalid channels, resets permissions and roles.</li>
* </ul>
* <p>
* Manages events:
* </p>
* <ul>
* <li>Clan creation/deletion</li>
* <li>ClanPlayer joining/resigning</li>
* <li>Player linking</li>
* <li>ClanPlayer promoting/demoting</li>
* </ul>
* <p>
* Currently, works with clan chat only.
*/
public class DiscordHook implements Listener {
private static final int MAX_CHANNELS_PER_CATEGORY = 50;
private static final int MAX_CHANNELS_PER_GUILD = 500;
private final SimpleClans plugin;
private final SettingsManager settingsManager;
private final ChatManager chatManager;
private final ClanManager clanManager;
private final AccountLinkManager accountManager = DiscordSRV.getPlugin().getAccountLinkManager();
private final Guild guild = DiscordSRV.getPlugin().getMainGuild();
private final List<String> textCategories;
private final List<String> discordClanTags;
private final List<String> clanTags;
private final Role leaderRole;
public DiscordHook(SimpleClans plugin) {
this.plugin = plugin;
settingsManager = plugin.getSettingsManager();
chatManager = plugin.getChatManager();
clanManager = plugin.getClanManager();
textCategories = settingsManager.getStringList(DISCORDCHAT_TEXT_CATEGORY_IDS).stream().
filter(this::categoryExists).collect(Collectors.toList());
List<String> whitelist = settingsManager.getStringList(DISCORDCHAT_TEXT_WHITELIST);
clanTags = clanManager.getClans().stream().
filter(Clan::isVerified).
filter(clan -> clan.getMembers().stream().
anyMatch(clanPlayer -> getMember(clanPlayer) != null) || clan.isPermanent()).
map(Clan::getTag).
filter(clanTag -> whitelist.isEmpty() || whitelist.contains(clanTag)).
limit(settingsManager.getInt(DISCORDCHAT_TEXT_LIMIT)).
collect(Collectors.toList());
discordClanTags = getChannels().stream().
map(GuildChannel::getName).
collect(Collectors.toList());
leaderRole = getLeaderRole();
setupDiscord();
}
@Subscribe
public void onMessageReceived(DiscordGuildMessageReceivedEvent event) {
Optional<TextChannel> channel = getChannel(event.getChannel().getName());
if (channel.isPresent()) {
Message eventMessage = event.getMessage();
User Author = event.getAuthor();
TextChannel textChannel = channel.get();
UUID uuid = accountManager.getUuid(Author.getId());
if (uuid == null) {
sendPrivateMessage(textChannel, eventMessage, lang("you.did.not.link.your.account"));
return;
}
ClanPlayer clanPlayer = clanManager.getClanPlayer(uuid);
if (clanPlayer == null) {
return;
}
Clan clan = clanPlayer.getClan();
if (clan == null) {
return;
}
if (!Objects.equals(textChannel.getName(), clan.getTag())) {
String channelLink = "<#" + textChannel.getId() + ">";
sendPrivateMessage(textChannel, eventMessage, lang("cannot.send.discord.message", clanPlayer, channelLink));
return;
}
String emojiBehavior = DiscordSRV.config().getString("DiscordChatChannelEmojiBehavior");
boolean hideEmoji = emojiBehavior.equalsIgnoreCase("hide");
boolean nameEmoji = emojiBehavior.equalsIgnoreCase("name");
Component component = MessageUtil.reserializeToMinecraft(eventMessage.getContentRaw());
String message = MessageUtil.toLegacy(component);
if (hideEmoji && StringUtils.isBlank(EmojiParser.removeAllEmojis(message))) {
DiscordSRV.debug("Ignoring message from "
+ Author.getName() +
" because it became completely blank after removing unicode emojis");
return;
}
if (hideEmoji) {
// remove all emojis
message = EmojiParser.removeAllEmojis(message);
} else if (nameEmoji) {
// parse emojis from unicode back to :code:
message = EmojiParser.parseToAliases(message);
}
chatManager.processChat(DISCORD, CLAN, clanPlayer, message);
}
}
@EventHandler
public void onClanDisband(DisbandClanEvent event) {
deleteChannel(event.getClan().getTag());
}
@EventHandler
public void onClanCreate(CreateClanEvent event) {
createChannel(event.getClan().getTag());
}
@EventHandler
public void onPlayerClanLeave(PlayerKickedClanEvent event) {
ClanPlayer clanPlayer = event.getClanPlayer();
updatePermissions(clanPlayer, REMOVE);
updateRole(clanPlayer, REMOVE);
}
@EventHandler
public void onPlayerClanJoin(PlayerJoinedClanEvent event) {
ClanPlayer clanPlayer = event.getClanPlayer();
updatePermissions(clanPlayer, ADD);
updateRole(clanPlayer, ADD);
}
@EventHandler
public void onPlayerPromote(PlayerPromoteEvent event) {
updateRole(event.getClanPlayer(), ADD);
}
@EventHandler
public void onPlayerDemote(PlayerDemoteEvent event) {
updateRole(event.getClanPlayer(), REMOVE);
}
@Subscribe
public void onPlayerLinking(AccountLinkedEvent event) {
ClanPlayer clanPlayer = clanManager.getClanPlayer(event.getPlayer());
if (clanPlayer == null) {
return;
}
updatePermissions(clanPlayer, ADD);
}
@Subscribe
public void onPlayerUnlinking(AccountUnlinkedEvent event) {
ClanPlayer clanPlayer = clanManager.getClanPlayer(event.getPlayer());
if (clanPlayer == null) {
return;
}
updatePermissions(clanPlayer, REMOVE);
guild.removeRoleFromMember(event.getDiscordId(), leaderRole).queue();
}
protected void setupDiscord() {
removeInvalidChannels();
resetPermissions();
createChannels();
}
@NotNull
public Guild getGuild() {
return guild;
}
/**
* @return A leader role from guild, otherwise creates one.
*/
@NotNull
public Role getLeaderRole() {
Role role = guild.getRoleById(settingsManager.getString(DISCORDCHAT_LEADER_ID));
if (role == null || !role.getName().equals(settingsManager.getString(DISCORDCHAT_LEADER_ROLE))) {
role = guild.createRole().
setName(settingsManager.getString(DISCORDCHAT_LEADER_ROLE)).
setColor(getLeaderColor()).
setMentionable(true).
complete();
settingsManager.set(DISCORDCHAT_LEADER_ID, role.getId());
settingsManager.save();
}
return role;
}
/**
* @return A leader color from configuration
*/
public Color getLeaderColor() {
String[] colors = settingsManager.getString(DISCORDCHAT_LEADER_COLOR).
replaceAll("\\s", "").split(",");
try {
int red = Integer.parseInt(colors[0]);
int green = Integer.parseInt(colors[1]);
int blue = Integer.parseInt(colors[2]);
int alpha = Integer.parseInt(colors[3]);
return new Color(red, green, blue, alpha);
} catch (IllegalArgumentException ex) {
plugin.getLogger().warning("Color is invalid, using default color: " + ex.getMessage());
return Color.RED;
}
}
/**
* Creates a new SimpleClans {@link Category}
*
* @return Category or null, if reached the limit
*/
@Nullable
public Category createCategory() {
if (guild.getChannels().size() >= MAX_CHANNELS_PER_GUILD) {
return null;
}
String categoryName = settingsManager.getString(DISCORDCHAT_TEXT_CATEGORY_FORMAT);
Category category = null;
try {
category = guild.createCategory(categoryName).
addRolePermissionOverride(
guild.getPublicRole().getIdLong(),
Collections.emptyList(),
Collections.singletonList(VIEW_CHANNEL)).
submit().get();
textCategories.add(category.getId());
settingsManager.set(DISCORDCHAT_TEXT_CATEGORY_IDS, textCategories);
settingsManager.save();
} catch (InterruptedException | ExecutionException ex) {
plugin.getLogger().log(Level.SEVERE, "Error while trying to create {0} category: " +
ex.getMessage(), categoryName);
}
return category;
}
/**
* Creates a new {@link ClanPlayer.Channel} in available categories,
* otherwise creates one
*/
public boolean createChannel(@NotNull String clanTag) {
Category availableCategory = getCategories().stream().
filter(category -> category.getTextChannels().size() < MAX_CHANNELS_PER_CATEGORY).
findAny().orElseGet(this::createCategory);
return availableCategory != null && createChannel(availableCategory, clanTag);
}
/**
* Retrieves channel in SimpleClans categories.
*
* @see #getCategories() retreive categories.
*/
public Optional<TextChannel> getChannel(@NotNull String channelName) {
return getChannels().stream().filter(textChannel -> textChannel.getName().equals(channelName)).findFirst();
}
/**
* Checks if category can be obtained by id.
*/
public boolean categoryExists(String categoryId) {
return guild.getCategoryById(categoryId) != null;
}
/**
* Creates a new {@link ClanPlayer.Channel} in defined {@link Category}
*
* <p>Sets {@link Permission#VIEW_CHANNEL} permission to all linked clan members.</p>
*
* @return true, if channel was created. False, if category reached the limit.
*/
public boolean createChannel(@NotNull Category category, @NotNull String clanTag) {
if (category.getTextChannels().size() >= MAX_CHANNELS_PER_CATEGORY) {
return false;
}
TextChannel textChannel = category.createTextChannel(clanTag).complete();
Clan clan = clanManager.getClan(clanTag);
if (clan != null) {
for (ClanPlayer member : clan.getMembers()) {
updatePermissions(member, ADD);
}
}
return true;
}
/**
* Deletes channel from SimpleClans categories.
* If there are no channels, removes category as well.
*/
public void deleteChannel(@NotNull String channelName) {
for (Category category : getCategories()) {
if (category.getTextChannels().size() > 0) {
for (TextChannel textChannel : category.getTextChannels()) {
if (textChannel.getName().equals(channelName)) {
textChannel.delete().complete();
}
}
if (category.getTextChannels().size() == 0) {
textCategories.remove(category.getId());
settingsManager.set(DISCORDCHAT_TEXT_CATEGORY_IDS, textCategories);
settingsManager.save();
category.delete().complete();
}
}
}
}
/**
* @return All categories, which contains in configuration.
*/
public List<Category> getCategories() {
return textCategories.stream().
filter(this::categoryExists).
map(guild::getCategoryById).
collect(Collectors.toList());
}
/**
* @return All channels in categories
*/
public List<TextChannel> getChannels() {
return getCategories().stream().map(Category::getTextChannels).flatMap(Collection::stream).
collect(Collectors.toList());
}
@Nullable
public Member getMember(@NotNull ClanPlayer clanPlayer) {
String discordId = accountManager.getDiscordId(clanPlayer.getUniqueId());
return DiscordUtil.getMemberById(discordId);
}
private void removeInvalidChannels() {
ArrayList<String> clansToDelete = new ArrayList<>(discordClanTags);
clansToDelete.removeAll(clanTags);
clansToDelete.forEach(this::deleteChannel);
}
private void resetPermissions() {
getChannels().stream().
map(TextChannel::getMemberPermissionOverrides).
flatMap(Collection::stream).
filter(permissionOverride -> !Objects.equals(permissionOverride.getPermissionHolder(), guild.getPublicRole())).
forEach(permissionOverride -> permissionOverride.delete().queue());
clanTags.stream().map(clanManager::getClan).
filter(Objects::nonNull).
map(Clan::getMembers).
flatMap(Collection::stream).
forEach(clanPlayer -> updatePermissions(clanPlayer, ADD));
}
private void createChannels() {
clanTags.removeAll(discordClanTags);
Iterator<String> tagIter = clanTags.iterator();
while (tagIter.hasNext()) {
if (createChannel(tagIter.next())) {
tagIter.remove();
} else {
break;
}
}
}
@SuppressWarnings("ResultOfMethodCallIgnored")
private void sendPrivateMessage(TextChannel textChannel, Message eventMessage, String message) {
RestAction<PrivateChannel> privateChannelAction = eventMessage.getAuthor().openPrivateChannel();
textChannel.deleteMessageById(eventMessage.getId()).queue(unused -> {
String channelLink = "<#" + textChannel.getId() + ">";
privateChannelAction.flatMap(privateChannel -> privateChannel.sendMessage(message));
});
}
private void updateRole(ClanPlayer clanPlayer, DiscordAction action) {
Member member = getMember(clanPlayer);
if (member == null) {
return;
}
if (action == ADD) {
guild.addRoleToMember(member, leaderRole).queue();
} else {
guild.removeRoleFromMember(member, leaderRole).queue();
}
}
private void updatePermissions(@NotNull ClanPlayer clanPlayer, DiscordAction action) {
Clan clan = clanPlayer.getClan();
Member member = getMember(clanPlayer);
if (clan == null || member == null) {
return;
}
Optional<TextChannel> channel = getChannel(clan.getTag());
if (channel.isPresent()) {
TextChannel textChannel = channel.get();
if (action == ADD) {
textChannel.upsertPermissionOverride(member).
setPermissions(Collections.singletonList(VIEW_CHANNEL), Collections.emptyList()).queue();
} else {
textChannel.getManager().removePermissionOverride(member).queue();
}
}
}
enum DiscordAction {
ADD, REMOVE
}
}
@@ -1,16 +1,14 @@
package net.sacredlabyrinth.phaed.simpleclans.hooks.papi;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.clip.placeholderapi.expansion.Relational;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.reflections.Reflections;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -20,9 +18,7 @@ import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.bukkit.ChatColor.*;
public class SimpleClansExpansion extends PlaceholderExpansion implements Relational {
public class SimpleClansExpansion extends PlaceholderExpansion {
private static final Pattern TOP_CLANS_PATTERN = Pattern.compile("(?<strip>^topclans_(?<position>\\d+)_)clan_");
private static final Pattern TOP_PLAYERS_PATTERN = Pattern.compile("(?<strip>^topplayers_(?<position>\\d+)_)");
@@ -72,42 +68,27 @@ public class SimpleClansExpansion extends PlaceholderExpansion implements Relati
return placeholders;
}
private void addPlaceholders(String prefix, Class<?> clazz, List<String> placeholders) {
for (Method method : clazz.getDeclaredMethods()) {
Placeholder[] annotations = method.getAnnotationsByType(Placeholder.class);
for (Placeholder annotation : annotations) {
placeholders.add("%" + prefix + annotation.value() + "%");
//Commented because the list would be very long
//placeholders.add("%simpleclans_topplayers_<number>_" + annotation.value() + "%");
}
}
}
@Override
public boolean canRegister() {
return true;
}
@Override
@Nullable
public String onPlaceholderRequest(Player player1, Player player2, String params) {
if (player1 == null || player2 == null) {
return null;
}
if (params.equalsIgnoreCase("color")) {
ClanPlayer cp1 = clanManager.getClanPlayer(player1);
if (cp1 == null) {
return "";
}
//noinspection ConstantConditions -- getClanPlayer != null == getClan() != null
if (cp1.getClan().isMember(player2)) {
return GREEN.toString();
}
if (cp1.isRival(player2)) {
return RED.toString();
}
if (cp1.isAlly(player2)) {
return AQUA.toString();
}
return "";
}
return null;
}
@Override
public String onRequest(@Nullable OfflinePlayer player, @NotNull String params) {
ClanPlayer cp = null;
if (player != null) {
cp = clanManager.getCreateClanPlayer(player.getUniqueId());
cp = clanManager.getAnyClanPlayer(player.getUniqueId());
}
Clan clan = cp != null ? cp.getClan() : null;
Matcher matcher = TOP_CLANS_PATTERN.matcher(params);
@@ -186,9 +167,8 @@ public class SimpleClansExpansion extends PlaceholderExpansion implements Relati
}
private void registerResolvers() {
Set<Class<? extends PlaceholderResolver>> resolvers =
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.hooks.papi.resolvers",
PlaceholderResolver.class);
Reflections reflections = new Reflections("net.sacredlabyrinth.phaed.simpleclans.hooks.papi.resolvers");
Set<Class<? extends PlaceholderResolver>> resolvers = reflections.getSubTypesOf(PlaceholderResolver.class);
plugin.getLogger().info(String.format("Registering %d placeholder resolvers...", resolvers.size()));
for (Class<? extends PlaceholderResolver> r : resolvers) {
try {
@@ -201,15 +181,4 @@ public class SimpleClansExpansion extends PlaceholderExpansion implements Relati
}
}
private void addPlaceholders(String prefix, Class<?> clazz, List<String> placeholders) {
for (Method method : clazz.getDeclaredMethods()) {
Placeholder[] annotations = method.getAnnotationsByType(Placeholder.class);
for (Placeholder annotation : annotations) {
placeholders.add("%" + prefix + annotation.value() + "%");
//Commented because the list would be very long
//placeholders.add("%simpleclans_topplayers_<number>_" + annotation.value() + "%");
}
}
}
}
@@ -3,7 +3,6 @@ package net.sacredlabyrinth.phaed.simpleclans.hooks.papi.resolvers;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.hooks.papi.PlaceholderResolver;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -11,16 +10,10 @@ import org.jetbrains.annotations.Nullable;
import java.lang.reflect.Method;
import java.util.Map;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
@SuppressWarnings("unused")
public class PlayerColorResolver extends PlaceholderResolver {
private final SettingsManager settings;
public PlayerColorResolver(@NotNull SimpleClans plugin) {
super(plugin);
settings = plugin.getSettingsManager();
}
@Override
@@ -46,26 +39,26 @@ public class PlayerColorResolver extends PlaceholderResolver {
private String getClanChatColor(ClanPlayer player) {
if (player.isLeader()) {
return settings.getColored(CLANCHAT_LEADER_COLOR);
return plugin.getSettingsManager().getClanChatLeaderColor();
}
if (player.isTrusted()) {
return settings.getColored(CLANCHAT_TRUSTED_COLOR);
return plugin.getSettingsManager().getClanChatTrustedColor();
}
if (player.getClan() != null) {
return settings.getColored(CLANCHAT_MEMBER_COLOR);
return plugin.getSettingsManager().getClanChatMemberColor();
}
return "";
}
private String getAllyChatColor(ClanPlayer player) {
if (player.isLeader()) {
return settings.getColored(ALLYCHAT_LEADER_COLOR);
return plugin.getSettingsManager().getAllyChatLeaderColor();
}
if (player.isTrusted()) {
return settings.getColored(ALLYCHAT_TRUSTED_COLOR);
return plugin.getSettingsManager().getAllyChatTrustedColor();
}
if (player.getClan() != null) {
return settings.getColored(ALLYCHAT_MEMBER_COLOR);
return plugin.getSettingsManager().getAllyChatMemberColor();
}
return "";
}
@@ -12,7 +12,7 @@ import java.util.Set;
public interface ProtectionProvider {
void setup() throws LinkageError, Exception;
void setup();
@NotNull
Set<Land> getLandsAt(@NotNull Location location);
@@ -18,16 +18,11 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug;
@SuppressWarnings("unused")
public class GriefPreventionProvider implements ProtectionProvider {
@Override
public void setup() throws NoSuchMethodException {
//noinspection ResultOfMethodCallIgnored
Claim.class.getMethod("getOwnerID");
}
public void setup() {}
@Override
public @NotNull Set<Land> getLandsAt(@NotNull Location location) {
@@ -43,8 +38,6 @@ public class GriefPreventionProvider implements ProtectionProvider {
if (claim == null) {
return null;
}
debug(String.format("id %s name %s uuid %s", claim.getID(), claim.getOwnerName(), claim.getOwnerID()));
return new Land(getIdPrefix() + claim.getID().toString(), Collections.singleton(claim.getOwnerID()));
}
@@ -28,10 +28,14 @@ public class PlotSquared3Provider implements ProtectionProvider {
private Method getPlots;
@Override
public void setup() throws ClassNotFoundException, NoSuchMethodException {
Class.forName("com.intellectualcrafters.plot.object.Location");
Class.forName("com.intellectualcrafters.plot.object.Plot");
getLocation = BukkitUtil.class.getMethod("getLocation", Location.class);
public void setup() {
try {
Class.forName("com.intellectualcrafters.plot.object.Location");
Class.forName("com.intellectualcrafters.plot.object.Plot");
getLocation = BukkitUtil.class.getMethod("getLocation", Location.class);
} catch (NoSuchMethodException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
@Override
@@ -21,9 +21,7 @@ import java.util.stream.Collectors;
public class PlotSquared5Provider implements ProtectionProvider {
@Override
public void setup() throws NoSuchMethodException {
//noinspection ResultOfMethodCallIgnored
BukkitUtil.class.getMethod("getPlot", Location.class);
public void setup() {
}
@Override
@@ -37,7 +35,7 @@ public class PlotSquared5Provider implements ProtectionProvider {
@NotNull
private Land getLand(@NotNull Plot plot) {
return new Land(getIdPrefix() + plot.getId(), plot.getOwners());
return new Land(getIdPrefix() + plot.getId().toString(), plot.getOwners());
}
@Override
@@ -28,12 +28,15 @@ public class WorldGuard6Provider implements ProtectionProvider {
private Method getApplicableRegions;
@Override
public void setup() throws NoSuchMethodException {
public void setup() {
worldGuard = WorldGuardPlugin.inst();
getRegionManager = worldGuard.getClass().getMethod("getRegionManager", World.class);
//noinspection JavaReflectionMemberAccess
getApplicableRegions = RegionManager.class.getMethod("getApplicableRegions", Location.class);
try {
getRegionManager = worldGuard.getClass().getMethod("getRegionManager", World.class);
//noinspection JavaReflectionMemberAccess
getApplicableRegions = RegionManager.class.getMethod("getApplicableRegions", Location.class);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
private @Nullable RegionManager getRegionManager(@Nullable World world) {
@@ -25,7 +25,6 @@ public class WorldGuardProvider implements ProtectionProvider {
private RegionContainer regionContainer;
@Override
public void setup() {
regionContainer = WorldGuard.getInstance().getPlatform().getRegionContainer();
}
@@ -1,291 +1,288 @@
package net.sacredlabyrinth.phaed.simpleclans.language;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.util.*;
import java.util.logging.Level;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.*;
import java.util.function.Predicate;
/**
*
* @author RoinujNosde
*
*/
public class LanguageResource {
private static final ResourceLoader DATA_FOLDER_LOADER = new ResourceLoader(SimpleClans.getInstance().getDataFolder());
private final Locale defaultLocale;
private static List<Locale> availableLocales;
private static final Map<Locale, Integer> TRANSLATION_STATUS = new HashMap<>();
private static final ResourceLoader DATA_FOLDER_LOADER = new ResourceLoader(SimpleClans.getInstance().getDataFolder());
private final Locale defaultLocale;
private static List<Locale> availableLocales;
private static final Map<Locale, Integer> TRANSLATION_STATUS = new HashMap<>();
public LanguageResource() {
this.defaultLocale = SimpleClans.getInstance().getSettingsManager().getLanguage();
}
public LanguageResource() {
this.defaultLocale = SimpleClans.getInstance().getSettingsManager().getLanguage();
}
@Nullable
public String getLang(@NotNull String key, @NotNull Locale locale) {
if (!key.startsWith("acf-core.parameter.") && key.startsWith("acf")) {
return getACFLang(key, locale);
}
try {
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, DATA_FOLDER_LOADER,
new ResourceControl(defaultLocale, false));
return bundle.getString(key);
} catch (MissingResourceException ignored) {
}
if (locale.equals(Locale.ENGLISH)) {
// English is the root messages.properties inside the jar
locale = Locale.ROOT;
}
try {
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale,
SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale));
@Nullable
public String getLang(@NotNull String key, @NotNull Locale locale) {
if (!key.startsWith("acf-core.parameter.") && key.startsWith("acf")) {
return getACFLang(key, locale);
}
try {
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, DATA_FOLDER_LOADER,
new ResourceControl(defaultLocale, false));
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
if (locale.equals(Locale.ENGLISH)) {
// English is the root messages.properties inside the jar
locale = Locale.ROOT;
}
try {
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale,
SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale));
return bundle.getString(key);
} catch (MissingResourceException ignored) {
}
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
return null;
}
return null;
}
@Nullable
private String getACFMinecraftLang(@NotNull String key, @NotNull Locale locale) {
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale, DATA_FOLDER_LOADER,
new ResourceControl(defaultLocale, false));
@Nullable
private String getACFMinecraftLang(@NotNull String key, @NotNull Locale locale) {
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale, DATA_FOLDER_LOADER,
new ResourceControl(defaultLocale, false));
return bundle.getString(key);
} catch (MissingResourceException ignored) {
}
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale,
SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale));
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-minecraft", locale,
SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale));
return bundle.getString(key);
} catch (MissingResourceException ignored) {
}
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
return null;
}
return null;
}
@Nullable
private String getACFLang(@NotNull String key, @NotNull Locale locale) {
if (key.startsWith("acf-minecraft")) {
return getACFMinecraftLang(key, locale);
}
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale, DATA_FOLDER_LOADER,
new ResourceControl(defaultLocale, false));
@Nullable
private String getACFLang(@NotNull String key, @NotNull Locale locale) {
if (key.startsWith("acf-minecraft")) {
return getACFMinecraftLang(key, locale);
}
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale, DATA_FOLDER_LOADER,
new ResourceControl(defaultLocale, false));
return bundle.getString(key);
} catch (MissingResourceException ignored) {
}
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale,
SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale));
try {
ResourceBundle bundle = ResourceBundle.getBundle("acf-core", locale,
SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale));
return bundle.getString(key);
} catch (MissingResourceException ignored) {
}
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
return null;
}
return null;
}
public static int getTranslationStatus(@NotNull Locale locale) {
if (locale.equals(Locale.ENGLISH)) {
return 100;
}
Integer lines = TRANSLATION_STATUS.get(locale);
Integer englishLines = TRANSLATION_STATUS.get(Locale.ENGLISH);
if (lines == null || englishLines == null) {
return -1;
}
public static int getTranslationStatus(@NotNull Locale locale) {
if (locale.equals(Locale.ENGLISH)) {
return 100;
}
Integer lines = TRANSLATION_STATUS.get(locale);
Integer englishLines = TRANSLATION_STATUS.get(Locale.ENGLISH);
if (lines == null || englishLines == null) {
return -1;
}
return Math.round((lines / englishLines.floatValue()) * 100);
}
return Math.round((lines / englishLines.floatValue()) * 100);
}
public static void clearCache() {
ResourceBundle.clearCache(DATA_FOLDER_LOADER);
}
public static void clearCache() {
ResourceBundle.clearCache(DATA_FOLDER_LOADER);
}
public static List<Locale> getAvailableLocales() {
if (availableLocales != null) {
return availableLocales;
}
loadAvailableLocales();
return availableLocales;
}
public static List<Locale> getAvailableLocales() {
if (availableLocales != null) {
return availableLocales;
}
loadAvailableLocales();
return availableLocales;
}
private static void loadAvailableLocales() {
ArrayList<Locale> locales = new ArrayList<>();
private static void loadAvailableLocales() {
ArrayList<Locale> locales = new ArrayList<>();
try {
URI uri = LanguageResource.class.getProtectionDomain().getCodeSource().getLocation().toURI();
FileSystem fileSystem = FileSystems.newFileSystem(URI.create("jar:" + uri.toString()), Collections.emptyMap());
Files.walk(fileSystem.getPath("/")).forEach(p -> {
String name = p.getFileName() == null ? "" : p.getFileName().toString();
if (name.startsWith("messages") && name.endsWith(".properties")) {
Locale locale = getLocaleByFileName(name);
locales.add(locale);
loadTranslationStatus(locale, name);
}
});
fileSystem.close();
} catch (URISyntaxException | IOException e) {
SimpleClans.getInstance().getLogger().log(Level.WARNING, "An error occurred while getting the available languages", e);
}
locales.sort(Comparator.comparing(Locale::toLanguageTag));
availableLocales = locales;
}
Predicate<Path> filter = entry -> {
String path = (entry.getFileName() != null) ? entry.getFileName().toString() : "";
return path.startsWith("messages") && path.endsWith(".properties");
};
private static @NotNull Locale getLocaleByFileName(@NotNull String name) {
Locale locale;
if (name.equalsIgnoreCase("messages.properties")) {
locale = Locale.ENGLISH;
} else {
String[] extensionSplit = name.split(".properties");
String[] split = extensionSplit[0].split("_");
if (split.length == 2) {
locale = new Locale(split[1]);
} else {
locale = new Locale(split[1], split[2]);
}
}
return locale;
}
for (Path filePath : Helper.getPathsIn("/", filter)) {
String fileName = filePath.getFileName().toString();
Locale locale = getLocaleByFileName(fileName);
locales.add(locale);
loadTranslationStatus(locale, fileName);
}
private static void loadTranslationStatus(@NotNull Locale locale, @NotNull String fileName) {
InputStream stream = SimpleClans.getInstance().getClass().getResourceAsStream("/" + fileName);
if (stream == null) return;
locales.sort(Comparator.comparing(Locale::toLanguageTag));
availableLocales = locales;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
int lineCount = 0;
try {
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
if (!line.startsWith("#")) {
lineCount++;
}
}
} catch (IOException ex) {
lineCount = -1;
}
TRANSLATION_STATUS.put(locale, lineCount);
}
private static @NotNull Locale getLocaleByFileName(@NotNull String name) {
Locale locale;
if (name.equalsIgnoreCase("messages.properties")) {
locale = Locale.ENGLISH;
} else {
String[] extensionSplit = name.split(".properties");
String[] split = extensionSplit[0].split("_");
if (split.length == 2) {
locale = new Locale(split[1]);
} else {
locale = new Locale(split[1], split[2]);
}
}
return locale;
}
static class ResourceLoader extends ClassLoader {
private static void loadTranslationStatus(@NotNull Locale locale, @NotNull String fileName) {
InputStream stream = SimpleClans.getInstance().getClass().getResourceAsStream("/" + fileName);
if (stream == null) return;
private final File dataFolder;
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
int lineCount = 0;
try {
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
if (!line.startsWith("#")) {
lineCount++;
}
}
} catch (IOException ex) {
lineCount = -1;
}
TRANSLATION_STATUS.put(locale, lineCount);
}
public ResourceLoader(File dataFolder) {
this.dataFolder = dataFolder;
}
static class ResourceLoader extends ClassLoader {
@Override
public URL getResource(String name) {
File file = new File(dataFolder, name);
if (file.exists()) {
try {
return file.toURI().toURL();
} catch (MalformedURLException ignored) {
}
}
private final File dataFolder;
return null;
}
}
public ResourceLoader(File dataFolder) {
this.dataFolder = dataFolder;
}
static class ResourceControl extends ResourceBundle.Control {
@Override
public URL getResource(String name) {
File file = new File(dataFolder, name);
if (file.exists()) {
try {
return file.toURI().toURL();
} catch (MalformedURLException ignored) {
}
}
private final Locale defaultLocale;
private final boolean defaultAsFallback;
return null;
}
}
public ResourceControl(@NotNull Locale defaultLocale) {
this.defaultLocale = defaultLocale;
this.defaultAsFallback = true;
}
static class ResourceControl extends ResourceBundle.Control {
public ResourceControl(@NotNull Locale defaultLocale, boolean defaultAsFallback) {
this.defaultLocale = defaultLocale;
this.defaultAsFallback = defaultAsFallback;
}
private final Locale defaultLocale;
private final boolean defaultAsFallback;
@Override
public List<String> getFormats(String baseName) {
if (baseName == null) {
throw new NullPointerException();
}
public ResourceControl(@NotNull Locale defaultLocale) {
this.defaultLocale = defaultLocale;
this.defaultAsFallback = true;
}
return Collections.singletonList("java.properties");
}
public ResourceControl(@NotNull Locale defaultLocale, boolean defaultAsFallback) {
this.defaultLocale = defaultLocale;
this.defaultAsFallback = defaultAsFallback;
}
@Override
public List<Locale> getCandidateLocales(String baseName, Locale locale) {
List<Locale> candidateLocales = new ArrayList<>(super.getCandidateLocales(baseName, locale));
if (!defaultAsFallback && candidateLocales.size() != 1) {
candidateLocales.remove(Locale.ROOT);
}
if (baseName.startsWith("acf") && !candidateLocales.contains(Locale.ENGLISH) && defaultAsFallback) {
candidateLocales.add(Locale.ENGLISH);
}
return candidateLocales;
}
@Override
public List<String> getFormats(String baseName) {
if (baseName == null) {
throw new NullPointerException();
}
@Override
@Nullable
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader,
boolean reload) throws IOException {
String bundleName = toBundleName(baseName, locale);
return Collections.singletonList("java.properties");
}
ResourceBundle bundle;
if (format.equals("java.properties")) {
@Override
public List<Locale> getCandidateLocales(String baseName, Locale locale) {
List<Locale> candidateLocales = new ArrayList<>(super.getCandidateLocales(baseName, locale));
if (!defaultAsFallback && candidateLocales.size() != 1) {
candidateLocales.remove(Locale.ROOT);
}
if (baseName.startsWith("acf") && !candidateLocales.contains(Locale.ENGLISH) && defaultAsFallback) {
candidateLocales.add(Locale.ENGLISH);
}
return candidateLocales;
}
String resourceName = toResourceName(bundleName, "properties");
@Override
@Nullable
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader,
boolean reload) throws IOException {
String bundleName = toBundleName(baseName, locale);
URL url = loader.getResource(resourceName);
if (url == null) {
return null;
}
ResourceBundle bundle;
if (format.equals("java.properties")) {
URLConnection connection = url.openConnection();
if (reload) {
connection.setUseCaches(false);
}
InputStreamReader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
bundle = new PropertyResourceBundle(reader);
reader.close();
} else {
throw new IllegalArgumentException("unknown format: " + format);
}
String resourceName = toResourceName(bundleName, "properties");
URL url = loader.getResource(resourceName);
if (url == null) {
return null;
}
URLConnection connection = url.openConnection();
if (reload) {
connection.setUseCaches(false);
}
InputStreamReader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
bundle = new PropertyResourceBundle(reader);
reader.close();
} else {
throw new IllegalArgumentException("unknown format: " + format);
}
return bundle;
}
return bundle;
}
@Override
@Nullable
public Locale getFallbackLocale(String baseName, Locale locale) {
if (!defaultAsFallback) {
return null;
}
Locale root = baseName.startsWith("acf") ? Locale.ENGLISH : Locale.ROOT;
if (!locale.equals(defaultLocale) && !locale.equals(root)) {
return defaultLocale;
}
if (locale.equals(defaultLocale) && !defaultLocale.equals(root)) {
return root;
}
@Override
@Nullable
public Locale getFallbackLocale(String baseName, Locale locale) {
if (!defaultAsFallback) {
return null;
}
Locale root = baseName.startsWith("acf") ? Locale.ENGLISH : Locale.ROOT;
if (!locale.equals(defaultLocale) && !locale.equals(root)) {
return defaultLocale;
}
if (locale.equals(defaultLocale) && !defaultLocale.equals(root)) {
return root;
}
return null;
}
}
return null;
}
}
}
@@ -16,8 +16,6 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
public class FriendlyFire implements Listener {
private final SimpleClans plugin;
@@ -31,7 +29,7 @@ public class FriendlyFire implements Listener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEntityDamage(EntityDamageEvent event) {
if (!(event.getEntity() instanceof Player) ||
plugin.getSettingsManager().getStringList(BLACKLISTED_WORLDS).contains(event.getEntity().getWorld().getName())) {
plugin.getSettingsManager().isBlacklistedWorld(event.getEntity().getWorld())) {
return;
}
Player victim = (Player) event.getEntity();
@@ -55,14 +53,14 @@ public class FriendlyFire implements Listener {
@Nullable Clan victimClan,
@Nullable Clan attackerClan) {
if (vcp == null || victimClan == null || attackerClan == null) {
if (plugin.getSettingsManager().is(SAFE_CIVILIANS)) {
if (plugin.getSettingsManager().getSafeCivilians()) {
ChatBlock.sendMessageKey(attacker, "cannot.attack.civilians");
event.setCancelled(true);
}
return;
}
if (vcp.isFriendlyFire() || victimClan.isFriendlyFire() || plugin.getSettingsManager().is(GLOBAL_FRIENDLY_FIRE)) {
if (vcp.isFriendlyFire() || victimClan.isFriendlyFire() || plugin.getSettingsManager().isGlobalff()) {
return;
}
@@ -29,7 +29,6 @@ import org.jetbrains.annotations.Nullable;
import java.util.Set;
import static net.sacredlabyrinth.phaed.simpleclans.managers.ProtectionManager.Action.*;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
public class LandProtection implements Listener {
@@ -44,7 +43,7 @@ public class LandProtection implements Listener {
protectionManager = plugin.getProtectionManager();
clanManager = plugin.getClanManager();
settingsManager = plugin.getSettingsManager();
priority = EventPriority.valueOf(settingsManager.getString(WAR_LISTENERS_PRIORITY));
priority = settingsManager.getWarListenerPriority();
}
public void registerListeners() {
@@ -66,11 +65,11 @@ public class LandProtection implements Listener {
Player player = provider.getPlayer(event);
if (player == null) return;
Clan clan = clanManager.getClanByPlayerUniqueId(player.getUniqueId());
if ((clan == null || !clan.isLeader(player)) && settingsManager.is(LAND_CREATION_ONLY_LEADERS)) {
if ((clan == null || !clan.isLeader(player)) && settingsManager.isOnlyLeadersCanCreateLands()) {
cancelWithMessage(player, event, "only.leaders.can.create.lands");
return;
}
if (settingsManager.is(LAND_CREATION_ONLY_ONE_PER_CLAN)) {
if (settingsManager.isOnlyOneLandPerClan()) {
if (clan == null) {
cancelWithMessage(player, event, "only.clan.members.can.create.lands");
return;
@@ -100,11 +99,7 @@ public class LandProtection implements Listener {
return;
}
BlockBreakEvent blockBreakEvent = (BlockBreakEvent) event;
Block block = blockBreakEvent.getBlock();
if (settingsManager.getIgnoredList(BREAK).contains(block.getType().name())) {
return;
}
if (protectionManager.can(BREAK, block.getLocation(), blockBreakEvent.getPlayer())) {
if (protectionManager.can(BREAK, blockBreakEvent.getBlock().getLocation(), blockBreakEvent.getPlayer())) {
blockBreakEvent.setCancelled(false);
}
}, plugin, false);
@@ -193,11 +188,7 @@ public class LandProtection implements Listener {
@EventHandler(priority = EventPriority.LOWEST)
public void onBreak(BlockBreakEvent event) {
Block block = event.getBlock();
if (settingsManager.getIgnoredList(BREAK).contains(block.getType().name())) {
return;
}
if (protectionManager.can(BREAK, block.getLocation(), event.getPlayer())) {
if (protectionManager.can(BREAK, event.getBlock().getLocation(), event.getPlayer())) {
event.setCancelled(true);
}
}
@@ -19,7 +19,6 @@ import java.time.LocalDateTime;
import java.util.logging.Level;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
/**
* @author phaed
@@ -36,7 +35,7 @@ public class PlayerDeath implements Listener {
public void onEntityDeath(PlayerDeathEvent event) {
SimpleClans.debug("A player died");
Player victim = event.getEntity();
if (plugin.getSettingsManager().getStringList(BLACKLISTED_WORLDS).contains(victim.getLocation().getWorld().getName())
if (plugin.getSettingsManager().isBlacklistedWorld(victim.getLocation().getWorld())
|| victim.hasMetadata("NPC")) {
SimpleClans.debug("Blacklisted world");
return;
@@ -48,7 +47,7 @@ public class PlayerDeath implements Listener {
ClanPlayer victimCp = plugin.getClanManager().getCreateClanPlayer(victim.getUniqueId());
ClanPlayer attackerCp = plugin.getClanManager().getCreateClanPlayer(attacker.getUniqueId());
classifyKill(victimCp, attackerCp);
addKill(victimCp, attackerCp);
giveMoneyReward(victimCp, attackerCp);
// record death for victim
@@ -72,7 +71,7 @@ public class PlayerDeath implements Listener {
war.increaseCasualties(victimClan);
}
private void classifyKill(@NotNull ClanPlayer victim, @NotNull ClanPlayer attacker) {
private void addKill(@NotNull ClanPlayer victim, @NotNull ClanPlayer attacker) {
Clan victimClan = victim.getClan();
Clan attackerClan = attacker.getClan();
if (victimClan == null || attackerClan == null || !victimClan.isVerified() || !attackerClan.isVerified()) {
@@ -87,7 +86,7 @@ public class PlayerDeath implements Listener {
}
private void giveMoneyReward(@NotNull ClanPlayer victim, @NotNull ClanPlayer attacker) {
if (!plugin.getSettingsManager().is(ECONOMY_MONEY_PER_KILL)) {
if (!plugin.getSettingsManager().isMoneyPerKill()) {
return;
}
Clan attackerClan = attacker.getClan();
@@ -116,7 +115,7 @@ public class PlayerDeath implements Listener {
return true;
}
if (SimpleClans.getInstance().getSettingsManager().is(KILL_WEIGHTS_DENY_SAME_IP_KILLS)) {
if (SimpleClans.getInstance().getSettingsManager().isDenySameIPKills()) {
InetSocketAddress attackerAddress = attacker.getAddress();
InetSocketAddress victimAddress = victim.getAddress();
if (attackerAddress != null && victimAddress != null) {
@@ -145,20 +144,18 @@ public class PlayerDeath implements Listener {
return;
}
final Kill kill = new Kill(attacker, victim, LocalDateTime.now());
if (plugin.getSettingsManager().is(KDR_ENABLE_KILL_DELAY) && plugin.getClanManager().isKillBeforeDelay(kill)) {
if (plugin.getSettingsManager().isDelayBetweenKills() && plugin.getClanManager().isKillBeforeDelay(kill)) {
return;
}
if (plugin.getSettingsManager().is(KDR_ENABLE_MAX_KILLS)) {
if (plugin.getSettingsManager().isMaxKillsPerVictim()) {
plugin.getStorageManager().getKillsPerPlayer(attacker.getName(), data -> {
final int max = plugin.getSettingsManager().getInt(KDR_MAX_KILLS_PER_VICTIM);
final int max = plugin.getSettingsManager().getMaxKillsPerVictim();
Integer kills = data.get(kill.getVictim().getName());
if (kills != null) {
if (kills < max) {
saveKill(kill, type);
}
} else {
saveKill(kill, type);
}
});
return;
@@ -176,7 +173,7 @@ public class PlayerDeath implements Listener {
private double calculateReward(@NotNull ClanPlayer attacker, @NotNull ClanPlayer victim) {
double reward;
double multiplier = plugin.getSettingsManager().getDouble(ECONOMY_MONEY_PER_KILL_KDR_MULTIPLIER);
double multiplier = plugin.getSettingsManager().getKDRMultipliesPerKill();
double kdr = attacker.getKDR() * multiplier;
Clan attackerClan = attacker.getClan();
Clan victimClan = victim.getClan();
@@ -11,9 +11,6 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.BLACKLISTED_WORLDS;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PVP_ONLY_WHILE_IN_WAR;
public class PvPOnlyInWar implements Listener {
private final SimpleClans plugin;
@@ -25,7 +22,7 @@ public class PvPOnlyInWar implements Listener {
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
public void onEntityDamage(EntityDamageEvent event) {
if (!(event.getEntity() instanceof Player) ||
plugin.getSettingsManager().getStringList(BLACKLISTED_WORLDS).contains(event.getEntity().getWorld().getName())) {
plugin.getSettingsManager().isBlacklistedWorld(event.getEntity().getWorld())) {
return;
}
Player victim = (Player) event.getEntity();
@@ -38,7 +35,7 @@ public class PvPOnlyInWar implements Listener {
Clan attackerClan = plugin.getClanManager().getClanByPlayerUniqueId(attacker.getUniqueId());
Clan victimClan = plugin.getClanManager().getClanByPlayerUniqueId(victim.getUniqueId());
if (plugin.getSettingsManager().is(PVP_ONLY_WHILE_IN_WAR)) {
if (plugin.getSettingsManager().isPvpOnlywhileInWar()) {
process(event, attacker, victim, attackerClan, victimClan);
}
}
@@ -21,8 +21,6 @@ import java.util.Objects;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.CLAN;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel.NONE;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
/**
* @author phaed
@@ -42,12 +40,12 @@ public class SCPlayerListener implements Listener {
String[] split = event.getMessage().substring(1).split(" ");
String command = split[0];
if (settingsManager.is(CLANCHAT_TAG_BASED)) {
if (settingsManager.isTagBasedClanChat()) {
Clan clan = plugin.getClanManager().getClan(command);
if (clan == null || !clan.isMember(event.getPlayer())) {
return;
}
String replaced = event.getMessage().replaceFirst(command, settingsManager.getString(COMMANDS_CLAN_CHAT));
String replaced = event.getMessage().replaceFirst(command, settingsManager.getCommandClanChat());
event.setMessage(replaced);
}
}
@@ -56,7 +54,7 @@ public class SCPlayerListener implements Listener {
public void onPlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player.getUniqueId());
if (cp == null || settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getLocation().getWorld().getName())) {
if (cp == null || settingsManager.isBlacklistedWorld(player.getLocation().getWorld())) {
return;
}
@@ -68,7 +66,13 @@ public class SCPlayerListener implements Listener {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions", player));
return;
}
plugin.getChatManager().processChat(SPIGOT, channel, cp, event.getMessage());
switch (channel) {
case CLAN:
plugin.getClanManager().processClanChat(player, event.getMessage());
break;
case ALLY:
plugin.getClanManager().processAllyChat(player, event.getMessage());
}
event.setCancelled(true);
}
}
@@ -76,13 +80,14 @@ public class SCPlayerListener implements Listener {
@EventHandler(priority = EventPriority.HIGH)
public void handleChatTags(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getWorld().getName())) {
if (settingsManager.isBlacklistedWorld(player.getWorld())) {
return;
}
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
String tagLabel = cp != null && cp.isTagEnabled() ? cp.getTagLabel() : null;
if (settingsManager.is(CHAT_COMPATIBILITY_MODE) && settingsManager.is(DISPLAY_CHAT_TAGS)) {
if (settingsManager.isCompatMode() && settingsManager.isChatTags()) {
if (tagLabel != null) {
if (player.getDisplayName().contains("{clan}")) {
player.setDisplayName(player.getDisplayName().replace("{clan}", tagLabel));
@@ -105,39 +110,39 @@ public class SCPlayerListener implements Listener {
public void onPlayerJoin(PlayerJoinEvent event) {
final Player player = event.getPlayer();
if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getLocation().getWorld().getName())) {
if (SimpleClans.getInstance().getSettingsManager().isBlacklistedWorld(player.getLocation().getWorld())) {
return;
}
ClanPlayer cp;
if (settingsManager.is(PERFORMANCE_USE_BUNGEECORD)) {
cp = plugin.getClanManager().getClanPlayerJoinEvent(player);
if (SimpleClans.getInstance().getSettingsManager().getUseBungeeCord()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayerJoinEvent(player);
} else {
cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
cp = SimpleClans.getInstance().getClanManager().getAnyClanPlayer(player.getUniqueId());
}
plugin.getStorageManager().updatePlayerNameAsync(player);
plugin.getClanManager().updateLastSeen(player);
plugin.getClanManager().updateDisplayName(player);
SimpleClans.getInstance().getStorageManager().updatePlayerNameAsync(player);
SimpleClans.getInstance().getClanManager().updateLastSeen(player);
SimpleClans.getInstance().getClanManager().updateDisplayName(player);
if (cp == null) {
return;
}
cp.setName(player.getName());
plugin.getPermissionsManager().addPlayerPermissions(cp);
SimpleClans.getInstance().getPermissionsManager().addPlayerPermissions(cp);
if (settingsManager.is(BB_SHOW_ON_LOGIN) && cp.isBbEnabled() && cp.getClan() != null) {
cp.getClan().displayBb(player, settingsManager.getInt(BB_LOGIN_SIZE));
if (settingsManager.isBbShowOnLogin() && cp.isBbEnabled() && cp.getClan() != null) {
cp.getClan().displayBb(player, settingsManager.getBbLoginSize());
}
plugin.getPermissionsManager().addClanPermissions(cp);
SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerRespawn(PlayerRespawnEvent event) {
Player player = event.getPlayer();
if (!settingsManager.is(TELEPORT_HOME_ON_SPAWN) || settingsManager.getStringList(BLACKLISTED_WORLDS).contains(player.getWorld().getName())) {
if (!settingsManager.isTeleportOnSpawn() || settingsManager.isBlacklistedWorld(player.getWorld())) {
return;
}
@@ -158,23 +163,23 @@ public class SCPlayerListener implements Listener {
Bukkit.getScheduler().runTask(plugin, () -> {
if (clan.getOnlineMembers().isEmpty()) {
plugin.getProtectionManager().setWarExpirationTime(cp.getClan(),
settingsManager.getMinutes(WAR_DISCONNECT_EXPIRATION_TIME));
settingsManager.getWarDisconnectExpirationTime());
}
});
}
if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(event.getPlayer().getLocation().getWorld().getName())) {
if (settingsManager.isBlacklistedWorld(event.getPlayer().getLocation().getWorld())) {
return;
}
plugin.getPermissionsManager().removeClanPlayerPermissions(cp);
SimpleClans.getInstance().getPermissionsManager().removeClanPlayerPermissions(cp);
plugin.getClanManager().updateLastSeen(event.getPlayer());
plugin.getRequestManager().endPendingRequest(event.getPlayer().getName());
}
@EventHandler
public void onPlayerKick(PlayerKickEvent event) {
if (settingsManager.getStringList(BLACKLISTED_WORLDS).contains(event.getPlayer().getLocation().getWorld().getName())) {
if (settingsManager.isBlacklistedWorld(event.getPlayer().getLocation().getWorld())) {
return;
}
@@ -2,8 +2,6 @@ package net.sacredlabyrinth.phaed.simpleclans.listeners;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import org.bukkit.entity.AnimalTamer;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
@@ -16,23 +14,19 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TAMABLE_MOBS_SHARING;
public class TamableMobsSharing implements Listener {
private final SettingsManager settings;
private final ClanManager clanManager;
private final SimpleClans plugin;
public TamableMobsSharing(@NotNull SimpleClans plugin) {
settings = plugin.getSettingsManager();
clanManager = plugin.getClanManager();
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEntityDamage(EntityDamageByEntityEvent event) {
if (settings.is(TAMABLE_MOBS_SHARING)) {
if (plugin.getSettingsManager().isTamableMobsSharing()) {
if (event.getEntity() instanceof Wolf && event.getDamager() instanceof Player) {
ClanPlayer cp = clanManager.getAnyClanPlayer(event.getDamager().getUniqueId());
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(event.getDamager().getUniqueId());
if (cp == null || cp.getClan() == null) {
return;
}
@@ -48,9 +42,9 @@ public class TamableMobsSharing implements Listener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onEntityTarget(EntityTargetLivingEntityEvent event) {
if (settings.is(TAMABLE_MOBS_SHARING)) {
if (plugin.getSettingsManager().isTamableMobsSharing()) {
if (event.getEntity() instanceof Tameable && event.getTarget() instanceof Player) {
ClanPlayer cp = clanManager.getAnyClanPlayer(event.getTarget().getUniqueId());
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(event.getTarget().getUniqueId());
if (cp == null || cp.getClan() == null) {
return;
}
@@ -69,9 +63,9 @@ public class TamableMobsSharing implements Listener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerInteract(PlayerInteractEntityEvent event) {
if (settings.is(TAMABLE_MOBS_SHARING) && event.getRightClicked() instanceof Tameable) {
if (plugin.getSettingsManager().isTamableMobsSharing() && event.getRightClicked() instanceof Tameable) {
Player player = event.getPlayer();
ClanPlayer cp = clanManager.getAnyClanPlayer(player.getUniqueId());
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
if (cp == null || cp.getClan() == null) {
return;
}
@@ -1,89 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.loggers;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.EconomyResponse;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* Class responsible for logging bank related transactions.
*
* @since 2.15.3
*/
public class BankLog {
private final DecimalFormat decimalFormat = new DecimalFormat("##.##");
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd - HH:mm");
private final CommandSender sender;
private final Clan clan;
private final EconomyResponse economyResponse;
private final BankLogger.Operation operation;
private final ClanBalanceUpdateEvent.Cause cause;
private final double amount;
public BankLog(@Nullable CommandSender sender, @NotNull Clan clan, @NotNull EconomyResponse economyResponse,
@NotNull BankLogger.Operation operation, ClanBalanceUpdateEvent.Cause cause, double amount) {
this.sender = sender;
this.clan = clan;
this.economyResponse = economyResponse;
this.operation = operation;
this.cause = cause;
this.amount = amount;
}
public static List<String> getHeader() {
return Arrays.asList("Date", "Sender", "Clan Name", "Response", "Operation", "Cause", "Sender Balance", "Amount", "Clan Balance");
}
public List<String> getValues() {
double senderMoney = (sender instanceof Player) ? SimpleClans.getInstance().getPermissionsManager().playerGetMoney((Player) sender) : 0;
List<String> values = new ArrayList<>();
values.add(dateFormat.format(new Date()));
values.add(sender != null ? sender.getName() : "API");
values.add(clan.getName());
values.add(economyResponse.name());
values.add(operation.name());
values.add(cause.name());
values.add(decimalFormat.format(senderMoney));
values.add(decimalFormat.format(amount));
values.add(decimalFormat.format(clan.getBalance()));
return values;
}
public CommandSender getSender() {
return sender;
}
public Clan getClan() {
return clan;
}
public EconomyResponse getEconomyResponse() {
return economyResponse;
}
public BankLogger.Operation getOperation() {
return operation;
}
public ClanBalanceUpdateEvent.Cause getCause() {
return cause;
}
public double getAmount() {
return amount;
}
}
@@ -1,16 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.loggers;
/**
* The core interface for all bank loggers,
* which may log all economy actions,
* with its defining ({@link Operation})
*
* @since 2.15.3
*/
public interface BankLogger {
void log(BankLog log);
enum Operation {
DEPOSIT, WITHDRAW, SET
}
}
@@ -1,116 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.loggers;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.*;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.DEBUG;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ECONOMY_BANK_LOG_ENABLED;
/**
* Logs all bank actions to one CSV file per day.
* <p>
* It accepts {@link BankLog} as a record
* and uses the format from {@link CSVFormatter}
* <p>
* Typical usage:
* <pre>{@code
* CSVBankLogger bankLogger = new CSVBankLogger(plugin);
* bankLogger.log(new BankLog(sender, clan, economyResponse, operation, cause, amount));
* }</pre>
*
* @since 2.15.3
*/
public class CSVBankLogger implements BankLogger {
private final Logger logger = Logger.getLogger(getClass().getSimpleName());
private final SimpleClans plugin;
static final int FILE_SIZE = (int) (100 * Math.pow(10, 6));
static final int FILE_COUNT = 1;
public CSVBankLogger(SimpleClans plugin) {
this.plugin = plugin;
if (!plugin.getSettingsManager().is(ECONOMY_BANK_LOG_ENABLED)) {
return;
}
try {
FileHandler fh = new FileHandler(getFilePath(), FILE_SIZE, FILE_COUNT, true);
fh.setFormatter(new CSVFormatter());
fh.setLevel(Level.INFO);
fh.setEncoding("UTF-8");
logger.addHandler(fh);
if (!plugin.getSettingsManager().is(DEBUG)) {
logger.setUseParentHandlers(false);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void log(BankLog log) {
if (!plugin.getSettingsManager().is(ECONOMY_BANK_LOG_ENABLED)) {
return;
}
logger.log(Level.INFO, toCSV(log));
}
@SuppressWarnings("ResultOfMethodCallIgnored")
@NotNull
String getFilePath() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String folderPath = plugin.getDataFolder().getPath() + File.separator + "logs" + File.separator + "bank";
String filePath = folderPath + File.separator + dateFormat.format(new Date()) + ".csv";
File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs();
}
File file = new File(filePath);
if (!file.exists()) {
try {
file.createNewFile();
makeHeader(file);
} catch (IOException e) {
e.printStackTrace();
}
}
return filePath;
}
private void makeHeader(File file) throws FileNotFoundException {
try (PrintWriter pw = new PrintWriter(file)) {
pw.println(String.join(",", BankLog.getHeader()));
}
}
private String toCSV(BankLog log) {
return String.join(",", log.getValues());
}
@NotNull
public Logger getLogger() {
return logger;
}
static class CSVFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return record.getMessage() + "\n";
}
}
}
@@ -1,150 +0,0 @@
package net.sacredlabyrinth.phaed.simpleclans.managers;
import github.scarsz.discordsrv.DiscordSRV;
import github.scarsz.discordsrv.api.Subscribe;
import github.scarsz.discordsrv.api.events.DiscordReadyEvent;
import me.clip.placeholderapi.PlaceholderAPI;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.chat.ChatHandler;
import net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage;
import net.sacredlabyrinth.phaed.simpleclans.hooks.DiscordHook;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.logging.Level;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.ClanPlayer.Channel;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source;
import static net.sacredlabyrinth.phaed.simpleclans.chat.SCMessage.Source.SPIGOT;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.Bukkit.getPluginManager;
public final class ChatManager {
private final SimpleClans plugin;
private DiscordHook discordHook;
private final Set<ChatHandler> handlers = new HashSet<>();
public ChatManager(SimpleClans plugin) {
this.plugin = plugin;
registerHandlers();
if (getPluginManager().getPlugin("DiscordSRV") != null && plugin.getSettingsManager().is(DISCORDCHAT_ENABLE)) {
DiscordSRV.api.subscribe(this);
}
}
@Subscribe
public void registerDiscord(DiscordReadyEvent event) {
discordHook = new DiscordHook(plugin);
DiscordSRV.api.subscribe(discordHook);
getPluginManager().registerEvents(discordHook, plugin);
}
@Nullable
public DiscordHook getDiscordHook() {
return discordHook;
}
public void processChat(@NotNull Source source, @NotNull Channel channel,
@NotNull ClanPlayer clanPlayer, String message) {
Clan clan = Objects.requireNonNull(clanPlayer.getClan(), "Clan cannot be null");
List<ClanPlayer> receivers = new ArrayList<>();
switch (channel) {
case ALLY:
if (!plugin.getSettingsManager().is(ALLYCHAT_ENABLE)) {
return;
}
receivers.addAll(getOnlineAllyMembers(clan).stream().filter(allymember ->
!allymember.isMutedAlly()).collect(Collectors.toList()));
receivers.addAll(clan.getOnlineMembers().stream().filter(allymember ->
!allymember.isMutedAlly()).collect(Collectors.toList()));
break;
case CLAN:
if (!plugin.getSettingsManager().is(CLANCHAT_ENABLE)) {
return;
}
receivers.addAll(clan.getOnlineMembers().stream().
filter(member -> !member.isMuted()).
collect(Collectors.toList()));
}
SCMessage scMessage = new SCMessage(source, channel, clanPlayer, message, receivers);
for (ChatHandler ch : handlers) {
if (ch.canHandle(source)) {
ch.sendMessage(scMessage);
}
}
}
public String parseChatFormat(String format, SCMessage message) {
return parseChatFormat(format, message, new HashMap<>());
}
public String parseChatFormat(String format, SCMessage message, Map<String, String> placeholders) {
SettingsManager sm = plugin.getSettingsManager();
ClanPlayer sender = message.getSender();
Channel channel = message.getChannel();
String leaderColor = sm.getColored(ConfigField.valueOf(message.getChannel() + "CHAT_LEADER_COLOR"));
String memberColor = sm.getColored(ConfigField.valueOf(message.getChannel() + "CHAT_MEMBER_COLOR"));
String trustedColor = sm.getColored(ConfigField.valueOf(message.getChannel() + "CHAT_TRUSTED_COLOR"));
String rank = sender.getRankId().isEmpty() ? null : ChatUtils.parseColors(sender.getRankDisplayName());
ConfigField configField = ConfigField.valueOf(String.format("%sCHAT_RANK",
message.getSource() == SPIGOT ? message.getChannel() : message.getSource()));
String rankFormat = (rank != null) ? sm.getColored(configField).replace("%rank%", rank) : "";
if (placeholders != null) {
for (Map.Entry<String, String> e : placeholders.entrySet()) {
format = format.replace("%" + e.getKey() + "%", e.getValue());
}
}
String parsedFormat = ChatUtils.parseColors(format)
.replace("%clan%", Objects.requireNonNull(sender.getClan()).getColorTag())
.replace("%nick-color%",
(sender.isLeader() ? leaderColor : sender.isTrusted() ? trustedColor : memberColor))
.replace("%player%", sender.getName())
.replace("%rank%", rankFormat)
.replace("%message%", message.getContent());
return getPluginManager().getPlugin("PlaceholderAPI") != null ?
PlaceholderAPI.setPlaceholders(Bukkit.getOfflinePlayer(message.getSender().getUniqueId()), parsedFormat)
: parsedFormat;
}
private void registerHandlers() {
Set<Class<? extends ChatHandler>> chatHandlers =
Helper.getSubTypesOf("net.sacredlabyrinth.phaed.simpleclans.chat.handlers", ChatHandler.class);
plugin.getLogger().log(Level.INFO, "Registering {0} chat handlers...", chatHandlers.size());
for (Class<? extends ChatHandler> handler : chatHandlers) {
try {
handlers.add(handler.getConstructor().newInstance());
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) {
plugin.getLogger().log(Level.SEVERE, "Error while trying to register {0} handler: " +
ex.getMessage(), handler.getSimpleName());
}
}
}
private List<ClanPlayer> getOnlineAllyMembers(Clan clan) {
return clan.getAllAllyMembers().stream().
filter(allyPlayer -> allyPlayer.toPlayer() != null).
collect(Collectors.toList());
}
}
@@ -2,9 +2,9 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import com.cryptomorin.xseries.XMaterial;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.events.ChatEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.CreateClanEvent;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatUtils;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.Bukkit;
@@ -15,6 +15,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -25,8 +26,6 @@ import java.time.temporal.ChronoUnit;
import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.RED;
/**
* @author phaed
@@ -73,7 +72,7 @@ public final class ClanManager {
}
//cleaning
final int delay = plugin.getSettingsManager().getInt(KDR_DELAY_BETWEEN_KILLS);
final int delay = plugin.getSettingsManager().getDelayBetweenKills();
long timePassed = oldKill.getTime().until(LocalDateTime.now(), ChronoUnit.MINUTES);
if (timePassed >= delay) {
iterator.remove();
@@ -98,7 +97,7 @@ public final class ClanManager {
for (Kill oldKill : list) {
if (oldKill.getVictim().equals(kill.getVictim())) {
final int delay = plugin.getSettingsManager().getInt(KDR_DELAY_BETWEEN_KILLS);
final int delay = plugin.getSettingsManager().getDelayBetweenKills();
long timePassed = oldKill.getTime().until(kill.getTime(), ChronoUnit.MINUTES);
if (timePassed < delay) {
return true;
@@ -131,7 +130,7 @@ public final class ClanManager {
public void createClan(Player player, String colorTag, String name) {
ClanPlayer cp = getCreateClanPlayer(player.getUniqueId());
boolean verified = !plugin.getSettingsManager().is(REQUIRE_VERIFICATION) || plugin.getPermissionsManager().has(player, "simpleclans.mod.verify");
boolean verified = !plugin.getSettingsManager().isRequireVerification() || plugin.getPermissionsManager().has(player, "simpleclans.mod.verify");
Clan clan = new Clan(colorTag, name, verified);
clan.addPlayerToClan(cp);
@@ -246,7 +245,7 @@ public final class ClanManager {
* Gets the ClanPlayer data object if a player is currently in a clan, null
* if he's not in a clan
*/
public @Nullable ClanPlayer getClanPlayer(@NotNull OfflinePlayer player) {
public @Nullable ClanPlayer getClanPlayer(OfflinePlayer player) {
return getClanPlayer(player.getUniqueId());
}
@@ -254,7 +253,7 @@ public final class ClanManager {
* Gets the ClanPlayer data object if a player is currently in a clan, null
* if he's not in a clan
*/
public @Nullable ClanPlayer getClanPlayer(@NotNull Player player) {
public @Nullable ClanPlayer getClanPlayer(Player player) {
return getClanPlayer((OfflinePlayer) player);
}
@@ -312,7 +311,6 @@ public final class ClanManager {
* not currently in one, their data file persists and can be accessed. their
* clan will be null though.
*/
@Nullable
public ClanPlayer getAnyClanPlayer(UUID playerUniqueId) {
return clanPlayers.get(playerUniqueId.toString());
@@ -321,11 +319,6 @@ public final class ClanManager {
@SuppressWarnings("deprecation")
@Nullable
public ClanPlayer getAnyClanPlayer(String playerName) {
for (ClanPlayer cp : getAllClanPlayers()) {
if (cp.getName().equals(playerName)) {
return cp;
}
}
return getAnyClanPlayer(Bukkit.getOfflinePlayer(playerName).getUniqueId());
}
@@ -370,10 +363,10 @@ public final class ClanManager {
* @param msg the message
*/
public void serverAnnounce(String msg) {
if (plugin.getSettingsManager().is(DISABLE_MESSAGES)) {
if (plugin.getSettingsManager().isDisableMessages()) {
return;
}
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
Collection<Player> players = Helper.getOnlinePlayers();
for (Player player : players) {
ChatBlock.sendMessage(player, ChatColor.DARK_GRAY + "* " + ChatColor.AQUA + msg);
@@ -388,7 +381,7 @@ public final class ClanManager {
public void updateDisplayName(@Nullable Player player) {
// do not update displayname if in compat mode
if (plugin.getSettingsManager().is(CHAT_COMPATIBILITY_MODE)) {
if (plugin.getSettingsManager().isCompatMode()) {
return;
}
@@ -396,10 +389,10 @@ public final class ClanManager {
return;
}
if (plugin.getSettingsManager().is(DISPLAY_CHAT_TAGS)) {
if (plugin.getSettingsManager().isChatTags()) {
String prefix = plugin.getPermissionsManager().getPrefix(player);
//String suffix = plugin.getPermissionsManager().getSuffix(player);
String lastColor = plugin.getSettingsManager().is(COLOR_CODE_FROM_PREFIX_FOR_NAME) ? ChatUtils.getLastColorCode(prefix) : ChatColor.WHITE + "";
String lastColor = plugin.getSettingsManager().isUseColorCodeFromPrefix() ? Helper.getLastColorCode(prefix) : ChatColor.WHITE + "";
String fullName = player.getName();
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
@@ -519,7 +512,7 @@ public final class ClanManager {
} else if (h.getType().equals(XMaterial.AIR.parseMaterial())) {
out += ChatColor.BLACK + lang("armor.h", player);
} else {
out += RED + lang("armor.h", player);
out += ChatColor.RED + lang("armor.h", player);
}
}
ItemStack c = inv.getChestplate();
@@ -538,7 +531,7 @@ public final class ClanManager {
} else if (c.getType().equals(XMaterial.AIR.parseMaterial())) {
out += ChatColor.BLACK + lang("armor.c", player);
} else {
out += RED + lang("armor.c", player);
out += ChatColor.RED + lang("armor.c", player);
}
}
ItemStack l = inv.getLeggings();
@@ -576,12 +569,12 @@ public final class ClanManager {
} else if (b.getType().equals(XMaterial.AIR.parseMaterial())) {
out += ChatColor.BLACK + lang("armor.B", player);
} else {
out += RED + lang("armor.B", player);
out += ChatColor.RED + lang("armor.B", player);
}
}
if (out.length() == 0) {
out = lang("none", player);
out = ChatColor.BLACK + "None";
}
return out;
@@ -591,7 +584,7 @@ public final class ClanManager {
* Returns a formatted string detailing the players weapons
*/
public String getWeaponString(PlayerInventory inv) {
String headColor = plugin.getSettingsManager().getColored(PAGE_HEADINGS_COLOR);
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String out = "";
@@ -652,7 +645,7 @@ public final class ClanManager {
}
if (out.length() == 0) {
out = lang("none", player);
out = ChatColor.BLACK + "None";
}
return out;
@@ -740,7 +733,7 @@ public final class ClanManager {
count += getFoodPoints(inv, XMaterial.COOKED_BEEF, 8, 12.8);
if (count == 0) {
return lang("none", player);
return ChatColor.BLACK + lang("none", player);
} else {
return ((int) count) + "" + ChatColor.GOLD + "p";
}
@@ -757,7 +750,7 @@ public final class ClanManager {
} else if (health >= 8) {
out.append(ChatColor.GOLD);
} else {
out.append(RED);
out.append(ChatColor.RED);
}
for (int i = 0; i < health; i++) {
@@ -778,7 +771,7 @@ public final class ClanManager {
} else if (health >= 8) {
out.append(ChatColor.GOLD);
} else {
out.append(RED);
out.append(ChatColor.RED);
}
for (int i = 0; i < health; i++) {
@@ -875,8 +868,8 @@ public final class ClanManager {
*/
public void sortClansBySize(List<Clan> clans) {
clans.sort((c1, c2) -> {
Integer o1 = c1.getMembers().size();
Integer o2 = c2.getMembers().size();
Integer o1 = c1.getAllMembers().size();
Integer o2 = c2.getAllMembers().size();
return o2.compareTo(o1);
});
@@ -908,11 +901,11 @@ public final class ClanManager {
public long getMinutesBeforeRejoin(@NotNull ClanPlayer cp, @NotNull Clan clan) {
SettingsManager settings = plugin.getSettingsManager();
if (settings.is(ENABLE_REJOIN_COOLDOWN)) {
if (settings.isRejoinCooldown()) {
Long resign = cp.getResignTime(clan.getTag());
if (resign != null) {
long timePassed = Instant.ofEpochMilli(resign).until(Instant.now(), ChronoUnit.MINUTES);
int cooldown = settings.getInt(REJOIN_COOLDOWN);
int cooldown = settings.getRejoinCooldown();
if (timePassed < cooldown) {
return cooldown - timePassed;
}
@@ -925,18 +918,18 @@ public final class ClanManager {
* Purchase member fee set
*/
public boolean purchaseMemberFeeSet(Player player) {
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_MEMBER_FEE_SET)) {
if (!plugin.getSettingsManager().isePurchaseMemberFeeSet()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_MEMBER_FEE_SET_PRICE);
double price = plugin.getSettingsManager().geteMemberFeeSetPrice();
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -948,18 +941,18 @@ public final class ClanManager {
* Purchase clan creation
*/
public boolean purchaseCreation(Player player) {
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_CREATE)) {
if (!plugin.getSettingsManager().isePurchaseCreation()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_CREATION_PRICE);
double price = plugin.getSettingsManager().getCreationPrice();
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -971,18 +964,18 @@ public final class ClanManager {
* Purchase invite
*/
public boolean purchaseInvite(Player player) {
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_INVITE)) {
if (!plugin.getSettingsManager().isePurchaseInvite()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_INVITE_PRICE);
double price = plugin.getSettingsManager().getInvitePrice();
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -994,18 +987,18 @@ public final class ClanManager {
* Purchase Home Teleport
*/
public boolean purchaseHomeTeleport(Player player) {
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_HOME_TELEPORT)) {
if (!plugin.getSettingsManager().isePurchaseHomeTeleport()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_HOME_TELEPORT_PRICE);
double price = plugin.getSettingsManager().getHomeTeleportPrice();
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -1017,18 +1010,18 @@ public final class ClanManager {
* Purchase Home Teleport Set
*/
public boolean purchaseHomeTeleportSet(Player player) {
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_HOME_TELEPORT_SET)) {
if (!plugin.getSettingsManager().isePurchaseHomeTeleportSet()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_HOME_TELEPORT_SET_PRICE);
double price = plugin.getSettingsManager().getHomeTeleportPriceSet();
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -1040,18 +1033,18 @@ public final class ClanManager {
* Purchase Reset Kdr
*/
public boolean purchaseResetKdr(Player player) {
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_RESET_KDR)) {
if (!plugin.getSettingsManager().isePurchaseResetKdr()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_RESET_KDR_PRICE);
double price = plugin.getSettingsManager().geteResetKdr();
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -1064,27 +1057,24 @@ public final class ClanManager {
*/
public boolean purchaseHomeRegroup(Player player) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
return false;
}
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_HOME_REGROUP)) {
if (!plugin.getSettingsManager().isePurchaseHomeRegroup()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_REGROUP_PRICE);
Clan clan = Objects.requireNonNull(cp.getClan(), "Clan cannot be null");
if (!plugin.getSettingsManager().is(ECONOMY_UNIQUE_TAX_ON_REGROUP)) {
double price = plugin.getSettingsManager().getHomeRegroupPrice();
Clan clan = Objects.requireNonNull(cp.getClan());
if (!plugin.getSettingsManager().iseUniqueTaxOnRegroup()) {
price = price * VanishUtils.getNonVanished(player, clan).size();
}
if (plugin.getSettingsManager().is(ECONOMY_ISSUER_PAYS_REGROUP)) {
if (plugin.getSettingsManager().iseIssuerPaysRegroup()) {
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -1110,18 +1100,18 @@ public final class ClanManager {
* Purchase clan verification
*/
public boolean purchaseVerification(Player player) {
if (!plugin.getSettingsManager().is(ECONOMY_PURCHASE_CLAN_VERIFY)) {
if (!plugin.getSettingsManager().isePurchaseVerification()) {
return true;
}
double price = plugin.getSettingsManager().getDouble(ECONOMY_VERIFICATION_PRICE);
double price = plugin.getSettingsManager().getVerificationPrice();
if (plugin.getPermissionsManager().hasEconomy()) {
if (plugin.getPermissionsManager().playerHasMoney(player, price)) {
plugin.getPermissionsManager().playerChargeMoney(player, price);
player.sendMessage(RED + MessageFormat.format(lang("account.has.been.debited", player), price));
player.sendMessage(ChatColor.RED + MessageFormat.format(lang("account.has.been.debited", player), price));
} else {
player.sendMessage(RED + lang("not.sufficient.money", player));
player.sendMessage(ChatColor.RED + lang("not.sufficient.money", player));
return false;
}
}
@@ -1129,6 +1119,183 @@ public final class ClanManager {
return true;
}
/**
* Processes a clan chat command
*/
public void processClanChat(Player player, String tag, String msg) {
Clan clan = plugin.getClanManager().getClan(tag);
if (clan == null || !clan.isMember(player)) {
return;
}
processClanChat(player, msg);
}
/**
* Processes a clan chat command
*/
public void processClanChat(Player player, final String msg) {
final ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
return;
}
String[] split = msg.split(" ");
if (split.length == 0) {
return;
}
String command = split[0];
if (command.equals(lang("join", player))) {
cp.setChannel(ClanPlayer.Channel.CLAN);
plugin.getStorageManager().updateClanPlayer(cp);
ChatBlock.sendMessage(player, lang("joined.clan.chat", player));
} else if (command.equals(lang("leave", player))) {
cp.setChannel(ClanPlayer.Channel.NONE);
plugin.getStorageManager().updateClanPlayer(cp);
ChatBlock.sendMessage(player, lang("left.clan.chat", player));
} else if (command.equals(lang("mute", player))) {
if (!cp.isMuted()) {
cp.setMuted(true);
ChatBlock.sendMessage(player, lang("muted.clan.chat", player));
} else {
cp.setMuted(false);
ChatBlock.sendMessage(player, lang("unmuted.clan.chat", player));
}
} else {
final List<ClanPlayer> receivers = new LinkedList<>();
for (ClanPlayer p : cp.getClan().getOnlineMembers()) {
if (!p.isMuted()) {
receivers.add(p);
}
}
new BukkitRunnable() {
@Override
public void run() {
ChatEvent ce = new ChatEvent(msg, cp, receivers, ChatEvent.Type.CLAN);
Bukkit.getServer().getPluginManager().callEvent(ce);
if (ce.isCancelled()) {
return;
}
String message = Helper.formatClanChat(cp, ce.getMessage(), ce.getPlaceholders());
String eyeMessage = Helper.formatSpyClanChat(cp, message);
plugin.getServer().getConsoleSender().sendMessage(eyeMessage);
for (ClanPlayer p : ce.getReceivers()) {
ChatBlock.sendMessage(p.toPlayer(), message);
}
sendToAllSeeing(eyeMessage, ce.getReceivers());
}
}.runTask(plugin);
}
}
public void sendToAllSeeing(String msg, List<ClanPlayer> cps) {
Collection<Player> players = Helper.getOnlinePlayers();
for (Player player : players) {
if (plugin.getPermissionsManager().has(player, "simpleclans.admin.all-seeing-eye")) {
boolean alreadySent = false;
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null && cp.isMuted()) {
continue;
}
for (ClanPlayer cpp : cps) {
if (cpp.getName().equalsIgnoreCase(player.getName())) {
alreadySent = true;
}
}
if (!alreadySent) {
ChatBlock.sendMessage(player, msg);
}
}
}
}
/**
* Processes a ally chat command
*/
public void processAllyChat(Player player, final String msg) {
final ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
return;
}
String[] split = msg.split(" ");
if (split.length == 0) {
return;
}
String command = split[0];
if (command.equals(lang("join", player))) {
cp.setChannel(ClanPlayer.Channel.ALLY);
plugin.getStorageManager().updateClanPlayer(cp);
ChatBlock.sendMessage(player, lang("joined.ally.chat", player));
} else if (command.equals(lang("leave", player))) {
cp.setChannel(ClanPlayer.Channel.NONE);
plugin.getStorageManager().updateClanPlayer(cp);
ChatBlock.sendMessage(player, lang("left.ally.chat", player));
} else if (command.equals(lang("mute", player))) {
if (!cp.isMutedAlly()) {
cp.setMutedAlly(true);
ChatBlock.sendMessage(player, lang("muted.ally.chat", player));
} else {
cp.setMutedAlly(false);
ChatBlock.sendMessage(player, lang("unmuted.ally.chat", player));
}
} else {
final List<ClanPlayer> receivers = new LinkedList<>();
Set<ClanPlayer> allies = cp.getClan().getAllAllyMembers();
allies.addAll(cp.getClan().getMembers());
for (ClanPlayer ally : allies) {
if (ally.isMutedAlly()) {
continue;
}
if (player.getUniqueId().equals(ally.getUniqueId())) {
continue;
}
receivers.add(ally);
}
new BukkitRunnable() {
@Override
public void run() {
ChatEvent ce = new ChatEvent(msg, cp, receivers, ChatEvent.Type.ALLY);
Bukkit.getServer().getPluginManager().callEvent(ce);
if (ce.isCancelled()) {
return;
}
String message = Helper.formatAllyChat(cp, ce.getMessage(), ce.getPlaceholders());
plugin.getLogger().info(message);
Player self = cp.toPlayer();
ChatBlock.sendMessage(self, message);
for (ClanPlayer p : ce.getReceivers()) {
ChatBlock.sendMessage(p.toPlayer(), message);
}
}
}.runTask(plugin);
}
}
/**
* Processes a global chat command
*/
@@ -4,20 +4,21 @@ import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.jetbrains.annotations.Nullable;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.ENABLE_AUTO_GROUPS;
/**
* @author phaed
@@ -65,6 +66,7 @@ public final class PermissionsManager {
* Loads the permissions for each clan from the config
*/
public void loadPermissions() {
SimpleClans.getInstance().getSettingsManager().load();
permissions.clear();
for (Clan clan : plugin.getClanManager().getClans()) {
permissions.put(clan.getTag(), SimpleClans.getInstance().getConfig().getStringList("permissions." + clan.getTag()));
@@ -80,6 +82,8 @@ public final class PermissionsManager {
SimpleClans.getInstance().getSettingsManager().getConfig().set("permissions." + clan.getTag(), getPermissions(clan));
}
}
SimpleClans.getInstance().getSettingsManager().load();
SimpleClans.getInstance().getSettingsManager().save();
}
/**
@@ -114,7 +118,7 @@ public final class PermissionsManager {
for (String perm : getPermissions(clan)) {
permAttaches.get(player).setPermission(perm, true);
}
if (plugin.getSettingsManager().is(ENABLE_AUTO_GROUPS)) {
if (plugin.getSettingsManager().isAutoGroupGroupName()) {
permAttaches.get(player).setPermission("group." + clan.getTag(), true);
}
player.recalculatePermissions();
@@ -159,20 +163,20 @@ public final class PermissionsManager {
public Map<Player, PermissionAttachment> getPermAttaches() {
return permAttaches;
}
/**
* Charge a player some money
*
*/
*/
@Deprecated
public boolean playerChargeMoney(String player, double money) {
return economy.withdrawPlayer(player, money).transactionSuccess();
}
/**
* Charge a player some money
*
*/
*/
public boolean playerChargeMoney(OfflinePlayer player, double money) {
return economy.withdrawPlayer(player, money).transactionSuccess();
}
@@ -235,22 +239,20 @@ public final class PermissionsManager {
* @param player the player
* @param perm the permission
* @return whether he has the permission
*
* @deprecated use {@link PermissionsManager#has(Player, RankPermission, boolean)} or {@link PermissionsManager#has(Player, String)}
*/
public boolean has(@Nullable String world, OfflinePlayer player, String perm) {
if (player != null && permission != null) {
return permission.playerHas(world, player, perm);
}
return false;
}
if (player != null && permission != null) {
return permission.playerHas(world, player, perm);
}
return false;
}
/**
* Check if a player has permissions
*
* @param player the player
* @param perm the permission
* @param perm the permission
* @return whether he has the permission
*/
public boolean has(Player player, String perm) {
@@ -268,32 +270,30 @@ public final class PermissionsManager {
SimpleClans.debug(String.format("Permission %s is %s for %s", perm, hasPermission, player.getName()));
return hasPermission;
}
/**
* Checks if the player has the rank permission or the permission level, and the equivalent Bukkit permission
*
*
* @param player the player
* @param permission the rank permission
* @param notify notify the player if they don't have permission
*
* @deprecated use {@link PermissionsManager#has(Player, RankPermission, boolean)} or {@link PermissionsManager#has(Player, String)}
*/
@Deprecated
public boolean has(Player player, RankPermission permission, PermissionLevel level, boolean notify) {
if (player == null || permission == null) {
return false;
}
}
ClanPlayer clanPlayer = plugin.getClanManager().getClanPlayer(player);
if (clanPlayer == null) {
return false;
}
}
boolean hasBukkitPermission = has(player, permission.getBukkitPermission());
if (!hasBukkitPermission) {
return false;
}
}
boolean hasLevel = false;
if (level != null) {
switch (level) {
@@ -304,8 +304,8 @@ public final class PermissionsManager {
hasLevel = clanPlayer.isTrusted();
break;
}
}
}
boolean hasRankPermission = false;
String rankName = clanPlayer.getRankId();
Clan clan = clanPlayer.getClan();
@@ -313,21 +313,23 @@ public final class PermissionsManager {
if (clan.hasRank(rankName)) {
//noinspection ConstantConditions
hasRankPermission = clan.getRank(rankName).getPermissions().contains(permission.toString());
} else if (!rankName.isEmpty()) {
clanPlayer.setRank(null);
}
} else {
if (rankName != null && !rankName.isEmpty()) {
clanPlayer.setRank(null);
}
}
if (notify && !hasLevel && !hasRankPermission) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("you.must.be.0.or.have.the.permission.1.to.use.this", player),
level == PermissionLevel.LEADER ? lang("leader", player) : lang("trusted", player), permission.toString()));
}
}
return hasLevel || hasRankPermission;
}
/**
* Checks if the player has the rank permission or the permission level, and the equivalent Bukkit permission
*
*
* @param player the player
* @param permission the rank permission
* @param notify notify the player if they don't have permission
@@ -335,24 +337,24 @@ public final class PermissionsManager {
public boolean has(Player player, RankPermission permission, boolean notify) {
if (player == null || permission == null) {
return false;
}
}
ClanPlayer clanPlayer = plugin.getClanManager().getClanPlayer(player);
if (clanPlayer == null) {
if (notify) {
player.sendMessage(ChatColor.RED + lang("not.a.member.of.any.clan", player));
}
return false;
}
}
boolean hasBukkitPermission = has(player, permission.getBukkitPermission());
if (!hasBukkitPermission) {
if (notify) {
ChatBlock.sendMessage(player,ChatColor.RED + lang("insufficient.permissions", player));
}
return false;
}
}
boolean hasLevel = false;
switch (permission.getPermissionLevel()) {
case LEADER:
@@ -361,8 +363,8 @@ public final class PermissionsManager {
case TRUSTED:
hasLevel = clanPlayer.isTrusted();
break;
}
}
boolean hasRankPermission = false;
String rankName = clanPlayer.getRankId();
Clan clan = clanPlayer.getClan();
@@ -371,15 +373,17 @@ public final class PermissionsManager {
if (rank != null) {
hasRankPermission = rank.getPermissions().contains(permission.toString());
}
} else if (!rankName.isEmpty()) {
clanPlayer.setRank(null);
}
} else {
if (rankName != null && !rankName.isEmpty()) {
clanPlayer.setRank(null);
}
}
if (notify && !hasLevel && !hasRankPermission) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("you.must.be.0.or.have.the.permission.1.to.use.this",player),
permission.getPermissionLevel() == PermissionLevel.LEADER ? lang("leader",player) : lang("trusted",player), permission.toString()));
}
}
return hasLevel || hasRankPermission;
}
@@ -388,7 +392,7 @@ public final class PermissionsManager {
*
*/
public void addClanPermissions(ClanPlayer cp) {
if (!plugin.getSettingsManager().is(ENABLE_AUTO_GROUPS)) {
if (!plugin.getSettingsManager().isEnableAutoGroups()) {
return;
}
@@ -434,7 +438,7 @@ public final class PermissionsManager {
*
*/
public void removeClanPermissions(ClanPlayer cp) {
if (!plugin.getSettingsManager().is(ENABLE_AUTO_GROUPS)) {
if (!plugin.getSettingsManager().isEnableAutoGroups()) {
return;
}
@@ -20,9 +20,7 @@ import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.debug;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
public class ProtectionManager {
@@ -39,7 +37,7 @@ public class ProtectionManager {
settingsManager = plugin.getSettingsManager();
clanManager = plugin.getClanManager();
logger = plugin.getLogger();
if (!settingsManager.is(ENABLE_WAR) && !settingsManager.is(LAND_SHARING)) {
if (!settingsManager.isWarEnabled() && !settingsManager.isLandSharing()) {
return;
}
//running on next tick, so all plugins are already loaded
@@ -49,7 +47,7 @@ public class ProtectionManager {
public void registerListeners() {
landProtection = new LandProtection(plugin);
if (!settingsManager.is(ENABLE_WAR) && !settingsManager.is(LAND_SHARING)) {
if (!settingsManager.isWarEnabled() && !settingsManager.isLandSharing()) {
return;
}
landProtection.registerListeners();
@@ -81,9 +79,7 @@ public class ProtectionManager {
}
public boolean isOwner(@NotNull OfflinePlayer player, @NotNull Location location) {
debug(String.format("isOwner: player %s %s -> %s", player.getName(), player.getUniqueId(), location));
for (Land land : getLandsAt(location)) {
debug(String.format("land -> id %s - owners %s", land.getId(), land.getOwners()));
if (land.getOwners().contains(player.getUniqueId())) {
return true;
}
@@ -105,10 +101,8 @@ public class ProtectionManager {
}
public boolean can(@NotNull Action action, @NotNull Location location, @NotNull Player player, @Nullable Player other) {
debug(String.format("Action %s, Player %s (%s), Other Player %s", action, player, player.getUniqueId(), other));
for (Land land : getLandsAt(location)) {
for (UUID owner : land.getOwners()) {
debug(String.valueOf(owner));
if (owner == null) {
continue;
}
@@ -120,12 +114,10 @@ public class ProtectionManager {
}
if (isWarringAndAllowed(action, owner, involved) ||
isSameClanAndAllowed(action, owner, involved, land.getId())) {
debug("Allowed action");
return true;
}
}
}
debug("Denied action");
return false;
}
@@ -146,7 +138,7 @@ public class ProtectionManager {
requestClan.addWarringClan(requester, targetClan);
targetClan.addWarringClan(requester, requestClan);
wars.put(war, scheduleTask(war, settingsManager.getMinutes(WAR_NORMAL_EXPIRATION_TIME)));
wars.put(war, scheduleTask(war, settingsManager.getWarNormalExpirationTime()));
return true;
}
@@ -204,7 +196,7 @@ public class ProtectionManager {
}
private void clearWars() {
if (!settingsManager.is(ENABLE_WAR)) {
if (!settingsManager.isWarEnabled()) {
return;
}
for (Clan clan : clanManager.getClans()) {
@@ -215,7 +207,7 @@ public class ProtectionManager {
}
private boolean isSameClanAndAllowed(Action action, UUID owner, Player involved, String landId) {
if (!settingsManager.is(LAND_SHARING)) {
if (!settingsManager.isLandSharing()) {
return false;
}
ClanPlayer cp = clanManager.getCreateClanPlayer(owner);
@@ -227,7 +219,7 @@ public class ProtectionManager {
}
private boolean isWarringAndAllowed(@NotNull Action action, @NotNull UUID owner, @NotNull Player involved) {
if (!settingsManager.isActionAllowedInWar(action) || !settingsManager.is(ENABLE_WAR)) {
if (!settingsManager.isActionAllowedInWar(action) || !settingsManager.isWarEnabled()) {
return false;
}
Clan ownerClan = clanManager.getClanByPlayerUniqueId(owner);
@@ -239,7 +231,7 @@ public class ProtectionManager {
}
private void registerProviders() {
for (String className : settingsManager.getStringList(LAND_PROTECTION_PROVIDERS)) {
for (String className : settingsManager.getProtectionProviders()) {
Object instance = null;
try {
Class<?> clazz = getProviderClass(className);
@@ -258,25 +250,25 @@ public class ProtectionManager {
}
}
public void registerProvider(@NotNull ProtectionProvider provider) {
private void registerProvider(ProtectionProvider provider) {
String requiredPlugin = provider.getRequiredPluginName();
String providerName = provider.getClass().getSimpleName();
if (requiredPlugin != null && Bukkit.getPluginManager().getPlugin(requiredPlugin) == null) {
debug(String.format("Required plugin %s for the provider %s was not found!", requiredPlugin, providerName));
logger.warning(String.format("Required plugin %s for the provider %s was not found!",
requiredPlugin, providerName));
return;
}
try {
provider.setup();
} catch (LinkageError | Exception throwable) {
logger.log(Level.WARNING, String.format("Error registering provider %s", providerName));
if (settingsManager.is(DEBUG)) {
if (settingsManager.isDebugging()) {
throwable.printStackTrace();
}
return;
}
providers.add(provider);
landProtection.registerCreateLandEvent(provider, provider.getCreateLandEvent());
logger.info(String.format("Registered %s successfully", providerName));
}
@NotNull
@@ -17,7 +17,6 @@ import java.text.MessageFormat;
import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.REQUEST_FREQUENCY;
/**
* @author phaed
@@ -417,7 +416,7 @@ public final class RequestManager {
ask(req);
req.incrementAskCount();
}
}}.runTaskTimerAsynchronously(plugin, 0, plugin.getSettingsManager().getSeconds(REQUEST_FREQUENCY));
}}.runTaskTimerAsynchronously(plugin, 0, plugin.getSettingsManager().getRequestFreqencySecs() * 20L);
}
/**
File diff suppressed because it is too large. Load diff
@@ -3,7 +3,6 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import com.google.common.base.Charsets;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import net.sacredlabyrinth.phaed.simpleclans.loggers.BankLogger;
import net.sacredlabyrinth.phaed.simpleclans.storage.DBCore;
import net.sacredlabyrinth.phaed.simpleclans.storage.MySQLCore;
import net.sacredlabyrinth.phaed.simpleclans.storage.SQLiteCore;
@@ -27,7 +26,6 @@ import java.util.Date;
import java.util.logging.Level;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
/**
* @author phaed
@@ -78,9 +76,8 @@ public final class StorageManager {
* Initiates the db
*/
public void initiateDB() {
SettingsManager settings = plugin.getSettingsManager();
if (settings.is(MYSQL_ENABLE)) {
core = new MySQLCore(settings.getString(MYSQL_HOST), settings.getString(MYSQL_DATABASE), settings.getInt(MYSQL_PORT), settings.getString(MYSQL_USERNAME), settings.getString(MYSQL_PASSWORD));
if (plugin.getSettingsManager().isUseMysql()) {
core = new MySQLCore(plugin.getSettingsManager().getHost(), plugin.getSettingsManager().getDatabase(), plugin.getSettingsManager().getPort(), plugin.getSettingsManager().getUsername(), plugin.getSettingsManager().getPassword());
if (core.checkConnection()) {
plugin.getLogger().info(lang("mysql.connection.successful"));
@@ -153,7 +150,7 @@ public final class StorageManager {
core.execute(query);
}
} else {
plugin.getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("mysql.connection.failed"));
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("mysql.connection.failed"));
}
} else {
core = new SQLiteCore(plugin.getDataFolder().getPath());
@@ -230,7 +227,7 @@ public final class StorageManager {
core.execute(query);
}
} else {
plugin.getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("sqlite.connection.failed"));
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("sqlite.connection.failed"));
}
}
}
@@ -310,12 +307,12 @@ public final class StorageManager {
continue;
}
if (clan.isVerified()) {
int purgeClan = plugin.getSettingsManager().getInt(PURGE_INACTIVE_CLAN_DAYS);
int purgeClan = plugin.getSettingsManager().getPurgeClan();
if (clan.getInactiveDays() > purgeClan && purgeClan > 0) {
purge.add(clan);
}
} else {
int purgeUnverified = plugin.getSettingsManager().getInt(PURGE_UNVERIFIED_CLAN_DAYS);
int purgeUnverified = plugin.getSettingsManager().getPurgeUnverified();
if (clan.getInactiveDays() > purgeUnverified && purgeUnverified > 0) {
purge.add(clan);
}
@@ -330,18 +327,14 @@ public final class StorageManager {
}
private void purgeClanPlayers(List<ClanPlayer> cps) {
int purgePlayers = plugin.getSettingsManager().getInt(PURGE_INACTIVE_PLAYER_DAYS);
int purgePlayers = plugin.getSettingsManager().getPurgePlayers();
if (purgePlayers < 1) {
return;
}
List<ClanPlayer> purge = new ArrayList<>();
for (ClanPlayer cp : cps) {
//let the clan be purged first
if (cp.isLeader() && cp.getClan() != null) {
continue;
}
if (cp.getInactiveDays() > purgePlayers) {
if (cp.getInactiveDays() > purgePlayers && !cp.isLeader()) {
purge.add(cp);
}
}
@@ -406,7 +399,7 @@ public final class StorageManager {
clan.setPackedBb(packed_bb);
clan.setFounded(founded);
clan.setLastUsed(last_used);
clan.setBalance(null, ClanBalanceUpdateEvent.Cause.LOADING, BankLogger.Operation.SET, balance);
clan.setBalance(null, ClanBalanceUpdateEvent.Cause.LOADING, balance);
clan.setMemberFee(feeValue);
clan.setMemberFeeEnabled(feeEnabled);
clan.setRanks(Helper.ranksFromJson(ranks));
@@ -480,7 +473,7 @@ public final class StorageManager {
clan.setPackedBb(packed_bb);
clan.setFounded(founded);
clan.setLastUsed(last_used);
clan.setBalance(null, ClanBalanceUpdateEvent.Cause.LOADING, BankLogger.Operation.SET, balance);
clan.setBalance(null, ClanBalanceUpdateEvent.Cause.LOADING, balance);
clan.setMemberFee(feeValue);
clan.setMemberFeeEnabled(feeEnabled);
clan.setRanks(Helper.ranksFromJson(ranks));
@@ -562,7 +555,7 @@ public final class StorageManager {
cp.setLocale(locale);
if (!tag.isEmpty()) {
Clan clan = plugin.getClanManager().getClan(tag);
Clan clan = SimpleClans.getInstance().getClanManager().getClan(tag);
if (clan != null) {
cp.setClan(clan);
@@ -645,7 +638,7 @@ public final class StorageManager {
if (!tag.isEmpty()) {
Clan clanDB = retrieveOneClan(tag);
Clan clan = plugin.getClanManager().getClan(tag);
Clan clan = SimpleClans.getInstance().getClanManager().getClan(tag);
if (clan != null && clanDB != null) {
Clan clanReSync = SimpleClans.getInstance().getClanManager().getClan(tag);
@@ -660,13 +653,13 @@ public final class StorageManager {
clanReSync.setPackedBb(clanDB.getPackedBb());
clanReSync.setFounded(clanDB.getFounded());
clanReSync.setLastUsed(clanDB.getLastUsed());
clanReSync.setBalance(null, ClanBalanceUpdateEvent.Cause.LOADING, BankLogger.Operation.SET, clanDB.getBalance());
clanReSync.setBalance(null, ClanBalanceUpdateEvent.Cause.LOADING, clanDB.getBalance());
cp.setClan(clanReSync);
} else {
plugin.getClanManager().importClan(clanDB);
clanDB.validateWarring();
Clan newClan = plugin.getClanManager().getClan(clanDB.getTag());
cp.setClan(newClan);
Clan newclan = SimpleClans.getInstance().getClanManager().getClan(clanDB.getTag());
cp.setClan(newclan);
}
}
@@ -771,7 +764,7 @@ public final class StorageManager {
if (updateLastUsed) {
clan.updateLastUsed();
}
if (plugin.getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) {
if (plugin.getSettingsManager().isSavePeriodically()) {
modifiedClans.add(clan);
return;
}
@@ -849,7 +842,7 @@ public final class StorageManager {
*/
public void updateClanPlayer(ClanPlayer cp) {
cp.updateLastSeen();
if (plugin.getSettingsManager().is(PERFORMANCE_SAVE_PERIODICALLY)) {
if (plugin.getSettingsManager().isSavePeriodically()) {
modifiedClanPlayers.add(cp);
return;
}
@@ -1117,7 +1110,7 @@ public final class StorageManager {
core.execute("ALTER TABLE sc_players ADD COLUMN `ally_kills` int(11) DEFAULT NULL;");
}
if (plugin.getSettingsManager().is(MYSQL_ENABLE)) {
if (plugin.getSettingsManager().isUseMysql()) {
core.execute("ALTER TABLE sc_clans MODIFY color_tag VARCHAR(255);");
}
@@ -1132,7 +1125,7 @@ public final class StorageManager {
query = "ALTER TABLE sc_kills ADD victim_uuid VARCHAR( 255 ) DEFAULT NULL;";
core.execute(query);
}
boolean useMysql = plugin.getSettingsManager().is(MYSQL_ENABLE);
boolean useMysql = plugin.getSettingsManager().isUseMysql();
if (!core.existsColumn("sc_players", "uuid")) {
query = "ALTER TABLE sc_players ADD uuid VARCHAR( 255 ) DEFAULT NULL;";
core.execute(query);
@@ -3,6 +3,7 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import io.papermc.lib.PaperLib;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.utils.VanishUtils;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
@@ -19,9 +20,6 @@ import java.util.Random;
import java.util.logging.Level;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.*;
import static org.bukkit.ChatColor.AQUA;
import static org.bukkit.ChatColor.RED;
public final class TeleportManager {
private final SimpleClans plugin;
@@ -40,11 +38,11 @@ public final class TeleportManager {
* @param clanName the Clan name
*/
public void addPlayer(Player player, Location destination, String clanName) {
int secs = SimpleClans.getInstance().getSettingsManager().getInt(CLAN_TELEPORT_DELAY);
int secs = SimpleClans.getInstance().getSettingsManager().getWaitSecs();
waitingPlayers.put(player.getUniqueId().toString(), new TeleportState(player, destination, clanName));
if (secs > 0) {
ChatBlock.sendMessage(player, AQUA
ChatBlock.sendMessage(player, ChatColor.AQUA
+ MessageFormat.format(lang("waiting.for.teleport.stand.still.for.0.seconds", player), secs));
}
}
@@ -54,7 +52,7 @@ public final class TeleportManager {
int x = loc.getBlockX();
int z = loc.getBlockZ();
if (plugin.getSettingsManager().is(TELEPORT_BLOCKS)) {
if (plugin.getSettingsManager().isTeleportBlocks()) {
player.sendBlockChange(new Location(loc.getWorld(), x + 1, loc.getBlockY() - 1, z + 1),
Material.GLASS, (byte) 0);
player.sendBlockChange(new Location(loc.getWorld(), x - 1, loc.getBlockY() - 1, z - 1),
@@ -102,10 +100,10 @@ public final class TeleportManager {
if (plugin.getPermissionsManager().has(player, "simpleclans.mod.keep-items")) {
return;
}
List<Material> itemsList = plugin.getSettingsManager().getItemList();
List<Material> itemsList = plugin.getSettingsManager().getItemsList();
PlayerInventory inv = player.getInventory();
boolean dropOnHome = plugin.getSettingsManager().is(DROP_ITEMS_ON_CLAN_HOME);
boolean keepOnHome = plugin.getSettingsManager().is(KEEP_ITEMS_ON_CLAN_HOME);
boolean dropOnHome = plugin.getSettingsManager().isDropOnHome();
boolean keepOnHome = plugin.getSettingsManager().isKeepOnHome();
ItemStack[] contents = inv.getContents();
for (ItemStack item : contents) {
if (item == null) {
@@ -131,7 +129,7 @@ public final class TeleportManager {
state.setProcessing(true);
if (!Helper.isSameBlock(player.getLocation(), state.getLocation())) {
ChatBlock.sendMessage(player, RED + lang("you.moved.teleport.cancelled", player));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.moved.teleport.cancelled", player));
iter.remove();
continue;
}
@@ -139,7 +137,7 @@ public final class TeleportManager {
teleport(state);
iter.remove();
} else {
ChatBlock.sendMessage(player, AQUA + "" + state.getCounter());
ChatBlock.sendMessage(player, ChatColor.AQUA + "" + state.getCounter());
}
state.setProcessing(false);
@@ -162,7 +160,7 @@ public final class TeleportManager {
public void teleportToHome(@NotNull Player player, @NotNull Location destination, @NotNull String clanName) {
PaperLib.teleportAsync(player, destination, PlayerTeleportEvent.TeleportCause.COMMAND).thenAccept(result -> {
if (result) {
ChatBlock.sendMessage(player, AQUA + lang("now.at.homebase", player, clanName));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("now.at.homebase", player, clanName));
} else {
plugin.getLogger().log(Level.WARNING, "An error occurred while teleporting a player");
}
@@ -1,13 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.storage;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.scheduler.BukkitRunnable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
@@ -15,7 +9,6 @@ import java.util.logging.Logger;
*/
public interface DBCore
{
/**
* @return connection
*/
@@ -78,24 +71,4 @@ public interface DBCore
* @return
*/
Boolean existsColumn(String tabell, String colum);
default void executeAsync(String query, String sqlType) {
new BukkitRunnable() {
@Override
public void run() {
try {
if (getConnection() != null) {
getConnection().createStatement().executeUpdate(query);
}
}
catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet")) {
Logger.getLogger("SimpleClans")
.log(Level.SEVERE, String.format("Error at SQL %s query: %s", sqlType, query), ex);
}
}
}
}.runTaskAsynchronously(SimpleClans.getInstance());
}
}
@@ -1,27 +1,26 @@
package net.sacredlabyrinth.phaed.simpleclans.storage;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Logger;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_USE_THREADS;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.threads.ThreadUpdateSQL;
/**
* @author cc_madelg
*/
public class MySQLCore implements DBCore {
private final Logger log;
private Logger log;
private Connection connection;
private final String host;
private final String username;
private final String password;
private final String database;
private final int port;
private String host;
private String username;
private String password;
private String database;
private int port;
/**
* @param host
@@ -111,8 +110,9 @@ public class MySQLCore implements DBCore {
*/
@Override
public void insert(String query) {
if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) {
executeAsync(query, "INSERT");
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
Thread th = new Thread(new ThreadUpdateSQL(getConnection(), query, "INSERT"));
th.start();
} else {
try {
getConnection().createStatement().executeUpdate(query);
@@ -132,8 +132,9 @@ public class MySQLCore implements DBCore {
*/
@Override
public void update(String query) {
if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) {
executeAsync(query, "UPDATE");
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
Thread th = new Thread(new ThreadUpdateSQL(getConnection(), query, "UPDATE"));
th.start();
} else {
try {
getConnection().createStatement().executeUpdate(query);
@@ -153,8 +154,9 @@ public class MySQLCore implements DBCore {
*/
@Override
public void delete(String query) {
if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) {
executeAsync(query, "DELETE");
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
Thread th = new Thread(new ThreadUpdateSQL(getConnection(), query, "DELETE"));
th.start();
} else {
try {
getConnection().createStatement().executeUpdate(query);
@@ -1,7 +1,5 @@
package net.sacredlabyrinth.phaed.simpleclans.storage;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -9,7 +7,9 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Logger;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.PERFORMANCE_USE_THREADS;
import org.bukkit.scheduler.BukkitRunnable;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
/**
* @author cc_madelg
@@ -119,7 +119,7 @@ public class SQLiteCore implements DBCore {
*/
@Override
public void insert(String query) {
if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) {
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
executeAsync(query, "INSERT");
} else {
try {
@@ -140,7 +140,7 @@ public class SQLiteCore implements DBCore {
*/
@Override
public void update(String query) {
if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) {
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
executeAsync(query, "UPDATE");
} else {
try {
@@ -161,7 +161,7 @@ public class SQLiteCore implements DBCore {
*/
@Override
public void delete(String query) {
if (SimpleClans.getInstance().getSettingsManager().is(PERFORMANCE_USE_THREADS)) {
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
executeAsync(query, "DELETE");
} else {
try {
@@ -225,4 +225,25 @@ public class SQLiteCore implements DBCore {
return false;
}
}
private void executeAsync(String query, String sqlType) {
new BukkitRunnable() {
@Override
public void run() {
try {
if (connection != null && !connection.isClosed()) {
connection.createStatement().executeUpdate(query);
}
}
catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet"))
{
log.severe("[Thread] Error at SQL " + sqlType + " Query: " + ex);
log.severe("[Thread] Query: " + query);
}
}
}
}.runTaskAsynchronously(SimpleClans.getInstance());
}
}
@@ -1,15 +1,19 @@
package net.sacredlabyrinth.phaed.simpleclans.tasks;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.events.ClanBalanceUpdateEvent.Cause;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TASKS_COLLECT_FEE_HOUR;
import static net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager.ConfigField.TASKS_COLLECT_FEE_MINUTE;
import static org.bukkit.ChatColor.AQUA;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
/**
*
@@ -28,11 +32,11 @@ public class CollectFeeTask extends BukkitRunnable {
public void start() {
SettingsManager sm = plugin.getSettingsManager();
int hour = sm.getInt(TASKS_COLLECT_FEE_HOUR);
int minute = sm.getInt(TASKS_COLLECT_FEE_MINUTE);
int hour = sm.getTasksCollectFeeHour();
int minute = sm.getTasksCollectFeeMinute();
long delay = Helper.getDelayTo(hour, minute);
this.runTaskTimer(plugin, delay * 20, 86400 * 20);
this.runTaskTimerAsynchronously(SimpleClans.getInstance(), delay * 20, 86400 * 20);
}
/**
@@ -45,17 +49,24 @@ public class CollectFeeTask extends BukkitRunnable {
if (clan.isMemberFeeEnabled() && memberFee > 0) {
for (ClanPlayer cp : clan.getFeePayers()) {
boolean success = plugin.getPermissionsManager()
.playerChargeMoney(Bukkit.getOfflinePlayer(cp.getUniqueId()), memberFee);
if (success) {
ChatBlock.sendMessage(cp.toPlayer(), AQUA + lang("fee.collected", cp, memberFee));
clan.deposit(cp.toPlayer(), Cause.MEMBER_FEE, memberFee);
plugin.getStorageManager().updateClan(clan);
} else {
clan.removePlayerFromClan(cp.getUniqueId());
clan.addBb(AQUA + lang("bb.fee.player.kicked", cp.getName()));
}
final boolean success = plugin.getPermissionsManager()
.playerChargeMoney(Bukkit.getOfflinePlayer(cp.getUniqueId()), memberFee);
new BukkitRunnable() {
@Override
public void run() {
if (success) {
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.AQUA +
MessageFormat.format(lang("fee.collected",cp.toPlayer()), memberFee));
clan.deposit(cp.toPlayer(), ClanBalanceUpdateEvent.Cause.MEMBER_FEE, memberFee);
plugin.getStorageManager().updateClan(clan);
} else {
clan.removePlayerFromClan(cp.getUniqueId());
clan.addBb(ChatColor.AQUA +
MessageFormat.format(lang("bb.fee.player.kicked"), cp.getName()));
}
}
}.runTask(plugin);
}
}
}
Loaded 100 of 176 files, more files were not shown because too many files have changed in this diff. Show more