Compare commits

..

115 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
Auxilor
a6f139c47e Fixed plugin.yml 2021-11-05 14:40:56 +00:00
Auxilor
1bae159f94 Added velocity data listener 2021-11-05 14:30:43 +00:00
Auxilor
43d2835087 Prerequisite changes 2021-11-05 14:18:35 +00:00
Auxilor
cb2d4d6a34 Added ServerDisconnectEvent listener 2021-11-05 14:16:41 +00:00
Auxilor
9bb73d8e90 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/data/storage/MySQLDataHandler.kt
2021-11-05 14:06:22 +00:00
Auxilor
86c4867206 Added BungeeDataListener and IridiumSkyblock support 2021-11-04 20:28:47 +00:00
Auxilor
43e13248d6 SQL changes (Please be done) and Antigrief changes 2021-11-04 20:15:26 +00:00
Auxilor
f6ff45228a Merge branch 'master' into develop 2021-11-04 20:02:29 +00:00
Will FP
af1c20f5c5 Merge pull request #49
Added DeluxeCombat integration
2021-11-04 20:01:59 +00:00
Auxilor
9ac564c345 Finally got exposed to shut up 2021-11-04 20:00:13 +00:00
Auxilor
857d51a7a1 Added PersistentDataKey#values 2021-11-04 19:16:38 +00:00
Auxilor
ab5f8cee5a Cleaned up DataHandler 2021-11-04 19:04:59 +00:00
Auxilor
bdd518b280 More Persistent Data changes 2021-11-04 19:00:47 +00:00
_OfTeN_
494c1a87b2 Added DeluxeCombat integration 2021-11-04 19:30:16 +03:00
Auxilor
f78f92b5f6 Fixed writing 2021-11-04 15:26:31 +00:00
Auxilor
048b56c58c Disabled Exposed logging 2021-11-04 14:06:09 +00:00
Auxilor
75dec2bf49 Re-added writeSafely to optionally specify predefined player ResultRow 2021-11-04 13:36:35 +00:00
Auxilor
7119da13b7 Bug Fixes 2021-11-04 13:32:23 +00:00
Auxilor
6a8637922b More SQL changes 2021-11-04 13:15:21 +00:00
Auxilor
abce7b898c Changed shutdown order 2021-11-04 13:02:23 +00:00
Auxilor
562d7f382c Updated to 6.13.2 2021-11-04 12:59:52 +00:00
Auxilor
c72b15c3a6 Several performance and stability improvements 2021-11-04 12:57:39 +00:00
179 changed files with 2272 additions and 1140 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,127 +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
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/' }
}
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

@@ -1,8 +1,8 @@
package com.willfp.eco.core; package com.willfp.eco.core;
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;
@@ -31,8 +31,11 @@ public class Prerequisite {
); );
/** /**
* Requires the server to be running an implementation of paper. * Requires the server to have vault installed.
*
* @deprecated Use {@link EconomyManager#hasRegistrations()} instead.
*/ */
@Deprecated
public static final Prerequisite HAS_VAULT = new Prerequisite( public static final Prerequisite HAS_VAULT = new Prerequisite(
() -> ClassUtils.exists("net.milkbowl.vault.economy.Economy"), () -> ClassUtils.exists("net.milkbowl.vault.economy.Economy"),
"Requires server to have vault" "Requires server to have vault"
@@ -46,10 +49,25 @@ public class Prerequisite {
"Requires server to be running 1.17+" "Requires server to be running 1.17+"
); );
/**
* Requires the server to be running an implementation of BungeeCord.
*/
public static final Prerequisite HAS_BUNGEECORD = new Prerequisite(
() -> ClassUtils.exists("net.md_5.bungee.api.event.ServerConnectedEvent"),
"Requires server to be running BungeeCord (or a fork)"
);
/**
* Requires the server to be running an implementation of Velocity.
*/
public static final Prerequisite HAS_VELOCITY = new Prerequisite(
() -> ClassUtils.exists("com.velocitypowered.api.event.player.ServerConnectedEvent"),
"Requires server to be running Velocity (or a fork)"
);
/** /**
* If the necessary prerequisite condition has been met. * If the necessary prerequisite condition has been met.
*/ */
@Getter
private boolean isMet; private boolean isMet;
/** /**
@@ -60,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;
/** /**
@@ -105,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,16 +19,60 @@ 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.
* *
* @param async If the saving should be done asynchronously. * @param async If the saving should be done asynchronously.
* @deprecated async is now handled automatically depending on implementation.
*/ */
void saveAll(boolean async); @Deprecated
default void saveAll(boolean async) {
saveAll();
}
/**
* Save all player data.
* <p>
* Can run async if using MySQL.
*/
void saveAll();
/**
* Commit all changes to the file.
* <p>
* Does nothing if using MySQL.
*/
void save();
} }

