Compare commits

...

176 Commits

Author SHA1 Message Date
Will FP
36195e16ce libreforge-updater 2025-03-29 14:22:31 +00:00
Will FP
bae0ab6150 libreforge-updater 2025-01-31 11:55:07 +00:00
Will FP
4445c7f681 libreforge-updater 2025-01-25 13:50:11 +00:00
Will FP
8285613d15 Fix 2025-01-25 13:48:01 +00:00
Will FP
855aa29e4b libreforge-updater 2025-01-25 13:46:06 +00:00
Will FP
92f47d1c87 libreforge-updater 2024-11-06 18:33:33 +00:00
Will FP
5b817fed20 libreforge-updater 2024-10-22 12:14:43 +01:00
Will FP
b6b523b1f8 libreforge-updater 2024-09-22 17:01:04 +01:00
Auxilor
8c016b94ef libreforge-updater 2024-09-02 11:30:08 +01:00
Auxilor
9c87498045 libreforge-updater 2024-08-30 17:25:07 +01:00
Auxilor
cbb48fa888 libreforge-updater 2024-08-29 12:09:17 +01:00
Auxilor
58ecfbe112 libreforge-updater 2024-08-23 15:35:23 +01:00
Auxilor
93e24a6f25 libreforge-updater 2024-08-21 18:58:20 +01:00
Auxilor
d8dfe6fd7c libreforge-updater 2024-08-15 15:07:35 +01:00
Auxilor
4551ddad08 libreforge-updater 2024-08-03 13:41:26 +01:00
Auxilor
e47533f03c libreforge-updater 2024-07-25 10:04:33 +01:00
Auxilor
5c9f792780 libreforge-updater 2024-07-21 12:19:17 +01:00
Auxilor
bde074bd7c libreforge-updater 2024-07-19 20:28:38 +01:00
Auxilor
5d143f6dec libreforge-updater 2024-07-18 13:24:13 +01:00
Auxilor
8abdcd6d33 libreforge-updater 2024-07-16 17:13:42 +01:00
Auxilor
210f618dc9 libreforge-updater 2024-07-13 20:45:18 +01:00
Auxilor
0514220390 libreforge-updater 2024-07-08 15:58:28 +01:00
Auxilor
2135293799 libreforge-updater 2024-07-05 13:02:45 +01:00
Auxilor
14e3d8fdf5 libreforge-updater 2024-07-03 17:43:57 +01:00
Auxilor
db4fb84160 libreforge-updater 2024-06-29 16:44:01 +01:00
Auxilor
6b0541646f libreforge-updater 2024-06-28 15:56:24 +01:00
Auxilor
72f826a57c libreforge-updater 2024-06-27 18:54:28 +01:00
Auxilor
04b0816e72 libreforge-updater 2024-06-26 16:52:20 +01:00
Auxilor
09980fc895 libreforge-updater 2024-06-25 15:13:59 +01:00
Auxilor
c737256349 libreforge-updater 2024-06-24 15:06:34 +01:00
Auxilor
ff4900da4d Updated to Java 21 2024-06-24 13:59:14 +01:00
Auxilor
570f1b1213 libreforge-updater 2024-06-23 17:26:31 +01:00
Auxilor
1f8714bb57 libreforge-updater 2024-06-23 13:19:01 +01:00
Will FP
08e964986b libreforge-updater 2024-05-31 20:37:57 +01:00
Will FP
2dcf954101 libreforge-updater 2024-05-11 18:21:22 +01:00
Will FP
d3d25290fd libreforge-updater 2024-04-17 20:35:06 +01:00
Auxilor
b9939057a0 libreforge-updater 2024-04-15 18:19:43 +01:00
Auxilor
26624faf98 libreforge-updater 2024-04-11 13:17:39 +01:00
Auxilor
23997922ed libreforge-updater 2024-03-29 16:08:46 +00:00
Will FP
b2120c59e3 libreforge-updater 2024-03-11 17:38:12 +00:00
Will FP
c04d6eca01 libreforge-updater 2024-03-10 20:09:43 +00:00
Will FP
5d18b5953a libreforge-updater 2024-03-02 15:20:58 +00:00
Will FP
5345394d14 libreforge-updater 2024-02-22 13:18:28 +00:00
Will FP
0c765272df libreforge-updater 2024-02-15 13:02:42 +00:00
Will FP
f17d4af664 libreforge-updater 2024-02-08 19:50:03 +00:00
Will FP
f57db1cd74 libreforge-updater 2024-01-30 11:27:47 +00:00
Will FP
188cac252f libreforge-updater 2024-01-18 17:03:28 +00:00
Will FP
8fd8f6237e libreforge-updater 2024-01-16 13:29:25 +00:00
Will FP
6abf50b009 libreforge-updater 2024-01-13 14:24:11 +00:00
Will FP
8a750b5824 libreforge-updater 2024-01-07 13:52:05 +00:00
Will FP
1fd45ccd75 libreforge-updater 2024-01-06 09:20:23 +00:00
Auxilor
1fdb3f65df libreforge-updater 2024-01-04 17:25:31 +00:00
Auxilor
a6fe3b095c libreforge-updater 2024-01-01 20:02:32 +00:00
Will FP
86c0c4d391 libreforge-updater 2023-12-27 14:17:52 +01:00
Will FP
b42dfe9be2 libreforge-updater 2023-12-24 14:55:01 +01:00
Auxilor
ea66d98df8 libreforge-updater 2023-12-20 15:57:14 +00:00
Will FP
2cc0d6b3c2 libreforge-updater 2023-12-14 16:13:55 +00:00
Will FP
8e2006fa2c libreforge-updater 2023-12-11 12:13:10 +00:00
Will FP
e8c387e85c libreforge-updater 2023-12-07 17:26:10 +00:00
Will FP
7a82b73b96 Updated to use ModelEngineBridge 2023-12-03 16:07:31 +00:00
Will FP
4049a429d6 libreforge-updater 2023-12-03 15:59:57 +00:00
Will FP
5895c12c6b libreforge-updater 2023-11-30 14:27:51 +00:00
Will FP
0b6112408f libreforge-updater 2023-11-26 23:24:54 +00:00
Will FP
8ee3852ad8 libreforge-updater 2023-11-23 13:21:50 +00:00
Auxilor
5aab3af9ea libreforge-updater 2023-11-21 22:41:48 +00:00
Auxilor
e83d8d4b14 libreforge-updater 2023-11-19 14:14:31 +00:00
Auxilor
0241b2fb2a libreforge-updater 2023-11-17 19:02:39 +00:00
Auxilor
ac9147463a libreforge-updater 2023-11-11 17:59:04 +00:00
Auxilor
d2928ee59f libreforge-updater 2023-11-10 13:59:34 +00:00
Auxilor
315d8f0954 libreforge-updater 2023-11-05 13:42:13 +00:00
Auxilor
7f616da0ce libreforge-updater 2023-10-30 13:31:12 +00:00
Auxilor
eeada10ef8 libreforge-updater 2023-10-28 14:15:39 +01:00
Auxilor
230eb9b87f libreforge-updater 2023-10-24 15:39:40 +01:00
Auxilor
803324c5c9 libreforge-updater 2023-10-19 12:52:41 +01:00
Auxilor
6aaf494b73 libreforge-updater 2023-10-14 14:20:38 +01:00
Auxilor
d34ad33c7d libreforge-updater 2023-10-14 14:19:18 +01:00
Auxilor
e0c1c27ea5 Updated to 2.36.2 2023-10-07 17:57:10 +01:00
Auxilor
a31b6a2a4c Fixed pets gui again 2023-10-07 17:57:00 +01:00
Auxilor
82decbb2cb Updated to 2.36.1 2023-10-07 14:09:39 +01:00
Auxilor
f143a90dd7 Fixed pet icon max level lore 2023-10-07 14:09:28 +01:00
Auxilor
58a16a33ec libreforge-updater 2023-10-02 11:54:46 +01:00
Auxilor
8626869a0f Updated to 2.35.0 2023-10-02 11:37:47 +01:00
Auxilor
88eea3c768 Added max level lore everywhere 2023-10-02 11:35:12 +01:00
Auxilor
0271c16357 Added /ecopets givecurrentxp <player> <amount> 2023-10-02 11:26:41 +01:00
Auxilor
2dc88624dd Updated to 2.34.1 2023-09-28 16:19:32 +01:00
Auxilor
20d7e3abf7 Added max level lore 2023-09-28 16:19:14 +01:00
Auxilor
2d1d423f83 libreforge-updater 2023-09-26 14:46:10 +01:00
Auxilor
2064bcc9f2 libreforge-updater 2023-09-20 15:34:00 +01:00
Auxilor
95b7bdc3db libreforge-updater 2023-09-17 11:20:29 +01:00
Auxilor
619d5fdde5 libreforge-updater 2023-09-13 15:09:07 +01:00
Auxilor
4226d544e9 libreforge-updater 2023-09-07 16:01:52 +01:00
Auxilor
cf8de5a182 libreforge-updater 2023-09-02 17:34:39 +01:00
Auxilor
26ef893d2c libreforge-updater 2023-08-31 16:59:40 +01:00
Auxilor
1e5836203a libreforge-updater 2023-08-30 11:31:35 +01:00
Auxilor
dcb06f6e25 Added use-local-storage 2023-08-30 09:49:33 +01:00
Auxilor
493d419e2c libreforge-updater 2023-08-26 18:11:39 +01:00
Auxilor
435160f626 libreforge-updater 2023-08-23 15:31:54 +01:00
Auxilor
dfe7af1e1b libreforge-updater 2023-08-19 15:32:47 +01:00
Auxilor
25fe58d2ab libreforge-updater 2023-08-15 18:54:18 +01:00
Auxilor
a538947fb8 libreforge-updater 2023-08-13 14:42:46 +01:00
Auxilor
345c8e9049 libreforge-updater 2023-08-10 19:59:39 +01:00
Auxilor
87e3a15d01 libreforge-updater 2023-08-10 19:57:45 +01:00
Auxilor
1ea152058c libreforge-updater 2023-08-09 15:58:48 +01:00
Auxilor
a1a08f750a libreforge-updater 2023-08-09 14:40:44 +01:00
Auxilor
0ec4e566b3 libreforge-updater 2023-08-09 14:37:35 +01:00
Auxilor
98c71e938c libreforge-updater 2023-08-08 17:59:36 +01:00
Auxilor
2e3db38e67 libreforge-updater 2023-08-05 21:07:17 +01:00
Auxilor
d3438a0db1 libreforge-updater 2023-07-27 15:21:49 +01:00
Auxilor
69b8179672 libreforge-updater 2023-07-27 15:18:57 +01:00
Auxilor
ffe6f47e22 libreforge-updater 2023-07-25 14:38:31 +01:00
Auxilor
759f921287 libreforge-updater 2023-07-23 11:40:38 +01:00
Auxilor
2a0e27d7e1 libreforge-updater 2023-07-22 14:59:48 +01:00
Will FP
ad1e639d00 Merge pull request #44 from SenPr/master
Add total_pets placeholder, `has_pet` condition and fix `has_active_pet`
2023-07-22 13:37:26 +01:00
Auxilor
9f1f6b206c libreforge-updater 2023-07-21 12:33:13 +01:00
Auxilor
2a465013d4 libreforge-updater 2023-07-20 13:07:00 +01:00
Sen2000
6b2ea93e3b imports... 2023-07-20 15:58:44 +07:00
Sen2000
9f55826f5e Add has_pet condition and fix has_active_pet 2023-07-20 15:44:22 +07:00
Auxilor
ff9e2cbcba libreforge-updater 2023-07-19 14:14:53 +01:00
Sen2000
8e90f57364 imports oopsie part 2 2023-07-19 01:14:40 +07:00
Sen2000
682cfe6c8e imports oopsie AGAIN 2023-07-19 01:13:24 +07:00
Sen2000
a4983ffea0 Add total_pets placeholder 2023-07-19 01:10:40 +07:00
Auxilor
ebda2dd3c9 libreforge-updater 2023-07-17 18:32:30 +01:00
Auxilor
75794f4af7 libreforge-updater 2023-07-16 13:33:22 +01:00
Auxilor
53d7688436 libreforge-updater 2023-07-12 13:08:08 +01:00
Auxilor
e145b21cb8 libreforge-updater 2023-07-09 17:24:56 +01:00
Auxilor
bf436b239f libreforge-updater 2023-07-06 18:47:05 +01:00
Auxilor
4707291704 libreforge-updater 2023-07-04 14:49:52 +01:00
Auxilor
321d3ed92c libreforge-updater 2023-06-27 10:41:52 +01:00
Auxilor
88b25f93ce libreforge-updater 2023-06-21 10:23:26 +01:00
Auxilor
244626682e libreforge-updater 2023-06-19 11:12:39 +02:00
Will FP
af6b811458 Create CODEOWNERS 2023-06-17 21:22:30 +02:00
Auxilor
e5064aabef libreforge-updater 2023-06-10 13:32:44 +01:00
Auxilor
558431d39c libreforge-updater 2023-06-05 16:26:49 +01:00
Auxilor
eca0980869 Fixed Publications 2023-06-03 18:03:02 +01:00
Auxilor
5645698d3f libreforge-updater 2023-06-03 15:45:34 +01:00
Auxilor
d4cf108d52 Invisible players will no longer have visible pets 2023-06-03 14:00:18 +01:00
Auxilor
95c8fe5277 libreforge-updater 2023-06-01 12:33:34 +01:00
Auxilor
0975391c9c libreforge-updater 2023-05-30 16:10:49 +01:00
Auxilor
3d4666f7e0 libreforge-updater 2023-05-24 14:58:12 +01:00
Auxilor
ae2c9680f3 libreforge-updater 2023-05-23 16:12:26 +01:00
Auxilor
ad3892fc90 Updated to 2.14.3 2023-05-22 15:14:06 +01:00
Auxilor
658aeee2cc Fixed /ecopets give 2023-05-22 15:06:37 +01:00
Auxilor
d09ebfa779 libreforge-updater 2023-05-20 17:41:14 +01:00
Auxilor
826d9c6300 Updated to 2.14.1 2023-05-20 17:34:08 +01:00
Will FP
508e5d32f5 Merge pull request #37
Page system fix
2023-05-20 17:33:53 +01:00
TomTom
16604aba7f Merge remote-tracking branch 'upstream/master' into new 2023-05-20 08:46:16 +02:00
Auxilor
84d0e025c3 i fucking hate model engine 2023-05-18 16:27:59 +01:00
Auxilor
9ad09ecec0 libreforge-updater 2023-05-18 16:25:44 +01:00
Auxilor
c725db06bd I BEG OF YOU 2023-05-17 16:37:06 +01:00
Auxilor
480cd9da49 libreforge-updater 2023-05-17 15:57:27 +01:00
Auxilor
797235c0a5 libreforge-updater 2023-05-16 20:30:22 +01:00
Auxilor
10cc3e07c8 libreforge-updater 2023-05-15 10:52:44 +01:00
Auxilor
c3825fb16c libreforge-updater 2023-05-14 13:08:44 +01:00
Auxilor
ac7c2eccc3 libreforge-updater 2023-05-09 17:45:43 +01:00
Auxilor
a274d0f6b8 libreforge-updater 2023-05-05 18:54:49 +01:00
Auxilor
3a5660f6b9 libreforge-updater 2023-05-03 14:48:12 +01:00
Auxilor
f33e36344e libreforge-updater 2023-04-30 19:57:25 +01:00
Auxilor
0462812f69 libreforge-updater 2023-04-29 17:19:43 +01:00
Auxilor
06ede699f2 libreforge-updater 2023-04-25 16:06:22 +01:00
Auxilor
478f618f43 libreforge-updater 2023-04-25 13:13:25 +01:00
Auxilor
f0422b5783 Hey wow! It's lumine again! kms 2023-04-24 22:52:39 +01:00
Auxilor
754f0fa281 libreforge-updater 2023-04-24 22:49:40 +01:00
Auxilor
b745c7f046 libreforge-updater 2023-04-20 20:21:10 +01:00
Auxilor
fa4182c228 libreforge-updater 2023-04-19 12:22:11 +01:00
Auxilor
670c2bfc28 libreforge-updater 2023-04-13 12:49:06 -04:00
Auxilor
76f31ecc7d libreforge-updater 2023-04-09 18:19:45 -04:00
Auxilor
27be85e00d libreforge-updater 2023-04-06 20:09:51 +02:00
Auxilor
24994e80b3 libreforge-updater 2023-04-05 13:14:15 +01:00
Auxilor
5a7c513cb5 libreforge-updater 2023-04-03 17:50:17 +01:00
Auxilor
26a51a88b5 libreforge-updater 2023-04-02 17:44:37 +01:00
Auxilor
b5f969438e libreforge-updater 2023-03-30 15:30:39 +01:00
Auxilor
79e23e8c80 I hate the model engine repo 2023-03-29 19:29:06 +01:00
Auxilor
272edef182 libreforge-updater 2023-03-29 19:21:13 +01:00
TomTom
7a2a6accea Codestyle 2023-02-28 18:46:27 +01:00
TomTom
1a8c42f40a Fixed the fix 2023-02-28 18:45:00 +01:00
TomTom
043f70aa05 Fix the pages not working (I think) 2023-02-28 17:46:15 +01:00
29 changed files with 330 additions and 195 deletions

