Compare commits

..

93 Commits

Author SHA1 Message Date
Auxilor
66d0625d2e Updated to 6.13.13 2021-11-26 19:04:23 +00:00
Auxilor
99a60f2b8b Fixed CrashClaim support 2021-11-26 19:04:14 +00:00
Auxilor
0bdfbe76fe Refactored internal package names 2021-11-25 10:07:51 +00:00
Auxilor
e0240069fc Moved root gralde to kts 2021-11-25 09:55:08 +00:00
Auxilor
11d2f7d711 Updated PlayerUtils#getSavedDisplayName 2021-11-24 12:15:35 +00:00
Auxilor
5cf632e58b Updated to 6.13.12 2021-11-24 12:14:16 +00:00
Auxilor
a90fe5d100 Temporarily removed GHolo support as it's broken 2021-11-24 12:14:04 +00:00
Auxilor
8dd145ed7d Added CustomModelDataArgParser 2021-11-24 12:13:13 +00:00
Auxilor
e4c65f1db5 Cleaned up AutoCraft.kt 2021-11-24 11:48:51 +00:00
Auxilor
2208f161c0 Fixed readme 2021-11-24 11:47:20 +00:00
Auxilor
95833ea8f6 Added support for CrashClaim 2021-11-24 11:46:25 +00:00
Auxilor
ba2da5c238 Merge remote-tracking branch 'origin/master' into develop 2021-11-23 16:28:14 +00:00
Auxilor
60829a3e1d Removed markdown flavor 2021-11-17 11:31:42 +00:00
Auxilor
38c5bf97a0 EcoHandler now specifies impl as return type 2021-11-16 16:49:10 +00:00
Auxilor
d61f1bd23b Optimized kotlin imports 2021-11-16 16:32:31 +00:00
Auxilor
275f08fcb6 Merge branch 'develop' 2021-11-16 09:34:18 +00:00
Auxilor
68ae25b7db Re-added URL Encoding to Paste 2021-11-16 09:30:20 +00:00
Auxilor
89c529fdb3 Updated to 6.13.11 2021-11-16 09:25:48 +00:00
Auxilor
43157b154a Removed URL Encoding/Decoding from Paste 2021-11-16 09:25:37 +00:00
Auxilor
8721f96a2f packet.deepClone() replaced with packet.shallowClone() and moved to always be synchronous 2021-11-16 09:15:10 +00:00
Auxilor
ad3f7e529d Merge branch 'develop' 2021-11-15 21:03:06 +00:00
Auxilor
ec6ac88fea Remap changes, moved Paste to paste.willfp.com 2021-11-15 20:31:21 +00:00
Auxilor
13b10c13b3 Exposed changes 2021-11-15 20:27:02 +00:00
Auxilor
1e24cbf67b Fixed FastItemStack#hashCode bug 2021-11-15 20:19:55 +00:00
Auxilor
d9cfc8b91a Removed second ./gradlew build in java-ci 2021-11-15 20:14:55 +00:00
Auxilor
b40001d79b Updated to 6.13.10 2021-11-15 20:13:49 +00:00
Auxilor
b8128ef87e Fixed item picker bug with FastItemStack 2021-11-15 20:13:19 +00:00
Auxilor
be885e9092 Updated exposed 2021-11-15 20:11:51 +00:00
Auxilor
5658c92d3d Switched from special gradle to paperweight 2021-11-15 20:10:02 +00:00
Auxilor
e4b0a602f0 Gradle changes 2021-11-15 18:04:00 +00:00
Will FP
bf5c36d2c9 Update README.md 2021-11-15 12:24:32 +00:00
Will FP
cc57d10a36 Update README.md 2021-11-15 12:23:10 +00:00
Auxilor
dcbdbb5230 More Java CI changes 2021-11-15 12:14:06 +00:00
Auxilor
de19d67275 More Java CI changes 2021-11-15 12:05:49 +00:00
Will FP
43abfcb3fc Update README.md 2021-11-15 11:32:54 +00:00
Will FP
34f201d62d Update README.md 2021-11-15 11:32:42 +00:00
Auxilor
d3c811614f Improved java CI 2021-11-15 11:26:47 +00:00
Auxilor
44da61daaa Merge remote-tracking branch 'origin/master' into develop 2021-11-15 11:17:28 +00:00
Auxilor
3ea6d11026 Updated java ci 2021-11-15 11:12:20 +00:00
Auxilor
9a03a2e47a Added Java CI workflow 2021-11-15 11:11:21 +00:00
Auxilor
af91c9d659 Updated to 6.13.9 2021-11-14 13:43:29 +00:00
Auxilor
89eaaf3a5e Updated annotations and jupiter 2021-11-14 13:43:00 +00:00
Auxilor
ab174e2d41 Added configurability to MySQL threads 2021-11-14 13:42:24 +00:00
Auxilor
cfa9badc1e Limited SQL threads to 2 for socket connection limit 2021-11-14 13:41:11 +00:00
Auxilor
3ec1183ec3 Javadoc changes 2021-11-13 11:57:46 +00:00
Auxilor
b3e37ea717 Fixed lang.yml 2021-11-13 11:54:51 +00:00
Auxilor
9d0707a4db Merge remote-tracking branch 'origin/master' 2021-11-13 11:51:01 +00:00
Auxilor
41eee84966 Updated to 6.13.8 2021-11-13 11:50:31 +00:00
Auxilor
0f215b48bf Fixed custom items being used in shapeless vanilla recipes 2021-11-13 11:49:51 +00:00
Auxilor
abad973051 PR Codestyle 2021-11-13 11:06:03 +00:00
Auxilor
b385ebff75 Fixed IridiumSkyblock integration 2021-11-13 11:02:42 +00:00
Auxilor
f924d23feb Merge remote-tracking branch 'origin/master' into develop 2021-11-13 11:00:34 +00:00
Will FP
d603476201 Merge pull request #53
Fixed DeluxeCombat integration
2021-11-13 11:00:28 +00:00
Auxilor
b911bbce87 Updated Config string getters for more explicit formatting options 2021-11-13 11:00:08 +00:00
_OfTeN_
d2676c2af1 Fixed DeluxeCombat integration 2021-11-13 10:41:59 +03:00
Auxilor
e725811c2f Merge branch 'develop' 2021-11-12 18:07:32 +00:00
Auxilor
f861820572 Fixed key registration 2021-11-12 17:58:43 +00:00
Auxilor
6e310a48c1 DurabilityUtils fix 2021-11-12 17:56:07 +00:00
Auxilor
505234ec13 More data changes 2021-11-12 17:32:50 +00:00
Auxilor
587aeb21a1 Overhauled persistent data storage 2021-11-12 15:55:25 +00:00
Auxilor
cc344bf7ca MySQL Threading changes 2021-11-12 14:12:15 +00:00
Auxilor
c912b97438 Changed PlayerProfileHandler 2021-11-12 11:10:56 +00:00
Auxilor
4788f036ee More data changes 2021-11-12 11:07:43 +00:00
Auxilor
f5ff484086 Revert "Updated dependency structure"
This reverts commit a3ba7cdcf2.
2021-11-12 10:28:17 +00:00
Auxilor
c031534b0d Debugging 2021-11-12 10:28:13 +00:00
Auxilor
62ac49db4b Merge remote-tracking branch 'origin/develop' into develop 2021-11-12 10:15:08 +00:00
Auxilor
32c416ef8e Fixed bugs 2021-11-11 13:09:09 +00:00
Auxilor
a1e22540d4 Improved async warning 2021-11-11 13:05:36 +00:00
Auxilor
1b66843992 Codestyle 2 2021-11-11 13:03:07 +00:00
Auxilor
55d316cb9d Codestyle 2021-11-11 12:59:22 +00:00
Auxilor
ac7a47a0f7 Merge remote-tracking branch 'origin/master' into develop 2021-11-11 12:45:06 +00:00
Will FP
70cd23d39a Merge pull request #51
Updated Lands integration a bit && Renamed async-display.enabled to async-display.always-enabled
2021-11-11 12:44:39 +00:00
Auxilor
44d39c4f5f Updated README 2021-11-11 12:36:45 +00:00
Auxilor
a3ba7cdcf2 Updated dependency structure 2021-11-10 19:14:09 +00:00
Auxilor
779323e280 Updated to 6.13.6 2021-11-10 19:06:11 +00:00
Auxilor
5c8a8ca3e4 Delombok 10/10 - Removed lombok dependency, cleaned up 2021-11-10 19:05:49 +00:00
Auxilor
4e4f792bcc Delombok 9/? - Delomboked EcoPlugin 2021-11-10 19:02:38 +00:00
_OfTeN_
48ae8ebe65 Updated Lands integration a bit
Renamed async-display.enabled to async-display.always-enabled
2021-11-10 22:00:47 +03:00
Auxilor
f8c65898d8 Delombok 8/? - Delomboked packets, PluginDependent, and Prerequisite 2021-11-10 18:57:44 +00:00
Auxilor
dbe514f97c Delombok 6/? - Delomboked items, GUIs, recipes, and tuples 2021-11-10 18:56:12 +00:00
Auxilor
b244be6dd6 Delombok 6/? - Delomboked events and extensions 2021-11-10 18:49:14 +00:00
Auxilor
4870f7f0d1 Delombok 5/? - Delomboked data 2021-11-10 18:44:56 +00:00
Auxilor
27888da33a Delombok 4/? - Delomboked config 2021-11-10 18:44:04 +00:00
Auxilor
33c132065d Delombok 3/? - Delomboked commands 2021-11-10 18:42:50 +00:00
Auxilor
ec09dbddf4 Delombok 2/? - Removed @UtilityClas 2021-11-10 18:39:30 +00:00
Auxilor
3811b01e81 Delomboked Utils 2021-11-10 18:31:38 +00:00
Auxilor
f883f8fe1d Updated to 6.13.5 2021-11-08 21:09:44 +00:00
Auxilor
80f43238e0 Fixed major fuckup 2021-11-08 21:09:33 +00:00
Auxilor
18e7548c23 Updated to 6.13.4 2021-11-08 14:05:32 +00:00
Auxilor
40020b0503 Added Extension#onAfterLoad and Extension#onReload 2021-11-08 14:04:24 +00:00
Auxilor
830f92bbdb Dropped Velocity and worked on bungee 2021-11-08 13:15:42 +00:00
Auxilor
c6e39e89fd Updated to 6.13.3 2021-11-08 10:58:26 +00:00
Auxilor
7d38d7db15 Saved player name changes 2021-11-08 10:58:18 +00:00
178 changed files with 2038 additions and 1195 deletions

36
.github/workflows/java-ci.yml vendored Normal file
View File

@@ -0,0 +1,36 @@
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout latest code
uses: actions/checkout@v2
- name: Set outputs
id: vars
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Set up JDK 16
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: 16
- name: Setup build cache
uses: actions/cache@v2.1.6
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }}
restore-keys: |
${{ runner.os }}-gradle-
- run: ./gradlew build
- uses: actions/upload-artifact@v2
with:
name: eco-dev-${{ steps.vars.outputs.sha_short }}
path: build/libs

View File

@@ -5,20 +5,17 @@
- The pull request must not have any checkstyle issues. - The pull request must not have any checkstyle issues.
- Every method and field must have a javadoc attached. - Every method and field must have a javadoc attached.
2. Use lombok wherever possible. 2. Use JetBrains annotations
- @Getter, @Setter, @UtilityClass only.
3. Use JetBrains annotations
- Every parameter should be annotated with @NotNull or @Nullable - Every parameter should be annotated with @NotNull or @Nullable
- Use @NotNull over lombok @NonNull - Use @NotNull over lombok @NonNull
4. Imports 3. Imports
- No group (*) imports. - No group (*) imports.
- No static imports. - No static imports.
## Dependency Injection ## Dependency Injection
- eco uses Dependency Injection - eco uses Dependency Injection
- Any calls to AbstractEcoPlugin#getInstance are code smells and should never be used unless **absolutely necessary**. - Any calls to Eco#getHandler#getEcoPlugin are code smells and should never be used unless **absolutely necessary**.
- NamespacedKeys, FixedMetadataValues, Runnables, and Schedules should be managed using AbstractEcoPlugin through DI. - NamespacedKeys, FixedMetadataValues, Runnables, and Schedules should be managed using AbstractEcoPlugin through DI.
- Any DI class should extend PluginDependent where possible. If the class extends another, then you **must** store the plugin instance in a private final variable called **plugin** with a private or protected getter. - Any DI class should extend PluginDependent where possible. If the class extends another, then you **must** store the plugin instance in a private final variable called **plugin** with a private or protected getter.

131
README.md
View File