View File

@@ -1,10 +1,11 @@
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;
import java.util.Set;
/** /**
* A persistent data key is a key with a type that can be stored about an offline player. * A persistent data key is a key with a type that can be stored about an offline player.
* *
@@ -14,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;
/** /**
@@ -54,4 +52,40 @@ public class PersistentDataKey<T> {
+ ", type=" + type + ", type=" + type
+ '}'; + '}';
} }
/**
* Get all persistent data keys.
*
* @return The keys.
*/
public static Set<PersistentDataKey<?>> values() {
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,7 +37,7 @@ 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;
/** /**
@@ -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;
/** /**
@@ -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

@@ -15,7 +15,7 @@ public interface AntigriefWrapper extends Integration {
* *
* @param player The player. * @param player The player.
* @param block The block. * @param block The block.
* @return If player cna break block. * @return If player can break block.
*/ */
boolean canBreakBlock(Player player, Block block); boolean canBreakBlock(Player player, Block block);

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;
/** /**
@@ -73,6 +69,11 @@ public abstract class AbstractItemStackBuilder<T extends ItemMeta, U extends Abs
@Override @Override
public U addEnchantment(@NotNull final Enchantment enchantment, public U addEnchantment(@NotNull final Enchantment enchantment,
final int level) { final int level) {
//noinspection ConstantConditions
if (enchantment == null) {
return (U) this;
}
meta.addEnchant(enchantment, level, true); meta.addEnchant(enchantment, level, true);
return (U) this; return (U) this;
} }
@@ -196,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,7 +75,7 @@ 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) {
@@ -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,19 +20,18 @@ 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) {
@@ -66,7 +64,7 @@ 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,7 +76,7 @@ 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,7 +27,7 @@ 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) {
@@ -78,7 +76,7 @@ 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) {
@@ -114,7 +112,7 @@ 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,7 +16,7 @@ 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();
@@ -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,7 +70,7 @@ 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);
@@ -86,7 +84,7 @@ 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,7 +96,7 @@ 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,7 +145,7 @@ 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,7 +157,7 @@ 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,7 +170,7 @@ 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);
@@ -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,7 +97,7 @@ 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,7 +112,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,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
return formatList(list, null, option); return formatList(list, null, option);
} }
@@ -138,7 +128,7 @@ 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<>();
@@ -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,7 +163,7 @@ 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,7 +179,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,
@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,7 +208,7 @@ 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,7 +224,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,
@NotNull final FormatOption option) { @NotNull final FormatOption option) {
return formatToComponent(message, null, option); return formatToComponent(message, null, option);
} }
@@ -250,7 +240,7 @@ 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,7 +257,7 @@ 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;
@@ -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,7 +395,7 @@ 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'
@@ -40,6 +40,8 @@ dependencies {
compileOnly 'com.github.MilkBowl:VaultAPI:1.7' compileOnly 'com.github.MilkBowl:VaultAPI:1.7'
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.github.WillFP:CrashClaim:1.0.19'
// 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;
} }

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