1
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1 @@
* @WillFP

View File

@@ -15,11 +15,11 @@ jobs:
- name: Checkout latest code
uses: actions/checkout@v2
- name: Set up JDK 17
- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'temurin'
java-version: 17
java-version: 21
- name: Change wrapper permissions
run: chmod +x ./gradlew

View File

@@ -1,9 +1,11 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
java
`java-library`
`maven-publish`
kotlin("jvm") version "1.7.10"
id("com.github.johnrengelman.shadow") version "8.0.0"
kotlin("jvm") version "2.1.0"
id("com.gradleup.shadow") version "8.3.0"
id("com.willfp.libreforge-gradle-plugin") version "1.0.0"
}
@@ -25,7 +27,7 @@ allprojects {
apply(plugin = "java")
apply(plugin = "kotlin")
apply(plugin = "maven-publish")
apply(plugin = "com.github.johnrengelman.shadow")
apply(plugin = "com.gradleup.shadow")
repositories {
mavenLocal()
@@ -38,9 +40,9 @@ allprojects {
}
dependencies {
compileOnly("com.willfp:eco:6.53.0")
compileOnly("com.willfp:eco:6.55.0")
compileOnly("org.jetbrains:annotations:23.0.0")
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:1.7.10")
compileOnly("org.jetbrains.kotlin:kotlin-stdlib:2.1.0")
}
java {
@@ -52,11 +54,12 @@ allprojects {
shadowJar {
relocate("com.willfp.libreforge.loader", "com.willfp.ecopets.libreforge.loader")
relocate("com.willfp.ecomponent", "com.willfp.ecopets.ecomponent")
relocate("com.willfp.modelenginebridge", "com.willfp.ecopets.modelenginebridge")
}
compileKotlin {
kotlinOptions {
jvmTarget = "17"
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}

View File

@@ -3,17 +3,20 @@ version = rootProject.version
dependencies {
compileOnly("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT")
compileOnly("com.ticxo.modelengine:api:R3.1.5")
compileOnly("com.github.ben-manes.caffeine:caffeine:3.0.2")
implementation("com.willfp:ecomponent:1.3.0")
implementation("com.willfp:ModelEngineBridge:1.2.0")
}
publishing {
publications {
register("maven", MavenPublication::class) {
from(components["java"])
register<MavenPublication>("maven") {
groupId = project.group.toString()
version = project.version.toString()
artifactId = rootProject.name
artifact(rootProject.tasks.shadowJar.get().archiveFile)
}
}

View File

@@ -6,6 +6,7 @@ import com.willfp.eco.core.placeholder.PlayerPlaceholder
import com.willfp.ecopets.commands.CommandEcoPets
import com.willfp.ecopets.commands.CommandPets
import com.willfp.ecopets.libreforge.ConditionHasActivePet
import com.willfp.ecopets.libreforge.ConditionHasPet
import com.willfp.ecopets.libreforge.ConditionHasPetLevel
import com.willfp.ecopets.libreforge.EffectGivePetXp
import com.willfp.ecopets.libreforge.EffectPetXpMultiplier
@@ -19,6 +20,7 @@ import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.SpawnEggHandler
import com.willfp.ecopets.pets.activePet
import com.willfp.ecopets.pets.activePetLevel
import com.willfp.ecopets.pets.hasPet
import com.willfp.ecopets.pets.entity.ModelEnginePetEntity
import com.willfp.ecopets.pets.entity.PetEntity
import com.willfp.libreforge.SimpleProvidedHolder
@@ -28,7 +30,9 @@ import com.willfp.libreforge.filters.Filters
import com.willfp.libreforge.loader.LibreforgePlugin
import com.willfp.libreforge.loader.configs.ConfigCategory
import com.willfp.libreforge.registerHolderProvider
import com.willfp.libreforge.registerSpecificHolderProvider
import com.willfp.libreforge.triggers.Triggers
import org.bukkit.entity.Player
import org.bukkit.event.Listener
class EcoPetsPlugin : LibreforgePlugin() {
@@ -47,15 +51,16 @@ class EcoPetsPlugin : LibreforgePlugin() {
override fun handleEnable() {
Conditions.register(ConditionHasPetLevel)
Conditions.register(ConditionHasActivePet)
Conditions.register(ConditionHasPet)
Effects.register(EffectPetXpMultiplier)
Effects.register(EffectGivePetXp)
Triggers.register(TriggerGainPetXp)
Triggers.register(TriggerLevelUpPet)
Filters.register(FilterPet)
registerHolderProvider {
it.activePetLevel?.let { l ->
listOf(SimpleProvidedHolder(l))
registerSpecificHolderProvider<Player> {
it.activePetLevel?.let { p ->
listOf(SimpleProvidedHolder(p))
} ?: emptyList()
}
@@ -68,6 +73,18 @@ class EcoPetsPlugin : LibreforgePlugin() {
this,
"pet_id"
) { it.activePet?.id ?: "" }.register()
PlayerPlaceholder(
this,
"total_pets"
) {
var pets = 0
for (pet in Pets.values()) {
if (it.hasPet(pet))
pets++
}
pets.toString()
}.register()
}
override fun handleReload() {

View File

@@ -11,6 +11,7 @@ class CommandEcoPets(plugin: EcoPlugin) : PluginCommand(plugin, "ecopets", "ecop
.addSubcommand(CommandGiveEgg(plugin))
.addSubcommand(CommandGiveXP(plugin))
.addSubcommand(CommandReset(plugin))
.addSubcommand(CommandGiveCurrentXP(plugin))
}
override fun onExecute(sender: CommandSender, args: List<String>) {

View File

@@ -9,6 +9,7 @@ import com.willfp.ecopets.pets.hasPet
import com.willfp.ecopets.pets.setPetLevel
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.bukkit.util.StringUtil
class CommandGive(plugin: EcoPlugin) : Subcommand(plugin, "give", "ecopets.command.give", false) {
@@ -28,7 +29,7 @@ class CommandGive(plugin: EcoPlugin) : Subcommand(plugin, "give", "ecopets.comma
@Suppress("DEPRECATION")
val player = Bukkit.getOfflinePlayer(playerName)
if (!player.hasPlayedBefore()) {
if (!player.hasPlayedBefore() && player !is Player) {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return
}

View File

@@ -0,0 +1,80 @@
package com.willfp.ecopets.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import com.willfp.eco.util.savedDisplayName
import com.willfp.eco.util.toNiceString
import com.willfp.ecopets.pets.Pets
import com.willfp.ecopets.pets.activePet
import com.willfp.ecopets.pets.givePetExperience
import com.willfp.ecopets.pets.hasPet
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.bukkit.util.StringUtil
class CommandGiveCurrentXP(plugin: EcoPlugin) : Subcommand(plugin, "givecurrentxp", "ecopets.command.givecurrentxp", false) {
override fun onExecute(sender: CommandSender, args: List<String>) {
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return
}
if (args.size == 1) {
sender.sendMessage(plugin.langYml.getMessage("needs-amount"))
return
}
val playerName = args[0]
val player = Bukkit.getPlayer(playerName)
if (player == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return
}
val pet = player.activePet
if (pet == null) {
sender.sendMessage(plugin.langYml.getMessage("no-pet"))
return
}
if (!player.hasPet(pet)) {
sender.sendMessage(plugin.langYml.getMessage("doesnt-have-pet"))
return
}
val amount = args[1].toDoubleOrNull()
if (amount == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-amount"))
return
}
player.givePetExperience(
pet,
amount
)
sender.sendMessage(
plugin.langYml.getMessage("gave-current-xp", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%player%", player.savedDisplayName)
.replace("%xp%", amount.toNiceString())
)
}
override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
if (args.size == 1) {
return Bukkit.getOnlinePlayers().map { it.name }
}
if (args.size == 2) {
return listOf("10", "100", "1000", "10000")
}
return emptyList()
}
}

View File

@@ -3,9 +3,12 @@ package com.willfp.ecopets.libreforge
import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import org.bukkit.entity.Player
object ConditionHasActivePet : Condition<NoCompileData>("has_active_pet") {
@@ -13,10 +16,14 @@ object ConditionHasActivePet : Condition<NoCompileData>("has_active_pet") {
require("pet", "You must specify the pet!")
}
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean {
return EcoPetsAPI.instance.hasPet(
player,
Pets.getByID(config.getString("pet").lowercase()) ?: return false
)
override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
return EcoPetsAPI.instance.getActivePet(player) == Pets.getByID(config.getString("pet").lowercase())
}
}

View File

@@ -0,0 +1,27 @@
package com.willfp.ecopets.libreforge
import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import org.bukkit.entity.Player
object ConditionHasPet : Condition<NoCompileData>("has_pet") {
override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
return EcoPetsAPI.instance.hasPet(
player,
Pets.getByID(config.getString("pet").lowercase()) ?: return false
)
}
}

View File

@@ -4,9 +4,13 @@ import com.willfp.eco.core.config.interfaces.Config
import com.willfp.ecopets.api.EcoPetsAPI
import com.willfp.ecopets.api.event.PlayerPetLevelUpEvent
import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.Dispatcher
import com.willfp.libreforge.NoCompileData
import com.willfp.libreforge.ProvidedHolder
import com.willfp.libreforge.arguments
import com.willfp.libreforge.conditions.Condition
import com.willfp.libreforge.get
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.updateEffects
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
@@ -20,10 +24,17 @@ object ConditionHasPetLevel : Condition<NoCompileData>("has_pet_level") {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
fun handle(event: PlayerPetLevelUpEvent) {
event.player.updateEffects()
event.player.toDispatcher().updateEffects()
}
override fun isMet(player: Player, config: Config, compileData: NoCompileData): Boolean {
override fun isMet(
dispatcher: Dispatcher<*>,
config: Config,
holder: ProvidedHolder,
compileData: NoCompileData
): Boolean {
val player = dispatcher.get<Player>() ?: return false
return EcoPetsAPI.instance.getPetLevel(
player,
Pets.getByID(config.getString("pet").lowercase()) ?: return false

View File

@@ -4,6 +4,7 @@ import com.willfp.ecopets.api.event.PlayerPetExpGainEvent
import com.willfp.ecopets.pets.Pet
import com.willfp.ecopets.pets.Pets
import com.willfp.libreforge.effects.templates.MultiMultiplierEffect
import com.willfp.libreforge.toDispatcher
import org.bukkit.event.EventHandler
object EffectPetXpMultiplier : MultiMultiplierEffect<Pet>("pet_xp_multiplier") {
@@ -21,6 +22,6 @@ object EffectPetXpMultiplier : MultiMultiplierEffect<Pet>("pet_xp_multiplier") {
fun handle(event: PlayerPetExpGainEvent) {
val player = event.player
event.amount *= getMultiplier(player, event.pet)
event.amount *= getMultiplier(player.toDispatcher(), event.pet)
}
}

View File

@@ -1,6 +1,7 @@
package com.willfp.ecopets.libreforge
import com.willfp.ecopets.api.event.PlayerPetExpGainEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter
@@ -18,7 +19,7 @@ object TriggerGainPetXp : Trigger("gain_pet_xp") {
val player = event.player
this.dispatch(
player,
player.toDispatcher(),
TriggerData(
player = player,
location = player.location,

View File

@@ -1,6 +1,7 @@
package com.willfp.ecopets.libreforge
import com.willfp.ecopets.api.event.PlayerPetLevelUpEvent
import com.willfp.libreforge.toDispatcher
import com.willfp.libreforge.triggers.Trigger
import com.willfp.libreforge.triggers.TriggerData
import com.willfp.libreforge.triggers.TriggerParameter
@@ -18,7 +19,7 @@ object TriggerLevelUpPet : Trigger("level_up_pet") {
val player = event.player
this.dispatch(
player,
player.toDispatcher(),
TriggerData(
player = player,
location = player.location,

View File

@@ -114,7 +114,6 @@ class Pet(
}
val entityTexture = config.getString("entity-texture")
val modelEngineAnimation = config.getStringOrNull("modelengine-animation")
private val levelXpRequirements = listOf(0) + config.getInts("level-xp-requirements")
@@ -363,6 +362,8 @@ class Pet(
val level = player.getPetLevel(this)
val isActive = player.activePet == this
val baseLoreLocation = if (level == this.maxLevel) "max-level-lore" else "lore"
return ItemStackBuilder(base)
.setDisplayName(
plugin.configYml.getFormattedString("gui.pet-icon.name")
@@ -370,7 +371,7 @@ class Pet(
.replace("%pet%", this.name)
)
.addLoreLines {
injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-icon.lore"), player) +
injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-icon.$baseLoreLocation"), player) +
if (isActive) plugin.configYml.getStrings("gui.pet-icon.active-lore") else
plugin.configYml.getStrings("gui.pet-icon.not-active-lore")
}
@@ -379,6 +380,9 @@ class Pet(
fun getPetInfoIcon(player: Player): ItemStack {
val base = baseItem.clone()
val prefix = if (player.getPetLevel(this) == this.maxLevel) "max-level-" else ""
return ItemStackBuilder(base)
.setDisplayName(
plugin.configYml.getFormattedString("gui.pet-info.active.name")
@@ -386,7 +390,7 @@ class Pet(
.replace("%pet%", this.name)
)
.addLoreLines {
injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-info.active.lore"), player)
injectPlaceholdersInto(plugin.configYml.getStrings("gui.pet-info.active.${prefix}lore"), player)
}
.build()
}

View File

@@ -36,6 +36,11 @@ class PetDisplay(
val pet = player.activePet
if (pet != null) {
if (player.isInvisible) {
remove(player)
return
}
@Suppress("DEPRECATION")
stand.customName = plugin.configYml.getString("pet-entity.name")
.replace("%player%", player.displayName)
@@ -77,6 +82,10 @@ class PetDisplay(
}
private fun getOrNew(player: Player): ArmorStand? {
if (player.isInvisible) {
return null
}
val tracked = trackedEntities[player.uniqueId]
val existing = tracked?.stand

View File

@@ -35,6 +35,8 @@ class PetLevelGUI(
override fun getLevelItem(player: Player, menu: Menu, level: Int, levelState: LevelState): ItemStack {
val key = levelState.name.lowercase().replace("_", "-")
val prefix = if (player.getPetLevel(pet) == pet.maxLevel) "max-level-" else ""
return ItemStackBuilder(Items.lookup(plugin.configYml.getString("level-gui.progression-slots.$key.item")))
.setDisplayName(
plugin.configYml.getFormattedString("level-gui.progression-slots.$key.name")
@@ -44,7 +46,7 @@ class PetLevelGUI(
)
.addLoreLines(
pet.injectPlaceholdersInto(
plugin.configYml.getFormattedStrings("level-gui.progression-slots.$key.lore"),
plugin.configYml.getFormattedStrings("level-gui.progression-slots.$key.${prefix}lore"),
player,
forceLevel = level
)

View File

@@ -3,6 +3,8 @@ package com.willfp.ecopets.pets
import com.willfp.eco.core.config.updating.ConfigUpdater
import com.willfp.eco.core.gui.menu
import com.willfp.eco.core.gui.menu.Menu
import com.willfp.eco.core.gui.page.Page
import com.willfp.eco.core.gui.page.PageChangeEvent
import com.willfp.eco.core.gui.slot
import com.willfp.eco.core.gui.slot.ConfigSlot
import com.willfp.eco.core.gui.slot.FillerMask
@@ -21,17 +23,6 @@ import kotlin.math.min
object PetsGUI {
private lateinit var menu: Menu
private val petAreaSlots = mutableListOf<Pair<Int, Int>>()
private const val pageKey = "page"
private fun getPage(menu: Menu, player: Player): Int {
val pages = ceil(Pets.values()
.filter { player.getPetLevel(it) > 0 }
.size.toDouble() / petAreaSlots.size).toInt()
val page = menu.getState(player, pageKey) ?: 1
return max(min(pages, page + 1), 1)
}
@JvmStatic
@ConfigUpdater
@@ -42,8 +33,8 @@ object PetsGUI {
val bottomRightColumn = plugin.configYml.getInt("gui.pet-area.bottom-right.column")
petAreaSlots.clear()
for (row in topLeftRow..bottomRightRow) {
for (column in topLeftColumn..bottomRightColumn) {
for (row in topLeftRow .. bottomRightRow) {
for (column in topLeftColumn .. bottomRightColumn) {
petAreaSlots.add(Pair(row, column))
}
}
@@ -55,31 +46,28 @@ object PetsGUI {
val petInfoItemBuilder = { player: Player, _: Menu ->
val pet = player.activePet
if (pet == null) {
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.pet-info.no-active.item")))
pet?.getPetInfoIcon(player)
?: ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.pet-info.no-active.item")))
.setDisplayName(plugin.configYml.getFormattedString("gui.pet-info.no-active.name"))
.addLoreLines(plugin.configYml.getFormattedStrings("gui.pet-info.no-active.lore"))
.build()
} else {
pet.getPetInfoIcon(player)
}
}
val petIconBuilder = { player: Player, menu: Menu, index: Int ->
val page = getPage(menu, player)
val page = menu.getPage(player)
val unlockedPets = Pets.values()
.sortedByDescending { player.getPetLevel(it) }
.filter { player.getPetLevel(it) > 0 }
val pagedIndex = ((page - 1) * petAreaSlots.size) + index
val pagedIndex = page * petAreaSlots.size - petAreaSlots.size + index
val pet = unlockedPets.getOrNull(pagedIndex)
pet?.getIcon(player) ?: ItemStack(Material.AIR)
}
return menu(plugin.configYml.getInt("gui.rows")) {
setTitle(plugin.langYml.getString("menu.title"))
title = plugin.langYml.getString("menu.title")
setMask(
FillerMask(
@@ -88,35 +76,30 @@ object PetsGUI {
)
)
setSlot(
plugin.configYml.getInt("gui.pet-info.row"),
plugin.configYml.getInt("gui.pet-info.column"),
slot(petInfoItemBuilder) {
onLeftClick { event, _, _ ->
val player = event.whoClicked as Player
player.activePet?.levelGUI?.open(player)
}
onRender { player, menu ->
menu.setState(player, "ecopets", true)
if (menu.getPage(player) > menu.getMaxPage(player)) {
menu.setState(player, Page.PAGE_KEY, 1)
}
)
}
for ((index, pair) in petAreaSlots.withIndex()) {
val (row, column) = pair
setSlot(row, column, slot({ p, m -> petIconBuilder(p, m, index) }) {
setUpdater { p, m, _ ->
petIconBuilder(p, m, index)
setSlot(row, column, slot({ player, menu -> petIconBuilder(player, menu, index) }) {
setUpdater { player, menu, _ ->
petIconBuilder(player, menu, index)
}
onLeftClick { event, _, _ ->
val player = event.whoClicked as Player
val page = getPage(menu, player)
val page = menu.getPage(player)
val unlockedPets = Pets.values()
.sortedByDescending { player.getPetLevel(it) }
.filter { player.getPetLevel(it) > 0 }
val pagedIndex = ((page - 1) * petAreaSlots.size) + index
val pagedIndex = page * petAreaSlots.size - petAreaSlots.size + index
val pet = unlockedPets.getOrNull(pagedIndex) ?: return@onLeftClick
@@ -134,6 +117,8 @@ object PetsGUI {
})
}
// I do this for backwards compatibility because with PageChanger if you don't have any more pages, the item will disappear and this would require an update of the config for all users
// This is terrible imo, but everything for compatibility!
setSlot(
plugin.configYml.getInt("gui.prev-page.location.row"),
plugin.configYml.getInt("gui.prev-page.location.column"),
@@ -141,14 +126,19 @@ object PetsGUI {
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.prev-page.item")))
.setDisplayName(plugin.configYml.getString("gui.prev-page.name"))
.build()
) {
onLeftClick { event, _, menu ->
)
{
onLeftClick { event, _, _ ->
val player = event.whoClicked as Player
val page = getPage(menu, player)
val page = menu.getPage(player)
val newPage = max(1, min(page + -1, menu.getMaxPage(player)))
val newPage = max(1, page - 1)
if (newPage == page) {
return@onLeftClick
}
menu.setState(player, pageKey, newPage)
menu.setState(player, Page.PAGE_KEY, newPage)
menu.callEvent(player, PageChangeEvent(newPage, page))
}
}
)
@@ -160,19 +150,30 @@ object PetsGUI {
ItemStackBuilder(Items.lookup(plugin.configYml.getString("gui.next-page.item")))
.setDisplayName(plugin.configYml.getString("gui.next-page.name"))
.build()
) {
onLeftClick { event, _, menu ->
)
{
onLeftClick { event, _, _ ->
val player = event.whoClicked as Player
val page = menu.getPage(player)
val newPage = max(1, min(page + 1, menu.getMaxPage(player)))
val pages = ceil(Pets.values()
.filter { player.getPetLevel(it) > 0 }
.size.toDouble() / petAreaSlots.size).toInt()
if (newPage == page) {
return@onLeftClick
}
val page = getPage(menu, player)
menu.setState(player, Page.PAGE_KEY, newPage)
menu.callEvent(player, PageChangeEvent(newPage, page))
}
}
)
val newPage = min(pages, page + 1)
menu.setState(player, pageKey, newPage)
setSlot(
plugin.configYml.getInt("gui.pet-info.row"),
plugin.configYml.getInt("gui.pet-info.column"),
slot(petInfoItemBuilder) {
onLeftClick { event, _, _ ->
val player = event.whoClicked as Player
player.activePet?.levelGUI?.open(player)
}
}
)
@@ -209,6 +210,21 @@ object PetsGUI {
ConfigSlot(config)
)
}
maxPages { player ->
val unlockedPets = Pets.values()
.sortedByDescending { player.getPetLevel(it) }
.filter { player.getPetLevel(it) > 0 }
val perPage = petAreaSlots.size
val pages = if (unlockedPets.isEmpty()) {
0
} else {
ceil((unlockedPets.size.toDouble() / perPage)).toInt()
}
pages
}
}
}

View File

@@ -1,8 +1,8 @@
package com.willfp.ecopets.pets.entity
import com.ticxo.modelengine.api.ModelEngineAPI
import com.willfp.ecopets.EcoPetsPlugin
import com.willfp.ecopets.pets.Pet
import com.willfp.modelenginebridge.ModelEngineBridge
import org.bukkit.Location
import org.bukkit.entity.ArmorStand
@@ -13,29 +13,11 @@ class ModelEnginePetEntity(
) : PetEntity(pet) {
override fun spawn(location: Location): ArmorStand {
val stand = emptyArmorStandAt(location, pet)
val meAnimation = pet.modelEngineAnimation
val model = ModelEngineAPI.createActiveModel(modelID)
val model = ModelEngineBridge.instance.createActiveModel(modelID) ?: return stand
if (meAnimation != null) {
val animationHandler = model.animationHandler
val animationProperty = animationHandler.getAnimation(meAnimation)
if (animationProperty != null) {
animationHandler.playAnimation(animationProperty, true)
} else {
plugin.logger.warning("Animation $meAnimation not found in model $modelID, defaulting to walk!")
val animationPropertyWalk = animationHandler.getAnimation("walk")
if (animationPropertyWalk != null) {
animationHandler.playAnimation(animationPropertyWalk, true)
} else {
plugin.logger.warning("Walk animation not found in $modelID!")
}
}
}
val modelled = ModelEngineAPI.createModeledEntity(stand)
modelled.addModel(model, true)
val modelled = ModelEngineBridge.instance.createModeledEntity(stand)
modelled.addModel(model)
return stand
}

View File

@@ -3,6 +3,11 @@
# by Auxilor
#
# Even if eco is set up to use a database, you can
# force EcoPets to save to local storage to disable
# cross-server sync.
use-local-storage: false
discover-recipes: true
gui:
@@ -64,6 +69,20 @@ gui:
- ""
- "&eClick to view Level Progression!"
# By default, the lore for the max level is the same,
# but you can change this if you want.
max-level-lore:
- "%description%"
- "&f"
- "&fEffects:"
- "%effects%"
- ""
- "&fProgress:"
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
- ""
- "&eClick to view Level Progression!"
pet-icon:
name: "%pet% &fLvl. &a%level%"
lore:
@@ -76,6 +95,18 @@ gui:
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
# By default, the lore for the max level is the same,
# but you can change this if you want.
max-level-lore:
- "%description%"
- "&f"
- "&fEffects:"
- "%effects%"
- ""
- "&fProgress:"
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
active-lore:
- ""
- "&cThis pet is already active!"
@@ -198,6 +229,17 @@ level-gui:
- "&fProgress:"
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
# By default, the lore for the max level is the same,
# but you can change this if you want.
max-level-lore:
- "&f"
- "&fRewards:"
- "%rewards%"
- "&f"
- "&fProgress:"
- "&8» &e%percentage_progress%%"
- "&8» &e%current_xp%&8/&7%required_xp% &fXP"
locked:
item: red_stained_glass_pane
name: "%pet% &fLvl. &a%level%"

View File

@@ -7,6 +7,8 @@ messages:
needs-player: "&cYou must specify a player!"
gave-xp: "&fYou have given &a%xp% &fXP to %player%&f's %pet%&f!"
gave-current-xp: "&fYou have given &a%xp% &fXP to %player%&f's currently active pet!"
no-pet: "&cThe player doesn't have a pet active!"
reset-xp: "&fYou have reset %player%&f's %pet%&f XP!"
needs-pet: "&cYou must specify a pet!"
need-amount: "&cYou must specify a amount!"

View File

@@ -1,79 +0,0 @@
name: ${pluginName}
version: ${version}
main: com.willfp.ecopets.EcoPetsPlugin
api-version: 1.19
dependencies:
- name: eco
required: true
bootstrap: false
- name: libreforge
required: false
bootstrap: false
load-after:
- name: eco
bootstrap: false
permissions:
ecopets.*:
description: All ecopets permissions
default: op
children:
ecopets.command.*: true
ecopets.command.*:
description: All commands
default: op
children:
ecopets.command.ecopets: true
ecopets.command.reload: true
ecopets.command.pets: true
ecopets.command.give: true
ecopets.command.giveegg: true
ecopets.command.givexp: true
ecopets.command.reset: true
ecopets.command.activate: true
ecopets.command.deactivate: true
ecopets.command.reload:
description: Allows reloading the config
default: op
ecopets.command.ecopets:
description: Allows the use of /ecopets.
default: true
ecopets.command.pets:
description: Allows the use of /pets.
default: true
ecopets.command.give:
description: Allows the use of /ecopets give.
default: op
ecopets.command.giveegg:
description: Allows the use of /ecopets giveegg.
default: op
ecopets.command.givexp:
description: Allows the use of /ecopets givexp.
default: op
ecopets.command.reset:
description: Allows the use of /ecopets reset.
default: op
ecopets.command.activate:
description: Allows the use of /pets activate.
default: true
ecopets.command.deactivate:
description: Allows the use of /pets deactivate.
default: true
ecopets.xpmultiplier.50percent:
description: Gives the player 50% more skill experience
default: false
ecopets.xpmultiplier.double:
description: Gives the player 2x skill experience
default: false
ecopets.xpmultiplier.triple:
description: Gives the player 3x skill experience
default: false
ecopets.xpmultiplier.quadruple:
description: Gives the player 4x skill experience
default: false

View File

@@ -116,7 +116,6 @@ conditions: [ ]
# The texture of the pet entity in game
# If you're using modelengine, use modelengine:id as the texture
entity-texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTA5NWZjYzFlM2Q3Y2JkMzUwZjE5YjM4OTQ5OGFiOGJiOTZjNjVhZDE4NWQzNDU5MjA2N2E3ZDAzM2FjNDhkZSJ9fX0="
modelengine-animation: "fly" # If you're using ModelEngine, you can specify an animation here
# The icon in GUIs
icon: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTA5NWZjYzFlM2Q3Y2JkMzUwZjE5YjM4OTQ5OGFiOGJiOTZjNjVhZDE4NWQzNDU5MjA2N2E3ZDAzM2FjNDhkZSJ9fX0=

View File

@@ -35,6 +35,7 @@ permissions:
ecopets.command.give: true
ecopets.command.giveegg: true
ecopets.command.givexp: true
ecopets.command.givecurrentxp: true
ecopets.command.reset: true
ecopets.command.activate: true
ecopets.command.deactivate: true
@@ -57,6 +58,9 @@ permissions:
ecopets.command.givexp:
description: Allows the use of /ecopets givexp.
default: op
ecopets.command.givecurrentxp:
description: Allows the use of /ecopets givecurrentxp.
default: op
ecopets.command.reset:
description: Allows the use of /ecopets reset.
default: op

View File

@@ -1,5 +1,5 @@
#libreforge-updater
#Wed Mar 29 15:47:39 BST 2023
#Sat Mar 29 14:22:31 GMT 2025
kotlin.code.style=official
libreforge-version=4.0.0
version=2.0.0
libreforge-version=4.75.0
version=2.74.0

Binary file not shown.

View File

@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -1,6 +0,0 @@
jdk: openjdk17
before_install:
- source "$HOME/.sdkman/bin/sdkman-init.sh"
- sdk update
- sdk install java 17.0.1-tem
- sdk use java 17.0.1-tem

View File

@@ -2,11 +2,15 @@ pluginManagement {
repositories {
gradlePluginPortal()
mavenLocal()
maven("https://repo.jpenilla.xyz/snapshots/")
maven("https://repo.auxilor.io/repository/maven-public/")
maven("https://repo.papermc.io/repository/maven-public/")
}
}
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "EcoPets"
// Core