Compare commits
123 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ebc1a18a1 | ||
|
|
db20bed6e0 | ||
|
|
0826da6cfc | ||
|
|
6d8fce3462 | ||
|
|
eedb1404b6 | ||
|
|
299abe4568 | ||
|
|
98e1f19145 | ||
|
|
424e2ff43d | ||
|
|
3a899226a3 | ||
|
|
8336eee892 | ||
|
|
a48f756582 | ||
|
|
2aa463d083 | ||
|
|
ea833de9f7 | ||
|
|
3c0822310d | ||
|
|
d5cbc1d497 | ||
|
|
c912ad1c9c | ||
|
|
752f38ef25 | ||
|
|
a5525ab332 | ||
|
|
1b442f400d | ||
|
|
3c9c0bcef4 | ||
|
|
3a7a938e7f | ||
|
|
32c17aa3ae | ||
|
|
e451732876 | ||
|
|
53f81c0a03 | ||
|
|
f60d91c5f3 | ||
|
|
a9bdca56a5 | ||
|
|
3516d5881e | ||
|
|
95cecc2b2a | ||
|
|
66d0625d2e | ||
|
|
99a60f2b8b | ||
|
|
0bdfbe76fe | ||
|
|
e0240069fc | ||
|
|
11d2f7d711 | ||
|
|
5cf632e58b | ||
|
|
a90fe5d100 | ||
|
|
8dd145ed7d | ||
|
|
e4c65f1db5 | ||
|
|
2208f161c0 | ||
|
|
95833ea8f6 | ||
|
|
ba2da5c238 | ||
|
|
f276026972 | ||
|
|
d2c6cc0d2e | ||
|
|
60829a3e1d | ||
|
|
38c5bf97a0 | ||
|
|
d61f1bd23b | ||
|
|
275f08fcb6 | ||
|
|
68ae25b7db | ||
|
|
89c529fdb3 | ||
|
|
43157b154a | ||
|
|
8721f96a2f | ||
|
|
ad3f7e529d | ||
|
|
ec6ac88fea | ||
|
|
13b10c13b3 | ||
|
|
1e24cbf67b | ||
|
|
d9cfc8b91a | ||
|
|
b40001d79b | ||
|
|
b8128ef87e | ||
|
|
be885e9092 | ||
|
|
5658c92d3d | ||
|
|
e4b0a602f0 | ||
|
|
bf5c36d2c9 | ||
|
|
cc57d10a36 | ||
|
|
dcbdbb5230 | ||
|
|
de19d67275 | ||
|
|
43abfcb3fc | ||
|
|
34f201d62d | ||
|
|
d3c811614f | ||
|
|
44da61daaa | ||
|
|
3ea6d11026 | ||
|
|
9a03a2e47a | ||
|
|
af91c9d659 | ||
|
|
89eaaf3a5e | ||
|
|
ab174e2d41 | ||
|
|
cfa9badc1e | ||
|
|
3ec1183ec3 | ||
|
|
b3e37ea717 | ||
|
|
9d0707a4db | ||
|
|
41eee84966 | ||
|
|
0f215b48bf | ||
|
|
abad973051 | ||
|
|
b385ebff75 | ||
|
|
f924d23feb | ||
|
|
d603476201 | ||
|
|
b911bbce87 | ||
|
|
d2676c2af1 | ||
|
|
e725811c2f | ||
|
|
f861820572 | ||
|
|
6e310a48c1 | ||
|
|
505234ec13 | ||
|
|
587aeb21a1 | ||
|
|
cc344bf7ca | ||
|
|
c912b97438 | ||
|
|
4788f036ee | ||
|
|
f5ff484086 | ||
|
|
c031534b0d | ||
|
|
62ac49db4b | ||
|
|
32c416ef8e | ||
|
|
a1e22540d4 | ||
|
|
1b66843992 | ||
|
|
55d316cb9d | ||
|
|
ac7a47a0f7 | ||
|
|
70cd23d39a | ||
|
|
44d39c4f5f | ||
|
|
a3ba7cdcf2 | ||
|
|
779323e280 | ||
|
|
5c8a8ca3e4 | ||
|
|
4e4f792bcc | ||
|
|
48ae8ebe65 | ||
|
|
f8c65898d8 | ||
|
|
dbe514f97c | ||
|
|
b244be6dd6 | ||
|
|
4870f7f0d1 | ||
|
|
27888da33a | ||
|
|
33c132065d | ||
|
|
ec09dbddf4 | ||
|
|
3811b01e81 | ||
|
|
f883f8fe1d | ||
|
|
80f43238e0 | ||
|
|
18e7548c23 | ||
|
|
40020b0503 | ||
|
|
830f92bbdb | ||
|
|
c6e39e89fd | ||
|
|
7d38d7db15 |
36
.github/workflows/java-ci.yml
vendored
Normal file
36
.github/workflows/java-ci.yml
vendored
Normal 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 17
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: 'temurin'
|
||||||
|
java-version: 17
|
||||||
|
|
||||||
|
- 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 --full-stacktrace
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: eco-dev-${{ steps.vars.outputs.sha_short }}
|
||||||
|
path: build/libs
|
||||||
6
.github/workflows/publish-release.yml
vendored
6
.github/workflows/publish-release.yml
vendored
@@ -12,11 +12,11 @@ jobs:
|
|||||||
- name: Checkout latest code
|
- name: Checkout latest code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Set up JDK 16
|
- name: Set up JDK 17
|
||||||
uses: actions/setup-java@v2
|
uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
distribution: 'adopt'
|
distribution: 'temurin'
|
||||||
java-version: 16
|
java-version: 17
|
||||||
|
|
||||||
- name: Setup build cache
|
- name: Setup build cache
|
||||||
uses: actions/cache@v2.1.6
|
uses: actions/cache@v2.1.6
|
||||||
|
|||||||
@@ -5,23 +5,20 @@
|
|||||||
- 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.
|
||||||
|
|
||||||
## Other
|
## Other
|
||||||
- All drops **must** be sent through a DropQueue - calls to World#dropItem will get your PR rejected.
|
- All drops **must** be sent through a DropQueue - calls to World#dropItem will get your PR rejected.
|
||||||
- eco is built with java 16.
|
- eco is built with java 17.
|
||||||
131
README.md
131
README.md
@@ -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>
|
||||||
|
|
||||||
|
|||||||
133
build.gradle
133
build.gradle
@@ -1,133 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id 'java-library'
|
|
||||||
id 'com.github.johnrengelman.shadow' version '7.0.0'
|
|
||||||
id 'maven-publish'
|
|
||||||
id 'java'
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation project(":eco-api")
|
|
||||||
implementation project(":eco-core:core-plugin")
|
|
||||||
implementation project(":eco-core:core-proxy")
|
|
||||||
implementation project(":eco-core:core-backend")
|
|
||||||
implementation project(":eco-core:core-nms:v1_16_R3")
|
|
||||||
implementation project(path: ":eco-core:core-nms:v1_17_R1", configuration: 'mapped')
|
|
||||||
}
|
|
||||||
|
|
||||||
allprojects {
|
|
||||||
apply plugin: 'java'
|
|
||||||
apply plugin: 'java-library'
|
|
||||||
apply plugin: 'maven-publish'
|
|
||||||
apply plugin: 'com.github.johnrengelman.shadow'
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenCentral()
|
|
||||||
mavenLocal()
|
|
||||||
maven { url 'https://jitpack.io' }
|
|
||||||
|
|
||||||
// SuperiorSkyblock2
|
|
||||||
maven { url 'https://repo.bg-software.com/repository/api/' }
|
|
||||||
|
|
||||||
// NMS (for jitpack compilation)
|
|
||||||
maven { url 'https://repo.codemc.org/repository/nms/' }
|
|
||||||
|
|
||||||
// bStats, mcMMO, BentoBox
|
|
||||||
maven { url 'https://repo.codemc.org/repository/maven-public/' }
|
|
||||||
|
|
||||||
// Spigot API, Bungee API
|
|
||||||
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
|
|
||||||
|
|
||||||
// PlaceholderAPI
|
|
||||||
maven { url 'https://repo.extendedclip.com/content/repositories/placeholderapi/' }
|
|
||||||
|
|
||||||
// ProtocolLib
|
|
||||||
maven { url 'https://repo.dmulloy2.net/nexus/repository/public/' }
|
|
||||||
|
|
||||||
// WorldGuard
|
|
||||||
maven { url 'https://maven.enginehub.org/repo/' }
|
|
||||||
|
|
||||||
// FactionsUUID
|
|
||||||
maven { url 'https://ci.ender.zone/plugin/repository/everything/' }
|
|
||||||
|
|
||||||
// NoCheatPlus
|
|
||||||
maven { url 'https://repo.md-5.net/content/repositories/snapshots/' }
|
|
||||||
|
|
||||||
// CombatLogX
|
|
||||||
maven { url 'https://nexus.sirblobman.xyz/repository/public/' }
|
|
||||||
|
|
||||||
// IridiumSkyblock
|
|
||||||
maven { url 'https://nexus.iridiumdevelopment.net/repository/maven-releases/' }
|
|
||||||
|
|
||||||
// Velocity
|
|
||||||
maven { url 'https://repo.velocitypowered.com/snapshots/' }
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compileOnly 'org.jetbrains:annotations:19.0.0'
|
|
||||||
|
|
||||||
// Lombok
|
|
||||||
compileOnly 'org.projectlombok:lombok:1.18.22'
|
|
||||||
annotationProcessor 'org.projectlombok:lombok:1.18.20'
|
|
||||||
testCompileOnly 'org.projectlombok:lombok:1.18.20'
|
|
||||||
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
|
|
||||||
|
|
||||||
// Test
|
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
|
|
||||||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.withType(JavaCompile) {
|
|
||||||
options.deprecation = true
|
|
||||||
options.encoding = 'UTF-8'
|
|
||||||
}
|
|
||||||
|
|
||||||
configurations.all {
|
|
||||||
exclude group: "org.codehaus.plexus", module: "plexus-utils"
|
|
||||||
exclude group: "com.mojang", module: "brigadier"
|
|
||||||
exclude group: "org.kitteh", module: "paste-gg-api"
|
|
||||||
exclude group: "org.kitteh", module: "pastegg"
|
|
||||||
exclude group: "org.spongepowered", module: "configurate-hocon"
|
|
||||||
exclude group: "com.darkblade12", module: "particleeffect"
|
|
||||||
exclude group: "com.github.cryptomorin", module: "XSeries"
|
|
||||||
}
|
|
||||||
|
|
||||||
shadowJar {
|
|
||||||
relocate('org.bstats', 'com.willfp.eco.shaded.bstats')
|
|
||||||
relocate('net.kyori.adventure.text.minimessage', 'com.willfp.eco.shaded.minimessage')
|
|
||||||
}
|
|
||||||
|
|
||||||
jar {
|
|
||||||
onlyIf { !sourceSets.main.allSource.files.isEmpty() }
|
|
||||||
}
|
|
||||||
|
|
||||||
compileJava {
|
|
||||||
onlyIf { !sourceSets.main.allSource.files.isEmpty() }
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
sourceCompatibility = JavaVersion.VERSION_16
|
|
||||||
targetCompatibility = JavaVersion.VERSION_16
|
|
||||||
withSourcesJar()
|
|
||||||
}
|
|
||||||
|
|
||||||
test {
|
|
||||||
useJUnitPlatform()
|
|
||||||
|
|
||||||
// Always run tests, even when nothing changed.
|
|
||||||
dependsOn cleanTest
|
|
||||||
|
|
||||||
// Show test results.
|
|
||||||
testLogging {
|
|
||||||
events "passed", "skipped", "failed"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
compileJava.options.encoding = 'UTF-8'
|
|
||||||
compileJava.dependsOn clean
|
|
||||||
|
|
||||||
build.dependsOn shadowJar
|
|
||||||
}
|
|
||||||
|
|
||||||
group = 'com.willfp'
|
|
||||||
archivesBaseName = project.name
|
|
||||||
version = findProperty("version")
|
|
||||||
126
build.gradle.kts
Normal file
126
build.gradle.kts
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
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"))
|
||||||
|
implementation(project(":eco-core:core-nms:v1_18_R1"))
|
||||||
|
}
|
||||||
|
|
||||||
|
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")
|
||||||
|
|
||||||
|
// CustomCrafting
|
||||||
|
maven("https://maven.wolfyscript.com/repository/public/")
|
||||||
|
|
||||||
|
// 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")
|
||||||
|
|
||||||
|
// Adventure
|
||||||
|
compileOnly("net.kyori:adventure-api:4.9.3")
|
||||||
|
compileOnly("net.kyori:adventure-text-serializer-gson:4.9.3")
|
||||||
|
compileOnly("net.kyori:adventure-text-serializer-legacy:4.9.3")
|
||||||
|
}
|
||||||
|
|
||||||
|
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_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
withSourcesJar()
|
||||||
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
|
useJUnitPlatform()
|
||||||
|
|
||||||
|
// Show test results.
|
||||||
|
testLogging {
|
||||||
|
events("passed", "skipped", "failed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
build {
|
||||||
|
dependsOn(shadowJar)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
group = "com.willfp"
|
||||||
|
version = findProperty("version")!!
|
||||||
@@ -9,14 +9,11 @@ dependencies {
|
|||||||
// Adventure
|
// Adventure
|
||||||
compileOnly 'net.kyori:adventure-platform-bukkit:4.0.0'
|
compileOnly 'net.kyori:adventure-platform-bukkit:4.0.0'
|
||||||
compileOnly 'net.kyori:adventure-text-minimessage:4.1.0-SNAPSHOT'
|
compileOnly 'net.kyori:adventure-text-minimessage:4.1.0-SNAPSHOT'
|
||||||
compileOnly 'net.kyori:adventure-api:4.9.2'
|
|
||||||
compileOnly 'net.kyori:adventure-text-serializer-gson:4.9.2'
|
|
||||||
compileOnly 'net.kyori:adventure-text-serializer-legacy:4.9.2'
|
|
||||||
|
|
||||||
// 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'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.willfp.eco.core;
|
|||||||
import com.willfp.eco.core.integrations.economy.EconomyManager;
|
import com.willfp.eco.core.integrations.economy.EconomyManager;
|
||||||
import com.willfp.eco.core.proxy.ProxyConstants;
|
import com.willfp.eco.core.proxy.ProxyConstants;
|
||||||
import com.willfp.eco.util.ClassUtils;
|
import com.willfp.eco.util.ClassUtils;
|
||||||
import lombok.Getter;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -42,11 +41,19 @@ public class Prerequisite {
|
|||||||
"Requires server to have vault"
|
"Requires server to have vault"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requires the server to be running 1.18.
|
||||||
|
*/
|
||||||
|
public static final Prerequisite HAS_1_18 = new Prerequisite(
|
||||||
|
() -> ProxyConstants.NMS_VERSION.contains("18"),
|
||||||
|
"Requires server to be running 1.18+"
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requires the server to be running 1.17.
|
* Requires the server to be running 1.17.
|
||||||
*/
|
*/
|
||||||
public static final Prerequisite HAS_1_17 = new Prerequisite(
|
public static final Prerequisite HAS_1_17 = new Prerequisite(
|
||||||
() -> ProxyConstants.NMS_VERSION.contains("17"),
|
() -> ProxyConstants.NMS_VERSION.contains("17") || HAS_1_18.isMet(),
|
||||||
"Requires server to be running 1.17+"
|
"Requires server to be running 1.17+"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -69,7 +76,6 @@ public class Prerequisite {
|
|||||||
/**
|
/**
|
||||||
* If the necessary prerequisite condition has been met.
|
* If the necessary prerequisite condition has been met.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private boolean isMet;
|
private boolean isMet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,7 +86,6 @@ public class Prerequisite {
|
|||||||
/**
|
/**
|
||||||
* The description of the requirements of the prerequisite.
|
* The description of the requirements of the prerequisite.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private final String description;
|
private final String description;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -125,4 +130,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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,4 +16,40 @@ public class ConfigYml extends YamlBaseConfig {
|
|||||||
public ConfigYml(@NotNull final EcoPlugin plugin) {
|
public ConfigYml(@NotNull final EcoPlugin plugin) {
|
||||||
super("config", true, plugin);
|
super("config", true, plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config.yml.
|
||||||
|
*
|
||||||
|
* @param plugin The plugin.
|
||||||
|
* @param removeUnused Remove unused.
|
||||||
|
*/
|
||||||
|
public ConfigYml(@NotNull final EcoPlugin plugin,
|
||||||
|
final boolean removeUnused) {
|
||||||
|
super("config", removeUnused, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config.yml.
|
||||||
|
*
|
||||||
|
* @param plugin The plugin.
|
||||||
|
* @param name The config name.
|
||||||
|
*/
|
||||||
|
public ConfigYml(@NotNull final EcoPlugin plugin,
|
||||||
|
@NotNull final String name) {
|
||||||
|
super(name, true, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config.yml.
|
||||||
|
*
|
||||||
|
* @param plugin The plugin.
|
||||||
|
* @param name The config name.
|
||||||
|
* @param removeUnused Remove unused.
|
||||||
|
*/
|
||||||
|
public ConfigYml(@NotNull final EcoPlugin plugin,
|
||||||
|
@NotNull final String name,
|
||||||
|
final boolean removeUnused) {
|
||||||
|
super(name, removeUnused, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.willfp.eco.core.data;
|
package com.willfp.eco.core.data;
|
||||||
|
|
||||||
|
import com.willfp.eco.core.data.keys.PersistentDataKey;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -17,11 +19,37 @@ public interface PlayerProfileHandler {
|
|||||||
PlayerProfile load(@NotNull UUID uuid);
|
PlayerProfile load(@NotNull UUID uuid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save a player profile.
|
* Unload a player profile from memory.
|
||||||
|
* <p>
|
||||||
|
* This will not save the profile first.
|
||||||
*
|
*
|
||||||
* @param uuid The uuid.
|
* @param uuid The uuid.
|
||||||
*/
|
*/
|
||||||
void savePlayer(@NotNull UUID uuid);
|
void unloadPlayer(@NotNull UUID uuid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a player profile.
|
||||||
|
* <p>
|
||||||
|
* Can run async if using MySQL.
|
||||||
|
*
|
||||||
|
* @param uuid The uuid.
|
||||||
|
* @deprecated Saving changes is faster and should be used. Saving a player manually is not recommended.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
default void savePlayer(@NotNull UUID uuid) {
|
||||||
|
this.saveKeysForPlayer(uuid, PersistentDataKey.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save keys for a player.
|
||||||
|
* <p>
|
||||||
|
* Can run async if using MySQL.
|
||||||
|
*
|
||||||
|
* @param uuid The uuid.
|
||||||
|
* @param keys The keys.
|
||||||
|
*/
|
||||||
|
void saveKeysForPlayer(@NotNull UUID uuid,
|
||||||
|
@NotNull Set<PersistentDataKey<?>> keys);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save all player data.
|
* Save all player data.
|
||||||
@@ -36,6 +64,15 @@ public interface PlayerProfileHandler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Save all player data.
|
* Save all player data.
|
||||||
|
* <p>
|
||||||
|
* Can run async if using MySQL.
|
||||||
*/
|
*/
|
||||||
void saveAll();
|
void saveAll();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commit all changes to the file.
|
||||||
|
* <p>
|
||||||
|
* Does nothing if using MySQL.
|
||||||
|
*/
|
||||||
|
void save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.willfp.eco.core.data.keys;
|
package com.willfp.eco.core.data.keys;
|
||||||
|
|
||||||
import com.willfp.eco.core.Eco;
|
import com.willfp.eco.core.Eco;
|
||||||
import lombok.Getter;
|
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@@ -16,19 +15,16 @@ public class PersistentDataKey<T> {
|
|||||||
/**
|
/**
|
||||||
* The key of the persistent data value.
|
* The key of the persistent data value.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private final NamespacedKey key;
|
private final NamespacedKey key;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The default value for the key.
|
* The default value for the key.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private final T defaultValue;
|
private final T defaultValue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The persistent data key type.
|
* The persistent data key type.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private final PersistentDataKeyType type;
|
private final PersistentDataKeyType type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,4 +61,31 @@ public class PersistentDataKey<T> {
|
|||||||
public static Set<PersistentDataKey<?>> values() {
|
public static Set<PersistentDataKey<?>> values() {
|
||||||
return Eco.getHandler().getKeyRegistry().getRegisteredKeys();
|
return Eco.getHandler().getKeyRegistry().getRegisteredKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the key.
|
||||||
|
*
|
||||||
|
* @return The key.
|
||||||
|
*/
|
||||||
|
public NamespacedKey getKey() {
|
||||||
|
return this.key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the default value.
|
||||||
|
*
|
||||||
|
* @return The default value.
|
||||||
|
*/
|
||||||
|
public T getDefaultValue() {
|
||||||
|
return this.defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the data key type.
|
||||||
|
*
|
||||||
|
* @return The key type.
|
||||||
|
*/
|
||||||
|
public PersistentDataKeyType getType() {
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.willfp.eco.core.display;
|
package com.willfp.eco.core.display;
|
||||||
|
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
@@ -10,8 +9,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
/**
|
/**
|
||||||
* Utility class to manage client-side item display.
|
* Utility class to manage client-side item display.
|
||||||
*/
|
*/
|
||||||
@UtilityClass
|
public final class Display {
|
||||||
public class Display {
|
|
||||||
/**
|
/**
|
||||||
* The prefix for client-side lore lines.
|
* The prefix for client-side lore lines.
|
||||||
*/
|
*/
|
||||||
@@ -28,7 +26,7 @@ public class Display {
|
|||||||
* @param itemStack The item.
|
* @param itemStack The item.
|
||||||
* @return The ItemStack.
|
* @return The ItemStack.
|
||||||
*/
|
*/
|
||||||
public ItemStack display(@NotNull final ItemStack itemStack) {
|
public static ItemStack display(@NotNull final ItemStack itemStack) {
|
||||||
return display(itemStack, null);
|
return display(itemStack, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,8 +37,8 @@ public class Display {
|
|||||||
* @param player The player.
|
* @param player The player.
|
||||||
* @return The ItemStack.
|
* @return The ItemStack.
|
||||||
*/
|
*/
|
||||||
public ItemStack display(@NotNull final ItemStack itemStack,
|
public static ItemStack display(@NotNull final ItemStack itemStack,
|
||||||
@Nullable final Player player) {
|
@Nullable final Player player) {
|
||||||
return handler.display(itemStack, player);
|
return handler.display(itemStack, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +48,7 @@ public class Display {
|
|||||||
* @param itemStack The item.
|
* @param itemStack The item.
|
||||||
* @return The ItemStack.
|
* @return The ItemStack.
|
||||||
*/
|
*/
|
||||||
public ItemStack displayAndFinalize(@NotNull final ItemStack itemStack) {
|
public static ItemStack displayAndFinalize(@NotNull final ItemStack itemStack) {
|
||||||
return finalize(display(itemStack, null));
|
return finalize(display(itemStack, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,7 +59,7 @@ public class Display {
|
|||||||
* @param player The player.
|
* @param player The player.
|
||||||
* @return The ItemStack.
|
* @return The ItemStack.
|
||||||
*/
|
*/
|
||||||
public ItemStack displayAndFinalize(@NotNull final ItemStack itemStack,
|
public static ItemStack displayAndFinalize(@NotNull final ItemStack itemStack,
|
||||||
@Nullable final Player player) {
|
@Nullable final Player player) {
|
||||||
return finalize(display(itemStack, player));
|
return finalize(display(itemStack, player));
|
||||||
}
|
}
|
||||||
@@ -72,7 +70,7 @@ public class Display {
|
|||||||
* @param itemStack The item.
|
* @param itemStack The item.
|
||||||
* @return The ItemStack.
|
* @return The ItemStack.
|
||||||
*/
|
*/
|
||||||
public ItemStack revert(@NotNull final ItemStack itemStack) {
|
public static ItemStack revert(@NotNull final ItemStack itemStack) {
|
||||||
return handler.revert(itemStack);
|
return handler.revert(itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,7 +80,7 @@ public class Display {
|
|||||||
* @param itemStack The item.
|
* @param itemStack The item.
|
||||||
* @return The ItemStack.
|
* @return The ItemStack.
|
||||||
*/
|
*/
|
||||||
public ItemStack finalize(@NotNull final ItemStack itemStack) {
|
public static ItemStack finalize(@NotNull final ItemStack itemStack) {
|
||||||
return handler.finalize(itemStack);
|
return handler.finalize(itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +90,7 @@ public class Display {
|
|||||||
* @param itemStack The item.
|
* @param itemStack The item.
|
||||||
* @return The ItemStack.
|
* @return The ItemStack.
|
||||||
*/
|
*/
|
||||||
public ItemStack unfinalize(@NotNull final ItemStack itemStack) {
|
public static ItemStack unfinalize(@NotNull final ItemStack itemStack) {
|
||||||
return handler.unfinalize(itemStack);
|
return handler.unfinalize(itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,7 +100,7 @@ public class Display {
|
|||||||
* @param itemStack The item.
|
* @param itemStack The item.
|
||||||
* @return If finalized.
|
* @return If finalized.
|
||||||
*/
|
*/
|
||||||
public boolean isFinalized(@NotNull final ItemStack itemStack) {
|
public static boolean isFinalized(@NotNull final ItemStack itemStack) {
|
||||||
return handler.isFinalized(itemStack);
|
return handler.isFinalized(itemStack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +109,7 @@ public class Display {
|
|||||||
*
|
*
|
||||||
* @param module The module.
|
* @param module The module.
|
||||||
*/
|
*/
|
||||||
public void registerDisplayModule(@NotNull final DisplayModule module) {
|
public static void registerDisplayModule(@NotNull final DisplayModule module) {
|
||||||
handler.registerDisplayModule(module);
|
handler.registerDisplayModule(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,4 +174,8 @@ public class Display {
|
|||||||
|
|
||||||
Display.handler = handler;
|
Display.handler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Display() {
|
||||||
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.willfp.eco.core.events;
|
package com.willfp.eco.core.events;
|
||||||
|
|
||||||
import lombok.Getter;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.event.player.PlayerEvent;
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
@@ -23,13 +22,11 @@ public class ArmorChangeEvent extends PlayerEvent {
|
|||||||
/**
|
/**
|
||||||
* The armor contents before. 0 is helmet, 3 is boots.
|
* The armor contents before. 0 is helmet, 3 is boots.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private final List<ItemStack> before;
|
private final List<ItemStack> before;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The armor contents after. 0 is helmet, 3 is boots.
|
* The armor contents after. 0 is helmet, 3 is boots.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private final List<ItemStack> after;
|
private final List<ItemStack> after;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,7 +34,7 @@ public class ArmorChangeEvent extends PlayerEvent {
|
|||||||
*
|
*
|
||||||
* @param player The player.
|
* @param player The player.
|
||||||
* @param before The armor contents before.
|
* @param before The armor contents before.
|
||||||
* @param after The armor contents after.
|
* @param after The armor contents after.
|
||||||
*/
|
*/
|
||||||
public ArmorChangeEvent(@NotNull final Player player,
|
public ArmorChangeEvent(@NotNull final Player player,
|
||||||
@NotNull final List<ItemStack> before,
|
@NotNull final List<ItemStack> before,
|
||||||
@@ -52,7 +49,6 @@ public class ArmorChangeEvent extends PlayerEvent {
|
|||||||
*
|
*
|
||||||
* @return A list of handlers handling this event.
|
* @return A list of handlers handling this event.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
@@ -67,4 +63,22 @@ public class ArmorChangeEvent extends PlayerEvent {
|
|||||||
public static HandlerList getHandlerList() {
|
public static HandlerList getHandlerList() {
|
||||||
return HANDLERS;
|
return HANDLERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the contents before the change.
|
||||||
|
*
|
||||||
|
* @return The contents.
|
||||||
|
*/
|
||||||
|
public List<ItemStack> getBefore() {
|
||||||
|
return this.before;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current contents.
|
||||||
|
*
|
||||||
|
* @return The contents.
|
||||||
|
*/
|
||||||
|
public List<ItemStack> getAfter() {
|
||||||
|
return this.after;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,14 +70,14 @@ public interface FastItemStack {
|
|||||||
*
|
*
|
||||||
* @param hideFlags The flags.
|
* @param hideFlags The flags.
|
||||||
*/
|
*/
|
||||||
void addItemFlags(ItemFlag... hideFlags);
|
void addItemFlags(@NotNull ItemFlag... hideFlags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove ItemFlags.
|
* Remove ItemFlags.
|
||||||
*
|
*
|
||||||
* @param hideFlags The flags.
|
* @param hideFlags The flags.
|
||||||
*/
|
*/
|
||||||
void removeItemFlags(ItemFlag... hideFlags);
|
void removeItemFlags(@NotNull ItemFlag... hideFlags);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the ItemFlags.
|
* Get the ItemFlags.
|
||||||
@@ -92,7 +92,7 @@ public interface FastItemStack {
|
|||||||
* @param flag The flag.
|
* @param flag The flag.
|
||||||
* @return If the flag is present.
|
* @return If the flag is present.
|
||||||
*/
|
*/
|
||||||
boolean hasItemFlag(ItemFlag flag);
|
boolean hasItemFlag(@NotNull ItemFlag flag);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Bukkit ItemStack again.
|
* Get the Bukkit ItemStack again.
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.willfp.eco.core.gui.slot;
|
|||||||
|
|
||||||
import com.willfp.eco.core.items.builder.ItemStackBuilder;
|
import com.willfp.eco.core.items.builder.ItemStackBuilder;
|
||||||
import com.willfp.eco.util.ListUtils;
|
import com.willfp.eco.util.ListUtils;
|
||||||
import lombok.Getter;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -29,7 +28,6 @@ public class FillerMask {
|
|||||||
/**
|
/**
|
||||||
* Mask.
|
* Mask.
|
||||||
*/
|
*/
|
||||||
@Getter
|
|
||||||
private final List<List<Slot>> mask;
|
private final List<List<Slot>> mask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,7 +45,7 @@ public class FillerMask {
|
|||||||
* Create a new filler mask.
|
* Create a new filler mask.
|
||||||
*
|
*
|
||||||
* @param materials The mask materials.
|
* @param materials The mask materials.
|
||||||
* @param pattern The pattern.
|
* @param pattern The pattern.
|
||||||
*/
|
*/
|
||||||
public FillerMask(@NotNull final MaskMaterials materials,
|
public FillerMask(@NotNull final MaskMaterials materials,
|
||||||
@NotNull final String... pattern) {
|
@NotNull final String... pattern) {
|
||||||
@@ -82,4 +80,13 @@ public class FillerMask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the mask.
|
||||||
|
*
|
||||||
|
* @return The mask.
|
||||||
|
*/
|
||||||
|
public List<List<Slot>> getMask() {
|
||||||
|
return this.mask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,6 @@
|
|||||||
package com.willfp.eco.core.items.builder;
|
package com.willfp.eco.core.items.builder;
|
||||||
|
|
||||||
import com.willfp.eco.util.StringUtils;
|
import com.willfp.eco.util.StringUtils;
|
||||||
import lombok.AccessLevel;
|
|
||||||
import lombok.Getter;
|
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
@@ -29,13 +27,11 @@ public abstract class AbstractItemStackBuilder<T extends ItemMeta, U extends Abs
|
|||||||
/**
|
/**
|
||||||
* The ItemMeta used while building.
|
* The ItemMeta used while building.
|
||||||
*/
|
*/
|
||||||
@Getter(AccessLevel.PROTECTED)
|
|
||||||
private final T meta;
|
private final T meta;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The ItemStack.
|
* The ItemStack.
|
||||||
*/
|
*/
|
||||||
@Getter(AccessLevel.PROTECTED)
|
|
||||||
private final ItemStack base;
|
private final ItemStack base;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -201,4 +197,22 @@ public abstract class AbstractItemStackBuilder<T extends ItemMeta, U extends Abs
|
|||||||
|
|
||||||
return base;
|
return base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the base ItemStack.
|
||||||
|
*
|
||||||
|
* @return The base ItemStack.
|
||||||
|
*/
|
||||||
|
protected ItemStack getBase() {
|
||||||
|
return base;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the meta.
|
||||||
|
*
|
||||||
|
* @return The meta.
|
||||||
|
*/
|
||||||
|
protected T getMeta() {
|
||||||
|
return meta;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import com.willfp.eco.core.EcoPlugin;
|
|||||||
import com.willfp.eco.core.items.Items;
|
import com.willfp.eco.core.items.Items;
|
||||||
import com.willfp.eco.core.recipe.recipes.CraftingRecipe;
|
import com.willfp.eco.core.recipe.recipes.CraftingRecipe;
|
||||||
import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe;
|
import com.willfp.eco.core.recipe.recipes.ShapedCraftingRecipe;
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -17,9 +16,8 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* Utility class to manage and register crafting recipes.
|
* Utility class to manage and register crafting recipes.
|
||||||
*/
|
*/
|
||||||
@UtilityClass
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public class Recipes {
|
public final class Recipes {
|
||||||
/**
|
/**
|
||||||
* Registry of all recipes.
|
* Registry of all recipes.
|
||||||
*/
|
*/
|
||||||
@@ -31,7 +29,7 @@ public class Recipes {
|
|||||||
*
|
*
|
||||||
* @param recipe The recipe.
|
* @param recipe The recipe.
|
||||||
*/
|
*/
|
||||||
public void register(@NotNull final CraftingRecipe recipe) {
|
public static void register(@NotNull final CraftingRecipe recipe) {
|
||||||
RECIPES.forcePut(recipe.getKey(), recipe);
|
RECIPES.forcePut(recipe.getKey(), recipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +40,7 @@ public class Recipes {
|
|||||||
* @return The match, or null if not found.
|
* @return The match, or null if not found.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public CraftingRecipe getMatch(@NotNull final ItemStack[] matrix) {
|
public static CraftingRecipe getMatch(@NotNull final ItemStack[] matrix) {
|
||||||
return RECIPES.values().stream().filter(recipe -> recipe.test(matrix)).findFirst().orElse(null);
|
return RECIPES.values().stream().filter(recipe -> recipe.test(matrix)).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,7 +51,7 @@ public class Recipes {
|
|||||||
* @return The recipe, or null if not found.
|
* @return The recipe, or null if not found.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public CraftingRecipe getRecipe(@NotNull final NamespacedKey key) {
|
public static CraftingRecipe getRecipe(@NotNull final NamespacedKey key) {
|
||||||
CraftingRecipe recipe = RECIPES.get(key);
|
CraftingRecipe recipe = RECIPES.get(key);
|
||||||
if (recipe != null) {
|
if (recipe != null) {
|
||||||
return recipe;
|
return recipe;
|
||||||
@@ -77,10 +75,10 @@ public class Recipes {
|
|||||||
* @param recipeStrings The recipe.
|
* @param recipeStrings The recipe.
|
||||||
* @return The recipe.
|
* @return The recipe.
|
||||||
*/
|
*/
|
||||||
public CraftingRecipe createAndRegisterRecipe(@NotNull final EcoPlugin plugin,
|
public static CraftingRecipe createAndRegisterRecipe(@NotNull final EcoPlugin plugin,
|
||||||
@NotNull final String key,
|
@NotNull final String key,
|
||||||
@NotNull final ItemStack output,
|
@NotNull final ItemStack output,
|
||||||
@NotNull final List<String> recipeStrings) {
|
@NotNull final List<String> recipeStrings) {
|
||||||
ShapedCraftingRecipe.Builder builder = ShapedCraftingRecipe.builder(plugin, key).setOutput(output);
|
ShapedCraftingRecipe.Builder builder = ShapedCraftingRecipe.builder(plugin, key).setOutput(output);
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
@@ -92,4 +90,8 @@ public class Recipes {
|
|||||||
|
|
||||||
return recipe;
|
return recipe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Recipes() {
|
||||||
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ package com.willfp.eco.core.recipe.recipes;
|
|||||||
import com.willfp.eco.core.Eco;
|
import com.willfp.eco.core.Eco;
|
||||||
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 com.willfp.eco.core.Prerequisite;
|
||||||
import com.willfp.eco.core.items.TestableItem;
|
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 +27,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,
|
||||||
@@ -117,6 +113,12 @@ public final class ShapedCraftingRecipe extends PluginDependent<EcoPlugin> imple
|
|||||||
displayedRecipe.setIngredient(character, new RecipeChoice.ExactChoice(item));
|
displayedRecipe.setIngredient(character, new RecipeChoice.ExactChoice(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Prerequisite.HAS_1_18.isMet()) {
|
||||||
|
if (Bukkit.getServer().getRecipe(this.getKey()) != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Bukkit.getServer().addRecipe(shapedRecipe);
|
Bukkit.getServer().addRecipe(shapedRecipe);
|
||||||
Bukkit.getServer().addRecipe(displayedRecipe);
|
Bukkit.getServer().addRecipe(displayedRecipe);
|
||||||
}
|
}
|
||||||
@@ -133,6 +135,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.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.willfp.eco.util;
|
package com.willfp.eco.util;
|
||||||
|
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -21,22 +20,21 @@ import java.util.function.BiConsumer;
|
|||||||
/**
|
/**
|
||||||
* Utilities / API methods for blocks.
|
* Utilities / API methods for blocks.
|
||||||
*/
|
*/
|
||||||
@UtilityClass
|
public final class BlockUtils {
|
||||||
public class BlockUtils {
|
|
||||||
/**
|
/**
|
||||||
* If the meta set function has been set.
|
* If the meta set function has been set.
|
||||||
*/
|
*/
|
||||||
private boolean initialized = false;
|
private static boolean initialized = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The block break function.
|
* The block break function.
|
||||||
*/
|
*/
|
||||||
private BiConsumer<Player, Block> blockBreakConsumer = null;
|
private static BiConsumer<Player, Block> blockBreakConsumer = null;
|
||||||
|
|
||||||
private Set<Block> getNearbyBlocks(@NotNull final Block start,
|
private static Set<Block> getNearbyBlocks(@NotNull final Block start,
|
||||||
@NotNull final List<Material> allowedMaterials,
|
@NotNull final List<Material> allowedMaterials,
|
||||||
@NotNull final Set<Block> blocks,
|
@NotNull final Set<Block> blocks,
|
||||||
final int limit) {
|
final int limit) {
|
||||||
for (BlockFace face : BlockFace.values()) {
|
for (BlockFace face : BlockFace.values()) {
|
||||||
Block block = start.getRelative(face);
|
Block block = start.getRelative(face);
|
||||||
if (blocks.contains(block)) {
|
if (blocks.contains(block)) {
|
||||||
@@ -66,9 +64,9 @@ public class BlockUtils {
|
|||||||
* @return A set of all {@link Block}s.
|
* @return A set of all {@link Block}s.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public Set<Block> getVein(@NotNull final Block start,
|
public static Set<Block> getVein(@NotNull final Block start,
|
||||||
@NotNull final List<Material> allowedMaterials,
|
@NotNull final List<Material> allowedMaterials,
|
||||||
final int limit) {
|
final int limit) {
|
||||||
return getNearbyBlocks(start, allowedMaterials, new HashSet<>(), limit);
|
return getNearbyBlocks(start, allowedMaterials, new HashSet<>(), limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,8 +76,8 @@ public class BlockUtils {
|
|||||||
* @param player The player to break the block as.
|
* @param player The player to break the block as.
|
||||||
* @param block The block to break.
|
* @param block The block to break.
|
||||||
*/
|
*/
|
||||||
public void breakBlock(@NotNull final Player player,
|
public static void breakBlock(@NotNull final Player player,
|
||||||
@NotNull final Block block) {
|
@NotNull final Block block) {
|
||||||
Validate.isTrue(initialized, "Must be initialized!");
|
Validate.isTrue(initialized, "Must be initialized!");
|
||||||
Validate.notNull(blockBreakConsumer, "Must be initialized!");
|
Validate.notNull(blockBreakConsumer, "Must be initialized!");
|
||||||
|
|
||||||
@@ -100,7 +98,7 @@ public class BlockUtils {
|
|||||||
* @param block The block.
|
* @param block The block.
|
||||||
* @return If placed by a player.
|
* @return If placed by a player.
|
||||||
*/
|
*/
|
||||||
public boolean isPlayerPlaced(@NotNull final Block block) {
|
public static boolean isPlayerPlaced(@NotNull final Block block) {
|
||||||
Chunk chunk = block.getChunk();
|
Chunk chunk = block.getChunk();
|
||||||
|
|
||||||
return chunk.getPersistentDataContainer().has(
|
return chunk.getPersistentDataContainer().has(
|
||||||
@@ -115,11 +113,15 @@ public class BlockUtils {
|
|||||||
* @param function The function.
|
* @param function The function.
|
||||||
*/
|
*/
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
public void initialize(@NotNull final BiConsumer<Player, Block> function) {
|
public static void initialize(@NotNull final BiConsumer<Player, Block> function) {
|
||||||
Validate.isTrue(!initialized, "Already initialized!");
|
Validate.isTrue(!initialized, "Already initialized!");
|
||||||
|
|
||||||
blockBreakConsumer = function;
|
blockBreakConsumer = function;
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private BlockUtils() {
|
||||||
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.willfp.eco.util;
|
package com.willfp.eco.util;
|
||||||
|
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
@@ -17,8 +16,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
/**
|
/**
|
||||||
* Utilities / API methods for item durability.
|
* Utilities / API methods for item durability.
|
||||||
*/
|
*/
|
||||||
@UtilityClass
|
public final class DurabilityUtils {
|
||||||
public class DurabilityUtils {
|
|
||||||
/**
|
/**
|
||||||
* Damage an item in a player's inventory.
|
* Damage an item in a player's inventory.
|
||||||
* The slot of a held item can be obtained with {@link PlayerInventory#getHeldItemSlot()}.
|
* The slot of a held item can be obtained with {@link PlayerInventory#getHeldItemSlot()}.
|
||||||
@@ -29,10 +27,10 @@ public class DurabilityUtils {
|
|||||||
* @param damage The amount of damage to deal.
|
* @param damage The amount of damage to deal.
|
||||||
* @param slot The slot in the inventory of the item.
|
* @param slot The slot in the inventory of the item.
|
||||||
*/
|
*/
|
||||||
public void damageItem(@NotNull final Player player,
|
public static void damageItem(@NotNull final Player player,
|
||||||
@NotNull final ItemStack item,
|
@NotNull final ItemStack item,
|
||||||
final int damage,
|
final int damage,
|
||||||
final int slot) {
|
final int slot) {
|
||||||
if (item.getItemMeta() == null) {
|
if (item.getItemMeta() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -78,9 +76,9 @@ public class DurabilityUtils {
|
|||||||
* @param damage The amount of damage to deal.
|
* @param damage The amount of damage to deal.
|
||||||
* @param player The player.
|
* @param player The player.
|
||||||
*/
|
*/
|
||||||
public void damageItemNoBreak(@NotNull final ItemStack item,
|
public static void damageItemNoBreak(@NotNull final ItemStack item,
|
||||||
final int damage,
|
final int damage,
|
||||||
@NotNull final Player player) {
|
@NotNull final Player player) {
|
||||||
if (item.getItemMeta() == null) {
|
if (item.getItemMeta() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -114,8 +112,8 @@ public class DurabilityUtils {
|
|||||||
* @param item The item to damage.
|
* @param item The item to damage.
|
||||||
* @param repair The amount of damage to heal.
|
* @param repair The amount of damage to heal.
|
||||||
*/
|
*/
|
||||||
public void repairItem(@NotNull final ItemStack item,
|
public static void repairItem(@NotNull final ItemStack item,
|
||||||
final int repair) {
|
final int repair) {
|
||||||
if (item.getItemMeta() == null) {
|
if (item.getItemMeta() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -133,4 +131,8 @@ public class DurabilityUtils {
|
|||||||
item.setItemMeta((ItemMeta) meta);
|
item.setItemMeta((ItemMeta) meta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DurabilityUtils() {
|
||||||
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.willfp.eco.util;
|
package com.willfp.eco.util;
|
||||||
|
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
@@ -9,9 +8,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
/**
|
/**
|
||||||
* Utilities / API methods for lightning.
|
* Utilities / API methods for lightning.
|
||||||
*/
|
*/
|
||||||
@UtilityClass
|
public final class LightningUtils {
|
||||||
public class LightningUtils {
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Strike lightning on player without fire.
|
* Strike lightning on player without fire.
|
||||||
*
|
*
|
||||||
@@ -19,9 +16,9 @@ public class LightningUtils {
|
|||||||
* @param damage The damage to deal.
|
* @param damage The damage to deal.
|
||||||
* @param silent If the lightning sound should be played locally
|
* @param silent If the lightning sound should be played locally
|
||||||
*/
|
*/
|
||||||
public void strike(@NotNull final LivingEntity victim,
|
public static void strike(@NotNull final LivingEntity victim,
|
||||||
final double damage,
|
final double damage,
|
||||||
final boolean silent) {
|
final boolean silent) {
|
||||||
Location loc = victim.getLocation();
|
Location loc = victim.getLocation();
|
||||||
|
|
||||||
if (silent) {
|
if (silent) {
|
||||||
@@ -40,8 +37,12 @@ public class LightningUtils {
|
|||||||
* @param victim The entity to smite.
|
* @param victim The entity to smite.
|
||||||
* @param damage The damage to deal.
|
* @param damage The damage to deal.
|
||||||
*/
|
*/
|
||||||
public void strike(@NotNull final LivingEntity victim,
|
public static void strike(@NotNull final LivingEntity victim,
|
||||||
final double damage) {
|
final double damage) {
|
||||||
strike(victim, damage, false);
|
strike(victim, damage, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LightningUtils() {
|
||||||
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.willfp.eco.util;
|
package com.willfp.eco.util;
|
||||||
|
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
@@ -11,8 +10,7 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||||||
/**
|
/**
|
||||||
* Utilities / API methods for numbers.
|
* Utilities / API methods for numbers.
|
||||||
*/
|
*/
|
||||||
@UtilityClass
|
public final class NumberUtils {
|
||||||
public class NumberUtils {
|
|
||||||
/**
|
/**
|
||||||
* Sin lookup table.
|
* Sin lookup table.
|
||||||
*/
|
*/
|
||||||
@@ -72,8 +70,8 @@ public class NumberUtils {
|
|||||||
* @param bias The bias between -1 and 1, where higher values bias input values to lower output values.
|
* @param bias The bias between -1 and 1, where higher values bias input values to lower output values.
|
||||||
* @return The biased output.
|
* @return The biased output.
|
||||||
*/
|
*/
|
||||||
public double bias(final double input,
|
public static double bias(final double input,
|
||||||
final double bias) {
|
final double bias) {
|
||||||
double k = Math.pow(1 - bias, 3);
|
double k = Math.pow(1 - bias, 3);
|
||||||
|
|
||||||
return (input * k) / (input * k - input + 1);
|
return (input * k) / (input * k - input + 1);
|
||||||
@@ -86,8 +84,8 @@ public class NumberUtils {
|
|||||||
* @param limit The maximum.
|
* @param limit The maximum.
|
||||||
* @return The new value.
|
* @return The new value.
|
||||||
*/
|
*/
|
||||||
public int equalIfOver(final int toChange,
|
public static int equalIfOver(final int toChange,
|
||||||
final int limit) {
|
final int limit) {
|
||||||
return Math.min(toChange, limit);
|
return Math.min(toChange, limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,8 +96,8 @@ public class NumberUtils {
|
|||||||
* @param limit The maximum.
|
* @param limit The maximum.
|
||||||
* @return The new value.
|
* @return The new value.
|
||||||
*/
|
*/
|
||||||
public double equalIfOver(final double toChange,
|
public static double equalIfOver(final double toChange,
|
||||||
final double limit) {
|
final double limit) {
|
||||||
return Math.min(toChange, limit);
|
return Math.min(toChange, limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +108,7 @@ public class NumberUtils {
|
|||||||
* @return The number, converted to a roman numeral.
|
* @return The number, converted to a roman numeral.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String toNumeral(final int number) {
|
public static String toNumeral(final int number) {
|
||||||
if (number >= 1 && number <= 4096) {
|
if (number >= 1 && number <= 4096) {
|
||||||
int l = NUMERALS.floorKey(number);
|
int l = NUMERALS.floorKey(number);
|
||||||
if (number == l) {
|
if (number == l) {
|
||||||
@@ -147,8 +145,8 @@ public class NumberUtils {
|
|||||||
* @param max Maximum.
|
* @param max Maximum.
|
||||||
* @return Random integer.
|
* @return Random integer.
|
||||||
*/
|
*/
|
||||||
public int randInt(final int min,
|
public static int randInt(final int min,
|
||||||
final int max) {
|
final int max) {
|
||||||
return ThreadLocalRandom.current().nextInt(min, max + 1);
|
return ThreadLocalRandom.current().nextInt(min, max + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,8 +157,8 @@ public class NumberUtils {
|
|||||||
* @param max Maximum.
|
* @param max Maximum.
|
||||||
* @return Random double.
|
* @return Random double.
|
||||||
*/
|
*/
|
||||||
public double randFloat(final double min,
|
public static double randFloat(final double min,
|
||||||
final double max) {
|
final double max) {
|
||||||
return ThreadLocalRandom.current().nextDouble(min, max);
|
return ThreadLocalRandom.current().nextDouble(min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,9 +170,9 @@ public class NumberUtils {
|
|||||||
* @param peak Peak.
|
* @param peak Peak.
|
||||||
* @return Random double.
|
* @return Random double.
|
||||||
*/
|
*/
|
||||||
public double triangularDistribution(final double minimum,
|
public static double triangularDistribution(final double minimum,
|
||||||
final double maximum,
|
final double maximum,
|
||||||
final double peak) {
|
final double peak) {
|
||||||
double f = (peak - minimum) / (maximum - minimum);
|
double f = (peak - minimum) / (maximum - minimum);
|
||||||
double rand = Math.random();
|
double rand = Math.random();
|
||||||
if (rand < f) {
|
if (rand < f) {
|
||||||
@@ -190,7 +188,7 @@ public class NumberUtils {
|
|||||||
* @param toLog The number.
|
* @param toLog The number.
|
||||||
* @return The result.
|
* @return The result.
|
||||||
*/
|
*/
|
||||||
public int log2(final int toLog) {
|
public static int log2(final int toLog) {
|
||||||
return (int) (Math.log(toLog) / Math.log(2));
|
return (int) (Math.log(toLog) / Math.log(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,10 +199,14 @@ public class NumberUtils {
|
|||||||
* @return Formatted.
|
* @return Formatted.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String format(final double toFormat) {
|
public static String format(final double toFormat) {
|
||||||
DecimalFormat df = new DecimalFormat("0.00");
|
DecimalFormat df = new DecimalFormat("0.00");
|
||||||
String formatted = df.format(toFormat);
|
String formatted = df.format(toFormat);
|
||||||
|
|
||||||
return formatted.endsWith("00") ? String.valueOf((int) toFormat) : formatted;
|
return formatted.endsWith("00") ? String.valueOf((int) toFormat) : formatted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NumberUtils() {
|
||||||
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,20 @@ 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);
|
|
||||||
|
|
||||||
if (player instanceof Player onlinePlayer) {
|
if (player instanceof Player onlinePlayer) {
|
||||||
profile.write(PLAYER_NAME_KEY, onlinePlayer.getDisplayName());
|
updateSavedDisplayName(onlinePlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return profile.read(PLAYER_NAME_KEY);
|
PlayerProfile profile = PlayerProfile.load(player);
|
||||||
|
|
||||||
|
String saved = profile.read(PLAYER_NAME_KEY);
|
||||||
|
|
||||||
|
if (saved.equals(PLAYER_NAME_KEY.getDefaultValue())) {
|
||||||
|
return player.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return saved;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -98,8 +102,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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,9 @@ import com.google.common.collect.ImmutableList;
|
|||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import com.willfp.eco.core.Prerequisite;
|
import com.willfp.eco.core.Prerequisite;
|
||||||
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager;
|
import com.willfp.eco.core.integrations.placeholder.PlaceholderManager;
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.TextDecoration;
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.markdown.DiscordFlavor;
|
|
||||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
@@ -16,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -25,18 +23,10 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static net.md_5.bungee.api.ChatColor.BOLD;
|
|
||||||
import static net.md_5.bungee.api.ChatColor.COLOR_CHAR;
|
|
||||||
import static net.md_5.bungee.api.ChatColor.ITALIC;
|
|
||||||
import static net.md_5.bungee.api.ChatColor.MAGIC;
|
|
||||||
import static net.md_5.bungee.api.ChatColor.STRIKETHROUGH;
|
|
||||||
import static net.md_5.bungee.api.ChatColor.UNDERLINE;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utilities / API methods for strings.
|
* Utilities / API methods for strings.
|
||||||
*/
|
*/
|
||||||
@UtilityClass
|
public final class StringUtils {
|
||||||
public class StringUtils {
|
|
||||||
/**
|
/**
|
||||||
* Regexes for gradients.
|
* Regexes for gradients.
|
||||||
*/
|
*/
|
||||||
@@ -72,16 +62,16 @@ public class StringUtils {
|
|||||||
* Color map.
|
* Color map.
|
||||||
*/
|
*/
|
||||||
private static final Map<String, ChatColor> COLOR_MAP = new ImmutableMap.Builder<String, ChatColor>()
|
private static final Map<String, ChatColor> COLOR_MAP = new ImmutableMap.Builder<String, ChatColor>()
|
||||||
.put("&l", BOLD)
|
.put("&l", ChatColor.BOLD)
|
||||||
.put("&o", ITALIC)
|
.put("&o", ChatColor.ITALIC)
|
||||||
.put("&n", UNDERLINE)
|
.put("&n", ChatColor.UNDERLINE)
|
||||||
.put("&m", STRIKETHROUGH)
|
.put("&m", ChatColor.STRIKETHROUGH)
|
||||||
.put("&k", MAGIC)
|
.put("&k", ChatColor.MAGIC)
|
||||||
.put("§l", BOLD)
|
.put("§l", ChatColor.BOLD)
|
||||||
.put("§o", ITALIC)
|
.put("§o", ChatColor.ITALIC)
|
||||||
.put("§n", UNDERLINE)
|
.put("§n", ChatColor.UNDERLINE)
|
||||||
.put("§m", STRIKETHROUGH)
|
.put("§m", ChatColor.STRIKETHROUGH)
|
||||||
.put("§k", MAGIC)
|
.put("§k", ChatColor.MAGIC)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,7 +83,7 @@ public class StringUtils {
|
|||||||
* @return The message, formatted.
|
* @return The message, formatted.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<String> formatList(@NotNull final List<String> list) {
|
public static List<String> formatList(@NotNull final List<String> list) {
|
||||||
return formatList(list, (Player) null);
|
return formatList(list, (Player) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,8 +97,8 @@ public class StringUtils {
|
|||||||
* @return The message, format.
|
* @return The message, format.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<String> formatList(@NotNull final List<String> list,
|
public static List<String> formatList(@NotNull final List<String> list,
|
||||||
@Nullable final Player player) {
|
@Nullable final Player player) {
|
||||||
return formatList(list, player, FormatOption.WITH_PLACEHOLDERS);
|
return formatList(list, player, FormatOption.WITH_PLACEHOLDERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,8 +112,8 @@ public class StringUtils {
|
|||||||
* @return The message, formatted.
|
* @return The message, formatted.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<String> formatList(@NotNull final List<String> list,
|
public static List<String> formatList(@NotNull final List<String> list,
|
||||||
@NotNull final FormatOption option) {
|
@NotNull final FormatOption option) {
|
||||||
return formatList(list, null, option);
|
return formatList(list, null, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,9 +128,9 @@ public class StringUtils {
|
|||||||
* @return The message, format.
|
* @return The message, format.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<String> formatList(@NotNull final List<String> list,
|
public static List<String> formatList(@NotNull final List<String> list,
|
||||||
@Nullable final Player player,
|
@Nullable final Player player,
|
||||||
@NotNull final FormatOption option) {
|
@NotNull final FormatOption option) {
|
||||||
List<String> translated = new ArrayList<>();
|
List<String> translated = new ArrayList<>();
|
||||||
for (String string : list) {
|
for (String string : list) {
|
||||||
translated.add(format(string, player, option));
|
translated.add(format(string, player, option));
|
||||||
@@ -159,7 +149,7 @@ public class StringUtils {
|
|||||||
* @see StringUtils#format(String, Player)
|
* @see StringUtils#format(String, Player)
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String format(@NotNull final String message) {
|
public static String format(@NotNull final String message) {
|
||||||
return format(message, (Player) null);
|
return format(message, (Player) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,8 +163,8 @@ public class StringUtils {
|
|||||||
* @return The message, formatted.
|
* @return The message, formatted.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String format(@NotNull final String message,
|
public static String format(@NotNull final String message,
|
||||||
@Nullable final Player player) {
|
@Nullable final Player player) {
|
||||||
return format(message, player, FormatOption.WITH_PLACEHOLDERS);
|
return format(message, player, FormatOption.WITH_PLACEHOLDERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,8 +179,8 @@ public class StringUtils {
|
|||||||
* @see StringUtils#format(String, Player)
|
* @see StringUtils#format(String, Player)
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String format(@NotNull final String message,
|
public static String format(@NotNull final String message,
|
||||||
@NotNull final FormatOption option) {
|
@NotNull final FormatOption option) {
|
||||||
return format(message, null, option);
|
return format(message, null, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +194,7 @@ public class StringUtils {
|
|||||||
* @see StringUtils#format(String, Player)
|
* @see StringUtils#format(String, Player)
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public Component formatToComponent(@NotNull final String message) {
|
public static Component formatToComponent(@NotNull final String message) {
|
||||||
return formatToComponent(message, (Player) null);
|
return formatToComponent(message, (Player) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,8 +208,8 @@ public class StringUtils {
|
|||||||
* @return The message, formatted.
|
* @return The message, formatted.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public Component formatToComponent(@NotNull final String message,
|
public static Component formatToComponent(@NotNull final String message,
|
||||||
@Nullable final Player player) {
|
@Nullable final Player player) {
|
||||||
return formatToComponent(message, player, FormatOption.WITH_PLACEHOLDERS);
|
return formatToComponent(message, player, FormatOption.WITH_PLACEHOLDERS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,8 +224,8 @@ public class StringUtils {
|
|||||||
* @see StringUtils#format(String, Player)
|
* @see StringUtils#format(String, Player)
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public Component formatToComponent(@NotNull final String message,
|
public static Component formatToComponent(@NotNull final String message,
|
||||||
@NotNull final FormatOption option) {
|
@NotNull final FormatOption option) {
|
||||||
return formatToComponent(message, null, option);
|
return formatToComponent(message, null, option);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,9 +240,9 @@ public class StringUtils {
|
|||||||
* @return The message, formatted, as a component.
|
* @return The message, formatted, as a component.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public Component formatToComponent(@NotNull final String message,
|
public static Component formatToComponent(@NotNull final String message,
|
||||||
@Nullable final Player player,
|
@Nullable final Player player,
|
||||||
@NotNull final FormatOption option) {
|
@NotNull final FormatOption option) {
|
||||||
return toComponent(format(message, player, option));
|
return toComponent(format(message, player, option));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,9 +257,9 @@ public class StringUtils {
|
|||||||
* @return The message, formatted.
|
* @return The message, formatted.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String format(@NotNull final String message,
|
public static String format(@NotNull final String message,
|
||||||
@Nullable final Player player,
|
@Nullable final Player player,
|
||||||
@NotNull final FormatOption option) {
|
@NotNull final FormatOption option) {
|
||||||
String processedMessage = message;
|
String processedMessage = message;
|
||||||
if (option == FormatOption.WITH_PLACEHOLDERS) {
|
if (option == FormatOption.WITH_PLACEHOLDERS) {
|
||||||
processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player);
|
processedMessage = PlaceholderManager.translatePlaceholders(processedMessage, player);
|
||||||
@@ -284,7 +274,7 @@ public class StringUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String translateMiniMessage(@NotNull final String message) {
|
private static String translateMiniMessage(@NotNull final String message) {
|
||||||
return LEGACY_COMPONENT_SERIALIZER.serialize(MiniMessage.withMarkdownFlavor(DiscordFlavor.get()).parse(message));
|
return LEGACY_COMPONENT_SERIALIZER.serialize(MiniMessage.get().parse(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String translateHexColorCodes(@NotNull final String message) {
|
private static String translateHexColorCodes(@NotNull final String message) {
|
||||||
@@ -302,10 +292,10 @@ public class StringUtils {
|
|||||||
StringBuilder builder = new StringBuilder(message.length() + 4 * 8);
|
StringBuilder builder = new StringBuilder(message.length() + 4 * 8);
|
||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
String group = matcher.group(1);
|
String group = matcher.group(1);
|
||||||
matcher.appendReplacement(builder, COLOR_CHAR + "x"
|
matcher.appendReplacement(builder, ChatColor.COLOR_CHAR + "x"
|
||||||
+ COLOR_CHAR + group.charAt(0) + COLOR_CHAR + group.charAt(1)
|
+ ChatColor.COLOR_CHAR + group.charAt(0) + ChatColor.COLOR_CHAR + group.charAt(1)
|
||||||
+ COLOR_CHAR + group.charAt(2) + COLOR_CHAR + group.charAt(3)
|
+ ChatColor.COLOR_CHAR + group.charAt(2) + ChatColor.COLOR_CHAR + group.charAt(3)
|
||||||
+ COLOR_CHAR + group.charAt(4) + COLOR_CHAR + group.charAt(5));
|
+ ChatColor.COLOR_CHAR + group.charAt(4) + ChatColor.COLOR_CHAR + group.charAt(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
return matcher.appendTail(builder).toString();
|
return matcher.appendTail(builder).toString();
|
||||||
@@ -379,7 +369,7 @@ public class StringUtils {
|
|||||||
* @return The object stringified.
|
* @return The object stringified.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String internalToString(@Nullable final Object object) {
|
public static String internalToString(@Nullable final Object object) {
|
||||||
if (object == null) {
|
if (object == null) {
|
||||||
return "null";
|
return "null";
|
||||||
}
|
}
|
||||||
@@ -405,8 +395,8 @@ public class StringUtils {
|
|||||||
* @return The string with the prefix removed.
|
* @return The string with the prefix removed.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String removePrefix(@NotNull final String string,
|
public static String removePrefix(@NotNull final String string,
|
||||||
@NotNull final String prefix) {
|
@NotNull final String prefix) {
|
||||||
if (string.startsWith(prefix)) {
|
if (string.startsWith(prefix)) {
|
||||||
return string.substring(prefix.length());
|
return string.substring(prefix.length());
|
||||||
}
|
}
|
||||||
@@ -420,7 +410,7 @@ public class StringUtils {
|
|||||||
* @return The JSON String.
|
* @return The JSON String.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String legacyToJson(@Nullable final String legacy) {
|
public static String legacyToJson(@Nullable final String legacy) {
|
||||||
String processed = legacy;
|
String processed = legacy;
|
||||||
if (legacy == null) {
|
if (legacy == null) {
|
||||||
processed = "";
|
processed = "";
|
||||||
@@ -439,7 +429,7 @@ public class StringUtils {
|
|||||||
* @return The legacy string.
|
* @return The legacy string.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String jsonToLegacy(@NotNull final String json) {
|
public static String jsonToLegacy(@NotNull final String json) {
|
||||||
return LEGACY_COMPONENT_SERIALIZER.serialize(
|
return LEGACY_COMPONENT_SERIALIZER.serialize(
|
||||||
GsonComponentSerializer.gson().deserialize(json)
|
GsonComponentSerializer.gson().deserialize(json)
|
||||||
);
|
);
|
||||||
@@ -452,7 +442,7 @@ public class StringUtils {
|
|||||||
* @return The component.
|
* @return The component.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public Component toComponent(@Nullable final String legacy) {
|
public static Component toComponent(@Nullable final String legacy) {
|
||||||
String processed = legacy;
|
String processed = legacy;
|
||||||
if (legacy == null) {
|
if (legacy == null) {
|
||||||
processed = "";
|
processed = "";
|
||||||
@@ -468,7 +458,7 @@ public class StringUtils {
|
|||||||
* @return The legacy text.
|
* @return The legacy text.
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String toLegacy(@NotNull final Component component) {
|
public static String toLegacy(@NotNull final Component component) {
|
||||||
return LEGACY_COMPONENT_SERIALIZER.serialize(component);
|
return LEGACY_COMPONENT_SERIALIZER.serialize(component);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,4 +476,8 @@ public class StringUtils {
|
|||||||
*/
|
*/
|
||||||
WITHOUT_PLACEHOLDERS
|
WITHOUT_PLACEHOLDERS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private StringUtils() {
|
||||||
|
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ buildscript {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -16,14 +16,14 @@ subprojects {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly project(":eco-api")
|
compileOnly project(":eco-api")
|
||||||
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.5.31'
|
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.6.0'
|
||||||
}
|
}
|
||||||
|
|
||||||
compileKotlin {
|
compileKotlin {
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "16"
|
jvmTarget = "17"
|
||||||
}
|
}
|
||||||
targetCompatibility = JavaVersion.VERSION_16
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
sourceCompatibility = JavaVersion.VERSION_16
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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>>()
|
||||||
|
|||||||
@@ -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>()
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -74,7 +74,8 @@ class EcoProxyFactory(
|
|||||||
companion object {
|
companion object {
|
||||||
val SUPPORTED_VERSIONS = listOf(
|
val SUPPORTED_VERSIONS = listOf(
|
||||||
"v1_16_R3",
|
"v1_16_R3",
|
||||||
"v1_17_R1"
|
"v1_17_R1",
|
||||||
|
"v1_18_R1"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
group 'com.willfp'
|
|
||||||
version rootProject.version
|
|
||||||
|
|
||||||
subprojects {
|
|
||||||
dependencies {
|
|
||||||
compileOnly project(':eco-core:core-proxy')
|
|
||||||
compileOnly project(':eco-core:core-plugin')
|
|
||||||
compileOnly project(':eco-core:core-backend')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
12
eco-core/core-nms/build.gradle.kts
Normal file
12
eco-core/core-nms/build.gradle.kts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
group = "com.willfp"
|
||||||
|
version = rootProject.version
|
||||||
|
|
||||||
|
subprojects {
|
||||||
|
dependencies {
|
||||||
|
compileOnly(project(":eco-core:core-proxy"))
|
||||||
|
compileOnly(project(":eco-core:core-plugin"))
|
||||||
|
compileOnly(project(":eco-core:core-backend"))
|
||||||
|
// libraries.minecraft.net machine broke
|
||||||
|
compileOnly("com.github.Mojang:brigadier:1.0.18")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,4 @@ version rootProject.version
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly 'org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT'
|
compileOnly 'org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT'
|
||||||
compileOnly 'net.kyori:adventure-api:4.9.1'
|
|
||||||
compileOnly 'net.kyori:adventure-text-serializer-gson:4.8.1'
|
|
||||||
}
|
}
|
||||||
@@ -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")
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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 {
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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() {
|
||||||
@@ -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
|
|
||||||
16
eco-core/core-nms/v1_17_R1/build.gradle.kts
Normal file
16
eco-core/core-nms/v1_17_R1/build.gradle.kts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
plugins {
|
||||||
|
id("io.papermc.paperweight.userdev") version "1.2.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
group = "com.willfp"
|
||||||
|
version = rootProject.version
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
paperDevBundle("1.17.1-R0.1-SNAPSHOT")
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks {
|
||||||
|
build {
|
||||||
|
dependsOn(reobfJar)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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")
|
||||||
@@ -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(
|
||||||
@@ -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
|
||||||
@@ -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 {
|
||||||
@@ -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
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user