@@ -1,22 +1,45 @@
<h1 align="center"> # eco
<br> eco is a powerful Spigot development library that simplifies the process of plugin creation and supercharges
<img src="https://i.imgur.com/kU3ejCt.png" alt="eco logo" width="256"> your plugins.
<br> It's the engine behind [EcoEnchants](https://polymart.org/resource/490), [Reforges](https://polymart.org/resource/1330),
</h1> [EcoItems](https://polymart.org/resource/1247), [EcoSkills](https://polymart.org/resource/1351),
[EcoArmor](https://polymart.org/resource/687), [Talismans](https://polymart.org/resource/611),
and many more.
<h4 align="center">eco - Simplify spigot development.</h4> <p>
<a href="https://github.com/Auxilor/eco/releases">
<img alt="spigot" src="https://img.shields.io/github/v/release/Auxilor/eco?color=informational"/>
</a>
<a href="https://bstats.org/plugin/bukkit/EcoEnchants" alt="bstats servers">
<img src="https://img.shields.io/bstats/servers/7666?color=informational"/>
</a>
<a href="https://bstats.org/plugin/bukkit/EcoEnchants" alt="bstats players">
<img src="https://img.shields.io/bstats/players/7666?color=informational"/>
</a>
<a href="https://plugins.auxilor.io/" alt="Docs (gitbook)">
<img src="https://img.shields.io/badge/docs-gitbook-informational"/>
</a>
<a href="https://discord.gg/ZcwpSsE/" alt="Discord">
<img src="https://img.shields.io/discord/452518336627081236?label=discord&color=informational"/>
</a>
<a href="https://github.com/Auxilor/eco/actions/workflows/java-ci.yml" alt="Latest Dev Build">
<img src="https://img.shields.io/github/workflow/status/Auxilor/eco/Java%20CI/develop?color=informational"/>
</a>
</p>
### Plugin Information # For server owners
- Requires ProtocolLib to be installed: get the latest version [here](https://www.spigotmc.org/resources/protocollib.1997/) - Requires ProtocolLib to be installed: get the latest version [here](https://www.spigotmc.org/resources/protocollib.1997/)
- Supports 1.16.5+ - Supports 1.16.5+
### bStats ## Downloads
<img src="https://bstats.org/signatures/bukkit/eco.svg" width="512">
# Information for development - Stable (Recommended): [GitHub](https://github.com/Auxilor/eco/releases), [Polymart](https://polymart.org/resource/eco.773)
- Dev (Not Recommended): [GitHub](https://github.com/Auxilor/eco/actions/workflows/java-ci.yml) (Open latest run and download)
# For developers
## Javadoc ## Javadoc
The 6.8.0 Javadoc can be found [here](https://javadoc.jitpack.io/com/willfp/eco/6.8.0/javadoc/) The 6.13.0 Javadoc can be found [here](https://javadoc.jitpack.io/com/willfp/eco/6.13.0/javadoc/)
## Plugin Information ## Plugin Information
@@ -28,12 +51,6 @@ depend:
- eco - eco
``` ```
eco is available from any of these places:
- [GitHub](https://github.com/Auxilor/eco/releases)
- [Polymart](https://polymart.org/resource/eco.773)
- [Build it locally](https://github.com/Auxilor/eco#build-locally).
## Get from JitPack: ## Get from JitPack:
Gradle: Gradle:
@@ -51,7 +68,7 @@ dependencies {
} }
``` ```
Replace `Tag` with a release tag for eco, eg `6.0.0`. Replace `Tag` with a release tag for eco, eg `6.13.0`.
Maven: Maven:
@@ -71,7 +88,7 @@ Maven:
</dependency> </dependency>
``` ```
Replace `Tag` with a release tag for eco, eg `6.8.0`. Replace `Tag` with a release tag for eco, eg `6.13.0`.
## Build locally: ## Build locally:
@@ -84,85 +101,21 @@ cd eco
./gradlew build ./gradlew build
``` ```
# Features
Here's a list of some (not all) of the features of eco:
- Command system with subcommands
- Reworked config system
- JSON Config Support
- Client-Side item display
- World drop system
- Event manager
- PlayerJumpEvent
- ArmorEquipEvent
- EntityDeathByEntityEvent
- NaturalExpGainEvent
- Plugin extensions (com.willfp.eco.internal.Plugins for plugins)
- GUI System
- Integration system for external plugins
- Anticheat support
- AAC
- Matrix
- NCP
- Spartan
- Vulcan
- Antigrief/Combat support
- CombatLogX (V10 + V11)
- FactionsUUID
- GriefPrevention
- Kingdoms
- Lands
- Towny
- WorldGuard
- mcMMO support
- Custom Items support
- Oraxen
- PlaceholderAPI support
- NMS Proxy / Wrapper system built in
- Custom Items system
- Crafting Recipe handler
- Tuples
- Support uploading to / downloading from hastebin
- Packet System (via ProtocolLib)
- Dependency Injection systems
- Prerequisite system
- API additions (via utility classes)
- Get bow from arrow
- Break a block as a player
- Get a vein of blocks
- Create 2D lists
- Create NamespacedKeys safely
- Random number, distribution, roman numerals
- Set skull texture
- Format all strings
- Hex Support
- Gradient Support
- Placeholder Support
- Get a scoreboard team from any color
- Telekinesis (Drops straight to inventory) system
- More vector options
- Update checker
- bStats integration
- Reworked systems for:
- NamespacedKey
- MetadataValue
- Runnables / Scheduling
... and a lot more!
## License ## License
*Click here to read [the entire license](https://github.com/Auxilor/eco/blob/master/LICENSE.md).* *Click here to read [the entire license](https://github.com/Auxilor/eco/blob/master/LICENSE.md).*
<h1 align="center"> <h1 align="center">
Check out our partners!
<br>
<div style="width: 50%; margin: 0 auto;">
<br> <br>
<a href="https://gamersupps.gg/discount/Auxilor?afmc=Auxilor" target="_blank"> <a href="https://gamersupps.gg/discount/Auxilor?afmc=Auxilor" target="_blank">
<img src="https://i.imgur.com/uFDpBAC.png" alt="supps banner"> <img src="https://i.imgur.com/7mFhlQO.png" alt="supps banner">
</a> </a>
<a href="https://dedimc.promo/Auxilor" target="_blank"> <a href="https://dedimc.promo/Auxilor" target="_blank">
<img src="https://i.imgur.com/zdDLhFA.png" alt="dedimc banner"> <img src="https://i.imgur.com/x9aeH38.png" alt="dedimc banner">
</a> </a>
<br> <br>
</div>
</h1> </h1>

View File

@@ -1,133 +0,0 @@
plugins {
id 'java-library'
id 'com.github.johnrengelman.shadow' version '7.0.0'
id 'maven-publish'
id 'java'
}
dependencies {
implementation project(":eco-api")
implementation project(":eco-core:core-plugin")
implementation project(":eco-core:core-proxy")
implementation project(":eco-core:core-backend")
implementation project(":eco-core:core-nms:v1_16_R3")
implementation project(path: ":eco-core:core-nms:v1_17_R1", configuration: 'mapped')
}
allprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'maven-publish'
apply plugin: 'com.github.johnrengelman.shadow'
repositories {
mavenCentral()
mavenLocal()
maven { url 'https://jitpack.io' }
// SuperiorSkyblock2
maven { url 'https://repo.bg-software.com/repository/api/' }
// NMS (for jitpack compilation)
maven { url 'https://repo.codemc.org/repository/nms/' }
// bStats, mcMMO, BentoBox
maven { url 'https://repo.codemc.org/repository/maven-public/' }
// Spigot API, Bungee API
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
// PlaceholderAPI
maven { url 'https://repo.extendedclip.com/content/repositories/placeholderapi/' }
// ProtocolLib
maven { url 'https://repo.dmulloy2.net/nexus/repository/public/' }
// WorldGuard
maven { url 'https://maven.enginehub.org/repo/' }
// FactionsUUID
maven { url 'https://ci.ender.zone/plugin/repository/everything/' }
// NoCheatPlus
maven { url 'https://repo.md-5.net/content/repositories/snapshots/' }
// CombatLogX
maven { url 'https://nexus.sirblobman.xyz/repository/public/' }
// IridiumSkyblock
maven { url 'https://nexus.iridiumdevelopment.net/repository/maven-releases/' }
// Velocity
maven { url 'https://repo.velocitypowered.com/snapshots/' }
}
dependencies {
compileOnly 'org.jetbrains:annotations:19.0.0'
// Lombok
compileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
testCompileOnly 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
// Test
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
tasks.withType(JavaCompile) {
options.deprecation = true
options.encoding = 'UTF-8'
}
configurations.all {
exclude group: "org.codehaus.plexus", module: "plexus-utils"
exclude group: "com.mojang", module: "brigadier"
exclude group: "org.kitteh", module: "paste-gg-api"
exclude group: "org.kitteh", module: "pastegg"
exclude group: "org.spongepowered", module: "configurate-hocon"
exclude group: "com.darkblade12", module: "particleeffect"
exclude group: "com.github.cryptomorin", module: "XSeries"
}
shadowJar {
relocate('org.bstats', 'com.willfp.eco.shaded.bstats')
relocate('net.kyori.adventure.text.minimessage', 'com.willfp.eco.shaded.minimessage')
}
jar {
onlyIf { !sourceSets.main.allSource.files.isEmpty() }
}
compileJava {
onlyIf { !sourceSets.main.allSource.files.isEmpty() }
}
java {
sourceCompatibility = JavaVersion.VERSION_16
targetCompatibility = JavaVersion.VERSION_16
withSourcesJar()
}
test {
useJUnitPlatform()
// Always run tests, even when nothing changed.
dependsOn cleanTest
// Show test results.
testLogging {
events "passed", "skipped", "failed"
}
}
compileJava.options.encoding = 'UTF-8'
compileJava.dependsOn clean
build.dependsOn shadowJar
}
group = 'com.willfp'
archivesBaseName = project.name
version = findProperty("version")

117
build.gradle.kts Normal file
View File

@@ -0,0 +1,117 @@
plugins {
id("java-library")
id("com.github.johnrengelman.shadow") version "7.0.0"
id("maven-publish")
id("java")
}
dependencies {
implementation(project(":eco-api"))
implementation(project(":eco-core:core-plugin"))
implementation(project(":eco-core:core-proxy"))
implementation(project(":eco-core:core-backend"))
implementation(project(":eco-core:core-nms:v1_16_R3"))
implementation(project(path = ":eco-core:core-nms:v1_17_R1", configuration = "reobf"))
}
allprojects {
apply(plugin = "java")
apply(plugin = "java-library")
apply(plugin = "maven-publish")
apply(plugin = "com.github.johnrengelman.shadow")
repositories {
mavenCentral()
mavenLocal()
maven("https://jitpack.io")
// SuperiorSkyblock2
maven("https://repo.bg-software.com/repository/api/")
// NMS (for jitpack compilation)
maven("https://repo.codemc.org/repository/nms/")
// bStats, mcMMO, BentoBox
maven("https://repo.codemc.org/repository/maven-public/")
// Spigot API, Bungee API
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
// PlaceholderAPI
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
// ProtocolLib
maven("https://repo.dmulloy2.net/nexus/repository/public/")
// WorldGuard
maven("https://maven.enginehub.org/repo/")
// FactionsUUID
maven("https://ci.ender.zone/plugin/repository/everything/")
// NoCheatPlus
maven("https://repo.md-5.net/content/repositories/snapshots/")
// CombatLogX
maven("https://nexus.sirblobman.xyz/repository/public/")
// IridiumSkyblock
maven("https://nexus.iridiumdevelopment.net/repository/maven-releases/")
}
dependencies {
compileOnly("org.jetbrains:annotations:23.0.0")
// Test
testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
}
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
configurations.all {
exclude(group = "org.codehaus.plexus", module = "plexus-utils")
exclude(group = "com.mojang", module = "brigadier")
exclude(group = "org.kitteh", module = "paste-gg-api")
exclude(group = "org.kitteh", module = "pastegg")
exclude(group = "org.spongepowered", module = "configurate-hocon")
exclude(group = "com.darkblade12", module = "particleeffect")
exclude(group = "com.github.cryptomorin", module = "XSeries")
}
tasks {
shadowJar {
relocate("org.bstats", "com.willfp.eco.shaded.bstats")
relocate("net.kyori.adventure.text.minimessage", "com.willfp.eco.shaded.minimessage")
}
compileJava {
dependsOn(clean)
options.encoding = "UTF-8"
}
java {
sourceCompatibility = JavaVersion.VERSION_16
targetCompatibility = JavaVersion.VERSION_16
withSourcesJar()
}
test {
useJUnitPlatform()
// Show test results.
testLogging {
events("passed", "skipped", "failed")
}
}
build {
dependsOn(shadowJar)
}
}
}
group = "com.willfp"
version = findProperty("version")!!

View File

@@ -16,7 +16,7 @@ dependencies {
// Other // Other
compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT' compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
compileOnly 'org.apache.maven:maven-artifact:3.8.1' compileOnly 'org.apache.maven:maven-artifact:3.8.1'
compileOnly 'com.comphenix.protocol:ProtocolLib:4.7.1-SNAPSHOT' compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.1-SNAPSHOT'
compileOnly 'com.google.code.gson:gson:2.8.8' compileOnly 'com.google.code.gson:gson:2.8.8'
} }

View File

@@ -6,7 +6,6 @@ import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.events.PacketEvent;
import lombok.Getter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -26,7 +25,6 @@ public abstract class AbstractPacketAdapter extends PacketAdapter {
* <p> * <p>
* Useful for monitor priority adapters that <b>must</b> be ran last. * Useful for monitor priority adapters that <b>must</b> be ran last.
*/ */
@Getter
private final boolean postLoad; private final boolean postLoad;
/** /**
@@ -134,4 +132,13 @@ public abstract class AbstractPacketAdapter extends PacketAdapter {
ProtocolLibrary.getProtocolManager().addPacketListener(this); ProtocolLibrary.getProtocolManager().addPacketListener(this);
} }
} }
/**
* Get if the packet adapter should be loaded last.
*
* @return If post load.
*/
public boolean isPostLoad() {
return this.postLoad;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core; package com.willfp.eco.core;
import lombok.experimental.UtilityClass;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -10,20 +9,19 @@ import org.jetbrains.annotations.NotNull;
* *
* @see Handler * @see Handler
*/ */
@UtilityClass public final class Eco {
public class Eco {
/** /**
* Instance of eco handler. * Instance of eco handler.
*/ */
@ApiStatus.Internal @ApiStatus.Internal
private Handler handler; private static Handler handler;
/** /**
* Set the handler. * Set the handler.
* @param handler The handler. * @param handler The handler.
*/ */
@ApiStatus.Internal @ApiStatus.Internal
public void setHandler(@NotNull final Handler handler) { public static void setHandler(@NotNull final Handler handler) {
Validate.isTrue(Eco.handler == null, "Already initialized!"); Validate.isTrue(Eco.handler == null, "Already initialized!");
Eco.handler = handler; Eco.handler = handler;
@@ -46,7 +44,11 @@ public class Eco {
* @return The handler. * @return The handler.
*/ */
@ApiStatus.Internal @ApiStatus.Internal
public Handler getHandler() { public static Handler getHandler() {
return handler; return handler;
} }
private Eco() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -7,6 +7,7 @@ import com.willfp.eco.core.config.updating.ConfigHandler;
import com.willfp.eco.core.display.Display; import com.willfp.eco.core.display.Display;
import com.willfp.eco.core.display.DisplayModule; import com.willfp.eco.core.display.DisplayModule;
import com.willfp.eco.core.events.EventManager; import com.willfp.eco.core.events.EventManager;
import com.willfp.eco.core.extensions.Extension;
import com.willfp.eco.core.extensions.ExtensionLoader; import com.willfp.eco.core.extensions.ExtensionLoader;
import com.willfp.eco.core.factory.MetadataValueFactory; import com.willfp.eco.core.factory.MetadataValueFactory;
import com.willfp.eco.core.factory.NamespacedKeyFactory; import com.willfp.eco.core.factory.NamespacedKeyFactory;
@@ -17,7 +18,6 @@ import com.willfp.eco.core.proxy.AbstractProxy;
import com.willfp.eco.core.proxy.ProxyFactory; import com.willfp.eco.core.proxy.ProxyFactory;
import com.willfp.eco.core.scheduling.Scheduler; import com.willfp.eco.core.scheduling.Scheduler;
import com.willfp.eco.core.web.UpdateChecker; import com.willfp.eco.core.web.UpdateChecker;
import lombok.Getter;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -56,73 +56,61 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
/** /**
* The polymart resource ID of the plugin. * The polymart resource ID of the plugin.
*/ */
@Getter
private final int resourceId; private final int resourceId;
/** /**
* The bStats resource ID of the plugin. * The bStats resource ID of the plugin.
*/ */
@Getter
private final int bStatsId; private final int bStatsId;
/** /**
* The package where proxy implementations are. * The package where proxy implementations are.
*/ */
@Getter
private final String proxyPackage; private final String proxyPackage;
/** /**
* The color of the plugin, used in messages. * The color of the plugin, used in messages.
*/ */
@Getter
private final String color; private final String color;
/** /**
* Loaded integrations. * Loaded integrations.
*/ */
@Getter
private final Set<String> loadedIntegrations = new HashSet<>(); private final Set<String> loadedIntegrations = new HashSet<>();
/** /**
* The internal plugin scheduler. * The internal plugin scheduler.
*/ */
@Getter
private final Scheduler scheduler; private final Scheduler scheduler;
/** /**
* The internal plugin Event Manager. * The internal plugin Event Manager.
*/ */
@Getter
private final EventManager eventManager; private final EventManager eventManager;
/** /**
* Config.yml. * Config.yml.
*/ */
@Getter
private final ConfigYml configYml; private final ConfigYml configYml;
/** /**
* Lang.yml. * Lang.yml.
*/ */
@Getter
private final LangYml langYml; private final LangYml langYml;
/** /**
* The internal factory to produce {@link org.bukkit.NamespacedKey}s. * The internal factory to produce {@link org.bukkit.NamespacedKey}s.
*/ */
@Getter
private final NamespacedKeyFactory namespacedKeyFactory; private final NamespacedKeyFactory namespacedKeyFactory;
/** /**
* The internal factory to produce {@link org.bukkit.metadata.FixedMetadataValue}s. * The internal factory to produce {@link org.bukkit.metadata.FixedMetadataValue}s.
*/ */
@Getter
private final MetadataValueFactory metadataValueFactory; private final MetadataValueFactory metadataValueFactory;
/** /**
* The internal factory to produce {@link com.willfp.eco.core.scheduling.RunnableTask}s. * The internal factory to produce {@link com.willfp.eco.core.scheduling.RunnableTask}s.
*/ */
@Getter
private final RunnableFactory runnableFactory; private final RunnableFactory runnableFactory;
/** /**
@@ -130,19 +118,16 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
* *
* @see com.willfp.eco.core.extensions.Extension * @see com.willfp.eco.core.extensions.Extension
*/ */
@Getter
private final ExtensionLoader extensionLoader; private final ExtensionLoader extensionLoader;
/** /**
* The handler class for updatable classes. * The handler class for updatable classes.
*/ */
@Getter
private final ConfigHandler configHandler; private final ConfigHandler configHandler;
/** /**
* The display module for the plugin. * The display module for the plugin.
*/ */
@Getter
private DisplayModule displayModule; private DisplayModule displayModule;
/** /**
@@ -153,19 +138,17 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
/** /**
* If the server is running an outdated version of the plugin. * If the server is running an outdated version of the plugin.
*/ */
@Getter
private boolean outdated = false; private boolean outdated = false;
/** /**
* If the plugin supports extensions. * If the plugin supports extensions.
*/ */
@Getter
private final boolean supportingExtensions; private final boolean supportingExtensions;
/** /**
* The proxy factory. * The proxy factory.
*/ */
@Getter @Nullable
private final ProxyFactory proxyFactory; private final ProxyFactory proxyFactory;
/** /**
@@ -469,6 +452,10 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
this.reload(); this.reload();
for (Extension extension : this.getExtensionLoader().getLoadedExtensions()) {
extension.handleAfterLoad();
}
this.getLogger().info("Loaded " + this.color + this.getName()); this.getLogger().info("Loaded " + this.color + this.getName());
} }
@@ -483,6 +470,10 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
this.getScheduler().cancelAll(); this.getScheduler().cancelAll();
this.handleReload(); this.handleReload();
for (Extension extension : this.extensionLoader.getLoadedExtensions()) {
extension.handleReload();
}
} }
/** /**
@@ -724,4 +715,168 @@ public abstract class EcoPlugin extends JavaPlugin implements PluginLike {
public static Set<String> getPluginNames() { public static Set<String> getPluginNames() {
return new HashSet<>(Eco.getHandler().getLoadedPlugins()); return new HashSet<>(Eco.getHandler().getLoadedPlugins());
} }
/**
* Get the polymart resource ID.
*
* @return The resource ID.
*/
public int getResourceId() {
return this.resourceId;
}
/**
* Get the bStats ID.
*
* @return The ID.
*/
public int getBStatsId() {
return this.bStatsId;
}
/**
* Get the proxy package.
*
* @return The package where proxies are contained.
*/
public String getProxyPackage() {
return this.proxyPackage;
}
/**
* Get the plugin color (uses legacy formatting).
*
* @return The color.
*/
public String getColor() {
return this.color;
}
/**
* Get all loaded integration names.
*
* @return The integrations.
*/
public Set<String> getLoadedIntegrations() {
return this.loadedIntegrations;
}
/**
* Get the scheduler.
*
* @return The scheduler.
*/
public Scheduler getScheduler() {
return this.scheduler;
}
/**
* Get the event manager.
*
* @return The event manager.
*/
public EventManager getEventManager() {
return this.eventManager;
}
/**
* Get config.yml.
*
* @return config.yml.
*/
public ConfigYml getConfigYml() {
return this.configYml;
}
/**
* Get lang.yml.
*
* @return lang.yml.
*/
public LangYml getLangYml() {
return this.langYml;
}
/**
* Get the NamespacedKey factory.
*
* @return The factory.
*/
public NamespacedKeyFactory getNamespacedKeyFactory() {
return this.namespacedKeyFactory;
}
/**
* Get the metadata value factory.
*
* @return The factory.
*/
public MetadataValueFactory getMetadataValueFactory() {
return this.metadataValueFactory;
}
/**
* Get the runnable factory.
*
* @return The runnable factory.
*/
public RunnableFactory getRunnableFactory() {
return this.runnableFactory;
}
/**
* Get the extension loader.
*
* @return The extension loader.
*/
public ExtensionLoader getExtensionLoader() {
return this.extensionLoader;
}
/**
* Get the config handler.
*
* @return The config handler.
*/
public ConfigHandler getConfigHandler() {
return this.configHandler;
}
/**
* Get the plugin's display module.
*
* @return The display module.
*/
@Nullable
public DisplayModule getDisplayModule() {
return this.displayModule;
}
/**
* Get if the plugin is outdated.
*
* @return If outdated.
*/
public boolean isOutdated() {
return this.outdated;
}
/**
* Get if the plugin supports extensions.
*
* @return If extensions are supported.
*/
public boolean isSupportingExtensions() {
return this.supportingExtensions;
}
/**
* Get the proxy factory.
*
* @return The proxy factory.
*/
@Nullable
public ProxyFactory getProxyFactory() {
return this.proxyFactory;
}
} }

View File

@@ -2,8 +2,8 @@ package com.willfp.eco.core;
import com.willfp.eco.core.config.updating.ConfigHandler; import com.willfp.eco.core.config.updating.ConfigHandler;
import com.willfp.eco.core.config.wrapper.ConfigFactory; import com.willfp.eco.core.config.wrapper.ConfigFactory;
import com.willfp.eco.core.data.keys.KeyRegistry;
import com.willfp.eco.core.data.PlayerProfileHandler; import com.willfp.eco.core.data.PlayerProfileHandler;
import com.willfp.eco.core.data.keys.KeyRegistry;
import com.willfp.eco.core.drops.DropQueueFactory; import com.willfp.eco.core.drops.DropQueueFactory;
import com.willfp.eco.core.events.EventManager; import com.willfp.eco.core.events.EventManager;
import com.willfp.eco.core.extensions.ExtensionLoader; import com.willfp.eco.core.extensions.ExtensionLoader;

View File

@@ -1,7 +1,5 @@
package com.willfp.eco.core; package com.willfp.eco.core;
import lombok.AccessLevel;
import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
@@ -13,7 +11,6 @@ public abstract class PluginDependent<T extends EcoPlugin> {
/** /**
* The {@link EcoPlugin} that is stored. * The {@link EcoPlugin} that is stored.
*/ */
@Getter(AccessLevel.PROTECTED)
@NotNull @NotNull
private final T plugin; private final T plugin;
@@ -25,4 +22,14 @@ public abstract class PluginDependent<T extends EcoPlugin> {
protected PluginDependent(@NotNull final T plugin) { protected PluginDependent(@NotNull final T plugin) {
this.plugin = plugin; this.plugin = plugin;
} }
/**
* Get the plugin.
*
* @return The plugin.
*/
@NotNull
protected T getPlugin() {
return this.plugin;
}
} }

View File

@@ -3,7 +3,6 @@ package com.willfp.eco.core;
import com.willfp.eco.core.integrations.economy.EconomyManager; import com.willfp.eco.core.integrations.economy.EconomyManager;
import com.willfp.eco.core.proxy.ProxyConstants; import com.willfp.eco.core.proxy.ProxyConstants;
import com.willfp.eco.util.ClassUtils; import com.willfp.eco.util.ClassUtils;
import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
@@ -69,7 +68,6 @@ public class Prerequisite {
/** /**
* If the necessary prerequisite condition has been met. * If the necessary prerequisite condition has been met.
*/ */
@Getter
private boolean isMet; private boolean isMet;
/** /**
@@ -80,7 +78,6 @@ public class Prerequisite {
/** /**
* The description of the requirements of the prerequisite. * The description of the requirements of the prerequisite.
*/ */
@Getter
private final String description; private final String description;
/** /**
@@ -125,4 +122,22 @@ public class Prerequisite {
static { static {
update(); update();
} }
/**
* Get if the prerequisite is met.
*
* @return If the condition is met.
*/
public boolean isMet() {
return this.isMet;
}
/**
* Get the description.
*
* @return The description.
*/
public String getDescription() {
return this.description;
}
} }

View File

@@ -5,9 +5,6 @@ import com.willfp.eco.core.PluginDependent;
import com.willfp.eco.core.command.CommandBase; import com.willfp.eco.core.command.CommandBase;
import com.willfp.eco.core.command.CommandHandler; import com.willfp.eco.core.command.CommandHandler;
import com.willfp.eco.core.command.TabCompleteHandler; import com.willfp.eco.core.command.TabCompleteHandler;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil; import org.bukkit.util.StringUtil;
@@ -30,7 +27,6 @@ abstract class HandledCommand extends PluginDependent<EcoPlugin> implements Comm
/** /**
* The name of the command. * The name of the command.
*/ */
@Getter
private final String name; private final String name;
/** /**
@@ -38,7 +34,6 @@ abstract class HandledCommand extends PluginDependent<EcoPlugin> implements Comm
* <p> * <p>
* Written out as a string for flexibility with subclasses. * Written out as a string for flexibility with subclasses.
*/ */
@Getter
private final String permission; private final String permission;
/** /**
@@ -46,27 +41,23 @@ abstract class HandledCommand extends PluginDependent<EcoPlugin> implements Comm
* <p> * <p>
* In other worlds, only allowed to be executed by console. * In other worlds, only allowed to be executed by console.
*/ */
@Getter
private final boolean playersOnly; private final boolean playersOnly;
/** /**
* The actual code to be executed in the command. * The actual code to be executed in the command.
*/ */
@Getter private CommandHandler handler = (sender, args) -> {
@Setter // Do nothing by default
private CommandHandler handler = (sender, args) -> { }; };
/** /**
* The tab completion code to be executed in the command. * The tab completion code to be executed in the command.
*/ */
@Getter
@Setter
private TabCompleteHandler tabCompleter = (sender, args) -> new ArrayList<>(); private TabCompleteHandler tabCompleter = (sender, args) -> new ArrayList<>();
/** /**
* All subcommands for the command. * All subcommands for the command.
*/ */
@Getter(AccessLevel.PROTECTED)
private final List<CommandBase> subcommands; private final List<CommandBase> subcommands;
/** /**
@@ -202,4 +193,76 @@ abstract class HandledCommand extends PluginDependent<EcoPlugin> implements Comm
return true; return true;
} }
/**
* Get the command name.
*
* @return The name.
*/
public String getName() {
return this.name;
}
/**
* Get the permission required to execute the command.
*
* @return The permission.
*/
public String getPermission() {
return this.permission;
}
/**
* Get if the command can only be executed by players.
*
* @return If players only.
*/
public boolean isPlayersOnly() {
return this.playersOnly;
}
/**
* Get the actual code to be executed in the command.
*
* @return The code.
*/
public CommandHandler getHandler() {
return this.handler;
}
/**
* Get the tab completion code to be executed in the command.
*
* @return The code.
*/
public TabCompleteHandler getTabCompleter() {
return this.tabCompleter;
}
/**
* Get the subcommands of the command.
*
* @return The subcommands.
*/
public List<CommandBase> getSubcommands() {
return this.subcommands;
}
/**
* Set the command handler.
*
* @param handler The handler.
*/
public void setHandler(@NotNull final CommandHandler handler) {
this.handler = handler;
}
/**
* Set the tab completer.
*
* @param tabCompleter The tab completer.
*/
public void setTabCompleter(@NotNull final TabCompleteHandler tabCompleter) {
this.tabCompleter = tabCompleter;
}
} }

View File

@@ -24,7 +24,7 @@ public class LangYml extends YamlBaseConfig {
* @return The prefix. * @return The prefix.
*/ */
public String getPrefix() { public String getPrefix() {
return this.getString("messages.prefix"); return this.getFormattedString("messages.prefix");
} }
/** /**
@@ -33,7 +33,7 @@ public class LangYml extends YamlBaseConfig {
* @return The message. * @return The message.
*/ */
public String getNoPermission() { public String getNoPermission() {
return getPrefix() + this.getString("messages.no-permission"); return getPrefix() + this.getFormattedString("messages.no-permission");
} }
/** /**
@@ -55,6 +55,6 @@ public class LangYml extends YamlBaseConfig {
*/ */
public String getMessage(@NotNull final String message, public String getMessage(@NotNull final String message,
@NotNull final StringUtils.FormatOption option) { @NotNull final StringUtils.FormatOption option) {
return getPrefix() + this.getString("messages." + message, option); return getPrefix() + this.getFormattedString("messages." + message, option);
} }
} }

View File

@@ -11,6 +11,7 @@ import java.util.List;
* <p> * <p>
* Contains all methods that must exist in yaml and json configurations. * Contains all methods that must exist in yaml and json configurations.
*/ */
@SuppressWarnings("unused")
public interface Config extends Cloneable { public interface Config extends Cloneable {
/** /**
* Clears cache. * Clears cache.
@@ -159,8 +160,34 @@ public interface Config extends Cloneable {
@Nullable @Nullable
List<Boolean> getBoolsOrNull(@NotNull String path); List<Boolean> getBoolsOrNull(@NotNull String path);
/**
* Get a formatted string from config.
*
* @param path The key to fetch the value from.
* @return The found value, or an empty string if not found.
*/
@NotNull
default String getFormattedString(@NotNull String path) {
return getString(path, true);
}
/**
* Get a formatted string from config.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or an empty string if not found.
*/
@NotNull
default String getFormattedString(@NotNull String path,
@NotNull StringUtils.FormatOption option) {
return getString(path, true, option);
}
/** /**
* Get a string from config. * Get a string from config.
* <p>
* Formatted by default.
* *
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @return The found value, or an empty string if not found. * @return The found value, or an empty string if not found.
@@ -172,12 +199,13 @@ public interface Config extends Cloneable {
/** /**
* Get a string from config. * Get a string from config.
* <p>
* This will be deprecated when {@link Config#getString(String)} no longer formats by default.
* *
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param format If the string should be formatted. * @param format If the string should be formatted.
* @return The found value, or an empty string if not found. * @return The found value, or an empty string if not found.
*/ */
@NotNull
default String getString(@NotNull String path, default String getString(@NotNull String path,
boolean format) { boolean format) {
return this.getString(path, format, StringUtils.FormatOption.WITH_PLACEHOLDERS); return this.getString(path, format, StringUtils.FormatOption.WITH_PLACEHOLDERS);
@@ -189,8 +217,10 @@ public interface Config extends Cloneable {
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param option The format option. * @param option The format option.
* @return The found value, or an empty string if not found. * @return The found value, or an empty string if not found.
* @deprecated Use {@link Config#getFormattedString(String, StringUtils.FormatOption)} instead.
*/ */
@NotNull @NotNull
@Deprecated
default String getString(@NotNull String path, default String getString(@NotNull String path,
@NotNull final StringUtils.FormatOption option) { @NotNull final StringUtils.FormatOption option) {
return this.getString(path, true, option); return this.getString(path, true, option);
@@ -209,8 +239,34 @@ public interface Config extends Cloneable {
boolean format, boolean format,
@NotNull StringUtils.FormatOption option); @NotNull StringUtils.FormatOption option);
/**
* Get a formatted string from config.
*
* @param path The key to fetch the value from.
* @return The found value, or an empty string if not found.
*/
@Nullable
default String getFormattedStringOrNull(@NotNull String path) {
return getStringOrNull(path, true);
}
/**
* Get a formatted string from config.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or an empty string if not found.
*/
@Nullable
default String getFormattedStringOrNull(@NotNull String path,
@NotNull StringUtils.FormatOption option) {
return getStringOrNull(path, true, option);
}
/** /**
* Get a string from config. * Get a string from config.
* <p>
* Formatted by default.
* *
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @return The found value, or null if not found. * @return The found value, or null if not found.
@@ -222,6 +278,8 @@ public interface Config extends Cloneable {
/** /**
* Get a string from config. * Get a string from config.
* <p>
* This will be deprecated when {@link Config#getStringOrNull(String)} no longer formats by default.
* *
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param format If the string should be formatted. * @param format If the string should be formatted.
@@ -239,8 +297,10 @@ public interface Config extends Cloneable {
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param option The format option. * @param option The format option.
* @return The found value, or null if not found. * @return The found value, or null if not found.
* @deprecated Use {@link Config#getFormattedString(String, StringUtils.FormatOption)} instead.
*/ */
@Nullable @Nullable
@Deprecated
default String getStringOrNull(@NotNull String path, default String getStringOrNull(@NotNull String path,
@NotNull StringUtils.FormatOption option) { @NotNull StringUtils.FormatOption option) {
return this.getStringOrNull(path, true, option); return this.getStringOrNull(path, true, option);
@@ -251,7 +311,7 @@ public interface Config extends Cloneable {
* *
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param format If the string should be formatted. * @param format If the string should be formatted.
* @param option The format option. * @param option The format option. If format is false, this will be ignored.
* @return The found value, or null if not found. * @return The found value, or null if not found.
*/ */
@Nullable @Nullable
@@ -268,12 +328,44 @@ public interface Config extends Cloneable {
* @return The found value, or a blank {@link java.util.ArrayList} if not found. * @return The found value, or a blank {@link java.util.ArrayList} if not found.
*/ */
@NotNull @NotNull
default List<String> getFormattedStrings(@NotNull String path) {
return getStrings(path, true, StringUtils.FormatOption.WITH_PLACEHOLDERS);
}
/**
* Get a list of strings from config.
* <p>
* Formatted by default.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or a blank {@link java.util.ArrayList} if not found.
*/
@NotNull
default List<String> getFormattedStrings(@NotNull String path,
@NotNull StringUtils.FormatOption option) {
return getStrings(path, true, option);
}
/**
* Get a list of strings from config.
* <p>
* Formatted by default.
* <p>
* This will be changed in newer versions to <b>not</b> format by default.
*
* @param path The key to fetch the value from.
* @return The found value, or a blank {@link java.util.ArrayList} if not found.
*/
@NotNull
default List<String> getStrings(@NotNull String path) { default List<String> getStrings(@NotNull String path) {
return getStrings(path, true); return getStrings(path, true);
} }
/** /**
* Get a list of strings from config. * Get a list of strings from config.
* <p>
* This will be deprecated when {@link Config#getStrings(String)} no longer formats by default.
* *
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param format If the strings should be formatted. * @param format If the strings should be formatted.
@@ -291,8 +383,10 @@ public interface Config extends Cloneable {
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param option The format option. * @param option The format option.
* @return The found value, or a blank {@link java.util.ArrayList} if not found. * @return The found value, or a blank {@link java.util.ArrayList} if not found.
* @deprecated Use {@link Config#getFormattedStrings(String, StringUtils.FormatOption)} instead.
*/ */
@Nullable @NotNull
@Deprecated
default List<String> getStrings(@NotNull String path, default List<String> getStrings(@NotNull String path,
@NotNull StringUtils.FormatOption option) { @NotNull StringUtils.FormatOption option) {
return getStrings(path, true, option); return getStrings(path, true, option);
@@ -313,6 +407,38 @@ public interface Config extends Cloneable {
/** /**
* Get a list of strings from config. * Get a list of strings from config.
* <p>
* Formatted by default.
*
* @param path The key to fetch the value from.
* @return The found value, or null if not found.
*/
@Nullable
default List<String> getFormattedStringsOrNull(@NotNull String path) {
return getStringsOrNull(path, true, StringUtils.FormatOption.WITH_PLACEHOLDERS);
}
/**
* Get a list of strings from config.
* <p>
* Formatted by default.
*
* @param path The key to fetch the value from.
* @param option The format option.
* @return The found value, or null if not found.
*/
@Nullable
default List<String> getFormattedStringsOrNull(@NotNull String path,
@NotNull StringUtils.FormatOption option) {
return getStringsOrNull(path, true, option);
}
/**
* Get a list of strings from config.
* <p>
* Formatted by default.
* <p>
* This will be changed in newer versions to <b>not</b> format by default.
* *
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @return The found value, or null if not found. * @return The found value, or null if not found.
@@ -341,8 +467,10 @@ public interface Config extends Cloneable {
* @param path The key to fetch the value from. * @param path The key to fetch the value from.
* @param option The format option. * @param option The format option.
* @return The found value, or null if not found. * @return The found value, or null if not found.
* @deprecated Use {@link Config#getFormattedStringsOrNull(String, StringUtils.FormatOption)} instead.
*/ */
@Nullable @Nullable
@Deprecated
default List<String> getStringsOrNull(@NotNull String path, default List<String> getStringsOrNull(@NotNull String path,
@NotNull StringUtils.FormatOption option) { @NotNull StringUtils.FormatOption option) {
return getStringsOrNull(path, true, option); return getStringsOrNull(path, true, option);

View File

@@ -2,7 +2,6 @@ package com.willfp.eco.core.config.wrapper;
import com.willfp.eco.core.config.interfaces.Config; import com.willfp.eco.core.config.interfaces.Config;
import com.willfp.eco.util.StringUtils; import com.willfp.eco.util.StringUtils;
import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -27,7 +26,6 @@ public abstract class ConfigWrapper<T extends Config> implements Config {
* <p> * <p>
* In general use, though, the handle isn't necessary. * In general use, though, the handle isn't necessary.
*/ */
@Getter
private final T handle; private final T handle;
/** /**
@@ -179,4 +177,13 @@ public abstract class ConfigWrapper<T extends Config> implements Config {
public Config clone() { public Config clone() {
return handle.clone(); return handle.clone();
} }
/**
* Get the handle.
*
* @return The handle.
*/
public T getHandle() {
return this.handle;
}
} }

View File

@@ -19,7 +19,6 @@ public abstract class YamlConfigWrapper extends ConfigWrapper<Config> implements
super(handle); super(handle);
} }
@Override @Override
public YamlConfiguration getBukkitHandle() { public YamlConfiguration getBukkitHandle() {
return ((WrappedYamlConfiguration) this.getHandle()).getBukkitHandle(); return ((WrappedYamlConfiguration) this.getHandle()).getBukkitHandle();

View File

@@ -1,7 +1,9 @@
package com.willfp.eco.core.data; package com.willfp.eco.core.data;
import com.willfp.eco.core.data.keys.PersistentDataKey;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
/** /**
@@ -17,11 +19,37 @@ public interface PlayerProfileHandler {
PlayerProfile load(@NotNull UUID uuid); PlayerProfile load(@NotNull UUID uuid);
/** /**
* Save a player profile. * Unload a player profile from memory.
* <p>
* This will not save the profile first.
* *
* @param uuid The uuid. * @param uuid The uuid.
*/ */
void savePlayer(@NotNull UUID uuid); void unloadPlayer(@NotNull UUID uuid);
/**
* Save a player profile.
* <p>
* Can run async if using MySQL.
*
* @param uuid The uuid.
* @deprecated Saving changes is faster and should be used. Saving a player manually is not recommended.
*/
@Deprecated
default void savePlayer(@NotNull UUID uuid) {
this.saveKeysForPlayer(uuid, PersistentDataKey.values());
}
/**
* Save keys for a player.
* <p>
* Can run async if using MySQL.
*
* @param uuid The uuid.
* @param keys The keys.
*/
void saveKeysForPlayer(@NotNull UUID uuid,
@NotNull Set<PersistentDataKey<?>> keys);
/** /**
* Save all player data. * Save all player data.
@@ -36,6 +64,15 @@ public interface PlayerProfileHandler {
/** /**
* Save all player data. * Save all player data.
* <p>
* Can run async if using MySQL.
*/ */
void saveAll(); void saveAll();
/**
* Commit all changes to the file.
* <p>
* Does nothing if using MySQL.
*/
void save();
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.data.keys; package com.willfp.eco.core.data.keys;
import com.willfp.eco.core.Eco; import com.willfp.eco.core.Eco;
import lombok.Getter;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -16,19 +15,16 @@ public class PersistentDataKey<T> {
/** /**
* The key of the persistent data value. * The key of the persistent data value.
*/ */
@Getter
private final NamespacedKey key; private final NamespacedKey key;
/** /**
* The default value for the key. * The default value for the key.
*/ */
@Getter
private final T defaultValue; private final T defaultValue;
/** /**
* The persistent data key type. * The persistent data key type.
*/ */
@Getter
private final PersistentDataKeyType type; private final PersistentDataKeyType type;
/** /**
@@ -65,4 +61,31 @@ public class PersistentDataKey<T> {
public static Set<PersistentDataKey<?>> values() { public static Set<PersistentDataKey<?>> values() {
return Eco.getHandler().getKeyRegistry().getRegisteredKeys(); return Eco.getHandler().getKeyRegistry().getRegisteredKeys();
} }
/**
* Get the key.
*
* @return The key.
*/
public NamespacedKey getKey() {
return this.key;
}
/**
* Get the default value.
*
* @return The default value.
*/
public T getDefaultValue() {
return this.defaultValue;
}
/**
* Get the data key type.
*
* @return The key type.
*/
public PersistentDataKeyType getType() {
return this.type;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.display; package com.willfp.eco.core.display;
import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
@@ -10,8 +9,7 @@ import org.jetbrains.annotations.Nullable;
/** /**
* Utility class to manage client-side item display. * Utility class to manage client-side item display.
*/ */
@UtilityClass public final class Display {
public class Display {
/** /**
* The prefix for client-side lore lines. * The prefix for client-side lore lines.
*/ */
@@ -28,7 +26,7 @@ public class Display {
* @param itemStack The item. * @param itemStack The item.
* @return The ItemStack. * @return The ItemStack.
*/ */
public ItemStack display(@NotNull final ItemStack itemStack) { public static ItemStack display(@NotNull final ItemStack itemStack) {
return display(itemStack, null); return display(itemStack, null);
} }
@@ -39,8 +37,8 @@ public class Display {
* @param player The player. * @param player The player.
* @return The ItemStack. * @return The ItemStack.
*/ */
public ItemStack display(@NotNull final ItemStack itemStack, public static ItemStack display(@NotNull final ItemStack itemStack,
@Nullable final Player player) { @Nullable final Player player) {
return handler.display(itemStack, player); return handler.display(itemStack, player);
} }
@@ -50,7 +48,7 @@ public class Display {
* @param itemStack The item. * @param itemStack The item.
* @return The ItemStack. * @return The ItemStack.
*/ */
public ItemStack displayAndFinalize(@NotNull final ItemStack itemStack) { public static ItemStack displayAndFinalize(@NotNull final ItemStack itemStack) {
return finalize(display(itemStack, null)); return finalize(display(itemStack, null));
} }
@@ -61,7 +59,7 @@ public class Display {
* @param player The player. * @param player The player.
* @return The ItemStack. * @return The ItemStack.
*/ */
public ItemStack displayAndFinalize(@NotNull final ItemStack itemStack, public static ItemStack displayAndFinalize(@NotNull final ItemStack itemStack,
@Nullable final Player player) { @Nullable final Player player) {
return finalize(display(itemStack, player)); return finalize(display(itemStack, player));
} }
@@ -72,7 +70,7 @@ public class Display {
* @param itemStack The item. * @param itemStack The item.
* @return The ItemStack. * @return The ItemStack.
*/ */
public ItemStack revert(@NotNull final ItemStack itemStack) { public static ItemStack revert(@NotNull final ItemStack itemStack) {
return handler.revert(itemStack); return handler.revert(itemStack);
} }
@@ -82,7 +80,7 @@ public class Display {
* @param itemStack The item. * @param itemStack The item.
* @return The ItemStack. * @return The ItemStack.
*/ */
public ItemStack finalize(@NotNull final ItemStack itemStack) { public static ItemStack finalize(@NotNull final ItemStack itemStack) {
return handler.finalize(itemStack); return handler.finalize(itemStack);
} }
@@ -92,7 +90,7 @@ public class Display {
* @param itemStack The item. * @param itemStack The item.
* @return The ItemStack. * @return The ItemStack.
*/ */
public ItemStack unfinalize(@NotNull final ItemStack itemStack) { public static ItemStack unfinalize(@NotNull final ItemStack itemStack) {
return handler.unfinalize(itemStack); return handler.unfinalize(itemStack);
} }
@@ -102,7 +100,7 @@ public class Display {
* @param itemStack The item. * @param itemStack The item.
* @return If finalized. * @return If finalized.
*/ */
public boolean isFinalized(@NotNull final ItemStack itemStack) { public static boolean isFinalized(@NotNull final ItemStack itemStack) {
return handler.isFinalized(itemStack); return handler.isFinalized(itemStack);
} }
@@ -111,7 +109,7 @@ public class Display {
* *
* @param module The module. * @param module The module.
*/ */
public void registerDisplayModule(@NotNull final DisplayModule module) { public static void registerDisplayModule(@NotNull final DisplayModule module) {
handler.registerDisplayModule(module); handler.registerDisplayModule(module);
} }
@@ -176,4 +174,8 @@ public class Display {
Display.handler = handler; Display.handler = handler;
} }
private Display() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -2,7 +2,6 @@ package com.willfp.eco.core.display;
import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.PluginDependent; import com.willfp.eco.core.PluginDependent;
import lombok.Getter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -15,7 +14,6 @@ public abstract class DisplayModule extends PluginDependent<EcoPlugin> {
/** /**
* The priority of the module. * The priority of the module.
*/ */
@Getter
private final DisplayPriority priority; private final DisplayPriority priority;
/** /**
@@ -81,4 +79,13 @@ public abstract class DisplayModule extends PluginDependent<EcoPlugin> {
public final String getPluginName() { public final String getPluginName() {
return super.getPlugin().getName(); return super.getPlugin().getName();
} }
/**
* Get the display priority.
*
* @return The priority.
*/
public DisplayPriority getPriority() {
return this.priority;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.events; package com.willfp.eco.core.events;
import lombok.Getter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerEvent;
@@ -23,13 +22,11 @@ public class ArmorChangeEvent extends PlayerEvent {
/** /**
* The armor contents before. 0 is helmet, 3 is boots. * The armor contents before. 0 is helmet, 3 is boots.
*/ */
@Getter
private final List<ItemStack> before; private final List<ItemStack> before;
/** /**
* The armor contents after. 0 is helmet, 3 is boots. * The armor contents after. 0 is helmet, 3 is boots.
*/ */
@Getter
private final List<ItemStack> after; private final List<ItemStack> after;
/** /**
@@ -37,7 +34,7 @@ public class ArmorChangeEvent extends PlayerEvent {
* *
* @param player The player. * @param player The player.
* @param before The armor contents before. * @param before The armor contents before.
* @param after The armor contents after. * @param after The armor contents after.
*/ */
public ArmorChangeEvent(@NotNull final Player player, public ArmorChangeEvent(@NotNull final Player player,
@NotNull final List<ItemStack> before, @NotNull final List<ItemStack> before,
@@ -52,7 +49,6 @@ public class ArmorChangeEvent extends PlayerEvent {
* *
* @return A list of handlers handling this event. * @return A list of handlers handling this event.
*/ */
@Override @Override
@NotNull @NotNull
public HandlerList getHandlers() { public HandlerList getHandlers() {
@@ -67,4 +63,22 @@ public class ArmorChangeEvent extends PlayerEvent {
public static HandlerList getHandlerList() { public static HandlerList getHandlerList() {
return HANDLERS; return HANDLERS;
} }
/**
* Get the contents before the change.
*
* @return The contents.
*/
public List<ItemStack> getBefore() {
return this.before;
}
/**
* Get the current contents.
*
* @return The contents.
*/
public List<ItemStack> getAfter() {
return this.after;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.events; package com.willfp.eco.core.events;
import lombok.Getter;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.event.Event; import org.bukkit.event.Event;
@@ -25,31 +24,26 @@ public class EntityDeathByEntityEvent extends Event {
/** /**
* The {@link LivingEntity} killed. * The {@link LivingEntity} killed.
*/ */
@Getter
private final LivingEntity victim; private final LivingEntity victim;
/** /**
* The {@link Entity} that killed. * The {@link Entity} that killed.
*/ */
@Getter
private final Entity killer; private final Entity killer;
/** /**
* The associated {@link EntityDeathEvent}. * The associated {@link EntityDeathEvent}.
*/ */
@Getter
private final EntityDeathEvent deathEvent; private final EntityDeathEvent deathEvent;
/** /**
* The entity drops. * The entity drops.
*/ */
@Getter
private final List<ItemStack> drops; private final List<ItemStack> drops;
/** /**
* The xp to drop. * The xp to drop.
*/ */
@Getter
private final int xp; private final int xp;
/** /**
@@ -91,4 +85,49 @@ public class EntityDeathByEntityEvent extends Event {
public static HandlerList getHandlerList() { public static HandlerList getHandlerList() {
return HANDLERS; return HANDLERS;
} }
/**
* Get the entity killed.
*
* @return The victim.
*/
public LivingEntity getVictim() {
return this.victim;
}
/**
* Get the killer.
*
* @return The killer.
*/
public Entity getKiller() {
return this.killer;
}
/**
* Get the death event that caused this event.
*
* @return The death event.
*/
public EntityDeathEvent getDeathEvent() {
return this.deathEvent;
}
/**
* Get the drops.
*
* @return The drops.
*/
public List<ItemStack> getDrops() {
return this.drops;
}
/**
* Get the experience dropped.
*
* @return The experience.
*/
public int getXp() {
return this.xp;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.events; package com.willfp.eco.core.events;
import lombok.Getter;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerExpChangeEvent; import org.bukkit.event.player.PlayerExpChangeEvent;
@@ -20,7 +19,6 @@ public class NaturalExpGainEvent extends Event {
* The associated {@link PlayerExpChangeEvent}. * The associated {@link PlayerExpChangeEvent}.
* Use this to modify event parameters. * Use this to modify event parameters.
*/ */
@Getter
private final PlayerExpChangeEvent expChangeEvent; private final PlayerExpChangeEvent expChangeEvent;
/** /**
@@ -50,4 +48,13 @@ public class NaturalExpGainEvent extends Event {
public static HandlerList getHandlerList() { public static HandlerList getHandlerList() {
return HANDLERS; return HANDLERS;
} }
/**
* Get the event that caused this event.
*
* @return The exp change event.
*/
public PlayerExpChangeEvent getExpChangeEvent() {
return this.expChangeEvent;
}
} }

View File

@@ -3,8 +3,6 @@ package com.willfp.eco.core.extensions;
import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.PluginLike; import com.willfp.eco.core.PluginLike;
import com.willfp.eco.core.config.updating.ConfigHandler; import com.willfp.eco.core.config.updating.ConfigHandler;
import lombok.AccessLevel;
import lombok.Getter;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -25,7 +23,6 @@ public abstract class Extension implements PluginLike {
/** /**
* The {@link EcoPlugin} that this extension is for. * The {@link EcoPlugin} that this extension is for.
*/ */
@Getter(AccessLevel.PROTECTED)
private final EcoPlugin plugin; private final EcoPlugin plugin;
/** /**
@@ -57,6 +54,20 @@ public abstract class Extension implements PluginLike {
this.onDisable(); this.onDisable();
} }
/**
* Method to handle after load.
*/
public final void handleAfterLoad() {
this.onAfterLoad();
}
/**
* Method to handle plugin reloads.
*/
public final void handleReload() {
this.onReload();
}
/** /**
* Called on enabling Extension. * Called on enabling Extension.
*/ */
@@ -67,6 +78,20 @@ public abstract class Extension implements PluginLike {
*/ */
protected abstract void onDisable(); protected abstract void onDisable();
/**
* Called the once the base plugin is done loading.
*/
protected void onAfterLoad() {
// Override if needed
}
/**
* Called on plugin reload.
*/
protected void onReload() {
// Override if needed
}
/** /**
* Set the metadata of the extension. * Set the metadata of the extension.
* <p> * <p>
@@ -117,4 +142,13 @@ public abstract class Extension implements PluginLike {
public ConfigHandler getConfigHandler() { public ConfigHandler getConfigHandler() {
return this.plugin.getConfigHandler(); return this.plugin.getConfigHandler();
} }
/**
* Get the plugin for the extension.
*
* @return The plugin.
*/
protected EcoPlugin getPlugin() {
return this.plugin;
}
} }

View File

@@ -2,7 +2,6 @@ package com.willfp.eco.core.gui.slot;
import com.willfp.eco.core.items.builder.ItemStackBuilder; import com.willfp.eco.core.items.builder.ItemStackBuilder;
import com.willfp.eco.util.ListUtils; import com.willfp.eco.util.ListUtils;
import lombok.Getter;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -29,7 +28,6 @@ public class FillerMask {
/** /**
* Mask. * Mask.
*/ */
@Getter
private final List<List<Slot>> mask; private final List<List<Slot>> mask;
/** /**
@@ -47,7 +45,7 @@ public class FillerMask {
* Create a new filler mask. * Create a new filler mask.
* *
* @param materials The mask materials. * @param materials The mask materials.
* @param pattern The pattern. * @param pattern The pattern.
*/ */
public FillerMask(@NotNull final MaskMaterials materials, public FillerMask(@NotNull final MaskMaterials materials,
@NotNull final String... pattern) { @NotNull final String... pattern) {
@@ -82,4 +80,13 @@ public class FillerMask {
} }
} }
} }
/**
* Get the mask.
*
* @return The mask.
*/
public List<List<Slot>> getMask() {
return this.mask;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.gui.slot; package com.willfp.eco.core.gui.slot;
import lombok.Getter;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -14,7 +13,6 @@ public class FillerSlot implements Slot {
/** /**
* The ItemStack. * The ItemStack.
*/ */
@Getter
private final ItemStack itemStack; private final ItemStack itemStack;
/** /**
@@ -35,4 +33,13 @@ public class FillerSlot implements Slot {
public boolean isCaptive() { public boolean isCaptive() {
return false; return false;
} }
/**
* Get the ItemStack.
*
* @return The ItemStack.
*/
public ItemStack getItemStack() {
return this.itemStack;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations; package com.willfp.eco.core.integrations;
import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
@@ -17,7 +16,6 @@ public class IntegrationLoader {
/** /**
* The plugin to require to load the integration. * The plugin to require to load the integration.
*/ */
@Getter
private final String pluginName; private final String pluginName;
/** /**
@@ -38,4 +36,13 @@ public class IntegrationLoader {
public void load() { public void load() {
runnable.run(); runnable.run();
} }
/**
* Get the plugin name.
*
* @return The plugin name.
*/
public String getPluginName() {
return this.pluginName;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.afk; package com.willfp.eco.core.integrations.afk;
import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -10,20 +9,19 @@ import java.util.Set;
/** /**
* Class to handle afk integrations. * Class to handle afk integrations.
*/ */
@UtilityClass public final class AFKManager {
public class AFKManager {
/** /**
* A set of all registered integrations. * A set of all registered integrations.
*/ */
private final Set<AFKWrapper> registered = new HashSet<>(); private static final Set<AFKWrapper> REGISTERED = new HashSet<>();
/** /**
* Register a new integration. * Register a new integration.
* *
* @param integration The integration to register. * @param integration The integration to register.
*/ */
public void register(@NotNull final AFKWrapper integration) { public static void register(@NotNull final AFKWrapper integration) {
registered.add(integration); REGISTERED.add(integration);
} }
/** /**
@@ -32,8 +30,8 @@ public class AFKManager {
* @param player The player. * @param player The player.
* @return If afk. * @return If afk.
*/ */
public boolean isAfk(@NotNull final Player player) { public static boolean isAfk(@NotNull final Player player) {
for (AFKWrapper afkWrapper : registered) { for (AFKWrapper afkWrapper : REGISTERED) {
if (afkWrapper.isAfk(player)) { if (afkWrapper.isAfk(player)) {
return true; return true;
} }
@@ -41,4 +39,8 @@ public class AFKManager {
return false; return false;
} }
private AFKManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.integrations.anticheat; package com.willfp.eco.core.integrations.anticheat;
import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.EcoPlugin;
import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -12,12 +11,11 @@ import java.util.Set;
/** /**
* Class to handle anticheat integrations. * Class to handle anticheat integrations.
*/ */
@UtilityClass public final class AnticheatManager {
public class AnticheatManager {
/** /**
* A set of all registered anticheats. * A set of all registered anticheats.
*/ */
private final Set<AnticheatWrapper> anticheats = new HashSet<>(); private static final Set<AnticheatWrapper> ANTICHEATS = new HashSet<>();
/** /**
* Register a new anticheat. * Register a new anticheat.
@@ -25,12 +23,12 @@ public class AnticheatManager {
* @param plugin The plugin. * @param plugin The plugin.
* @param anticheat The anticheat to register. * @param anticheat The anticheat to register.
*/ */
public void register(@NotNull final EcoPlugin plugin, public static void register(@NotNull final EcoPlugin plugin,
@NotNull final AnticheatWrapper anticheat) { @NotNull final AnticheatWrapper anticheat) {
if (anticheat instanceof Listener) { if (anticheat instanceof Listener) {
plugin.getEventManager().registerListener((Listener) anticheat); plugin.getEventManager().registerListener((Listener) anticheat);
} }
anticheats.add(anticheat); ANTICHEATS.add(anticheat);
} }
/** /**
@@ -38,8 +36,8 @@ public class AnticheatManager {
* *
* @param player The player to exempt. * @param player The player to exempt.
*/ */
public void exemptPlayer(@NotNull final Player player) { public static void exemptPlayer(@NotNull final Player player) {
anticheats.forEach(anticheat -> anticheat.exempt(player)); ANTICHEATS.forEach(anticheat -> anticheat.exempt(player));
} }
/** /**
@@ -48,7 +46,11 @@ public class AnticheatManager {
* *
* @param player The player to remove the exemption. * @param player The player to remove the exemption.
*/ */
public void unexemptPlayer(@NotNull final Player player) { public static void unexemptPlayer(@NotNull final Player player) {
anticheats.forEach(anticheat -> anticheat.unexempt(player)); ANTICHEATS.forEach(anticheat -> anticheat.unexempt(player));
}
private AnticheatManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
} }
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.antigrief; package com.willfp.eco.core.integrations.antigrief;
import lombok.experimental.UtilityClass;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@@ -13,20 +12,19 @@ import java.util.Set;
/** /**
* Class to handle antigrief integrations. * Class to handle antigrief integrations.
*/ */
@UtilityClass public final class AntigriefManager {
public class AntigriefManager {
/** /**
* Registered antigriefs. * Registered antigriefs.
*/ */
private final Set<AntigriefWrapper> registered = new HashSet<>(); private static final Set<AntigriefWrapper> REGISTERED = new HashSet<>();
/** /**
* Register a new AntiGrief/Land Management integration. * Register a new AntiGrief/Land Management integration.
* *
* @param antigrief The integration to register. * @param antigrief The integration to register.
*/ */
public void register(@NotNull final AntigriefWrapper antigrief) { public static void register(@NotNull final AntigriefWrapper antigrief) {
registered.add(antigrief); REGISTERED.add(antigrief);
} }
/** /**
@@ -34,9 +32,9 @@ public class AntigriefManager {
* *
* @param antigrief The integration to unregister. * @param antigrief The integration to unregister.
*/ */
public void unregister(@NotNull final AntigriefWrapper antigrief) { public static void unregister(@NotNull final AntigriefWrapper antigrief) {
registered.removeIf(it -> it.getPluginName().equalsIgnoreCase(antigrief.getPluginName())); REGISTERED.removeIf(it -> it.getPluginName().equalsIgnoreCase(antigrief.getPluginName()));
registered.remove(antigrief); REGISTERED.remove(antigrief);
} }
/** /**
@@ -46,9 +44,9 @@ public class AntigriefManager {
* @param block The block. * @param block The block.
* @return If player can break block. * @return If player can break block.
*/ */
public boolean canBreakBlock(@NotNull final Player player, public static boolean canBreakBlock(@NotNull final Player player,
@NotNull final Block block) { @NotNull final Block block) {
return registered.stream().allMatch(antigriefWrapper -> antigriefWrapper.canBreakBlock(player, block)); return REGISTERED.stream().allMatch(antigriefWrapper -> antigriefWrapper.canBreakBlock(player, block));
} }
/** /**
@@ -58,9 +56,9 @@ public class AntigriefManager {
* @param location The location. * @param location The location.
* @return If player can create explosion. * @return If player can create explosion.
*/ */
public boolean canCreateExplosion(@NotNull final Player player, public static boolean canCreateExplosion(@NotNull final Player player,
@NotNull final Location location) { @NotNull final Location location) {
return registered.stream().allMatch(antigriefWrapper -> antigriefWrapper.canCreateExplosion(player, location)); return REGISTERED.stream().allMatch(antigriefWrapper -> antigriefWrapper.canCreateExplosion(player, location));
} }
/** /**
@@ -70,9 +68,9 @@ public class AntigriefManager {
* @param block The block. * @param block The block.
* @return If player can place block. * @return If player can place block.
*/ */
public boolean canPlaceBlock(@NotNull final Player player, public static boolean canPlaceBlock(@NotNull final Player player,
@NotNull final Block block) { @NotNull final Block block) {
return registered.stream().allMatch(antigriefWrapper -> antigriefWrapper.canPlaceBlock(player, block)); return REGISTERED.stream().allMatch(antigriefWrapper -> antigriefWrapper.canPlaceBlock(player, block));
} }
/** /**
@@ -82,8 +80,12 @@ public class AntigriefManager {
* @param victim The victim. * @param victim The victim.
* @return If player can injure. * @return If player can injure.
*/ */
public boolean canInjure(@NotNull final Player player, public static boolean canInjure(@NotNull final Player player,
@NotNull final LivingEntity victim) { @NotNull final LivingEntity victim) {
return registered.stream().allMatch(antigriefWrapper -> antigriefWrapper.canInjure(player, victim)); return REGISTERED.stream().allMatch(antigriefWrapper -> antigriefWrapper.canInjure(player, victim));
}
private AntigriefManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
} }
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.customitems; package com.willfp.eco.core.integrations.customitems;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.HashSet; import java.util.HashSet;
@@ -9,20 +8,19 @@ import java.util.Set;
/** /**
* Class to handle custom item integrations. * Class to handle custom item integrations.
*/ */
@UtilityClass public final class CustomItemsManager {
public class CustomItemsManager {
/** /**
* A set of all registered integrations. * A set of all registered integrations.
*/ */
private final Set<CustomItemsWrapper> registered = new HashSet<>(); private static final Set<CustomItemsWrapper> REGISTERED = new HashSet<>();
/** /**
* Register a new integration. * Register a new integration.
* *
* @param integration The integration to register. * @param integration The integration to register.
*/ */
public void register(@NotNull final CustomItemsWrapper integration) { public static void register(@NotNull final CustomItemsWrapper integration) {
registered.add(integration); REGISTERED.add(integration);
} }
/** /**
@@ -30,9 +28,13 @@ public class CustomItemsManager {
* *
* @see com.willfp.eco.core.items.Items * @see com.willfp.eco.core.items.Items
*/ */
public void registerAllItems() { public static void registerAllItems() {
for (CustomItemsWrapper customItemsWrapper : registered) { for (CustomItemsWrapper customItemsWrapper : REGISTERED) {
customItemsWrapper.registerAllItems(); customItemsWrapper.registerAllItems();
} }
} }
private CustomItemsManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.economy; package com.willfp.eco.core.integrations.economy;
import lombok.experimental.UtilityClass;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -10,20 +9,19 @@ import java.util.Set;
/** /**
* Class to handle economy. * Class to handle economy.
*/ */
@UtilityClass public final class EconomyManager {
public class EconomyManager {
/** /**
* A set of all registered integrations. * A set of all registered integrations.
*/ */
private final Set<EconomyWrapper> registered = new HashSet<>(); private static final Set<EconomyWrapper> REGISTERED = new HashSet<>();
/** /**
* Register a new integration. * Register a new integration.
* *
* @param integration The integration to register. * @param integration The integration to register.
*/ */
public void register(@NotNull final EconomyWrapper integration) { public static void register(@NotNull final EconomyWrapper integration) {
registered.add(integration); REGISTERED.add(integration);
} }
/** /**
@@ -31,8 +29,8 @@ public class EconomyManager {
* *
* @return If any economy. * @return If any economy.
*/ */
public boolean hasRegistrations() { public static boolean hasRegistrations() {
return !registered.isEmpty(); return !REGISTERED.isEmpty();
} }
/** /**
@@ -42,9 +40,9 @@ public class EconomyManager {
* @param amount The amount. * @param amount The amount.
* @return If the player has the amount. * @return If the player has the amount.
*/ */
public boolean hasAmount(@NotNull final OfflinePlayer player, public static boolean hasAmount(@NotNull final OfflinePlayer player,
final double amount) { final double amount) {
for (EconomyWrapper wrapper : registered) { for (EconomyWrapper wrapper : REGISTERED) {
return wrapper.hasAmount(player, amount); return wrapper.hasAmount(player, amount);
} }
@@ -58,9 +56,9 @@ public class EconomyManager {
* @param amount The amount to give. * @param amount The amount to give.
* @return If the transaction was a success. * @return If the transaction was a success.
*/ */
public boolean giveMoney(@NotNull final OfflinePlayer player, public static boolean giveMoney(@NotNull final OfflinePlayer player,
final double amount) { final double amount) {
for (EconomyWrapper wrapper : registered) { for (EconomyWrapper wrapper : REGISTERED) {
return wrapper.giveMoney(player, amount); return wrapper.giveMoney(player, amount);
} }
@@ -74,9 +72,9 @@ public class EconomyManager {
* @param amount The amount to remove. * @param amount The amount to remove.
* @return If the transaction was a success. * @return If the transaction was a success.
*/ */
public boolean removeMoney(@NotNull final OfflinePlayer player, public static boolean removeMoney(@NotNull final OfflinePlayer player,
final double amount) { final double amount) {
for (EconomyWrapper wrapper : registered) { for (EconomyWrapper wrapper : REGISTERED) {
return wrapper.removeMoney(player, amount); return wrapper.removeMoney(player, amount);
} }
@@ -89,11 +87,15 @@ public class EconomyManager {
* @param player The player. * @param player The player.
* @return The balance. * @return The balance.
*/ */
public double getBalance(@NotNull final OfflinePlayer player) { public static double getBalance(@NotNull final OfflinePlayer player) {
for (EconomyWrapper wrapper : registered) { for (EconomyWrapper wrapper : REGISTERED) {
return wrapper.getBalance(player); return wrapper.getBalance(player);
} }
return 0; return 0;
} }
private EconomyManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.hologram; package com.willfp.eco.core.integrations.hologram;
import lombok.experimental.UtilityClass;
import org.bukkit.Location; import org.bukkit.Location;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -11,20 +10,19 @@ import java.util.Set;
/** /**
* Class to handle hologram integrations. * Class to handle hologram integrations.
*/ */
@UtilityClass public final class HologramManager {
public class HologramManager {
/** /**
* A set of all registered integrations. * A set of all registered integrations.
*/ */
private final Set<HologramWrapper> registered = new HashSet<>(); private static final Set<HologramWrapper> REGISTERED = new HashSet<>();
/** /**
* Register a new integration. * Register a new integration.
* *
* @param integration The integration to register. * @param integration The integration to register.
*/ */
public void register(@NotNull final HologramWrapper integration) { public static void register(@NotNull final HologramWrapper integration) {
registered.add(integration); REGISTERED.add(integration);
} }
/** /**
@@ -34,12 +32,16 @@ public class HologramManager {
* @param contents The contents for the hologram. * @param contents The contents for the hologram.
* @return The hologram. * @return The hologram.
*/ */
public Hologram createHologram(@NotNull final Location location, public static Hologram createHologram(@NotNull final Location location,
@NotNull final List<String> contents) { @NotNull final List<String> contents) {
for (HologramWrapper wrapper : registered) { for (HologramWrapper wrapper : REGISTERED) {
return wrapper.createHologram(location, contents); return wrapper.createHologram(location, contents);
} }
return new DummyHologram(); return new DummyHologram();
} }
private HologramManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.mcmmo; package com.willfp.eco.core.integrations.mcmmo;
import lombok.experimental.UtilityClass;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -11,20 +10,19 @@ import java.util.Set;
/** /**
* Class to handle mcmmo integrations. * Class to handle mcmmo integrations.
*/ */
@UtilityClass public final class McmmoManager {
public class McmmoManager {
/** /**
* A set of all registered integrations. * A set of all registered integrations.
*/ */
private final Set<McmmoWrapper> registered = new HashSet<>(); private static final Set<McmmoWrapper> REGISTERED = new HashSet<>();
/** /**
* Register a new integration. * Register a new integration.
* *
* @param integration The integration to register. * @param integration The integration to register.
*/ */
public void register(@NotNull final McmmoWrapper integration) { public static void register(@NotNull final McmmoWrapper integration) {
registered.add(integration); REGISTERED.add(integration);
} }
/** /**
@@ -33,8 +31,8 @@ public class McmmoManager {
* @param block The block. * @param block The block.
* @return The bonus drop count. * @return The bonus drop count.
*/ */
public int getBonusDropCount(@NotNull final Block block) { public static int getBonusDropCount(@NotNull final Block block) {
for (McmmoWrapper mcmmoWrapper : registered) { for (McmmoWrapper mcmmoWrapper : REGISTERED) {
return mcmmoWrapper.getBonusDropCount(block); return mcmmoWrapper.getBonusDropCount(block);
} }
return 0; return 0;
@@ -46,10 +44,14 @@ public class McmmoManager {
* @param event The event to check. * @param event The event to check.
* @return If the event is fake. * @return If the event is fake.
*/ */
public boolean isFake(@NotNull final Event event) { public static boolean isFake(@NotNull final Event event) {
for (McmmoWrapper mcmmoWrapper : registered) { for (McmmoWrapper mcmmoWrapper : REGISTERED) {
return mcmmoWrapper.isFake(event); return mcmmoWrapper.isFake(event);
} }
return false; return false;
} }
private McmmoManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.placeholder; package com.willfp.eco.core.integrations.placeholder;
import lombok.Getter;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -17,7 +16,6 @@ public class PlaceholderEntry {
/** /**
* The name of the placeholder, used in lookups. * The name of the placeholder, used in lookups.
*/ */
@Getter
private final String identifier; private final String identifier;
/** /**
@@ -78,6 +76,15 @@ public class PlaceholderEntry {
return requiresPlayer; return requiresPlayer;
} }
/**
* Get the identifier.
*
* @return The identifier.
*/
public String getIdentifier() {
return identifier;
}
/** /**
* Register the placeholder. * Register the placeholder.
*/ */

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.placeholder; package com.willfp.eco.core.integrations.placeholder;
import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -13,8 +12,7 @@ import java.util.Set;
/** /**
* Class to handle placeholder integrations. * Class to handle placeholder integrations.
*/ */
@UtilityClass public final class PlaceholderManager {
public class PlaceholderManager {
/** /**
* All registered placeholders. * All registered placeholders.
*/ */
@@ -81,4 +79,8 @@ public class PlaceholderManager {
} }
return processed; return processed;
} }
private PlaceholderManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.core.integrations.shop; package com.willfp.eco.core.integrations.shop;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.HashSet; import java.util.HashSet;
@@ -9,28 +8,31 @@ import java.util.Set;
/** /**
* Class to handle shop integrations. * Class to handle shop integrations.
*/ */
@UtilityClass public final class ShopManager {
public class ShopManager {
/** /**
* A set of all registered integrations. * A set of all registered integrations.
*/ */
private final Set<ShopWrapper> registered = new HashSet<>(); private static final Set<ShopWrapper> REGISTERED = new HashSet<>();
/** /**
* Register a new integration. * Register a new integration.
* *
* @param integration The integration to register. * @param integration The integration to register.
*/ */
public void register(@NotNull final ShopWrapper integration) { public static void register(@NotNull final ShopWrapper integration) {
registered.add(integration); REGISTERED.add(integration);
} }
/** /**
* Register eco item provider for shop plugins. * Register eco item provider for shop plugins.
*/ */
public void registerEcoProvider() { public static void registerEcoProvider() {
for (ShopWrapper shopWrapper : registered) { for (ShopWrapper shopWrapper : REGISTERED) {
shopWrapper.registerEcoProvider(); shopWrapper.registerEcoProvider();
} }
} }
private ShopManager() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.items; package com.willfp.eco.core.items;
import com.willfp.eco.core.Eco; import com.willfp.eco.core.Eco;
import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -23,7 +22,6 @@ public class CustomItem implements TestableItem {
/** /**
* The key. * The key.
*/ */
@Getter
private final NamespacedKey key; private final NamespacedKey key;
/** /**
@@ -77,4 +75,13 @@ public class CustomItem implements TestableItem {
public void register() { public void register() {
Items.registerCustomItem(this.getKey(), this); Items.registerCustomItem(this.getKey(), this);
} }
/**
* Get the key.
*
* @return The key.
*/
public NamespacedKey getKey() {
return this.key;
}
} }

View File

@@ -8,7 +8,6 @@ import com.willfp.eco.core.recipe.parts.ModifiedTestableItem;
import com.willfp.eco.core.recipe.parts.TestableStack; import com.willfp.eco.core.recipe.parts.TestableStack;
import com.willfp.eco.util.NamespacedKeyUtils; import com.willfp.eco.util.NamespacedKeyUtils;
import com.willfp.eco.util.NumberUtils; import com.willfp.eco.util.NumberUtils;
import lombok.experimental.UtilityClass;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -28,7 +27,6 @@ import java.util.stream.Collectors;
/** /**
* Class to manage all custom and vanilla items. * Class to manage all custom and vanilla items.
*/ */
@UtilityClass
public final class Items { public final class Items {
/** /**
* All recipe parts. * All recipe parts.
@@ -51,7 +49,7 @@ public final class Items {
* @param key The key of the item. * @param key The key of the item.
* @param item The item. * @param item The item.
*/ */
public void registerCustomItem(@NotNull final NamespacedKey key, public static void registerCustomItem(@NotNull final NamespacedKey key,
@NotNull final TestableItem item) { @NotNull final TestableItem item) {
REGISTRY.put(key, item); REGISTRY.put(key, item);
} }
@@ -61,7 +59,7 @@ public final class Items {
* *
* @param provider The provider. * @param provider The provider.
*/ */
public void registerItemProvider(@NotNull final ItemProvider provider) { public static void registerItemProvider(@NotNull final ItemProvider provider) {
PROVIDERS.put(provider.getNamespace(), provider); PROVIDERS.put(provider.getNamespace(), provider);
} }
@@ -70,7 +68,7 @@ public final class Items {
* *
* @param parser The parser. * @param parser The parser.
*/ */
public void registerArgParser(@NotNull final LookupArgParser parser) { public static void registerArgParser(@NotNull final LookupArgParser parser) {
ARG_PARSERS.add(parser); ARG_PARSERS.add(parser);
} }
@@ -79,7 +77,7 @@ public final class Items {
* *
* @param key The key of the recipe part. * @param key The key of the recipe part.
*/ */
public void removeCustomItem(@NotNull final NamespacedKey key) { public static void removeCustomItem(@NotNull final NamespacedKey key) {
REGISTRY.remove(key); REGISTRY.remove(key);
} }
@@ -106,7 +104,7 @@ public final class Items {
* @param key The lookup string. * @param key The lookup string.
* @return The testable item, or an {@link EmptyTestableItem}. * @return The testable item, or an {@link EmptyTestableItem}.
*/ */
public TestableItem lookup(@NotNull final String key) { public static TestableItem lookup(@NotNull final String key) {
if (key.contains("?")) { if (key.contains("?")) {
String[] options = key.split("\\?"); String[] options = key.split("\\?");
for (String option : options) { for (String option : options) {
@@ -243,7 +241,7 @@ public final class Items {
* @param itemStack The itemStack to check. * @param itemStack The itemStack to check.
* @return If is recipe. * @return If is recipe.
*/ */
public boolean isCustomItem(@NotNull final ItemStack itemStack) { public static boolean isCustomItem(@NotNull final ItemStack itemStack) {
for (TestableItem item : REGISTRY.values()) { for (TestableItem item : REGISTRY.values()) {
if (item.matches(itemStack)) { if (item.matches(itemStack)) {
return true; return true;
@@ -259,7 +257,7 @@ public final class Items {
* @return The custom item, or null if not exists. * @return The custom item, or null if not exists.
*/ */
@Nullable @Nullable
public CustomItem getCustomItem(@NotNull final ItemStack itemStack) { public static CustomItem getCustomItem(@NotNull final ItemStack itemStack) {
for (TestableItem item : REGISTRY.values()) { for (TestableItem item : REGISTRY.values()) {
if (item.matches(itemStack)) { if (item.matches(itemStack)) {
return getOrWrap(item); return getOrWrap(item);
@@ -273,7 +271,7 @@ public final class Items {
* *
* @return A set of all items. * @return A set of all items.
*/ */
public Set<CustomItem> getCustomItems() { public static Set<CustomItem> getCustomItems() {
return REGISTRY.values().stream().map(Items::getOrWrap).collect(Collectors.toSet()); return REGISTRY.values().stream().map(Items::getOrWrap).collect(Collectors.toSet());
} }
@@ -286,7 +284,7 @@ public final class Items {
* @param item The item. * @param item The item.
* @return The CustomItem. * @return The CustomItem.
*/ */
public CustomItem getOrWrap(@NotNull final TestableItem item) { public static CustomItem getOrWrap(@NotNull final TestableItem item) {
if (item instanceof CustomItem) { if (item instanceof CustomItem) {
return (CustomItem) item; return (CustomItem) item;
} else { } else {
@@ -297,4 +295,8 @@ public final class Items {
); );
} }
} }
private Items() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -0,0 +1,57 @@
package com.willfp.eco.core.items.args;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.function.Predicate;
/**
* Parse custom model data.
*/
public class CustomModelDataArgParser implements LookupArgParser {
@Override
public @Nullable Predicate<ItemStack> parseArguments(@NotNull final String[] args,
@NotNull final ItemMeta meta) {
Integer modelData = null;
for (String arg : args) {
String[] argSplit = arg.split(":");
if (!argSplit[0].equalsIgnoreCase("custom-model-data")) {
continue;
}
if (argSplit.length < 2) {
continue;
}
String asString = argSplit[1];
try {
modelData = Integer.parseInt(asString);
} catch (NumberFormatException e) {
modelData = null;
}
}
if (modelData == null) {
return null;
}
meta.setCustomModelData(modelData);
int finalModelData = modelData;
return test -> {
if (!test.hasItemMeta()) {
return false;
}
ItemMeta testMeta = test.getItemMeta();
assert testMeta != null;
return testMeta.getCustomModelData() == finalModelData;
};
}
}

View File

@@ -1,8 +1,6 @@
package com.willfp.eco.core.items.builder; package com.willfp.eco.core.items.builder;
import com.willfp.eco.util.StringUtils; import com.willfp.eco.util.StringUtils;
import lombok.AccessLevel;
import lombok.Getter;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
@@ -29,13 +27,11 @@ public abstract class AbstractItemStackBuilder<T extends ItemMeta, U extends Abs
/** /**
* The ItemMeta used while building. * The ItemMeta used while building.
*/ */
@Getter(AccessLevel.PROTECTED)
private final T meta; private final T meta;
/** /**
* The ItemStack. * The ItemStack.
*/ */
@Getter(AccessLevel.PROTECTED)
private final ItemStack base; private final ItemStack base;
/** /**
@@ -201,4 +197,22 @@ public abstract class AbstractItemStackBuilder<T extends ItemMeta, U extends Abs
return base; return base;
} }
/**
* Get the base ItemStack.
*
* @return The base ItemStack.
*/
protected ItemStack getBase() {
return base;
}
/**
* Get the meta.
*
* @return The meta.
*/
protected T getMeta() {
return meta;
}
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.items.provider; package com.willfp.eco.core.items.provider;
import com.willfp.eco.core.items.TestableItem; import com.willfp.eco.core.items.TestableItem;
import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -17,7 +16,6 @@ public abstract class ItemProvider {
/** /**
* The namespace. * The namespace.
*/ */
@Getter
private final String namespace; private final String namespace;
/** /**
@@ -37,4 +35,13 @@ public abstract class ItemProvider {
*/ */
@Nullable @Nullable
public abstract TestableItem provideForKey(@NotNull String key); public abstract TestableItem provideForKey(@NotNull String key);
/**
* Get the namespace.
*
* @return The namespace.
*/
public String getNamespace() {
return this.namespace;
}
} }

View File

@@ -1,15 +1,17 @@
package com.willfp.eco.core.proxy; package com.willfp.eco.core.proxy;
import lombok.experimental.UtilityClass;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
/** /**
* Proxy / NMS constants. * Proxy / NMS constants.
*/ */
@UtilityClass public final class ProxyConstants {
public class ProxyConstants {
/** /**
* The NMS version that the server is running on. * The NMS version that the server is running on.
*/ */
public static final String NMS_VERSION = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; public static final String NMS_VERSION = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
private ProxyConstants() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -6,7 +6,6 @@ import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.items.Items; import com.willfp.eco.core.items.Items;
import com.willfp.eco.core.recipe.recipes.CraftingRecipe; import com.willfp.eco.core.recipe.recipes.CraftingRecipe;
import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe; import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe;
import lombok.experimental.UtilityClass;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -17,9 +16,8 @@ import java.util.List;
/** /**
* Utility class to manage and register crafting recipes. * Utility class to manage and register crafting recipes.
*/ */
@UtilityClass
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public class Recipes { public final class Recipes {
/** /**
* Registry of all recipes. * Registry of all recipes.
*/ */
@@ -31,7 +29,7 @@ public class Recipes {
* *
* @param recipe The recipe. * @param recipe The recipe.
*/ */
public void register(@NotNull final CraftingRecipe recipe) { public static void register(@NotNull final CraftingRecipe recipe) {
RECIPES.forcePut(recipe.getKey(), recipe); RECIPES.forcePut(recipe.getKey(), recipe);
} }
@@ -42,7 +40,7 @@ public class Recipes {
* @return The match, or null if not found. * @return The match, or null if not found.
*/ */
@Nullable @Nullable
public CraftingRecipe getMatch(@NotNull final ItemStack[] matrix) { public static CraftingRecipe getMatch(@NotNull final ItemStack[] matrix) {
return RECIPES.values().stream().filter(recipe -> recipe.test(matrix)).findFirst().orElse(null); return RECIPES.values().stream().filter(recipe -> recipe.test(matrix)).findFirst().orElse(null);
} }
@@ -53,7 +51,7 @@ public class Recipes {
* @return The recipe, or null if not found. * @return The recipe, or null if not found.
*/ */
@Nullable @Nullable
public CraftingRecipe getRecipe(@NotNull final NamespacedKey key) { public static CraftingRecipe getRecipe(@NotNull final NamespacedKey key) {
CraftingRecipe recipe = RECIPES.get(key); CraftingRecipe recipe = RECIPES.get(key);
if (recipe != null) { if (recipe != null) {
return recipe; return recipe;
@@ -77,10 +75,10 @@ public class Recipes {
* @param recipeStrings The recipe. * @param recipeStrings The recipe.
* @return The recipe. * @return The recipe.
*/ */
public CraftingRecipe createAndRegisterRecipe(@NotNull final EcoPlugin plugin, public static CraftingRecipe createAndRegisterRecipe(@NotNull final EcoPlugin plugin,
@NotNull final String key, @NotNull final String key,
@NotNull final ItemStack output, @NotNull final ItemStack output,
@NotNull final List<String> recipeStrings) { @NotNull final List<String> recipeStrings) {
ShapedCraftingRecipe.Builder builder = ShapedCraftingRecipe.builder(plugin, key).setOutput(output); ShapedCraftingRecipe.Builder builder = ShapedCraftingRecipe.builder(plugin, key).setOutput(output);
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
@@ -92,4 +90,8 @@ public class Recipes {
return recipe; return recipe;
} }
private Recipes() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.recipe.parts; package com.willfp.eco.core.recipe.parts;
import com.willfp.eco.core.items.TestableItem; import com.willfp.eco.core.items.TestableItem;
import lombok.Getter;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -15,7 +14,6 @@ public class MaterialTestableItem implements TestableItem {
/** /**
* The material. * The material.
*/ */
@Getter
private final Material material; private final Material material;
/** /**
@@ -44,4 +42,13 @@ public class MaterialTestableItem implements TestableItem {
public ItemStack getItem() { public ItemStack getItem() {
return new ItemStack(material); return new ItemStack(material);
} }
/**
* Get the material.
*
* @return The material.
*/
public Material getMaterial() {
return this.material;
}
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.recipe.parts; package com.willfp.eco.core.recipe.parts;
import com.willfp.eco.core.items.TestableItem; import com.willfp.eco.core.items.TestableItem;
import lombok.Getter;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -17,13 +16,11 @@ public class ModifiedTestableItem implements TestableItem {
/** /**
* The item. * The item.
*/ */
@Getter
private final TestableItem handle; private final TestableItem handle;
/** /**
* The amount. * The amount.
*/ */
@Getter
private final Predicate<ItemStack> test; private final Predicate<ItemStack> test;
/** /**
@@ -61,4 +58,22 @@ public class ModifiedTestableItem implements TestableItem {
public ItemStack getItem() { public ItemStack getItem() {
return example; return example;
} }
/**
* Get the handle.
*
* @return The handle.
*/
public TestableItem getHandle() {
return this.handle;
}
/**
* Get the test.
*
* @return The test.
*/
public Predicate<ItemStack> getTest() {
return this.test;
}
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.recipe.parts; package com.willfp.eco.core.recipe.parts;
import com.willfp.eco.core.items.TestableItem; import com.willfp.eco.core.items.TestableItem;
import lombok.Getter;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -14,13 +13,11 @@ public class TestableStack implements TestableItem {
/** /**
* The item. * The item.
*/ */
@Getter
private final TestableItem handle; private final TestableItem handle;
/** /**
* The amount. * The amount.
*/ */
@Getter
private final int amount; private final int amount;
/** /**
@@ -55,4 +52,22 @@ public class TestableStack implements TestableItem {
temp.setAmount(amount); temp.setAmount(amount);
return temp; return temp;
} }
/**
* Get the handle.
*
* @return The handle.
*/
public TestableItem getHandle() {
return this.handle;
}
/**
* Get the amount in the stack.
*
* @return The amount.
*/
public int getAmount() {
return this.amount;
}
} }

View File

@@ -1,7 +1,5 @@
package com.willfp.eco.core.recipe.recipes; package com.willfp.eco.core.recipe.recipes;
import lombok.Getter;
/** /**
* Positions in a 3x3 crafting recipe. * Positions in a 3x3 crafting recipe.
*/ */
@@ -54,7 +52,6 @@ public enum RecipePosition {
/** /**
* The index within a crafting table matrix. * The index within a crafting table matrix.
*/ */
@Getter
private final int index; private final int index;
/** /**
@@ -65,4 +62,13 @@ public enum RecipePosition {
RecipePosition(final int index) { RecipePosition(final int index) {
this.index = index; this.index = index;
} }
/**
* Get the index within a crafting table matrix.
*
* @return The index.
*/
public int getIndex() {
return index;
}
} }

View File

@@ -7,7 +7,6 @@ import com.willfp.eco.core.items.TestableItem;
import com.willfp.eco.core.recipe.Recipes; import com.willfp.eco.core.recipe.Recipes;
import com.willfp.eco.core.recipe.parts.EmptyTestableItem; import com.willfp.eco.core.recipe.parts.EmptyTestableItem;
import com.willfp.eco.core.recipe.parts.TestableStack; import com.willfp.eco.core.recipe.parts.TestableStack;
import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -27,25 +26,21 @@ public final class ShapedCraftingRecipe extends PluginDependent<EcoPlugin> imple
/** /**
* Recipe parts. * Recipe parts.
*/ */
@Getter
private final List<TestableItem> parts; private final List<TestableItem> parts;
/** /**
* The key of the recipe. * The key of the recipe.
*/ */
@Getter
private final NamespacedKey key; private final NamespacedKey key;
/** /**
* The key of the displayed recipe. * The key of the displayed recipe.
*/ */
@Getter
private final NamespacedKey displayedKey; private final NamespacedKey displayedKey;
/** /**
* The recipe's output. * The recipe's output.
*/ */
@Getter
private final ItemStack output; private final ItemStack output;
private ShapedCraftingRecipe(@NotNull final EcoPlugin plugin, private ShapedCraftingRecipe(@NotNull final EcoPlugin plugin,
@@ -133,6 +128,42 @@ public final class ShapedCraftingRecipe extends PluginDependent<EcoPlugin> imple
return new Builder(plugin, key); return new Builder(plugin, key);
} }
/**
* Get the parts.
*
* @return The parts.
*/
public List<TestableItem> getParts() {
return this.parts;
}
/**
* Get the key.
*
* @return The key.
*/
public NamespacedKey getKey() {
return this.key;
}
/**
* Get the displayed key.
*
* @return The displayed key.
*/
public NamespacedKey getDisplayedKey() {
return this.displayedKey;
}
/**
* Get the output.
*
* @return The output.
*/
public ItemStack getOutput() {
return this.output;
}
/** /**
* Builder for recipes. * Builder for recipes.
*/ */

View File

@@ -1,14 +1,12 @@
package com.willfp.eco.core.requirement; package com.willfp.eco.core.requirement;
import com.willfp.eco.core.Eco; import com.willfp.eco.core.Eco;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
* Contains methods and fields pertaining to requirements. * Contains methods and fields pertaining to requirements.
*/ */
@UtilityClass public final class Requirements {
public class Requirements {
/** /**
* Requires a player to have a permission. * Requires a player to have a permission.
*/ */
@@ -38,4 +36,8 @@ public class Requirements {
public static Requirement getByID(@NotNull final String name) { public static Requirement getByID(@NotNull final String name) {
return Eco.getHandler().getRequirementFactory().create(name); return Eco.getHandler().getRequirementFactory().create(name);
} }
private Requirements() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,7 +1,5 @@
package com.willfp.eco.core.tuples; package com.willfp.eco.core.tuples;
import lombok.Getter;
import lombok.Setter;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
/** /**
@@ -14,16 +12,12 @@ public class Pair<A, B> {
/** /**
* The first item in the tuple. * The first item in the tuple.
*/ */
@Getter
@Setter
@Nullable @Nullable
private A first; private A first;
/** /**
* The second item in the tuple. * The second item in the tuple.
*/ */
@Getter
@Setter
@Nullable @Nullable
private B second; private B second;
@@ -60,4 +54,40 @@ public class Pair<A, B> {
public B component2() { public B component2() {
return second; return second;
} }
/**
* Get the first member of the tuple.
*
* @return The first member.
*/
public @Nullable A getFirst() {
return this.first;
}
/**
* Get the second member of the tuple.
*
* @return The second member.
*/
public @Nullable B getSecond() {
return this.second;
}
/**
* Set the first member of the tuple.
*
* @param first The data to set.
*/
public void setFirst(@Nullable final A first) {
this.first = first;
}
/**
* Set the second member of the tuple.
*
* @param second The data to set.
*/
public void setSecond(@Nullable final B second) {
this.second = second;
}
} }

View File

@@ -1,7 +1,5 @@
package com.willfp.eco.core.tuples; package com.willfp.eco.core.tuples;
import lombok.Getter;
import lombok.Setter;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
/** /**
@@ -15,8 +13,6 @@ public class Triplet<A, B, C> extends Pair<A, B> {
/** /**
* The third item in the tuple. * The third item in the tuple.
*/ */
@Getter
@Setter
@Nullable @Nullable
private C third; private C third;
@@ -45,4 +41,22 @@ public class Triplet<A, B, C> extends Pair<A, B> {
public C component3() { public C component3() {
return third; return third;
} }
/**
* Get the third member of the tuple.
*
* @return The third.
*/
public @Nullable C getThird() {
return this.third;
}
/**
* Set the third member of the tuple.
*
* @param third The data to set.
*/
public void setThird(@Nullable final C third) {
this.third = third;
}
} }

View File

@@ -1,7 +1,6 @@
package com.willfp.eco.core.web; package com.willfp.eco.core.web;
import com.willfp.eco.core.Eco; import com.willfp.eco.core.Eco;
import lombok.Getter;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
@@ -12,6 +11,7 @@ import java.io.InputStreamReader;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -23,7 +23,6 @@ public class Paste {
/** /**
* The contents. * The contents.
*/ */
@Getter
private final String contents; private final String contents;
/** /**
@@ -45,10 +44,10 @@ public class Paste {
public void getHastebinToken(@NotNull final Consumer<String> callback) { public void getHastebinToken(@NotNull final Consumer<String> callback) {
Eco.getHandler().getEcoPlugin().getScheduler().runAsync(() -> { Eco.getHandler().getEcoPlugin().getScheduler().runAsync(() -> {
try { try {
byte[] postData = contents.getBytes(StandardCharsets.UTF_8); byte[] postData = URLEncoder.encode(contents, StandardCharsets.UTF_8).getBytes(StandardCharsets.UTF_8);
int postDataLength = postData.length; int postDataLength = postData.length;
String requestURL = "https://hastebin.com/documents"; String requestURL = "https://paste.willfp.com/documents";
URL url = new URL(requestURL); URL url = new URL(requestURL);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setDoOutput(true); conn.setDoOutput(true);
@@ -88,7 +87,7 @@ public class Paste {
public static Paste getFromHastebin(@NotNull final String token) { public static Paste getFromHastebin(@NotNull final String token) {
try { try {
StringBuilder result = new StringBuilder(); StringBuilder result = new StringBuilder();
URL url = new URL("https://hastebin.com/raw/" + token); URL url = new URL("https://paste.willfp.com/raw/" + token);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET"); conn.setRequestMethod("GET");
try (var reader = new BufferedReader( try (var reader = new BufferedReader(
@@ -104,4 +103,13 @@ public class Paste {
return null; return null;
} }
/**
* Get the contents.
*
* @return The contents.
*/
public String getContents() {
return this.contents;
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.bukkit.entity.Arrow; import org.bukkit.entity.Arrow;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.MetadataValue; import org.bukkit.metadata.MetadataValue;
@@ -12,9 +11,7 @@ import java.util.List;
/** /**
* Utilities / API methods for arrows. * Utilities / API methods for arrows.
*/ */
@UtilityClass public final class ArrowUtils {
public class ArrowUtils {
/** /**
* Get the bow from an arrow. * Get the bow from an arrow.
* *
@@ -22,7 +19,7 @@ public class ArrowUtils {
* @return The bow, or null if no bow. * @return The bow, or null if no bow.
*/ */
@Nullable @Nullable
public ItemStack getBow(@NotNull final Arrow arrow) { public static ItemStack getBow(@NotNull final Arrow arrow) {
List<MetadataValue> values = arrow.getMetadata("shot-from"); List<MetadataValue> values = arrow.getMetadata("shot-from");
if (values.isEmpty()) { if (values.isEmpty()) {
@@ -35,4 +32,8 @@ public class ArrowUtils {
return (ItemStack) values.get(0).value(); return (ItemStack) values.get(0).value();
} }
private ArrowUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
@@ -21,22 +20,21 @@ import java.util.function.BiConsumer;
/** /**
* Utilities / API methods for blocks. * Utilities / API methods for blocks.
*/ */
@UtilityClass public final class BlockUtils {
public class BlockUtils {
/** /**
* If the meta set function has been set. * If the meta set function has been set.
*/ */
private boolean initialized = false; private static boolean initialized = false;
/** /**
* The block break function. * The block break function.
*/ */
private BiConsumer<Player, Block> blockBreakConsumer = null; private static BiConsumer<Player, Block> blockBreakConsumer = null;
private Set<Block> getNearbyBlocks(@NotNull final Block start, private static Set<Block> getNearbyBlocks(@NotNull final Block start,
@NotNull final List<Material> allowedMaterials, @NotNull final List<Material> allowedMaterials,
@NotNull final Set<Block> blocks, @NotNull final Set<Block> blocks,
final int limit) { final int limit) {
for (BlockFace face : BlockFace.values()) { for (BlockFace face : BlockFace.values()) {
Block block = start.getRelative(face); Block block = start.getRelative(face);
if (blocks.contains(block)) { if (blocks.contains(block)) {
@@ -66,9 +64,9 @@ public class BlockUtils {
* @return A set of all {@link Block}s. * @return A set of all {@link Block}s.
*/ */
@NotNull @NotNull
public Set<Block> getVein(@NotNull final Block start, public static Set<Block> getVein(@NotNull final Block start,
@NotNull final List<Material> allowedMaterials, @NotNull final List<Material> allowedMaterials,
final int limit) { final int limit) {
return getNearbyBlocks(start, allowedMaterials, new HashSet<>(), limit); return getNearbyBlocks(start, allowedMaterials, new HashSet<>(), limit);
} }
@@ -78,8 +76,8 @@ public class BlockUtils {
* @param player The player to break the block as. * @param player The player to break the block as.
* @param block The block to break. * @param block The block to break.
*/ */
public void breakBlock(@NotNull final Player player, public static void breakBlock(@NotNull final Player player,
@NotNull final Block block) { @NotNull final Block block) {
Validate.isTrue(initialized, "Must be initialized!"); Validate.isTrue(initialized, "Must be initialized!");
Validate.notNull(blockBreakConsumer, "Must be initialized!"); Validate.notNull(blockBreakConsumer, "Must be initialized!");
@@ -100,7 +98,7 @@ public class BlockUtils {
* @param block The block. * @param block The block.
* @return If placed by a player. * @return If placed by a player.
*/ */
public boolean isPlayerPlaced(@NotNull final Block block) { public static boolean isPlayerPlaced(@NotNull final Block block) {
Chunk chunk = block.getChunk(); Chunk chunk = block.getChunk();
return chunk.getPersistentDataContainer().has( return chunk.getPersistentDataContainer().has(
@@ -115,11 +113,15 @@ public class BlockUtils {
* @param function The function. * @param function The function.
*/ */
@ApiStatus.Internal @ApiStatus.Internal
public void initialize(@NotNull final BiConsumer<Player, Block> function) { public static void initialize(@NotNull final BiConsumer<Player, Block> function) {
Validate.isTrue(!initialized, "Already initialized!"); Validate.isTrue(!initialized, "Already initialized!");
blockBreakConsumer = function; blockBreakConsumer = function;
initialized = true; initialized = true;
} }
private BlockUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,13 +1,11 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
* Utilities / API methods for classes. * Utilities / API methods for classes.
*/ */
@UtilityClass public final class ClassUtils {
public class ClassUtils {
/** /**
* Get if a class exists. * Get if a class exists.
* *
@@ -15,7 +13,7 @@ public class ClassUtils {
* @return If the class exists. * @return If the class exists.
* @see Class#forName(String) * @see Class#forName(String)
*/ */
public boolean exists(@NotNull final String className) { public static boolean exists(@NotNull final String className) {
try { try {
Class.forName(className); Class.forName(className);
return true; return true;
@@ -23,4 +21,8 @@ public class ClassUtils {
return false; return false;
} }
} }
private ClassUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
@@ -17,8 +16,7 @@ import org.jetbrains.annotations.NotNull;
/** /**
* Utilities / API methods for item durability. * Utilities / API methods for item durability.
*/ */
@UtilityClass public final class DurabilityUtils {
public class DurabilityUtils {
/** /**
* Damage an item in a player's inventory. * Damage an item in a player's inventory.
* The slot of a held item can be obtained with {@link PlayerInventory#getHeldItemSlot()}. * The slot of a held item can be obtained with {@link PlayerInventory#getHeldItemSlot()}.
@@ -29,10 +27,10 @@ public class DurabilityUtils {
* @param damage The amount of damage to deal. * @param damage The amount of damage to deal.
* @param slot The slot in the inventory of the item. * @param slot The slot in the inventory of the item.
*/ */
public void damageItem(@NotNull final Player player, public static void damageItem(@NotNull final Player player,
@NotNull final ItemStack item, @NotNull final ItemStack item,
final int damage, final int damage,
final int slot) { final int slot) {
if (item.getItemMeta() == null) { if (item.getItemMeta() == null) {
return; return;
} }
@@ -78,9 +76,9 @@ public class DurabilityUtils {
* @param damage The amount of damage to deal. * @param damage The amount of damage to deal.
* @param player The player. * @param player The player.
*/ */
public void damageItemNoBreak(@NotNull final ItemStack item, public static void damageItemNoBreak(@NotNull final ItemStack item,
final int damage, final int damage,
@NotNull final Player player) { @NotNull final Player player) {
if (item.getItemMeta() == null) { if (item.getItemMeta() == null) {
return; return;
} }
@@ -114,8 +112,8 @@ public class DurabilityUtils {
* @param item The item to damage. * @param item The item to damage.
* @param repair The amount of damage to heal. * @param repair The amount of damage to heal.
*/ */
public void repairItem(@NotNull final ItemStack item, public static void repairItem(@NotNull final ItemStack item,
final int repair) { final int repair) {
if (item.getItemMeta() == null) { if (item.getItemMeta() == null) {
return; return;
} }
@@ -133,4 +131,8 @@ public class DurabilityUtils {
item.setItemMeta((ItemMeta) meta); item.setItemMeta((ItemMeta) meta);
} }
} }
private DurabilityUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@@ -9,9 +8,7 @@ import org.jetbrains.annotations.NotNull;
/** /**
* Utilities / API methods for lightning. * Utilities / API methods for lightning.
*/ */
@UtilityClass public final class LightningUtils {
public class LightningUtils {
/** /**
* Strike lightning on player without fire. * Strike lightning on player without fire.
* *
@@ -19,9 +16,9 @@ public class LightningUtils {
* @param damage The damage to deal. * @param damage The damage to deal.
* @param silent If the lightning sound should be played locally * @param silent If the lightning sound should be played locally
*/ */
public void strike(@NotNull final LivingEntity victim, public static void strike(@NotNull final LivingEntity victim,
final double damage, final double damage,
final boolean silent) { final boolean silent) {
Location loc = victim.getLocation(); Location loc = victim.getLocation();
if (silent) { if (silent) {
@@ -40,8 +37,12 @@ public class LightningUtils {
* @param victim The entity to smite. * @param victim The entity to smite.
* @param damage The damage to deal. * @param damage The damage to deal.
*/ */
public void strike(@NotNull final LivingEntity victim, public static void strike(@NotNull final LivingEntity victim,
final double damage) { final double damage) {
strike(victim, damage, false); strike(victim, damage, false);
} }
private LightningUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -12,8 +11,7 @@ import java.util.Map;
/** /**
* Utilities / API methods for lists. * Utilities / API methods for lists.
*/ */
@UtilityClass public final class ListUtils {
public class ListUtils {
/** /**
* Initialize 2D list of a given size. * Initialize 2D list of a given size.
* *
@@ -57,4 +55,8 @@ public class ListUtils {
return frequencyMap; return frequencyMap;
} }
private ListUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,14 +1,12 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import com.willfp.eco.core.tuples.Pair; import com.willfp.eco.core.tuples.Pair;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
* Utilities / API methods for menus. * Utilities / API methods for menus.
*/ */
@UtilityClass public final class MenuUtils {
public class MenuUtils {
/** /**
* Convert 0-53 slot to row and column pair. * Convert 0-53 slot to row and column pair.
* *
@@ -16,9 +14,13 @@ public class MenuUtils {
* @return The pair of row and columns. * @return The pair of row and columns.
*/ */
@NotNull @NotNull
public Pair<Integer, Integer> convertSlotToRowColumn(final int slot) { public static Pair<Integer, Integer> convertSlotToRowColumn(final int slot) {
int row = Math.floorDiv(slot, 9); int row = Math.floorDiv(slot, 9);
int column = slot - row * 9; int column = slot - row * 9;
return new Pair<>(row + 1, column + 1); return new Pair<>(row + 1, column + 1);
} }
private MenuUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -9,8 +8,7 @@ import java.util.Objects;
/** /**
* Utilities / API methods for {@link NamespacedKey}s. * Utilities / API methods for {@link NamespacedKey}s.
*/ */
@UtilityClass public final class NamespacedKeyUtils {
public class NamespacedKeyUtils {
/** /**
* Create a NamespacedKey for eco. * Create a NamespacedKey for eco.
* *
@@ -18,7 +16,7 @@ public class NamespacedKeyUtils {
* @return The key. * @return The key.
*/ */
@NotNull @NotNull
public NamespacedKey createEcoKey(@NotNull final String string) { public static NamespacedKey createEcoKey(@NotNull final String string) {
return Objects.requireNonNull(NamespacedKey.fromString("eco:" + string)); return Objects.requireNonNull(NamespacedKey.fromString("eco:" + string));
} }
@@ -30,8 +28,12 @@ public class NamespacedKeyUtils {
* @return The key. * @return The key.
*/ */
@NotNull @NotNull
public NamespacedKey create(@NotNull final String namespace, public static NamespacedKey create(@NotNull final String namespace,
@NotNull final String key) { @NotNull final String key) {
return Objects.requireNonNull(NamespacedKey.fromString(namespace + ":" + key)); return Objects.requireNonNull(NamespacedKey.fromString(namespace + ":" + key));
} }
private NamespacedKeyUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.text.DecimalFormat; import java.text.DecimalFormat;
@@ -11,8 +10,7 @@ import java.util.concurrent.ThreadLocalRandom;
/** /**
* Utilities / API methods for numbers. * Utilities / API methods for numbers.
*/ */
@UtilityClass public final class NumberUtils {
public class NumberUtils {
/** /**
* Sin lookup table. * Sin lookup table.
*/ */
@@ -72,8 +70,8 @@ public class NumberUtils {
* @param bias The bias between -1 and 1, where higher values bias input values to lower output values. * @param bias The bias between -1 and 1, where higher values bias input values to lower output values.
* @return The biased output. * @return The biased output.
*/ */
public double bias(final double input, public static double bias(final double input,
final double bias) { final double bias) {
double k = Math.pow(1 - bias, 3); double k = Math.pow(1 - bias, 3);
return (input * k) / (input * k - input + 1); return (input * k) / (input * k - input + 1);
@@ -86,8 +84,8 @@ public class NumberUtils {
* @param limit The maximum. * @param limit The maximum.
* @return The new value. * @return The new value.
*/ */
public int equalIfOver(final int toChange, public static int equalIfOver(final int toChange,
final int limit) { final int limit) {
return Math.min(toChange, limit); return Math.min(toChange, limit);
} }
@@ -98,8 +96,8 @@ public class NumberUtils {
* @param limit The maximum. * @param limit The maximum.
* @return The new value. * @return The new value.
*/ */
public double equalIfOver(final double toChange, public static double equalIfOver(final double toChange,
final double limit) { final double limit) {
return Math.min(toChange, limit); return Math.min(toChange, limit);
} }
@@ -110,7 +108,7 @@ public class NumberUtils {
* @return The number, converted to a roman numeral. * @return The number, converted to a roman numeral.
*/ */
@NotNull @NotNull
public String toNumeral(final int number) { public static String toNumeral(final int number) {
if (number >= 1 && number <= 4096) { if (number >= 1 && number <= 4096) {
int l = NUMERALS.floorKey(number); int l = NUMERALS.floorKey(number);
if (number == l) { if (number == l) {
@@ -147,8 +145,8 @@ public class NumberUtils {
* @param max Maximum. * @param max Maximum.
* @return Random integer. * @return Random integer.
*/ */
public int randInt(final int min, public static int randInt(final int min,
final int max) { final int max) {
return ThreadLocalRandom.current().nextInt(min, max + 1); return ThreadLocalRandom.current().nextInt(min, max + 1);
} }
@@ -159,8 +157,8 @@ public class NumberUtils {
* @param max Maximum. * @param max Maximum.
* @return Random double. * @return Random double.
*/ */
public double randFloat(final double min, public static double randFloat(final double min,
final double max) { final double max) {
return ThreadLocalRandom.current().nextDouble(min, max); return ThreadLocalRandom.current().nextDouble(min, max);
} }
@@ -172,9 +170,9 @@ public class NumberUtils {
* @param peak Peak. * @param peak Peak.
* @return Random double. * @return Random double.
*/ */
public double triangularDistribution(final double minimum, public static double triangularDistribution(final double minimum,
final double maximum, final double maximum,
final double peak) { final double peak) {
double f = (peak - minimum) / (maximum - minimum); double f = (peak - minimum) / (maximum - minimum);
double rand = Math.random(); double rand = Math.random();
if (rand < f) { if (rand < f) {
@@ -190,7 +188,7 @@ public class NumberUtils {
* @param toLog The number. * @param toLog The number.
* @return The result. * @return The result.
*/ */
public int log2(final int toLog) { public static int log2(final int toLog) {
return (int) (Math.log(toLog) / Math.log(2)); return (int) (Math.log(toLog) / Math.log(2));
} }
@@ -201,10 +199,14 @@ public class NumberUtils {
* @return Formatted. * @return Formatted.
*/ */
@NotNull @NotNull
public String format(final double toFormat) { public static String format(final double toFormat) {
DecimalFormat df = new DecimalFormat("0.00"); DecimalFormat df = new DecimalFormat("0.00");
String formatted = df.format(toFormat); String formatted = df.format(toFormat);
return formatted.endsWith("00") ? String.valueOf((int) toFormat) : formatted; return formatted.endsWith("00") ? String.valueOf((int) toFormat) : formatted;
} }
private NumberUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -5,7 +5,6 @@ import com.willfp.eco.core.Prerequisite;
import com.willfp.eco.core.data.PlayerProfile; import com.willfp.eco.core.data.PlayerProfile;
import com.willfp.eco.core.data.keys.PersistentDataKey; import com.willfp.eco.core.data.keys.PersistentDataKey;
import com.willfp.eco.core.data.keys.PersistentDataKeyType; import com.willfp.eco.core.data.keys.PersistentDataKeyType;
import lombok.experimental.UtilityClass;
import net.kyori.adventure.audience.Audience; import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
@@ -16,8 +15,7 @@ import org.jetbrains.annotations.NotNull;
/** /**
* Utilities / API methods for players. * Utilities / API methods for players.
*/ */
@UtilityClass public final class PlayerUtils {
public class PlayerUtils {
/** /**
* The data key for saved player names. * The data key for saved player names.
*/ */
@@ -34,7 +32,7 @@ public class PlayerUtils {
* @return The audience. * @return The audience.
*/ */
@NotNull @NotNull
public Audience getAudience(@NotNull final Player player) { public static Audience getAudience(@NotNull final Player player) {
BukkitAudiences adventure = Eco.getHandler().getAdventure(); BukkitAudiences adventure = Eco.getHandler().getAdventure();
if (Prerequisite.HAS_PAPER.isMet()) { if (Prerequisite.HAS_PAPER.isMet()) {
@@ -59,7 +57,7 @@ public class PlayerUtils {
* @return The audience. * @return The audience.
*/ */
@NotNull @NotNull
public Audience getAudience(@NotNull final CommandSender sender) { public static Audience getAudience(@NotNull final CommandSender sender) {
BukkitAudiences adventure = Eco.getHandler().getAdventure(); BukkitAudiences adventure = Eco.getHandler().getAdventure();
if (Prerequisite.HAS_PAPER.isMet()) { if (Prerequisite.HAS_PAPER.isMet()) {
@@ -83,14 +81,21 @@ public class PlayerUtils {
* @param player The player. * @param player The player.
* @return The player name. * @return The player name.
*/ */
public String getSavedDisplayName(@NotNull final OfflinePlayer player) { public static String getSavedDisplayName(@NotNull final OfflinePlayer player) {
PlayerProfile profile = PlayerProfile.load(player); PlayerProfile profile = PlayerProfile.load(player);
if (player instanceof Player onlinePlayer) { if (player instanceof Player onlinePlayer) {
profile.write(PLAYER_NAME_KEY, onlinePlayer.getDisplayName()); profile.write(PLAYER_NAME_KEY, onlinePlayer.getDisplayName());
return onlinePlayer.getDisplayName();
} }
return profile.read(PLAYER_NAME_KEY); String saved = profile.read(PLAYER_NAME_KEY);
if (saved.equals(PLAYER_NAME_KEY.getDefaultValue())) {
return player.getName();
}
return saved;
} }
/** /**
@@ -98,8 +103,12 @@ public class PlayerUtils {
* *
* @param player The player. * @param player The player.
*/ */
public void updateSavedDisplayName(@NotNull final Player player) { public static void updateSavedDisplayName(@NotNull final Player player) {
PlayerProfile profile = PlayerProfile.load(player); PlayerProfile profile = PlayerProfile.load(player);
profile.write(PLAYER_NAME_KEY, player.getDisplayName()); profile.write(PLAYER_NAME_KEY, player.getDisplayName());
} }
private PlayerUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,21 +1,19 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionData;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
* Utilities / API methods for potions. * Utilities / API methods for potions.
*/ */
@UtilityClass public final class PotionUtils {
public class PotionUtils {
/** /**
* Get the duration (in ticks) for potion data. * Get the duration (in ticks) for potion data.
* *
* @param data The data. * @param data The data.
* @return The duration. * @return The duration.
*/ */
public int getDuration(@NotNull final PotionData data) { public static int getDuration(@NotNull final PotionData data) {
if (data.isExtended()) { if (data.isExtended()) {
return switch (data.getType()) { return switch (data.getType()) {
case INSTANT_DAMAGE, INSTANT_HEAL: yield 0; case INSTANT_DAMAGE, INSTANT_HEAL: yield 0;
@@ -44,4 +42,8 @@ public class PotionUtils {
default: yield 3600; default: yield 3600;
}; };
} }
private PotionUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -10,19 +9,18 @@ import java.util.function.Supplier;
/** /**
* Utilities / API methods for the server. * Utilities / API methods for the server.
*/ */
@UtilityClass public final class ServerUtils {
public class ServerUtils {
/** /**
* The TPS supplier. * The TPS supplier.
*/ */
private Supplier<Double> tpsSupplier = null; private static Supplier<Double> tpsSupplier = null;
/** /**
* Get the current server TPS. * Get the current server TPS.
* *
* @return The TPS. * @return The TPS.
*/ */
public double getTps() { public static double getTps() {
Validate.notNull(tpsSupplier, "Not initialized!"); Validate.notNull(tpsSupplier, "Not initialized!");
double tps = tpsSupplier.get(); double tps = tpsSupplier.get();
@@ -40,9 +38,13 @@ public class ServerUtils {
* @param function The function. * @param function The function.
*/ */
@ApiStatus.Internal @ApiStatus.Internal
public void initialize(@NotNull final Supplier<Double> function) { public static void initialize(@NotNull final Supplier<Double> function) {
Validate.isTrue(tpsSupplier == null, "Already initialized!"); Validate.isTrue(tpsSupplier == null, "Already initialized!");
tpsSupplier = function; tpsSupplier = function;
} }
private ServerUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
@@ -13,22 +12,21 @@ import java.util.function.Function;
/** /**
* Utilities / API methods for player heads. * Utilities / API methods for player heads.
*/ */
@UtilityClass public final class SkullUtils {
public class SkullUtils {
/** /**
* If the meta set function has been set. * If the meta set function has been set.
*/ */
private boolean initialized = false; private static boolean initialized = false;
/** /**
* The meta set function. * The meta set function.
*/ */
private BiConsumer<SkullMeta, String> metaSetConsumer = null; private static BiConsumer<SkullMeta, String> metaSetConsumer = null;
/** /**
* The meta get function. * The meta get function.
*/ */
private Function<SkullMeta, String> metaGetConsumer = null; private static Function<SkullMeta, String> metaGetConsumer = null;
/** /**
* Set the texture of a skull from base64. * Set the texture of a skull from base64.
@@ -36,7 +34,7 @@ public class SkullUtils {
* @param meta The meta to modify. * @param meta The meta to modify.
* @param base64 The base64 texture. * @param base64 The base64 texture.
*/ */
public void setSkullTexture(@NotNull final SkullMeta meta, public static void setSkullTexture(@NotNull final SkullMeta meta,
@NotNull final String base64) { @NotNull final String base64) {
Validate.isTrue(initialized, "Must be initialized!"); Validate.isTrue(initialized, "Must be initialized!");
Validate.notNull(metaSetConsumer, "Must be initialized!"); Validate.notNull(metaSetConsumer, "Must be initialized!");
@@ -51,7 +49,7 @@ public class SkullUtils {
* @return The texture, potentially null. * @return The texture, potentially null.
*/ */
@Nullable @Nullable
public String getSkullTexture(@NotNull final SkullMeta meta) { public static String getSkullTexture(@NotNull final SkullMeta meta) {
Validate.isTrue(initialized, "Must be initialized!"); Validate.isTrue(initialized, "Must be initialized!");
Validate.notNull(metaGetConsumer, "Must be initialized!"); Validate.notNull(metaGetConsumer, "Must be initialized!");
@@ -65,7 +63,7 @@ public class SkullUtils {
* @param function2 Get function. * @param function2 Get function.
*/ */
@ApiStatus.Internal @ApiStatus.Internal
public void initialize(@NotNull final BiConsumer<SkullMeta, String> function, public static void initialize(@NotNull final BiConsumer<SkullMeta, String> function,
@NotNull final Function<SkullMeta, String> function2) { @NotNull final Function<SkullMeta, String> function2) {
Validate.isTrue(!initialized, "Already initialized!"); Validate.isTrue(!initialized, "Already initialized!");
@@ -73,4 +71,8 @@ public class SkullUtils {
metaGetConsumer = function2; metaGetConsumer = function2;
initialized = true; initialized = true;
} }
private SkullUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -4,11 +4,9 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.willfp.eco.core.Prerequisite; import com.willfp.eco.core.Prerequisite;
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager; import com.willfp.eco.core.integrations.placeholder.PlaceholderManager;
import lombok.experimental.UtilityClass;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.markdown.DiscordFlavor;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
@@ -16,7 +14,7 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.awt.Color; import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -25,18 +23,10 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static net.md_5.bungee.api.ChatColor.BOLD;
import static net.md_5.bungee.api.ChatColor.COLOR_CHAR;
import static net.md_5.bungee.api.ChatColor.ITALIC;
import static net.md_5.bungee.api.ChatColor.MAGIC;
import static net.md_5.bungee.api.ChatColor.STRIKETHROUGH;
import static net.md_5.bungee.api.ChatColor.UNDERLINE;
/** /**
* Utilities / API methods for strings. * Utilities / API methods for strings.
*/ */
@UtilityClass public final class StringUtils {
public class StringUtils {
/** /**
* Regexes for gradients. * Regexes for gradients.
*/ */
@@ -72,16 +62,16 @@ public class StringUtils {
* Color map. * Color map.
*/ */
private static final Map<String, ChatColor> COLOR_MAP = new ImmutableMap.Builder<String, ChatColor>() private static final Map<String, ChatColor> COLOR_MAP = new ImmutableMap.Builder<String, ChatColor>()
.put("&l", BOLD) .put("&l", ChatColor.BOLD)
.put("&o", ITALIC) .put("&o", ChatColor.ITALIC)
.put("&n", UNDERLINE) .put("&n", ChatColor.UNDERLINE)
.put("&m", STRIKETHROUGH) .put("&m", ChatColor.STRIKETHROUGH)
.put("&k", MAGIC) .put("&k", ChatColor.MAGIC)
.put("§l", BOLD) .put("§l", ChatColor.BOLD)
.put("§o", ITALIC) .put("§o", ChatColor.ITALIC)
.put("§n", UNDERLINE) .put("§n", ChatColor.UNDERLINE)
.put("§m", STRIKETHROUGH) .put("§m", ChatColor.STRIKETHROUGH)
.put("§k", MAGIC) .put("§k", ChatColor.MAGIC)
.build(); .build();
/** /**
@@ -93,7 +83,7 @@ public class StringUtils {
* @return The message, formatted. * @return The message, formatted.
*/ */
@NotNull @NotNull
public List<String> formatList(@NotNull final List<String> list) { public static List<String> formatList(@NotNull final List<String> list) {
return formatList(list, (Player) null); return formatList(list, (Player) null);
} }
@@ -107,8 +97,8 @@ public class StringUtils {
* @return The message, format. * @return The message, format.
*/ */
@NotNull @NotNull
public List<String> formatList(@NotNull final List<String> list, public static List<String> formatList(@NotNull final List<String> list,
@Nullable final Player player) { @Nullable final Player player) {
return formatList(list, player, FormatOption.WITH_PLACEHOLDERS); return formatList(list, player, FormatOption.WITH_PLACEHOLDERS);
} }
@@ -122,8 +112,8 @@ public class StringUtils {
* @return The message, formatted. * @return The message, formatted.
*/ */
@NotNull @NotNull
public List<String> formatList(@NotNull final List<String> list, public static List<String> formatList(@NotNull final List<String> list,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
return formatList(list, null, option); return formatList(list, null, option);
} }
@@ -138,9 +128,9 @@ public class StringUtils {
* @return The message, format. * @return The message, format.
*/ */
@NotNull @NotNull
public List<String> formatList(@NotNull final List<String> list, public static List<String> formatList(@NotNull final List<String> list,
@Nullable final Player player, @Nullable final Player player,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
List<String> translated = new ArrayList<>(); List<String> translated = new ArrayList<>();
for (String string : list) { for (String string : list) {
translated.add(format(string, player, option)); translated.add(format(string, player, option));
@@ -159,7 +149,7 @@ public class StringUtils {
* @see StringUtils#format(String, Player) * @see StringUtils#format(String, Player)
*/ */
@NotNull @NotNull
public String format(@NotNull final String message) { public static String format(@NotNull final String message) {
return format(message, (Player) null); return format(message, (Player) null);
} }
@@ -173,8 +163,8 @@ public class StringUtils {
* @return The message, formatted. * @return The message, formatted.
*/ */
@NotNull @NotNull
public String format(@NotNull final String message, public static String format(@NotNull final String message,
@Nullable final Player player) { @Nullable final Player player) {
return format(message, player, FormatOption.WITH_PLACEHOLDERS); return format(message, player, FormatOption.WITH_PLACEHOLDERS);
} }
@@ -189,8 +179,8 @@ public class StringUtils {
* @see StringUtils#format(String, Player) * @see StringUtils#format(String, Player)
*/ */
@NotNull @NotNull
public String format(@NotNull final String message, public static String format(@NotNull final String message,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
return format(message, null, option); return format(message, null, option);
} }
@@ -204,7 +194,7 @@ public class StringUtils {
* @see StringUtils#format(String, Player) * @see StringUtils#format(String, Player)
*/ */
@NotNull @NotNull
public Component formatToComponent(@NotNull final String message) { public static Component formatToComponent(@NotNull final String message) {
return formatToComponent(message, (Player) null); return formatToComponent(message, (Player) null);
} }
@@ -218,8 +208,8 @@ public class StringUtils {
* @return The message, formatted. * @return The message, formatted.
*/ */
@NotNull @NotNull
public Component formatToComponent(@NotNull final String message, public static Component formatToComponent(@NotNull final String message,
@Nullable final Player player) { @Nullable final Player player) {
return formatToComponent(message, player, FormatOption.WITH_PLACEHOLDERS); return formatToComponent(message, player, FormatOption.WITH_PLACEHOLDERS);
} }
@@ -234,8 +224,8 @@ public class StringUtils {
* @see StringUtils#format(String, Player) * @see StringUtils#format(String, Player)
*/ */
@NotNull @NotNull
public Component formatToComponent(@NotNull final String message, public static Component formatToComponent(@NotNull final String message,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
return formatToComponent(message, null, option); return formatToComponent(message, null, option);
} }
@@ -250,9 +240,9 @@ public class StringUtils {
* @return The message, formatted, as a component. * @return The message, formatted, as a component.
*/ */
@NotNull @NotNull
public Component formatToComponent(@NotNull final String message, public static Component formatToComponent(@NotNull final String message,
@Nullable final Player player, @Nullable final Player player,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
return toComponent(format(message, player, option)); return toComponent(format(message, player, option));
} }
@@ -267,9 +257,9 @@ public class StringUtils {
* @return The message, formatted. * @return The message, formatted.
*/ */
@NotNull @NotNull
public String format(@NotNull final String message, public static String format(@NotNull final String message,
@Nullable final Player player, @Nullable final Player player,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
String processedMessage = message; String processedMessage = message;
if (option == FormatOption.WITH_PLACEHOLDERS) { if (option == FormatOption.WITH_PLACEHOLDERS) {
processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player); processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player);
@@ -284,7 +274,7 @@ public class StringUtils {
} }
private static String translateMiniMessage(@NotNull final String message) { private static String translateMiniMessage(@NotNull final String message) {
return LEGACY_COMPONENT_SERIALIZER.serialize(MiniMessage.withMarkdownFlavor(DiscordFlavor.get()).parse(message)); return LEGACY_COMPONENT_SERIALIZER.serialize(MiniMessage.get().parse(message));
} }
private static String translateHexColorCodes(@NotNull final String message) { private static String translateHexColorCodes(@NotNull final String message) {
@@ -302,10 +292,10 @@ public class StringUtils {
StringBuilder builder = new StringBuilder(message.length() + 4 * 8); StringBuilder builder = new StringBuilder(message.length() + 4 * 8);
while (matcher.find()) { while (matcher.find()) {
String group = matcher.group(1); String group = matcher.group(1);
matcher.appendReplacement(builder, COLOR_CHAR + "x" matcher.appendReplacement(builder, ChatColor.COLOR_CHAR + "x"
+ COLOR_CHAR + group.charAt(0) + COLOR_CHAR + group.charAt(1) + ChatColor.COLOR_CHAR + group.charAt(0) + ChatColor.COLOR_CHAR + group.charAt(1)
+ COLOR_CHAR + group.charAt(2) + COLOR_CHAR + group.charAt(3) + ChatColor.COLOR_CHAR + group.charAt(2) + ChatColor.COLOR_CHAR + group.charAt(3)
+ COLOR_CHAR + group.charAt(4) + COLOR_CHAR + group.charAt(5)); + ChatColor.COLOR_CHAR + group.charAt(4) + ChatColor.COLOR_CHAR + group.charAt(5));
} }
return matcher.appendTail(builder).toString(); return matcher.appendTail(builder).toString();
@@ -379,7 +369,7 @@ public class StringUtils {
* @return The object stringified. * @return The object stringified.
*/ */
@NotNull @NotNull
public String internalToString(@Nullable final Object object) { public static String internalToString(@Nullable final Object object) {
if (object == null) { if (object == null) {
return "null"; return "null";
} }
@@ -405,8 +395,8 @@ public class StringUtils {
* @return The string with the prefix removed. * @return The string with the prefix removed.
*/ */
@NotNull @NotNull
public String removePrefix(@NotNull final String string, public static String removePrefix(@NotNull final String string,
@NotNull final String prefix) { @NotNull final String prefix) {
if (string.startsWith(prefix)) { if (string.startsWith(prefix)) {
return string.substring(prefix.length()); return string.substring(prefix.length());
} }
@@ -420,7 +410,7 @@ public class StringUtils {
* @return The JSON String. * @return The JSON String.
*/ */
@NotNull @NotNull
public String legacyToJson(@Nullable final String legacy) { public static String legacyToJson(@Nullable final String legacy) {
String processed = legacy; String processed = legacy;
if (legacy == null) { if (legacy == null) {
processed = ""; processed = "";
@@ -439,7 +429,7 @@ public class StringUtils {
* @return The legacy string. * @return The legacy string.
*/ */
@NotNull @NotNull
public String jsonToLegacy(@NotNull final String json) { public static String jsonToLegacy(@NotNull final String json) {
return LEGACY_COMPONENT_SERIALIZER.serialize( return LEGACY_COMPONENT_SERIALIZER.serialize(
GsonComponentSerializer.gson().deserialize(json) GsonComponentSerializer.gson().deserialize(json)
); );
@@ -452,7 +442,7 @@ public class StringUtils {
* @return The component. * @return The component.
*/ */
@NotNull @NotNull
public Component toComponent(@Nullable final String legacy) { public static Component toComponent(@Nullable final String legacy) {
String processed = legacy; String processed = legacy;
if (legacy == null) { if (legacy == null) {
processed = ""; processed = "";
@@ -468,7 +458,7 @@ public class StringUtils {
* @return The legacy text. * @return The legacy text.
*/ */
@NotNull @NotNull
public String toLegacy(@NotNull final Component component) { public static String toLegacy(@NotNull final Component component) {
return LEGACY_COMPONENT_SERIALIZER.serialize(component); return LEGACY_COMPONENT_SERIALIZER.serialize(component);
} }
@@ -486,4 +476,8 @@ public class StringUtils {
*/ */
WITHOUT_PLACEHOLDERS WITHOUT_PLACEHOLDERS
} }
private StringUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -3,7 +3,6 @@ package com.willfp.eco.util;
import com.google.common.collect.BiMap; import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
import com.willfp.eco.core.Prerequisite; import com.willfp.eco.core.Prerequisite;
import lombok.experimental.UtilityClass;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@@ -13,13 +12,13 @@ import org.jetbrains.annotations.NotNull;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* Utilities / API methods for teams. * Utilities / API methods for teams.
*/ */
@UtilityClass public final class TeamUtils {
public class TeamUtils {
/** /**
* Ore ChatColors. * Ore ChatColors.
*/ */
@@ -33,7 +32,7 @@ public class TeamUtils {
/** /**
* The server scoreboard. * The server scoreboard.
*/ */
private static final Scoreboard SCOREBOARD = Bukkit.getScoreboardManager().getMainScoreboard(); private static final Scoreboard SCOREBOARD = Objects.requireNonNull(Bukkit.getScoreboardManager()).getMainScoreboard();
/** /**
* Get team from {@link ChatColor}. * Get team from {@link ChatColor}.
@@ -44,7 +43,7 @@ public class TeamUtils {
* @return The team. * @return The team.
*/ */
@NotNull @NotNull
public Team fromChatColor(@NotNull final ChatColor color) { public static Team fromChatColor(@NotNull final ChatColor color) {
if (CHAT_COLOR_TEAMS.containsKey(color)) { if (CHAT_COLOR_TEAMS.containsKey(color)) {
return CHAT_COLOR_TEAMS.get(color); return CHAT_COLOR_TEAMS.get(color);
} }
@@ -72,7 +71,7 @@ public class TeamUtils {
* @return The team. * @return The team.
*/ */
@NotNull @NotNull
public Team getMaterialColorTeam(@NotNull final Material material) { public static Team getMaterialColorTeam(@NotNull final Material material) {
return fromChatColor(MATERIAL_COLORS.getOrDefault(material, ChatColor.WHITE)); return fromChatColor(MATERIAL_COLORS.getOrDefault(material, ChatColor.WHITE));
} }
@@ -102,4 +101,8 @@ public class TeamUtils {
MATERIAL_COLORS.put(Material.DEEPSLATE_EMERALD_ORE, ChatColor.GREEN); MATERIAL_COLORS.put(Material.DEEPSLATE_EMERALD_ORE, ChatColor.GREEN);
} }
} }
private TeamUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -14,7 +13,6 @@ import java.util.function.Function;
* Telekinesis means that all drops and xp go straight to a player's inventory * Telekinesis means that all drops and xp go straight to a player's inventory
* rather than dropping on the ground. * rather than dropping on the ground.
*/ */
@UtilityClass
public final class TelekinesisUtils { public final class TelekinesisUtils {
/** /**
* Set of tests that return if the player is telekinetic. * Set of tests that return if the player is telekinetic.
@@ -26,7 +24,7 @@ public final class TelekinesisUtils {
* *
* @param test The test to register, where the boolean output is if the player is telekinetic. * @param test The test to register, where the boolean output is if the player is telekinetic.
*/ */
public void registerTest(@NotNull final Function<Player, Boolean> test) { public static void registerTest(@NotNull final Function<Player, Boolean> test) {
TESTS.add(test); TESTS.add(test);
} }
@@ -38,7 +36,7 @@ public final class TelekinesisUtils {
* @param player The player to test. * @param player The player to test.
* @return If the player is telekinetic. * @return If the player is telekinetic.
*/ */
public boolean testPlayer(@NotNull final Player player) { public static boolean testPlayer(@NotNull final Player player) {
for (Function<Player, Boolean> test : TESTS) { for (Function<Player, Boolean> test : TESTS) {
if (test.apply(player)) { if (test.apply(player)) {
return true; return true;
@@ -47,4 +45,8 @@ public final class TelekinesisUtils {
return false; return false;
} }
private TelekinesisUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.util; package com.willfp.eco.util;
import lombok.experimental.UtilityClass;
import org.bukkit.util.NumberConversions; import org.bukkit.util.NumberConversions;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -13,8 +12,7 @@ import java.util.Map;
/** /**
* Utilities / API methods for vectors. * Utilities / API methods for vectors.
*/ */
@UtilityClass public final class VectorUtils {
public class VectorUtils {
/** /**
* Cached circles to prevent many sqrt calls. * Cached circles to prevent many sqrt calls.
*/ */
@@ -26,7 +24,7 @@ public class VectorUtils {
* @param vector The vector to check. * @param vector The vector to check.
* @return If the vector is finite. * @return If the vector is finite.
*/ */
public boolean isFinite(@NotNull final Vector vector) { public static boolean isFinite(@NotNull final Vector vector) {
try { try {
NumberConversions.checkFinite(vector.getX(), "x not finite"); NumberConversions.checkFinite(vector.getX(), "x not finite");
NumberConversions.checkFinite(vector.getY(), "y not finite"); NumberConversions.checkFinite(vector.getY(), "y not finite");
@@ -45,7 +43,7 @@ public class VectorUtils {
* @return The vector, simplified. * @return The vector, simplified.
*/ */
@NotNull @NotNull
public Vector simplifyVector(@NotNull final Vector vec) { public static Vector simplifyVector(@NotNull final Vector vec) {
double x = Math.abs(vec.getX()); double x = Math.abs(vec.getX());
double y = Math.abs(vec.getY()); double y = Math.abs(vec.getY());
double z = Math.abs(vec.getZ()); double z = Math.abs(vec.getZ());
@@ -78,7 +76,7 @@ public class VectorUtils {
* @return An array of {@link Vector}s. * @return An array of {@link Vector}s.
*/ */
@NotNull @NotNull
public Vector[] getCircle(final int radius) { public static Vector[] getCircle(final int radius) {
Vector[] cached = CIRCLE_CACHE.get(radius); Vector[] cached = CIRCLE_CACHE.get(radius);
if (cached != null) { if (cached != null) {
return cached; return cached;
@@ -115,7 +113,7 @@ public class VectorUtils {
* @return An array of {@link Vector}s. * @return An array of {@link Vector}s.
*/ */
@NotNull @NotNull
public Vector[] getSquare(final int radius) { public static Vector[] getSquare(final int radius) {
List<Vector> vectors = new ArrayList<>(); List<Vector> vectors = new ArrayList<>();
int xoffset = -radius; int xoffset = -radius;
@@ -140,7 +138,7 @@ public class VectorUtils {
* @return An array of {@link Vector}s. * @return An array of {@link Vector}s.
*/ */
@NotNull @NotNull
public Vector[] getCube(final int radius) { public static Vector[] getCube(final int radius) {
List<Vector> vectors = new ArrayList<>(); List<Vector> vectors = new ArrayList<>();
for (int y = -radius; y <= radius; y++) { for (int y = -radius; y <= radius; y++) {
@@ -153,4 +151,8 @@ public class VectorUtils {
return vectors.toArray(new Vector[0]); return vectors.toArray(new Vector[0]);
} }
private VectorUtils() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}
} }

View File

@@ -4,12 +4,15 @@ import com.google.gson.Gson
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import com.willfp.eco.core.config.interfaces.JSONConfig import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.eco.util.StringUtils import com.willfp.eco.util.StringUtils
import java.util.* import java.util.Objects
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
open class EcoJSONConfigWrapper : JSONConfig { open class EcoJSONConfigWrapper : JSONConfig {
val handle: Gson = GsonBuilder().setPrettyPrinting().create() val handle: Gson = GsonBuilder()
.setPrettyPrinting()
.disableHtmlEscaping()
.create()
val values = ConcurrentHashMap<String, Any?>() val values = ConcurrentHashMap<String, Any?>()
@@ -273,6 +276,6 @@ open class EcoJSONConfigWrapper : JSONConfig {
} }
override fun clone(): JSONConfig { override fun clone(): JSONConfig {
return EcoJSONConfigSection(HashMap<String, Any>(this.values)) return EcoJSONConfigSection(this.values.toMutableMap())
} }
} }

View File

@@ -2,16 +2,43 @@ package com.willfp.eco.internal.data
import com.willfp.eco.core.data.PlayerProfile import com.willfp.eco.core.data.PlayerProfile
import com.willfp.eco.core.data.keys.PersistentDataKey import com.willfp.eco.core.data.keys.PersistentDataKey
import java.util.UUID
import java.util.concurrent.ConcurrentHashMap
class EcoPlayerProfile( class EcoPlayerProfile(
val data: MutableMap<PersistentDataKey<*>, Any> val data: MutableMap<PersistentDataKey<*>, Any>,
val uuid: UUID
) : PlayerProfile { ) : PlayerProfile {
override fun <T : Any> write(key: PersistentDataKey<T>, value: T) { override fun <T : Any> write(key: PersistentDataKey<T>, value: T) {
this.data[key] = value this.data[key] = value
val changedKeys = CHANGE_MAP[uuid] ?: mutableSetOf()
changedKeys.add(key)
CHANGE_MAP[uuid] = changedKeys
} }
override fun <T : Any> read(key: PersistentDataKey<T>): T { override fun <T : Any> read(key: PersistentDataKey<T>): T {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
return this.data[key] as T? ?: key.defaultValue return this.data[key] as T? ?: key.defaultValue
} }
override fun equals(other: Any?): Boolean {
if (other !is EcoPlayerProfile) {
return false
}
return this.data == other.data
}
override fun hashCode(): Int {
return data.hashCode()
}
override fun toString(): String {
return "EcoPlayerProfile{$data}"
}
companion object {
val CHANGE_MAP: MutableMap<UUID, MutableSet<PersistentDataKey<*>>> = ConcurrentHashMap()
}
} }

View File

@@ -1,6 +1,5 @@
package com.willfp.eco.internal.display package com.willfp.eco.internal.display
import com.google.common.util.concurrent.ThreadFactoryBuilder
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.Display
import com.willfp.eco.core.display.DisplayHandler import com.willfp.eco.core.display.DisplayHandler
@@ -11,8 +10,6 @@ import org.bukkit.NamespacedKey
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataType import org.bukkit.persistence.PersistentDataType
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
class EcoDisplayHandler(plugin: EcoPlugin) : DisplayHandler { class EcoDisplayHandler(plugin: EcoPlugin) : DisplayHandler {
private val registeredModules = mutableMapOf<DisplayPriority, MutableList<DisplayModule>>() private val registeredModules = mutableMapOf<DisplayPriority, MutableList<DisplayModule>>()

View File

@@ -2,7 +2,7 @@ package com.willfp.eco.internal.gui.menu
import com.willfp.eco.core.gui.menu.Menu import com.willfp.eco.core.gui.menu.Menu
import org.bukkit.inventory.Inventory import org.bukkit.inventory.Inventory
import java.util.* import java.util.WeakHashMap
object MenuHandler { object MenuHandler {
private val menus = WeakHashMap<ExtendedInventory, EcoMenu>() private val menus = WeakHashMap<ExtendedInventory, EcoMenu>()

View File

@@ -7,7 +7,7 @@ import com.willfp.eco.core.proxy.ProxyFactory
import com.willfp.eco.core.proxy.exceptions.ProxyError import com.willfp.eco.core.proxy.exceptions.ProxyError
import com.willfp.eco.core.proxy.exceptions.UnsupportedVersionException import com.willfp.eco.core.proxy.exceptions.UnsupportedVersionException
import java.net.URLClassLoader import java.net.URLClassLoader
import java.util.* import java.util.IdentityHashMap
class EcoProxyFactory( class EcoProxyFactory(
private val plugin: EcoPlugin private val plugin: EcoPlugin

View File

@@ -2,7 +2,11 @@ package com.willfp.eco.internal.requirement
import com.willfp.eco.core.requirement.Requirement import com.willfp.eco.core.requirement.Requirement
import com.willfp.eco.core.requirement.RequirementFactory import com.willfp.eco.core.requirement.RequirementFactory
import com.willfp.eco.internal.requirement.requirements.* import com.willfp.eco.internal.requirement.requirements.RequirementHasPermission
import com.willfp.eco.internal.requirement.requirements.RequirementPlaceholderEquals
import com.willfp.eco.internal.requirement.requirements.RequirementPlaceholderGreaterThan
import com.willfp.eco.internal.requirement.requirements.RequirementPlaceholderLessThan
import com.willfp.eco.internal.requirement.requirements.RequirementTrue
class EcoRequirementFactory: RequirementFactory { class EcoRequirementFactory: RequirementFactory {
override fun create(name: String): Requirement { override fun create(name: String): Requirement {

View File

@@ -1,10 +1,9 @@
package com.willfp.eco.proxy.v1_16_R3 package com.willfp.eco.internal.spigot.proxy.v1_16_R3
import com.willfp.eco.proxy.AutoCraftProxy import com.willfp.eco.internal.spigot.proxy.AutoCraftProxy
import net.minecraft.server.v1_16_R3.MinecraftKey import net.minecraft.server.v1_16_R3.MinecraftKey
import net.minecraft.server.v1_16_R3.PacketPlayOutAutoRecipe import net.minecraft.server.v1_16_R3.PacketPlayOutAutoRecipe
class AutoCraft : AutoCraftProxy { class AutoCraft : AutoCraftProxy {
@Throws(NoSuchFieldException::class, IllegalAccessException::class)
override fun modifyPacket(packet: Any) { override fun modifyPacket(packet: Any) {
val recipePacket = packet as PacketPlayOutAutoRecipe val recipePacket = packet as PacketPlayOutAutoRecipe
val fKey = recipePacket.javaClass.getDeclaredField("b") val fKey = recipePacket.javaClass.getDeclaredField("b")

View File

@@ -1,5 +1,5 @@
package com.willfp.eco.proxy.v1_16_R3 package com.willfp.eco.internal.spigot.proxy.v1_16_R3
import com.willfp.eco.proxy.BlockBreakProxy import com.willfp.eco.internal.spigot.proxy.BlockBreakProxy
import net.minecraft.server.v1_16_R3.BlockPosition import net.minecraft.server.v1_16_R3.BlockPosition
import org.bukkit.block.Block import org.bukkit.block.Block
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer

View File

@@ -1,7 +1,7 @@
package com.willfp.eco.proxy.v1_16_R3 package com.willfp.eco.internal.spigot.proxy.v1_16_R3
import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.Display
import com.willfp.eco.proxy.ChatComponentProxy import com.willfp.eco.internal.spigot.proxy.ChatComponentProxy
import net.kyori.adventure.nbt.api.BinaryTagHolder import net.kyori.adventure.nbt.api.BinaryTagHolder
import net.kyori.adventure.text.BuildableComponent import net.kyori.adventure.text.BuildableComponent
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component

View File

@@ -1,7 +1,7 @@
package com.willfp.eco.proxy.v1_16_R3 package com.willfp.eco.internal.spigot.proxy.v1_16_R3
import com.willfp.eco.core.fast.FastItemStack import com.willfp.eco.core.fast.FastItemStack
import com.willfp.eco.proxy.FastItemStackFactoryProxy import com.willfp.eco.internal.spigot.proxy.FastItemStackFactoryProxy
import com.willfp.eco.proxy.v1_16_R3.fast.NMSFastItemStack import com.willfp.eco.internal.spigot.proxy.v1_16_R3.fast.NMSFastItemStack
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
class FastItemStackFactory : FastItemStackFactoryProxy { class FastItemStackFactory : FastItemStackFactoryProxy {

View File

@@ -1,12 +1,12 @@
package com.willfp.eco.proxy.v1_16_R3 package com.willfp.eco.internal.spigot.proxy.v1_16_R3
import com.mojang.authlib.GameProfile import com.mojang.authlib.GameProfile
import com.mojang.authlib.properties.Property import com.mojang.authlib.properties.Property
import com.willfp.eco.proxy.SkullProxy import com.willfp.eco.internal.spigot.proxy.SkullProxy
import org.bukkit.inventory.meta.SkullMeta import org.bukkit.inventory.meta.SkullMeta
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
import java.util.* import java.util.UUID
class Skull : SkullProxy { class Skull : SkullProxy {
private lateinit var setProfile: Method private lateinit var setProfile: Method

View File

@@ -1,6 +1,6 @@
package com.willfp.eco.proxy.v1_16_R3 package com.willfp.eco.internal.spigot.proxy.v1_16_R3
import com.willfp.eco.proxy.TPSProxy import com.willfp.eco.internal.spigot.proxy.TPSProxy
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.craftbukkit.v1_16_R3.CraftServer import org.bukkit.craftbukkit.v1_16_R3.CraftServer

View File

@@ -1,6 +1,6 @@
package com.willfp.eco.proxy.v1_16_R3 package com.willfp.eco.internal.spigot.proxy.v1_16_R3
import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.Display
import com.willfp.eco.proxy.VillagerTradeProxy import com.willfp.eco.internal.spigot.proxy.VillagerTradeProxy
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftMerchantRecipe import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftMerchantRecipe
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.inventory.MerchantRecipe import org.bukkit.inventory.MerchantRecipe

View File

@@ -1,4 +1,4 @@
package com.willfp.eco.proxy.v1_16_R3.fast package com.willfp.eco.internal.spigot.proxy.v1_16_R3.fast
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack

View File

@@ -1,8 +1,14 @@
package com.willfp.eco.proxy.v1_16_R3.fast package com.willfp.eco.internal.spigot.proxy.v1_16_R3.fast
import com.willfp.eco.internal.fast.EcoFastItemStack import com.willfp.eco.internal.fast.EcoFastItemStack
import com.willfp.eco.util.StringUtils import com.willfp.eco.util.StringUtils
import net.minecraft.server.v1_16_R3.* import net.minecraft.server.v1_16_R3.Item
import net.minecraft.server.v1_16_R3.ItemEnchantedBook
import net.minecraft.server.v1_16_R3.ItemStack
import net.minecraft.server.v1_16_R3.Items
import net.minecraft.server.v1_16_R3.NBTTagCompound
import net.minecraft.server.v1_16_R3.NBTTagList
import net.minecraft.server.v1_16_R3.NBTTagString
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack
import org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers import org.bukkit.craftbukkit.v1_16_R3.util.CraftMagicNumbers
import org.bukkit.craftbukkit.v1_16_R3.util.CraftNamespacedKey import org.bukkit.craftbukkit.v1_16_R3.util.CraftNamespacedKey
@@ -82,7 +88,7 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
} }
private fun getLoreJSON(): List<String> { private fun getLoreJSON(): List<String> {
val displayTag = handle.a("display") val displayTag = handle.b("display") ?: return emptyList()
return if (displayTag.hasKey("Lore")) { return if (displayTag.hasKey("Lore")) {
val loreTag = displayTag.getList("Lore", CraftMagicNumbers.NBT.TAG_STRING) val loreTag = displayTag.getList("Lore", CraftMagicNumbers.NBT.TAG_STRING)
val lore: MutableList<String> = ArrayList(loreTag.size) val lore: MutableList<String> = ArrayList(loreTag.size)
@@ -91,7 +97,7 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
} }
lore lore
} else { } else {
ArrayList() emptyList()
} }
} }
@@ -159,7 +165,7 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
} }
override fun hashCode(): Int { override fun hashCode(): Int {
return handle.tag.hashCode() * 31 + Item.getId(handle.item) return handle.tag?.hashCode() ?: 0b00010101 * 31 + Item.getId(handle.item)
} }
private fun apply() { private fun apply() {

View File

@@ -1,31 +0,0 @@
plugins {
id 'xyz.jpenilla.special-gradle' version '1.0.0-SNAPSHOT'
}
group 'com.willfp'
version rootProject.version
dependencies {
compileOnly 'org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:remapped-mojang'
compileOnly 'net.kyori:adventure-api:4.9.1'
compileOnly 'net.kyori:adventure-text-serializer-gson:4.8.1'
}
specialGradle {
minecraftVersion.set("1.17")
specialSourceVersion.set("1.10.0")
}
buildTools {
quiet.set(true);
}
configurations.create('mapped')
artifacts {
mapped jar.outputs.files.files.toArray()[0]
}
productionMappedJar.mustRunAfter(clean)
productionMappedJar.mustRunAfter(compileKotlin)
build.dependsOn productionMappedJar

View File

@@ -0,0 +1,18 @@
plugins {
id("io.papermc.paperweight.userdev") version "1.1.14"
}
group = "com.willfp"
version = rootProject.version
dependencies {
paperDevBundle("1.17.1-R0.1-SNAPSHOT")
compileOnly("net.kyori:adventure-api:4.9.1")
compileOnly("net.kyori:adventure-text-serializer-gson:4.8.1")
}
tasks {
build {
dependsOn(reobfJar)
}
}

View File

@@ -1,11 +1,10 @@
package com.willfp.eco.proxy.v1_17_R1 package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.internal.spigot.proxy.AutoCraftProxy
import net.minecraft.network.protocol.game.ClientboundPlaceGhostRecipePacket import net.minecraft.network.protocol.game.ClientboundPlaceGhostRecipePacket
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import com.willfp.eco.proxy.AutoCraftProxy
class AutoCraft : AutoCraftProxy { class AutoCraft : AutoCraftProxy {
@Throws(NoSuchFieldException::class, IllegalAccessException::class)
override fun modifyPacket(packet: Any) { override fun modifyPacket(packet: Any) {
val recipePacket = packet as ClientboundPlaceGhostRecipePacket val recipePacket = packet as ClientboundPlaceGhostRecipePacket
val fKey = recipePacket.javaClass.getDeclaredField("b") val fKey = recipePacket.javaClass.getDeclaredField("b")

View File

@@ -1,8 +1,8 @@
package com.willfp.eco.proxy.v1_17_R1 package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.internal.spigot.proxy.BlockBreakProxy
import org.bukkit.block.Block import org.bukkit.block.Block
import org.bukkit.entity.Player import org.bukkit.entity.Player
import com.willfp.eco.proxy.BlockBreakProxy
class BlockBreak : BlockBreakProxy { class BlockBreak : BlockBreakProxy {
override fun breakBlock( override fun breakBlock(

View File

@@ -1,7 +1,7 @@
package com.willfp.eco.proxy.v1_17_R1 package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.Display
import com.willfp.eco.proxy.ChatComponentProxy import com.willfp.eco.internal.spigot.proxy.ChatComponentProxy
import net.kyori.adventure.nbt.api.BinaryTagHolder import net.kyori.adventure.nbt.api.BinaryTagHolder
import net.kyori.adventure.text.BuildableComponent import net.kyori.adventure.text.BuildableComponent
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component

View File

@@ -1,9 +1,9 @@
package com.willfp.eco.proxy.v1_17_R1 package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.core.fast.FastItemStack import com.willfp.eco.core.fast.FastItemStack
import com.willfp.eco.proxy.v1_17_R1.fast.NMSFastItemStack import com.willfp.eco.internal.spigot.proxy.v1_17_R1.fast.NMSFastItemStack
import com.willfp.eco.internal.spigot.proxy.FastItemStackFactoryProxy
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import com.willfp.eco.proxy.FastItemStackFactoryProxy
class FastItemStackFactory : FastItemStackFactoryProxy { class FastItemStackFactory : FastItemStackFactoryProxy {
override fun create(itemStack: ItemStack): FastItemStack { override fun create(itemStack: ItemStack): FastItemStack {

View File

@@ -1,12 +1,12 @@
package com.willfp.eco.proxy.v1_17_R1 package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.mojang.authlib.GameProfile import com.mojang.authlib.GameProfile
import com.mojang.authlib.properties.Property import com.mojang.authlib.properties.Property
import com.willfp.eco.proxy.SkullProxy import com.willfp.eco.internal.spigot.proxy.SkullProxy
import org.bukkit.inventory.meta.SkullMeta import org.bukkit.inventory.meta.SkullMeta
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
import java.util.* import java.util.UUID
class Skull : SkullProxy { class Skull : SkullProxy {
private lateinit var setProfile: Method private lateinit var setProfile: Method

View File

@@ -1,6 +1,6 @@
package com.willfp.eco.proxy.v1_17_R1 package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.proxy.TPSProxy import com.willfp.eco.internal.spigot.proxy.TPSProxy
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.craftbukkit.v1_17_R1.CraftServer import org.bukkit.craftbukkit.v1_17_R1.CraftServer

View File

@@ -1,7 +1,7 @@
package com.willfp.eco.proxy.v1_17_R1 package com.willfp.eco.internal.spigot.proxy.v1_17_R1
import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.Display
import com.willfp.eco.proxy.VillagerTradeProxy import com.willfp.eco.internal.spigot.proxy.VillagerTradeProxy
import net.minecraft.world.item.trading.MerchantOffer import net.minecraft.world.item.trading.MerchantOffer
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftMerchantRecipe import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftMerchantRecipe
import org.bukkit.entity.Player import org.bukkit.entity.Player

View File

@@ -1,4 +1,4 @@
package com.willfp.eco.proxy.v1_17_R1.fast package com.willfp.eco.internal.spigot.proxy.v1_17_R1.fast
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack

View File

@@ -1,4 +1,4 @@
package com.willfp.eco.proxy.v1_17_R1.fast package com.willfp.eco.internal.spigot.proxy.v1_17_R1.fast
import com.willfp.eco.internal.fast.EcoFastItemStack import com.willfp.eco.internal.fast.EcoFastItemStack
import com.willfp.eco.util.StringUtils import com.willfp.eco.util.StringUtils
@@ -101,7 +101,7 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
} }
private fun getLoreJSON(): List<String> { private fun getLoreJSON(): List<String> {
val displayTag = handle.getOrCreateTagElement("display") val displayTag = handle.getTagElement("display") ?: return emptyList()
return if (displayTag.contains("Lore")) { return if (displayTag.contains("Lore")) {
val loreTag = displayTag.getList("Lore", CraftMagicNumbers.NBT.TAG_STRING) val loreTag = displayTag.getList("Lore", CraftMagicNumbers.NBT.TAG_STRING)
val lore: MutableList<String> = ArrayList(loreTag.size) val lore: MutableList<String> = ArrayList(loreTag.size)
@@ -112,7 +112,7 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
lore lore
} else { } else {
ArrayList() emptyList()
} }
} }
@@ -180,7 +180,7 @@ class NMSFastItemStack(itemStack: org.bukkit.inventory.ItemStack) : EcoFastItemS
} }
override fun hashCode(): Int { override fun hashCode(): Int {
return handle.tag.hashCode() * 31 + Item.getId(handle.item) return handle.tag?.hashCode() ?: 0b00010101 * 31 + Item.getId(handle.item)
} }
private fun apply() { private fun apply() {

View File

@@ -15,7 +15,7 @@ dependencies {
compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT' compileOnly 'org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT'
compileOnly project(":eco-core:core-proxy") compileOnly project(":eco-core:core-proxy")
compileOnly project(":eco-core:core-backend") compileOnly project(":eco-core:core-backend")
compileOnly 'com.comphenix.protocol:ProtocolLib:4.7.1-SNAPSHOT' compileOnly 'com.comphenix.protocol:ProtocolLib:4.6.1-SNAPSHOT'
compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.7-SNAPSHOT' compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.7-SNAPSHOT'
compileOnly 'com.github.TechFortress:GriefPrevention:16.17.1' compileOnly 'com.github.TechFortress:GriefPrevention:16.17.1'
compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10' compileOnly 'com.massivecraft:Factions:1.6.9.5-U0.5.10'
@@ -30,9 +30,9 @@ dependencies {
compileOnly 'com.github.brcdev-minecraft:shopgui-api:2.2.0' compileOnly 'com.github.brcdev-minecraft:shopgui-api:2.2.0'
compileOnly 'com.github.LoneDev6:API-ItemsAdder:2.4.7' compileOnly 'com.github.LoneDev6:API-ItemsAdder:2.4.7'
compileOnly 'com.arcaniax:HeadDatabase-API:1.3.0' compileOnly 'com.arcaniax:HeadDatabase-API:1.3.0'
compileOnly 'org.jetbrains.exposed:exposed-core:0.35.1' compileOnly 'org.jetbrains.exposed:exposed-core:0.36.2'
compileOnly 'org.jetbrains.exposed:exposed-dao:0.35.1' compileOnly 'org.jetbrains.exposed:exposed-dao:0.36.2'
compileOnly 'org.jetbrains.exposed:exposed-jdbc:0.35.1' compileOnly 'org.jetbrains.exposed:exposed-jdbc:0.36.2'
compileOnly 'mysql:mysql-connector-java:8.0.25' compileOnly 'mysql:mysql-connector-java:8.0.25'
compileOnly 'com.gmail.filoghost.holographicdisplays:holographicdisplays-api:2.4.0' compileOnly 'com.gmail.filoghost.holographicdisplays:holographicdisplays-api:2.4.0'
compileOnly 'net.essentialsx:EssentialsX:2.19.0' compileOnly 'net.essentialsx:EssentialsX:2.19.0'
@@ -41,8 +41,7 @@ dependencies {
compileOnly 'world.bentobox:bentobox:1.17.3-SNAPSHOT' compileOnly 'world.bentobox:bentobox:1.17.3-SNAPSHOT'
compileOnly 'com.google.guava:guava:31.0.1-jre' compileOnly 'com.google.guava:guava:31.0.1-jre'
compileOnly 'com.iridium:IridiumSkyblock:3.1.2' compileOnly 'com.iridium:IridiumSkyblock:3.1.2'
compileOnly 'net.md-5:bungeecord-api:1.16-R0.5-SNAPSHOT' compileOnly 'com.github.WillFP:CrashClaim:1.0.19'
compileOnly 'com.velocitypowered:velocity-api:3.0.0-SNAPSHOT'
// CombatLogX V10 + NewbieHelper Expansion // CombatLogX V10 + NewbieHelper Expansion
compileOnly 'com.SirBlobman.combatlogx:CombatLogX-API:10.0.0.0-SNAPSHOT' compileOnly 'com.SirBlobman.combatlogx:CombatLogX-API:10.0.0.0-SNAPSHOT'

View File

@@ -1,4 +1,4 @@
package com.willfp.eco.spigot.recipes; package com.willfp.eco.internal.spigot.recipes;
import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.PluginDependent; import com.willfp.eco.core.PluginDependent;
@@ -10,6 +10,7 @@ import com.willfp.eco.core.recipe.parts.ModifiedTestableItem;
import com.willfp.eco.core.recipe.parts.TestableStack; import com.willfp.eco.core.recipe.parts.TestableStack;
import com.willfp.eco.core.recipe.recipes.CraftingRecipe; import com.willfp.eco.core.recipe.recipes.CraftingRecipe;
import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe; import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe;
import org.bukkit.Keyed;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@@ -245,7 +246,7 @@ public class ShapedRecipeListener extends PluginDependent<EcoPlugin> implements
@EventHandler @EventHandler
public void preventUsingComplexPartInVanillaRecipe(@NotNull final PrepareItemCraftEvent event) { public void preventUsingComplexPartInVanillaRecipe(@NotNull final PrepareItemCraftEvent event) {
if (!(event.getRecipe() instanceof ShapedRecipe recipe)) { if (!(event.getRecipe() instanceof Keyed recipe)) {
return; return;
} }
@@ -263,7 +264,7 @@ public class ShapedRecipeListener extends PluginDependent<EcoPlugin> implements
@EventHandler @EventHandler
public void preventUsingComplexPartInVanillaRecipe(@NotNull final CraftItemEvent event) { public void preventUsingComplexPartInVanillaRecipe(@NotNull final CraftItemEvent event) {
if (!(event.getRecipe() instanceof ShapedRecipe recipe)) { if (!(event.getRecipe() instanceof Keyed recipe)) {
return; return;
} }

View File

@@ -1,24 +1,9 @@
package com.willfp.eco.spigot package com.willfp.eco.internal.spigot
import com.willfp.eco.core.EcoPlugin import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.Handler import com.willfp.eco.core.Handler
import com.willfp.eco.core.config.updating.ConfigHandler
import com.willfp.eco.core.config.wrapper.ConfigFactory
import com.willfp.eco.core.data.PlayerProfileHandler
import com.willfp.eco.core.data.keys.KeyRegistry
import com.willfp.eco.core.drops.DropQueueFactory
import com.willfp.eco.core.events.EventManager
import com.willfp.eco.core.extensions.ExtensionLoader
import com.willfp.eco.core.factory.MetadataValueFactory
import com.willfp.eco.core.factory.NamespacedKeyFactory
import com.willfp.eco.core.factory.RunnableFactory
import com.willfp.eco.core.fast.FastItemStack import com.willfp.eco.core.fast.FastItemStack
import com.willfp.eco.core.gui.GUIFactory
import com.willfp.eco.core.integrations.placeholder.PlaceholderIntegration import com.willfp.eco.core.integrations.placeholder.PlaceholderIntegration
import com.willfp.eco.core.proxy.Cleaner
import com.willfp.eco.core.proxy.ProxyFactory
import com.willfp.eco.core.requirement.RequirementFactory
import com.willfp.eco.core.scheduling.Scheduler
import com.willfp.eco.internal.EcoCleaner import com.willfp.eco.internal.EcoCleaner
import com.willfp.eco.internal.Plugins import com.willfp.eco.internal.Plugins
import com.willfp.eco.internal.config.EcoConfigFactory import com.willfp.eco.internal.config.EcoConfigFactory
@@ -35,47 +20,52 @@ import com.willfp.eco.internal.logging.EcoLogger
import com.willfp.eco.internal.proxy.EcoProxyFactory import com.willfp.eco.internal.proxy.EcoProxyFactory
import com.willfp.eco.internal.requirement.EcoRequirementFactory import com.willfp.eco.internal.requirement.EcoRequirementFactory
import com.willfp.eco.internal.scheduling.EcoScheduler import com.willfp.eco.internal.scheduling.EcoScheduler
import com.willfp.eco.proxy.FastItemStackFactoryProxy import com.willfp.eco.internal.spigot.data.EcoKeyRegistry
import com.willfp.eco.spigot.data.EcoKeyRegistry import com.willfp.eco.internal.spigot.data.EcoPlayerProfileHandler
import com.willfp.eco.spigot.data.EcoPlayerProfileHandler import com.willfp.eco.internal.spigot.data.storage.MySQLDataHandler
import com.willfp.eco.spigot.integrations.bstats.MetricHandler import com.willfp.eco.internal.spigot.data.storage.YamlDataHandler
import com.willfp.eco.internal.spigot.integrations.bstats.MetricHandler
import com.willfp.eco.internal.spigot.proxy.FastItemStackFactoryProxy
import net.kyori.adventure.platform.bukkit.BukkitAudiences import net.kyori.adventure.platform.bukkit.BukkitAudiences
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import java.util.logging.Logger import java.util.logging.Logger
@Suppress("UNUSED") @Suppress("UNUSED")
class EcoHandler : EcoSpigotPlugin(), Handler { class EcoHandler : com.willfp.eco.internal.spigot.EcoSpigotPlugin(), Handler {
private val cleaner = EcoCleaner() private val cleaner = EcoCleaner()
private val requirementFactory = EcoRequirementFactory() private val requirementFactory = EcoRequirementFactory()
private var adventure: BukkitAudiences? = null private var adventure: BukkitAudiences? = null
private val keyRegistry = EcoKeyRegistry(this) private val keyRegistry = EcoKeyRegistry(this)
private val playerProfileHandler = EcoPlayerProfileHandler(this) private val playerProfileHandler = EcoPlayerProfileHandler(
if (this.configYml.getBool("mysql.enabled"))
MySQLDataHandler(this) else YamlDataHandler(this)
)
override fun createScheduler(plugin: EcoPlugin): Scheduler { override fun createScheduler(plugin: EcoPlugin): EcoScheduler {
return EcoScheduler(plugin) return EcoScheduler(plugin)
} }
override fun createEventManager(plugin: EcoPlugin): EventManager { override fun createEventManager(plugin: EcoPlugin): EcoEventManager {
return EcoEventManager(plugin) return EcoEventManager(plugin)
} }
override fun createNamespacedKeyFactory(plugin: EcoPlugin): NamespacedKeyFactory { override fun createNamespacedKeyFactory(plugin: EcoPlugin): EcoNamespacedKeyFactory {
return EcoNamespacedKeyFactory(plugin) return EcoNamespacedKeyFactory(plugin)
} }
override fun createMetadataValueFactory(plugin: EcoPlugin): MetadataValueFactory { override fun createMetadataValueFactory(plugin: EcoPlugin): EcoMetadataValueFactory {
return EcoMetadataValueFactory(plugin) return EcoMetadataValueFactory(plugin)
} }
override fun createRunnableFactory(plugin: EcoPlugin): RunnableFactory { override fun createRunnableFactory(plugin: EcoPlugin): EcoRunnableFactory {
return EcoRunnableFactory(plugin) return EcoRunnableFactory(plugin)
} }
override fun createExtensionLoader(plugin: EcoPlugin): ExtensionLoader { override fun createExtensionLoader(plugin: EcoPlugin): EcoExtensionLoader {
return EcoExtensionLoader(plugin) return EcoExtensionLoader(plugin)
} }
override fun createConfigHandler(plugin: EcoPlugin): ConfigHandler { override fun createConfigHandler(plugin: EcoPlugin): EcoConfigHandler {
return EcoConfigHandler(plugin) return EcoConfigHandler(plugin)
} }
@@ -91,23 +81,23 @@ class EcoHandler : EcoSpigotPlugin(), Handler {
return this return this
} }
override fun getConfigFactory(): ConfigFactory { override fun getConfigFactory(): EcoConfigFactory {
return EcoConfigFactory() return EcoConfigFactory()
} }
override fun getDropQueueFactory(): DropQueueFactory { override fun getDropQueueFactory(): EcoDropQueueFactory {
return EcoDropQueueFactory() return EcoDropQueueFactory()
} }
override fun getGUIFactory(): GUIFactory { override fun getGUIFactory(): EcoGUIFactory {
return EcoGUIFactory() return EcoGUIFactory()
} }
override fun getCleaner(): Cleaner { override fun getCleaner(): EcoCleaner {
return cleaner return cleaner
} }
override fun createProxyFactory(plugin: EcoPlugin): ProxyFactory { override fun createProxyFactory(plugin: EcoPlugin): EcoProxyFactory {
return EcoProxyFactory(plugin) return EcoProxyFactory(plugin)
} }
@@ -131,7 +121,7 @@ class EcoHandler : EcoSpigotPlugin(), Handler {
MetricHandler.createMetrics(plugin, this.ecoPlugin) MetricHandler.createMetrics(plugin, this.ecoPlugin)
} }
override fun getRequirementFactory(): RequirementFactory { override fun getRequirementFactory(): EcoRequirementFactory {
return requirementFactory return requirementFactory
} }
@@ -139,11 +129,11 @@ class EcoHandler : EcoSpigotPlugin(), Handler {
return adventure return adventure
} }
override fun getKeyRegistry(): KeyRegistry { override fun getKeyRegistry(): EcoKeyRegistry {
return keyRegistry return keyRegistry
} }
override fun getPlayerProfileHandler(): PlayerProfileHandler { override fun getPlayerProfileHandler(): EcoPlayerProfileHandler {
return playerProfileHandler return playerProfileHandler
} }

Some files were not shown because too many files have changed in this diff Show More