9
0
mirror of https://github.com/Auxilor/Reforges.git synced 2025-12-24 01:19:31 +00:00

Compare commits

...

148 Commits

Author SHA1 Message Date
Auxilor
2525da99b5 Updated libreforge 2022-01-12 12:53:19 +00:00
Auxilor
e9c8ad71a4 Updated libreforge 2022-01-11 09:54:02 +00:00
Auxilor
efdc06bde5 Updated libreforge 2022-01-10 21:10:58 +00:00
Auxilor
078b49d46d Updated libreforge 2022-01-10 12:45:09 +00:00
Auxilor
3c4163c96c Updated libreforge 2022-01-10 10:53:11 +00:00
Auxilor
6fd0084f7c Updated libreforge 2022-01-09 18:36:15 +00:00
Auxilor
8d957e6812 Updated libreforge 2022-01-09 13:02:03 +00:00
Auxilor
0297c31a28 Updated to 4.22.0 2022-01-08 19:04:27 +00:00
Auxilor
8954558592 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	gradle.properties
2022-01-08 19:04:13 +00:00
Auxilor
16008ffae5 Updated libreforge 2022-01-08 12:11:42 +00:00
Auxilor
e82b155e58 Updated to 4.21.3 2022-01-08 11:25:57 +00:00
Auxilor
ba9b45ec97 Fixed target.yml readding targets 2022-01-08 11:25:35 +00:00
Auxilor
646b6579f6 Updated to 4.21.2 2022-01-07 14:06:23 +00:00
Auxilor
be2393794e Updated more string getters 2022-01-07 14:06:15 +00:00
Auxilor
faf7df1ba8 Updated eco and libreforge 2022-01-07 14:03:26 +00:00
Auxilor
b779057db8 Updated more config getters 2022-01-06 18:39:39 +00:00
Auxilor
7452ee41ad Updated to 4.21.1 2022-01-06 18:37:30 +00:00
Auxilor
f2bba66d6f Updated config string getters 2022-01-06 18:37:18 +00:00
Auxilor
58247f3182 Updated libreforge 2022-01-06 18:25:42 +00:00
Auxilor
e45bee3c09 Updated to 4.20.0 2022-01-06 10:27:03 +00:00
Auxilor
ea18996434 Updated libreforge 2022-01-04 21:16:56 +00:00
Auxilor
f77d721cf1 Fixed build.gradle 2022-01-04 12:17:18 +00:00
Auxilor
5999f6f32d Fixed build.gradle 2022-01-03 19:12:00 +00:00
Auxilor
dd373c08d1 Fixed script 2022-01-03 19:11:23 +00:00
Auxilor
c012a69405 Added missing config and lang options 2022-01-03 19:10:53 +00:00
Auxilor
1cedf79fc5 Updated libreforge 2022-01-03 19:08:19 +00:00
Auxilor
8dbe8236ae Updated libreforge 2022-01-03 13:36:52 +00:00
Auxilor
56aaec3819 Updated to 4.16.1 2022-01-02 16:14:42 +00:00
Auxilor
ff1094a801 Updated libreforge 2022-01-01 14:30:40 +00:00
Auxilor
f5c27b9a3d Updated libreforge 2021-12-29 18:43:26 +00:00
Auxilor
6181b89f0e Updated libreforge 2021-12-28 18:15:42 +00:00
Auxilor
3438687f84 Updated libreforge 2021-12-27 23:31:15 +00:00
Auxilor
6c94f4acf8 Updated to 4.13.1 2021-12-27 19:01:52 +00:00
Auxilor
14991dbe3b Updated libreforge to 2.4.1 2021-12-27 19:01:44 +00:00
Auxilor
bbd9c83244 Updated to 4.13.0 2021-12-26 13:15:50 +00:00
Auxilor
63f1b85055 Updated libreforge to 2.4.0 2021-12-26 13:15:37 +00:00
Auxilor
26f9d44cfc Updated to 4.12.1 2021-12-23 19:15:30 +00:00
Auxilor
28709967a8 Updated libreforge to 2.3.1 2021-12-23 19:15:23 +00:00
Auxilor
df0d1b9cd1 Updated to 4.12.0 2021-12-21 17:18:05 +00:00
Auxilor
83d7ec883a Updated libreforge to 2.3.0 2021-12-21 17:17:54 +00:00
Auxilor
59a852b241 Updated to 4.11.4 2021-12-20 12:15:25 +00:00
Auxilor
6b2235f744 Updated libreforge to 2.2.3 2021-12-20 12:15:15 +00:00
Auxilor
01a2df2db8 Updated to 4.11.3 2021-12-18 12:15:15 +00:00
Auxilor
cc3005105c Updated eco to 6.17.1 2021-12-18 12:15:07 +00:00
Auxilor
7ac31edc75 Updated libreforge to 2.2.2 2021-12-18 12:14:57 +00:00
Auxilor
f7c99bfe7f Updated to 4.11.2 2021-12-14 10:42:24 +00:00
Auxilor
a87fe47fea Migrated to eco 6.17.0 2021-12-14 10:42:12 +00:00
Auxilor
94b2c4c13b Updated minimum eco version 2021-12-14 10:39:18 +00:00
Auxilor
ed63ff2050 Updated to eco 6.17.0 2021-12-14 10:39:04 +00:00
Auxilor
30f5f801c9 Updated to 4.11.1 2021-12-13 22:08:39 +00:00
Auxilor
a31dd52c68 Updated libreforge to 2.2.1 2021-12-13 22:08:31 +00:00
Auxilor
4d5da2a427 Updated to 4.11.0 2021-12-09 15:54:39 +00:00
Auxilor
e772180c95 Updated libreforge to 2.2.0 2021-12-09 15:54:29 +00:00
Auxilor
99ca372c45 Updated to 4.10.3 2021-12-08 12:01:37 +00:00
Auxilor
92b0f25c64 Updated libreforge to 2.1.3 2021-12-08 12:01:30 +00:00
Auxilor
117ceac0e8 Updated to 4.10.2 2021-12-06 10:42:55 +00:00
Auxilor
5da4cdb492 Updated libreforge to 2.1.2 2021-12-06 10:42:44 +00:00
Auxilor
f0a3f67439 Updated to 4.10.1 2021-12-05 20:35:33 +00:00
Auxilor
6d8be022e2 Updated libreforge to 2.1.1 2021-12-05 20:35:18 +00:00
Auxilor
d7ce5d230c Updated libreforge to 2.1.0 2021-12-05 13:33:52 +00:00
Auxilor
38374d1e08 Updated to 4.10.0 2021-12-05 13:33:29 +00:00
Auxilor
37c84b15af Fixed yml parsing 2021-12-04 16:03:49 +00:00
Auxilor
86a479b20c Fixed yml parsing issue 2021-12-04 16:01:14 +00:00
Auxilor
9f39f10629 Updated to 4.9.0 2021-12-04 16:00:13 +00:00
Auxilor
92f964c5af Switched from json to yml 2021-12-04 15:59:13 +00:00
Auxilor
5b2d0c9b52 Updated eco version 2021-12-04 15:58:21 +00:00
Auxilor
0f5505c740 Updated to 4.8.0 2021-12-03 13:52:21 +00:00
Auxilor
b64817cd2a libreforge 2.0.2 changes 2021-12-03 13:52:11 +00:00
Auxilor
a55f890d7e Updated to libreforge 2.0.2 2021-12-03 13:50:00 +00:00
Auxilor
99ed5a2d08 Updated to 4.7.0 2021-12-03 10:41:27 +00:00
Auxilor
caa10ddbef Updated to libreforge 1.6.0 2021-12-03 10:41:08 +00:00
Auxilor
f408181240 Updated gradle to 7.3 2021-12-03 09:07:17 +00:00
Auxilor
54782c367f Updated to 4.6.1 2021-12-03 09:06:56 +00:00
Auxilor
ea0fc6cd1b Fixed caching errors and slow update times 2021-12-03 09:06:47 +00:00
Auxilor
778aa6b0c3 Updated to 4.6.0 2021-12-02 11:20:36 +00:00
Auxilor
8cd4f7f124 Updated libreforge to 1.5.0 2021-12-02 11:20:25 +00:00
Auxilor
233fe17ace Updated to 4.5.1 2021-11-30 19:13:27 +00:00
Auxilor
b866a11f54 Updated to Java 17 2021-11-30 19:13:19 +00:00
Auxilor
80842cabfe kotlincompile warnings 2021-11-30 10:40:16 +00:00
Auxilor
1892871d2a Updated kotlin 2021-11-30 10:37:18 +00:00
Auxilor
c349a81009 Updated to 4.5.0 2021-11-30 10:28:48 +00:00
Auxilor
3f4be5fdbd Updated to 1.4.0 2021-11-30 10:28:37 +00:00
Auxilor
e8f65179a9 Updated to 4.4.1 2021-11-29 11:12:15 +00:00
Auxilor
05406f6405 Updated libreforge to 1.3.1 2021-11-29 11:12:07 +00:00
Auxilor
6915cf78a7 Updated to 4.4.0 2021-11-27 15:02:16 +00:00
Auxilor
5a72806a6e Updated libreforge to 1.3.0 2021-11-27 15:01:58 +00:00
Auxilor
4b61b7a787 Updated to 4.3.1 2021-11-26 21:33:01 +00:00
Auxilor
31b1598467 Updated libreforge to 1.2.1 2021-11-26 21:32:52 +00:00
Auxilor
f240c94e6e Updated to 4.3.0 2021-11-26 09:15:22 +00:00
Auxilor
d50c643e68 Updated libreforge 2021-11-26 09:10:14 +00:00
Auxilor
7651501da7 Changed reloading 2021-11-25 14:45:55 +00:00
Auxilor
1fbe31c1df Updated to 4.2.0 2021-11-25 14:45:22 +00:00
Auxilor
e52cf5746d Updated libreforge to 1.1.0 2021-11-25 14:45:12 +00:00
Auxilor
0d281e1792 Updated to 4.1.4 2021-11-23 09:55:39 +00:00
Auxilor
4c9a003a28 Fixed default config 2021-11-23 09:55:30 +00:00
Auxilor
e4d5081ad9 Updated to 4.1.3 2021-11-23 08:31:45 +00:00
Auxilor
bfcadf710f Updated libreforge to 1.0.4 2021-11-23 08:31:36 +00:00
Auxilor
02958d879f Updated to 4.1.2 2021-11-22 10:52:47 +00:00
Auxilor
565040e7bb Fixed double compileOnly 2021-11-22 10:52:01 +00:00
Auxilor
733b065a45 Updated libreforge and removed /lib/ 2021-11-22 10:51:41 +00:00
Auxilor
9b90778233 Updated to 4.1.1 2021-11-21 17:20:46 +00:00
Auxilor
749d39290f Fixed bugs with potions 2021-11-21 17:20:37 +00:00
Auxilor
e92bdf8a81 Updated to 4.1.0 2021-11-21 12:56:33 +00:00
Auxilor
6f7f5f7fe6 Updated libreforge to 1.0.0 2021-11-21 12:56:25 +00:00
Auxilor
f80e1e5179 Updated to 4.0.0 2021-11-20 11:42:47 +00:00
Auxilor
ef581602c5 Fixed stone bugs 2021-11-20 11:38:49 +00:00
Auxilor
6f9d66d4cc Fixed config 2021-11-20 11:37:04 +00:00
Auxilor
998cbd7c19 Added cooldown support 2021-11-20 11:35:32 +00:00
Auxilor
53a8587de0 Added cooldown support 2021-11-20 11:35:07 +00:00
Auxilor
376a9ee7ae Updated to libreforge 0.3.0 2021-11-20 11:32:08 +00:00
Auxilor
f315251c5c Updated to libreforge 0.2.1 2021-11-19 18:08:39 +00:00
Auxilor
91c22640fe Updated to 4.0.0b1 2021-11-18 15:08:56 +00:00
Auxilor
3436c11972 Allowed specifying custom item for reforge stones altogether 2021-11-18 15:08:38 +00:00
Auxilor
cf58c5de49 Updated libreforge 2021-11-18 13:31:39 +00:00
Auxilor
372a842441 libreforge changes 2021-11-18 13:24:07 +00:00
Auxilor
cdd3fac432 Updated to 4.0.0 2021-11-18 13:22:08 +00:00
Auxilor
79c821af4e Rebuilt around libreforge 2021-11-18 13:21:57 +00:00
Auxilor
1929e2f94b Updated to 3.9.2 2021-11-16 19:10:11 +00:00
Auxilor
beb76ca9c1 Fixed any slot reforges not working (fixes talismans) 2021-11-16 19:10:02 +00:00
Auxilor
751191353e Updated to 3.9.1 2021-11-14 13:19:21 +00:00
Auxilor
bc5ce5cebb Fixed display 2021-11-14 13:18:26 +00:00
Auxilor
51a306e8c7 Updated to 3.9.0 2021-11-14 11:17:17 +00:00
Auxilor
19cacea870 Reforge stone names and lores are now done per-stone 2021-11-14 11:17:07 +00:00
Auxilor
b1f03fe214 Updated to 3.8.5 2021-11-10 17:55:05 +00:00
Auxilor
9fd7f2db90 Merge remote-tracking branch 'origin/master' 2021-11-10 17:54:41 +00:00
Auxilor
e350a3d49c Updated to 3.8.4 2021-11-10 17:54:37 +00:00
Auxilor
c9505899fb Fixed Slot.ANY bug 2021-11-10 17:54:21 +00:00
Auxilor
4279ca130f Updated to 3.8.4 2021-11-10 14:49:58 +00:00
Auxilor
e131099f12 Fixed reforging an item giving you the same reforge you started with 2021-11-10 14:49:48 +00:00
Auxilor
8fb79afe88 Updated to 3.8.3 2021-11-09 13:40:21 +00:00
Auxilor
4304878e5e Merge remote-tracking branch 'origin/master' 2021-11-09 13:39:26 +00:00
Auxilor
c4c8e5c94b Updated to 3.8.2 2021-11-09 13:39:02 +00:00
Auxilor
df72cd0e57 Added %time% placeholder to reload message 2021-11-09 13:38:53 +00:00
Auxilor
52b24baeef Updated to 3.8.2 2021-11-07 21:28:47 +00:00
Auxilor
6e27cd76e3 6.12.2 Migration 2021-11-07 21:28:37 +00:00
Auxilor
7bd0603eb6 Fixed lombok bug 2021-11-07 21:27:05 +00:00
Auxilor
4b3ef04763 More codestyle 2021-11-07 21:23:38 +00:00
Auxilor
0495e1bfeb Codestyle 2021-11-07 21:23:08 +00:00
Auxilor
57519b6d9e Updated to 3.8.1 2021-11-02 17:14:06 +00:00
Auxilor
ec8af43519 Fixed player heads showing as reforgable 2021-11-02 17:13:55 +00:00
Auxilor
24a7b21ee7 Updated to 3.8.0 2021-11-02 09:44:58 +00:00
Auxilor
80d2130fd0 Fixed RewardBlockBreak and RewardKill 2021-11-02 09:44:27 +00:00
Auxilor
bbbef0fb0c Updated to 3.7.3 and eco 6.12.2 2021-11-02 09:43:21 +00:00
Auxilor
ec847af2b7 Updated to 3.7.2 2021-11-01 10:06:09 +00:00
Will FP
dac78bf216 Merge pull request #7
Fixed UltimateSkills integration
2021-11-01 10:05:57 +00:00
_OfTeN_
f596b8aeba Fixed UltimateSkills integration 2021-10-31 22:37:58 +03:00
Auxilor
3af323588e Updated to 3.7.1 2021-10-31 13:00:42 +00:00
Auxilor
d9eacb7388 Fixed every item showing as reforgable 2021-10-31 13:00:35 +00:00
70 changed files with 703 additions and 2873 deletions

View File

@@ -4,7 +4,7 @@ buildscript {
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0"
}
}
@@ -27,6 +27,7 @@ allprojects {
repositories {
mavenCentral()
mavenLocal()
maven { url 'https://jitpack.io' }
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://papermc.io/repo/repository/maven-public/' }
@@ -37,11 +38,15 @@ allprojects {
onlyIf { !sourceSets.main.allSource.files.isEmpty() }
}
dependencies {
compileOnly 'org.black_ixx:playerpoints:3.0.0'
compileOnly 'com.willfp:eco:6.9.0'
shadowJar {
relocate('com.willfp.libreforge', 'com.willfp.reforges.libreforge')
}
compileOnly 'org.jetbrains:annotations:19.0.0'
dependencies {
compileOnly 'com.willfp:eco:6.18.1'
implementation 'com.willfp:libreforge:3.0.0'
compileOnly 'org.jetbrains:annotations:23.0.0'
compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
@@ -49,8 +54,7 @@ allprojects {
testCompileOnly 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
compileOnly 'org.jetbrains:annotations:19.0.0'
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21'
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.6.0'
}
tasks.withType(JavaCompile) {
@@ -59,11 +63,20 @@ allprojects {
}
processResources {
filesNotMatching(["**/*.png", "**/models/**", "**/textures/**"]) {
filesNotMatching(["**/*.png", "**/models/**", "**/textures/**", "**reforges.yml", "**lang.yml"]) {
expand projectVersion: project.version
}
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
kotlinOptions {
jvmTarget = "17"
}
}
java.sourceCompatibility = JavaVersion.VERSION_17
java.targetCompatibility = JavaVersion.VERSION_17
compileJava.options.encoding = 'UTF-8'
compileJava.dependsOn clean
@@ -89,8 +102,5 @@ jar {
group = 'com.willfp'
archivesBaseName = project.name
version = findProperty("version")
java.sourceCompatibility = JavaVersion.VERSION_16
compileJava.options.encoding = 'UTF-8'
build.dependsOn shadowJar

View File

@@ -8,8 +8,6 @@ dependencies {
compileOnly 'com.willfp:EcoSkills:1.4.0'
compileOnly 'com.willfp:Talismans:4.6.0'
compileOnly 'com.github.Archy-X:AureliumSkills:Beta1.2.4'
compileOnly 'org.black_ixx:playerpoints:3.0.0'
compileOnly fileTree(dir: '../../lib', include: ['*.jar'])
}
build.dependsOn publishToMavenLocal

View File

@@ -1,42 +1,31 @@
package com.willfp.reforges;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.command.impl.PluginCommand;
import com.willfp.eco.core.display.DisplayModule;
import com.willfp.eco.core.integrations.IntegrationLoader;
import com.willfp.eco.core.items.Items;
import com.willfp.libreforge.LibReforgePlugin;
import com.willfp.reforges.commands.CommandReforge;
import com.willfp.reforges.commands.CommandReforges;
import com.willfp.reforges.config.ReforgesJson;
import com.willfp.reforges.config.ReforgesYml;
import com.willfp.reforges.config.TargetYml;
import com.willfp.reforges.display.ReforgesDisplay;
import com.willfp.reforges.effects.ConfiguredEffect;
import com.willfp.reforges.effects.Effect;
import com.willfp.reforges.effects.Effects;
import com.willfp.reforges.integrations.aureliumskills.AureliumSkillsIntegration;
import com.willfp.reforges.integrations.ecoskills.EcoSkillsIntegration;
import com.willfp.reforges.integrations.talismans.TalismansIntegration;
import com.willfp.reforges.integrations.ultimateskills.UltimateSkillsIntegration;
import com.willfp.reforges.reforges.Reforge;
import com.willfp.reforges.reforges.Reforges;
import com.willfp.reforges.reforges.util.ReforgeArgParser;
import com.willfp.reforges.reforges.util.ReforgeEnableListeners;
import com.willfp.reforges.reforges.util.ReforgeLookup;
import com.willfp.reforges.reforges.util.WatcherTriggers;
import com.willfp.reforges.util.AntiPlaceListener;
import com.willfp.reforges.util.DiscoverRecipeListener;
import com.willfp.reforges.vault.EconomyHandler;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.List;
public class ReforgesPlugin extends EcoPlugin {
public class ReforgesPlugin extends LibReforgePlugin {
/**
* Instance of Reforges.
*/
@@ -49,66 +38,39 @@ public class ReforgesPlugin extends EcoPlugin {
private final TargetYml targetYml;
/**
* reforges.json.
* reforges.yml.
*/
@Getter
private final ReforgesJson reforgesJson;
private final ReforgesYml reforgesYml;
/**
* Internal constructor called by bukkit on plugin load.
*/
public ReforgesPlugin() {
super(1330, 12412, "&3", true);
super(1330, 12412, "&3", "");
this.targetYml = new TargetYml(this);
this.reforgesJson = new ReforgesJson(this);
this.reforgesYml = new ReforgesYml(this);
instance = this;
registerHolderProvider(ReforgeLookup::provideReforges);
}
@Override
protected void handleEnable() {
public void handleEnableAdditional() {
Items.registerArgParser(new ReforgeArgParser());
}
@Override
protected void handleDisable() {
for (Player player : Bukkit.getOnlinePlayers()) {
for (Reforge value : Reforges.values()) {
for (ConfiguredEffect effect : value.getEffects()) {
effect.getEffect().handleDisabling(player);
}
}
}
}
@Override
protected void handleAfterLoad() {
EconomyHandler.setEnabled(EconomyHandler.init());
if (!EconomyHandler.isEnabled()) {
this.getLogger().severe("Vault economy support not enabled");
}
}
@Override
protected void handleReload() {
for (Effect effect : Effects.values()) {
HandlerList.unregisterAll(effect);
this.getScheduler().run(() -> this.getEventManager().registerListener(effect));
}
public void handleReloadAdditional() {
this.getLogger().info(Reforges.values().size() + " Reforges Loaded");
this.getScheduler().runTimer(() -> {
for (Player player : Bukkit.getOnlinePlayers()) {
ReforgeLookup.updateReforges(player);
}
}, 81, 81);
}
@Override
protected List<Listener> loadListeners() {
return Arrays.asList(
new DiscoverRecipeListener(this),
new AntiPlaceListener(),
new WatcherTriggers(this),
new ReforgeEnableListeners(this)
);
}
@@ -126,20 +88,17 @@ public class ReforgesPlugin extends EcoPlugin {
return new ReforgesDisplay(this);
}
@NotNull
@Override
protected List<IntegrationLoader> loadIntegrationLoaders() {
public List<IntegrationLoader> loadAdditionalIntegrations() {
return Arrays.asList(
new IntegrationLoader("UltimateSkills", UltimateSkillsIntegration::load),
new IntegrationLoader("EcoSkills", EcoSkillsIntegration::load),
new IntegrationLoader("Talismans", TalismansIntegration::registerProvider),
new IntegrationLoader("PlayerPoints", () -> EconomyHandler.setUsePlayerPoints(true)),
new IntegrationLoader("AureliumSkills", AureliumSkillsIntegration::load)
new IntegrationLoader("Talismans", TalismansIntegration::registerProvider)
);
}
@Override
public String getMinimumEcoVersion() {
return "6.9.0";
return "6.19.0";
}
/**

View File

@@ -1,62 +0,0 @@
package com.willfp.reforges.conditions;
import com.willfp.eco.core.config.interfaces.JSONConfig;
import com.willfp.reforges.ReforgesPlugin;
import lombok.AccessLevel;
import lombok.Getter;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
public abstract class Condition implements Listener {
/**
* Instance of Reforges.
*/
@Getter(AccessLevel.PROTECTED)
private final ReforgesPlugin plugin = ReforgesPlugin.getInstance();
/**
* The name of the condition.
*/
@Getter
private final String id;
/**
* Create a new condition.
*
* @param id The condition id.
*/
protected Condition(@NotNull final String id) {
this.id = id;
Conditions.addNewCondition(this);
}
/**
* Get if condition is met for a player.
*
* @param player The player.
* @param config The config of the condition.
* @return If met.
*/
public abstract boolean isConditionMet(@NotNull Player player,
@NotNull JSONConfig config);
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Condition condition)) {
return false;
}
return getId().equals(condition.getId());
}
@Override
public int hashCode() {
return Objects.hash(this.getId());
}
}

View File

@@ -1,76 +0,0 @@
package com.willfp.reforges.conditions;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableList;
import com.willfp.reforges.conditions.conditions.ConditionAboveHealthPercent;
import com.willfp.reforges.conditions.conditions.ConditionAboveHungerPercent;
import com.willfp.reforges.conditions.conditions.ConditionAboveXPLevel;
import com.willfp.reforges.conditions.conditions.ConditionAboveY;
import com.willfp.reforges.conditions.conditions.ConditionBelowHealthPercent;
import com.willfp.reforges.conditions.conditions.ConditionBelowHungerPercent;
import com.willfp.reforges.conditions.conditions.ConditionBelowXPLevel;
import com.willfp.reforges.conditions.conditions.ConditionBelowY;
import com.willfp.reforges.conditions.conditions.ConditionHasPermission;
import com.willfp.reforges.conditions.conditions.ConditionInAir;
import com.willfp.reforges.conditions.conditions.ConditionInBiome;
import com.willfp.reforges.conditions.conditions.ConditionInWater;
import com.willfp.reforges.conditions.conditions.ConditionInWorld;
import com.willfp.reforges.conditions.conditions.ConditionIsSneaking;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@UtilityClass
@SuppressWarnings("unused")
public class Conditions {
/**
* All registered conditions.
*/
private static final BiMap<String, Condition> BY_ID = HashBiMap.create();
public static final Condition BELOW_Y = new ConditionBelowY();
public static final Condition ABOVE_Y = new ConditionAboveY();
public static final Condition ABOVE_HEALTH_PERCENT = new ConditionAboveHealthPercent();
public static final Condition BELOW_HEALTH_PERCENT = new ConditionBelowHealthPercent();
public static final Condition IN_WATER = new ConditionInWater();
public static final Condition IN_WORLD = new ConditionInWorld();
public static final Condition ABOVE_XP_LEVEL = new ConditionAboveXPLevel();
public static final Condition BELOW_XP_LEVEL = new ConditionBelowXPLevel();
public static final Condition ABOVE_HUNGER_PERCENT = new ConditionAboveHungerPercent();
public static final Condition BELOW_HUNGER_PERCENT = new ConditionBelowHungerPercent();
public static final Condition IN_BIOME = new ConditionInBiome();
public static final Condition HAS_PERMISSION = new ConditionHasPermission();
public static final Condition IS_SNEAKING = new ConditionIsSneaking();
public static final Condition IN_AIR = new ConditionInAir();
/**
* Get condition matching name.s
*
* @param name The name to query.
* @return The matching condition, or null if not found.
*/
public static Condition getByID(@NotNull final String name) {
return BY_ID.get(name);
}
/**
* List of all registered conditions.
*
* @return The conditions.
*/
public static List<Condition> values() {
return ImmutableList.copyOf(BY_ID.values());
}
/**
* Add new condition to EcoArmor.
*
* @param condition The condition to add.
*/
public static void addNewCondition(@NotNull final Condition condition) {
BY_ID.remove(condition.getId());
BY_ID.put(condition.getId(), condition);
}
}

View File

@@ -1,16 +0,0 @@
package com.willfp.reforges.config;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.config.json.JSONBaseConfig;
import org.jetbrains.annotations.NotNull;
public class ReforgesJson extends JSONBaseConfig {
/**
* Instantiate reforges.json.
*
* @param plugin Instance of reforges.
*/
public ReforgesJson(@NotNull final EcoPlugin plugin) {
super("reforges", true, plugin);
}
}

View File

@@ -0,0 +1,17 @@
package com.willfp.reforges.config;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.config.BaseConfig;
import com.willfp.eco.core.config.ConfigType;
import org.jetbrains.annotations.NotNull;
public class ReforgesYml extends BaseConfig {
/**
* Instantiate reforges.yml.
*
* @param plugin Instance of reforges.
*/
public ReforgesYml(@NotNull final EcoPlugin plugin) {
super("reforges", plugin, true, ConfigType.YAML);
}
}

View File

@@ -1,7 +1,8 @@
package com.willfp.reforges.config;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.config.yaml.YamlBaseConfig;
import com.willfp.eco.core.config.ConfigType;
import com.willfp.eco.core.config.StaticBaseConfig;
import com.willfp.eco.core.items.Items;
import com.willfp.eco.core.items.TestableItem;
import com.willfp.reforges.reforges.meta.ReforgeTarget;
@@ -11,14 +12,14 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TargetYml extends YamlBaseConfig {
public class TargetYml extends StaticBaseConfig {
/**
* Instantiate target.yml.
*
* @param plugin Instance of EcoEnchants.
*/
public TargetYml(@NotNull final EcoPlugin plugin) {
super("target", false, plugin);
super("target", plugin, ConfigType.YAML);
}
/**
@@ -38,7 +39,7 @@ public class TargetYml extends YamlBaseConfig {
*/
public Set<TestableItem> getTargetItems(@NotNull final String target) {
Set<TestableItem> items = new HashSet<>();
this.getStrings(target + ".items", false).forEach(s -> items.add(Items.lookup(s.toUpperCase())));
this.getStrings(target + ".items").forEach(s -> items.add(Items.lookup(s.toUpperCase())));
return items;
}

View File

@@ -1,118 +0,0 @@
package com.willfp.reforges.effects;
import com.willfp.eco.core.config.interfaces.JSONConfig;
import com.willfp.reforges.ReforgesPlugin;
import com.willfp.reforges.reforges.util.Watcher;
import lombok.AccessLevel;
import lombok.Getter;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Objects;
import java.util.UUID;
public abstract class Effect implements Listener, Watcher {
/**
* Instance of reforges.
*/
@Getter(AccessLevel.PROTECTED)
private final ReforgesPlugin plugin = ReforgesPlugin.getInstance();
/**
* The effect ID.
*/
private final String id;
/**
* Create a new effect.
*
* @param id The id.
*/
protected Effect(@NotNull final String id) {
this.id = id;
Effects.addNewEffect(this);
}
/**
* Get the effect ID.
*
* @return The ID.
*/
public String getId() {
return id;
}
/**
* Generate a UUID with a specified index.
*
* @param index The index.
* @param extra The extra
* @return The UUID.
*/
protected UUID getUUID(final int index,
@NotNull final Object... extra) {
return UUID.nameUUIDFromBytes((this.id + index + Arrays.hashCode(extra)).getBytes());
}
/**
* Generate a NamespacedKey with a specified index.
*
* @param index The index.
* @return The NamespacedKey.
*/
protected NamespacedKey getNamespacedKey(final int index) {
return this.getPlugin().getNamespacedKeyFactory().create(this.id + "_" + index);
}
/**
* Handle application of a reforge containing this effect.
*
* @param player The player.
* @param config The config.
*/
public final void handleEnabling(@NotNull final Player player,
@NotNull final JSONConfig config) {
PlayerEffectStack.pushEffect(player, this);
this.handleEnable(player, config);
}
protected void handleEnable(@NotNull final Player player,
@NotNull final JSONConfig config) {
// Override when needed.
}
/**
* Handle removal of a reforge containing this effect.
*
* @param player The player.
*/
public final void handleDisabling(@NotNull final Player player) {
this.handleDisable(player);
PlayerEffectStack.popEffect(player, this);
}
protected void handleDisable(@NotNull final Player player) {
// Override when needed.
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Effect effect)) {
return false;
}
return this.getId().equals(effect.getId());
}
@Override
public int hashCode() {
return Objects.hash(this.getId());
}
}

View File

@@ -1,68 +0,0 @@
package com.willfp.reforges.effects;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableList;
import com.willfp.reforges.effects.effects.EffectAttackSpeedMultiplier;
import com.willfp.reforges.effects.effects.EffectCritMultiplier;
import com.willfp.reforges.effects.effects.EffectDamageMultiplier;
import com.willfp.reforges.effects.effects.EffectDurabilityMultiplier;
import com.willfp.reforges.effects.effects.EffectIncomingDamageMultiplier;
import com.willfp.reforges.effects.effects.EffectKnockbackMultiplier;
import com.willfp.reforges.effects.effects.EffectMovementSpeedMultiplier;
import com.willfp.reforges.effects.effects.EffectRewardBlockBreak;
import com.willfp.reforges.effects.effects.EffectRewardKill;
import lombok.experimental.UtilityClass;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@UtilityClass
@SuppressWarnings("unused")
public class Effects {
/**
* All registered effects.
*/
private static final BiMap<String, Effect> BY_ID = HashBiMap.create();
public static final Effect DAMAGE_MULTIPLIER = new EffectDamageMultiplier();
public static final Effect CRIT_MULTIPLIER = new EffectCritMultiplier();
public static final Effect REWARD_KILL = new EffectRewardKill();
public static final Effect KNOCKBACK_MULTIPLIER = new EffectKnockbackMultiplier();
public static final Effect REWARD_BLOCK_BREAK = new EffectRewardBlockBreak();
public static final Effect INCOMING_DAMAGE_MULTIPLIER = new EffectIncomingDamageMultiplier();
public static final Effect ATTACK_SPEED_MULTIPLIER = new EffectAttackSpeedMultiplier();
public static final Effect DURABILITY_MULTIPLIER = new EffectDurabilityMultiplier();
public static final Effect MOVEMENT_SPEED_MULTIPLIER = new EffectMovementSpeedMultiplier();
/**
* Get effect matching id.
*
* @param id The id to query.
* @return The matching effect, or null if not found.
*/
@Nullable
public static Effect getByID(@NotNull final String id) {
return BY_ID.get(id);
}
/**
* List of all registered effects.
*
* @return The effects.
*/
public static List<Effect> values() {
return ImmutableList.copyOf(BY_ID.values());
}
/**
* Add new effect to EcoWeapons.
*
* @param effect The effect to add.
*/
public static void addNewEffect(@NotNull final Effect effect) {
BY_ID.remove(effect.getId());
BY_ID.put(effect.getId(), effect);
}
}

View File

@@ -1,106 +0,0 @@
package com.willfp.reforges.events;
import com.willfp.reforges.effects.Effect;
import com.willfp.reforges.reforges.Reforge;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerEvent;
import org.jetbrains.annotations.NotNull;
public class EffectActivateEvent extends PlayerEvent implements Cancellable {
/**
* The reforge.
*/
private final Reforge reforge;
/**
* The effect that activated.
*/
private final Effect effect;
/**
* If the event is cancelled.
*/
private boolean cancelled;
/**
* Bukkit parity.
*/
private static final HandlerList HANDLERS = new HandlerList();
/**
* Create new EffectActivateEvent.
*
* @param who The player.
* @param reforge The reforge.
* @param effect The effect.
*/
public EffectActivateEvent(@NotNull final Player who,
@NotNull final Reforge reforge,
@NotNull final Effect effect) {
super(who);
this.reforge = reforge;
this.effect = effect;
this.cancelled = false;
}
/**
* Get if the effect activation is cancelled.
*
* @return If cancelled.
*/
@Override
public boolean isCancelled() {
return this.cancelled;
}
/**
* Set if the event is cancelled.
*
* @param cancel If cancelled.
*/
@Override
public void setCancelled(final boolean cancel) {
this.cancelled = cancel;
}
/**
* Bukkit parity.
*
* @return The handlers.
*/
@Override
public @NotNull HandlerList getHandlers() {
return HANDLERS;
}
/**
* Get the reforge associated with the event.
*
* @return The reforge.
*/
@NotNull
public Reforge getReforge() {
return this.reforge;
}
/**
* Get the effect associated with the event.
*
* @return The effect.
*/
@NotNull
public Effect getEffect() {
return this.effect;
}
/**
* Bukkit parity.
*
* @return The handler list.
*/
public static HandlerList getHandlerList() {
return HANDLERS;
}
}

View File

@@ -3,7 +3,7 @@ package com.willfp.reforges.reforges;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.ImmutableSet;
import com.willfp.eco.core.config.interfaces.JSONConfig;
import com.willfp.eco.core.config.interfaces.Config;
import com.willfp.eco.core.config.updating.ConfigUpdater;
import com.willfp.reforges.ReforgesPlugin;
import lombok.experimental.UtilityClass;
@@ -59,7 +59,7 @@ public class Reforges {
removeReforge(reforge);
}
for (JSONConfig config : plugin.getReforgesJson().getSubsections("reforges")) {
for (Config config : plugin.getReforgesYml().getSubsections("reforges")) {
new Reforge(config, plugin);
}
}

View File

@@ -2,7 +2,9 @@ package com.willfp.reforges.reforges.util;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.PluginDependent;
import com.willfp.reforges.effects.ConfiguredEffect;
import com.willfp.eco.core.events.ArmorChangeEvent;
import com.willfp.libreforge.LibReforgeUtils;
import com.willfp.libreforge.effects.ConfiguredEffect;
import com.willfp.reforges.reforges.Reforge;
import com.willfp.reforges.reforges.Reforges;
import com.willfp.reforges.reforges.meta.ReforgeTarget;
@@ -68,7 +70,7 @@ public class ReforgeEnableListeners extends PluginDependent<EcoPlugin> implement
for (Reforge value : Reforges.values()) {
for (ConfiguredEffect effect : value.getEffects()) {
effect.getEffect().handleDisabling(player);
effect.getEffect().disableForPlayer(player);
}
}
}
@@ -95,6 +97,18 @@ public class ReforgeEnableListeners extends PluginDependent<EcoPlugin> implement
@EventHandler
public void onChangeSlot(@NotNull final PlayerItemHeldEvent event) {
refreshPlayer(event.getPlayer());
this.getPlugin().getScheduler().run(() -> refreshPlayer(event.getPlayer()));
}
/**
* Called on armor change.
*
* @param event The event to listen for.
*/
@EventHandler
public void onArmorChange(@NotNull final ArmorChangeEvent event) {
refreshPlayer(event.getPlayer());
}
/**
@@ -121,6 +135,7 @@ public class ReforgeEnableListeners extends PluginDependent<EcoPlugin> implement
}
private void refreshPlayer(@NotNull final Player player) {
ReforgeLookup.updateReforges(player);
ReforgeLookup.clearCache(player);
LibReforgeUtils.updateEffects(player);
}
}

View File

@@ -4,15 +4,16 @@ import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.PluginDependent;
import com.willfp.eco.core.gui.menu.Menu;
import com.willfp.eco.core.gui.slot.Slot;
import com.willfp.eco.core.integrations.economy.EconomyManager;
import com.willfp.reforges.reforges.Reforge;
import com.willfp.reforges.reforges.meta.ReforgeTarget;
import com.willfp.reforges.vault.EconomyHandler;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class ReforgeHandler extends PluginDependent<EcoPlugin> {
@@ -34,6 +35,8 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
return;
}
Reforge existingReforge = ReforgeUtils.getReforge(toReforge);
List<ReforgeTarget> target = ReforgeTarget.getForItem(toReforge);
Reforge reforge = null;
@@ -50,7 +53,11 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
}
if (reforge == null) {
reforge = ReforgeUtils.getRandomReforge(target);
List<Reforge> existing = new ArrayList<>();
if (existingReforge != null) {
existing.add(existingReforge);
}
reforge = ReforgeUtils.getRandomReforge(target, existing);
}
if (reforge == null) {
@@ -58,7 +65,7 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
}
double cost = 0;
if (EconomyHandler.isEnabled()) {
if (EconomyManager.hasRegistrations()) {
cost = this.getPlugin().getConfigYml().getDouble("reforge.cost");
int reforges = ReforgeUtils.getReforges(toReforge);
cost *= Math.pow(this.getPlugin().getConfigYml().getDouble("reforge.cost-exponent"), reforges);
@@ -66,7 +73,7 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
cost = reforge.getStonePrice();
}
if (!EconomyHandler.has(player, cost)) {
if (!EconomyManager.hasAmount(player, cost)) {
player.sendMessage(this.getPlugin().getLangYml().getMessage("insufficient-money"));
player.playSound(
@@ -96,8 +103,8 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
return;
}
if (EconomyHandler.isEnabled()) {
EconomyHandler.getInstance().withdrawPlayer(player, cost);
if (EconomyManager.hasRegistrations()) {
EconomyManager.removeMoney(player, cost);
}
player.setLevel(player.getLevel() - xpCost);

View File

@@ -2,7 +2,6 @@ package com.willfp.reforges.reforges.util;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.reforges.ReforgesPlugin;
import com.willfp.reforges.conditions.ConfiguredCondition;
import com.willfp.reforges.reforges.Reforge;
import com.willfp.reforges.reforges.meta.ReforgeTarget;
import org.bukkit.entity.Player;
@@ -91,7 +90,6 @@ public class ReforgeLookup {
for (Map.Entry<ItemStack, ReforgeTarget.Slot> entry : provide(player).entrySet()) {
ItemStack itemStack = entry.getKey();
ReforgeTarget.Slot slot = entry.getValue();
if (itemStack == null) {
continue;
}
@@ -102,11 +100,13 @@ public class ReforgeLookup {
continue;
}
if (!reforge.getTargets().stream()
.map(ReforgeTarget::getSlot)
.collect(Collectors.toList())
.contains(slot)) {
continue;
if (slot != ReforgeTarget.Slot.ANY) {
if (!reforge.getTargets().stream()
.map(ReforgeTarget::getSlot)
.collect(Collectors.toList())
.contains(slot)) {
continue;
}
}
found.add(reforge);
@@ -119,104 +119,13 @@ public class ReforgeLookup {
}
/**
* Clear caches.
* Clear cache.
*
* @param player The player.
*/
public static void clearCaches(@NotNull final Player player) {
REFORGE_CACHE.remove(player.getUniqueId());
public static void clearCache(@NotNull final Player player) {
ITEM_CACHE.remove(player.getUniqueId());
}
/**
* Update reforges for a player.
*
* @param player The player.
*/
public static void updateReforges(@NotNull final Player player) {
List<Reforge> before = ReforgeLookup.provideReforges(player);
ReforgeLookup.clearCaches(player);
PLUGIN.getScheduler().run(() -> {
List<Reforge> after = ReforgeLookup.provideReforges(player);
Map<Reforge, Integer> beforeFrequency = listToFrequencyMap(before);
Map<Reforge, Integer> afterFrequency = listToFrequencyMap(after);
List<Reforge> added = new ArrayList<>();
List<Reforge> removed = new ArrayList<>();
for (Map.Entry<Reforge, Integer> entry : new HashSet<>(afterFrequency.entrySet())) {
int amount = entry.getValue();
Reforge reforge = entry.getKey();
amount -= beforeFrequency.getOrDefault(reforge, 0);
if (amount < 1) {
continue;
}
for (int i = 0; i < amount; i++) {
added.add(reforge);
}
}
for (Map.Entry<Reforge, Integer> entry : new HashSet<>(beforeFrequency.entrySet())) {
int amount = entry.getValue();
Reforge reforge = entry.getKey();
amount -= afterFrequency.getOrDefault(reforge, 0);
if (amount < 1) {
continue;
}
for (int i = 0; i < amount; i++) {
removed.add(reforge);
}
}
for (Reforge reforge : added) {
boolean areConditionsMet = true;
for (ConfiguredCondition condition : reforge.getConditions()) {
if (!condition.getCondition().isConditionMet(player, condition.getConfig())) {
areConditionsMet = false;
break;
}
}
if (areConditionsMet) {
reforge.handleActivation(player);
}
}
for (Reforge reforge : removed) {
reforge.handleDeactivation(player);
}
for (Reforge reforge : after) {
boolean areConditionsMet = true;
for (ConfiguredCondition condition : reforge.getConditions()) {
if (!condition.getCondition().isConditionMet(player, condition.getConfig())) {
areConditionsMet = false;
break;
}
}
if (!areConditionsMet) {
reforge.handleDeactivation(player);
}
}
});
}
private static <T> Map<T, Integer> listToFrequencyMap(@NotNull final List<T> list) {
Map<T, Integer> frequencyMap = new HashMap<>();
for (T object : list) {
if (frequencyMap.containsKey(object)) {
frequencyMap.put(object, frequencyMap.get(object) + 1);
} else {
frequencyMap.put(object, 1);
}
}
return frequencyMap;
REFORGE_CACHE.remove(player.getUniqueId());
}
static {

View File

@@ -45,9 +45,22 @@ public class ReforgeUtils {
/**
* Get a random reforge for a target.
*
* @param targets The targets.
* @param targets The targets.
*/
@Nullable
public static Reforge getRandomReforge(@NotNull final Collection<ReforgeTarget> targets) {
return getRandomReforge(targets, Collections.emptyList());
}
/**
* Get a random reforge for a target.
*
* @param targets The targets.
* @param disallowed The disallowed reforges.
*/
@Nullable
public static Reforge getRandomReforge(@NotNull final Collection<ReforgeTarget> targets,
@NotNull final Collection<Reforge> disallowed) {
List<Reforge> applicable = new ArrayList<>();
for (Reforge reforge : Reforges.values()) {
@@ -60,6 +73,8 @@ public class ReforgeUtils {
Collections.shuffle(applicable);
applicable.removeAll(disallowed);
if (applicable.isEmpty()) {
return null;
}

View File

@@ -1,209 +0,0 @@
package com.willfp.reforges.reforges.util;
import com.willfp.eco.core.config.interfaces.JSONConfig;
import com.willfp.eco.core.events.EntityDeathByEntityEvent;
import org.bukkit.block.Block;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.Trident;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.player.PlayerItemDamageEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.jetbrains.annotations.NotNull;
@SuppressWarnings("unused")
public interface Watcher {
/**
* Called when a player breaks a block.
*
* @param player The player.
* @param block The block that was broken.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onBlockBreak(@NotNull final Player player,
@NotNull final Block block,
@NotNull final BlockBreakEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity attacks another entity via any mean.
*
* @param attacker The attacker.
* @param victim The victim.
* @param event The event.
* @param config The effect config.
*/
default void onAnyDamage(@NotNull final Player attacker,
@NotNull final LivingEntity victim,
@NotNull final EntityDamageByEntityEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity shoots another entity with an arrow.
*
* @param attacker The shooter.
* @param victim The victim.
* @param arrow The arrow entity.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onArrowDamage(@NotNull final Player attacker,
@NotNull final LivingEntity victim,
@NotNull final Arrow arrow,
@NotNull final EntityDamageByEntityEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity damages another entity with a trident throw.
*
* @param attacker The shooter.
* @param victim The victim.
* @param trident The trident entity.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onTridentDamage(@NotNull final Player attacker,
@NotNull final LivingEntity victim,
@NotNull final Trident trident,
@NotNull final EntityDamageByEntityEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when a player jumps.
*
* @param player The player.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onJump(@NotNull final Player player,
@NotNull final PlayerMoveEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity attacks another entity with a melee attack.
*
* @param attacker The attacker.
* @param victim The victim.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onMeleeAttack(@NotNull final Player attacker,
@NotNull final LivingEntity victim,
@NotNull final EntityDamageByEntityEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity shoots a projectile.
*
* @param shooter The entity that shot the bow.
* @param projectile The projectile that was shot.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onProjectileLaunch(@NotNull final Player shooter,
@NotNull final Projectile projectile,
@NotNull final ProjectileLaunchEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity takes fall damage.
*
* @param faller The entity that took the fall damage.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onFallDamage(@NotNull final Player faller,
@NotNull final EntityDamageEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when a projectile hits a block or entity.
*
* @param shooter The entity that shot the arrow.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onProjectileHit(@NotNull final Player shooter,
@NotNull final ProjectileHitEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity kills another entity.
*
* @param killer The killer.
* @param victim The victim.
* @param event The event.
* @param config The effect config.
*/
default void onKill(@NotNull final Player killer,
@NotNull final LivingEntity victim,
@NotNull final EntityDeathByEntityEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity takes damage wearing armor.
*
* @param victim The entity that took damage.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onDamageWearingArmor(@NotNull final Player victim,
@NotNull final EntityDamageEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an entity throws a trident.
*
* @param shooter The entity that threw the trident.
* @param trident The trident that was thrown.
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onTridentLaunch(@NotNull final Player shooter,
@NotNull final Trident trident,
@NotNull final ProjectileLaunchEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
/**
* Called when an item takes durability damage.
*
* @param event The event that called this watcher.
* @param config The effect config.
*/
default void onDurabilityDamage(@NotNull final PlayerItemDamageEvent event,
@NotNull final JSONConfig config) {
// Empty default as effects only override required watchers.
}
}

View File

@@ -1,66 +0,0 @@
package com.willfp.reforges.vault;
import com.willfp.reforges.ReforgesPlugin;
import lombok.Setter;
import lombok.experimental.UtilityClass;
import net.milkbowl.vault.economy.Economy;
import org.black_ixx.playerpoints.PlayerPoints;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.util.concurrent.ExecutionException;
@UtilityClass
public final class EconomyHandler {
/**
* The instance.
*/
private static Economy instance = null;
@Setter
private static boolean usePlayerPoints = false;
@Setter
private static boolean enabled = false;
/**
* Initialize the economy manager.
*
* @return If was successful.
*/
public static boolean init() {
RegisteredServiceProvider<Economy> rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null) {
return false;
}
instance = rsp.getProvider();
return true;
}
public static Economy getInstance() {
return EconomyHandler.instance;
}
/**
* Get if a player has a specified amount.
*
* @param player The player.
* @param amount The amount.
* @return If a player has the amount.
*/
public static boolean has(Player player, double amount) {
if (usePlayerPoints && ReforgesPlugin.getInstance().getConfigYml().getBool("reforge.use-player-points")) {
try {
return PlayerPoints.getInstance().getAPI().lookAsync(player.getUniqueId()).get() >= amount;
} catch (ExecutionException | InterruptedException e) {
return false;
}
}
return getInstance().has(player, amount);
}
public static boolean isEnabled() {
return EconomyHandler.enabled;
}
}

View File

@@ -1,11 +1,10 @@
package com.willfp.reforges.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.CommandHandler
import com.willfp.eco.core.command.TabCompleteHandler
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.reforges.reforges.Reforges
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender
import org.bukkit.util.StringUtil
class CommandGive(
@@ -22,74 +21,71 @@ class CommandGive(
"64"
)
override fun getHandler(): CommandHandler {
return CommandHandler { sender, args ->
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return@CommandHandler
}
if (args.size == 1) {
sender.sendMessage(plugin.langYml.getMessage("needs-stone"))
return@CommandHandler
}
val amount = if (args.size > 2) args[2].toIntOrNull() ?: 1 else 1
val recieverName = args[0]
val reciever = Bukkit.getPlayer(recieverName)
if (reciever == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return@CommandHandler
}
val key = args[1]
val reforge = Reforges.getByKey(key)
if (reforge == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-stone"))
return@CommandHandler
}
var message = plugin.langYml.getMessage("give-success")
message = message.replace("%reforge%", reforge.name).replace("%recipient%", reciever.name)
sender.sendMessage(message)
val itemStack = reforge.stone
itemStack.amount = amount
reciever.inventory.addItem(itemStack)
override fun onExecute(sender: CommandSender, args: MutableList<String>) {
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return
}
if (args.size == 1) {
sender.sendMessage(plugin.langYml.getMessage("needs-stone"))
return
}
val amount = if (args.size > 2) args[2].toIntOrNull() ?: 1 else 1
val recieverName = args[0]
val reciever = Bukkit.getPlayer(recieverName)
if (reciever == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return
}
val key = args[1]
val reforge = Reforges.getByKey(key)
if (reforge == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-stone"))
return
}
var message = plugin.langYml.getMessage("give-success")
message = message.replace("%reforge%", reforge.name).replace("%recipient%", reciever.name)
sender.sendMessage(message)
val itemStack = reforge.stone
itemStack.amount = amount
reciever.inventory.addItem(itemStack)
}
override fun getTabCompleter(): TabCompleteHandler {
return TabCompleteHandler { _, args ->
val completions = mutableListOf<String>()
if (args.isEmpty()) {
// Currently, this case is not ever reached
return@TabCompleteHandler Reforges.values().filter { it.requiresStone }.map { it.id }
}
if (args.size == 1) {
StringUtil.copyPartialMatches(
args[0],
Bukkit.getOnlinePlayers().map { it.name },
completions
)
return@TabCompleteHandler completions
}
if (args.size == 2) {
StringUtil.copyPartialMatches(
args[1],
Reforges.values().filter { it.requiresStone }.map { it.id },
completions
)
completions.sort()
return@TabCompleteHandler completions
}
if (args.size == 3) {
StringUtil.copyPartialMatches(args[2], numbers, completions)
completions.sortWith { s1, s2 ->
val t1 = s1.toInt()
val t2 = s2.toInt()
t1 - t2
}
return@TabCompleteHandler completions
}
emptyList()
override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
val completions = mutableListOf<String>()
if (args.isEmpty()) {
// Currently, this case is not ever reached
return Reforges.values().filter { it.requiresStone }.map { it.id }
}
if (args.size == 1) {
StringUtil.copyPartialMatches(
args[0],
Bukkit.getOnlinePlayers().map { it.name },
completions
)
return completions
}
if (args.size == 2) {
StringUtil.copyPartialMatches(
args[1],
Reforges.values().filter { it.requiresStone }.map { it.id },
completions
)
completions.sort()
return completions
}
if (args.size == 3) {
StringUtil.copyPartialMatches(args[2], numbers, completions)
completions.sortWith { s1, s2 ->
val t1 = s1.toInt()
val t2 = s2.toInt()
t1 - t2
}
return completions
}
return emptyList()
}
}

View File

@@ -1,50 +1,45 @@
package com.willfp.reforges.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.CommandHandler
import com.willfp.eco.core.command.TabCompleteHandler
import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.reforges.gui.ReforgeGUI.menu
import org.bukkit.Bukkit
import org.bukkit.Sound
import org.bukkit.command.CommandSender
import org.bukkit.util.StringUtil
class CommandOpen(
plugin: EcoPlugin
) : PluginCommand(plugin, "open", "reforges.command.open", false) {
override fun getHandler(): CommandHandler {
return CommandHandler { sender, args ->
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return@CommandHandler
}
val player = Bukkit.getPlayer(args[0])
if (player == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return@CommandHandler
}
player.playSound(
player.location,
Sound.valueOf(plugin.configYml.getString("gui.open-sound.id").uppercase()),
1f,
plugin.configYml.getDouble("gui.open-sound.pitch").toFloat()
)
menu.open(player)
override fun onExecute(sender: CommandSender, args: List<String>) {
if (args.isEmpty()) {
sender.sendMessage(plugin.langYml.getMessage("needs-player"))
return
}
val player = Bukkit.getPlayer(args[0])
if (player == null) {
sender.sendMessage(plugin.langYml.getMessage("invalid-player"))
return
}
player.playSound(
player.location,
Sound.valueOf(plugin.configYml.getString("gui.open-sound.id").uppercase()),
1f,
plugin.configYml.getDouble("gui.open-sound.pitch").toFloat()
)
menu.open(player)
}
override fun getTabCompleter(): TabCompleteHandler {
return TabCompleteHandler { _, args ->
val completions = mutableListOf<String>()
if (args.size == 1) {
StringUtil.copyPartialMatches(
args[0],
Bukkit.getOnlinePlayers().map { it.name },
completions
)
return@TabCompleteHandler completions
}
emptyList()
override fun tabComplete(sender: CommandSender, args: List<String>): List<String> {
val completions = mutableListOf<String>()
if (args.size == 1) {
StringUtil.copyPartialMatches(
args[0],
Bukkit.getOnlinePlayers().map { it.name },
completions
)
return completions
}
return emptyList()
}
}

View File

@@ -1,25 +1,23 @@
package com.willfp.reforges.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.CommandHandler
import com.willfp.eco.core.command.impl.PluginCommand
import com.willfp.reforges.gui.ReforgeGUI.menu
import org.bukkit.Sound
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
class CommandReforge(
plugin: EcoPlugin
) : PluginCommand(plugin, "reforge", "reforges.command.reforge", true) {
override fun getHandler(): CommandHandler {
return CommandHandler { player, _ ->
player as Player
player.playSound(
player.location,
Sound.valueOf(plugin.configYml.getString("gui.open-sound.id").uppercase()),
1f,
plugin.configYml.getDouble("gui.open-sound.pitch").toFloat()
)
menu.open(player)
}
override fun onExecute(player: CommandSender, args: List<String>) {
player as Player
player.playSound(
player.location,
Sound.valueOf(plugin.configYml.getString("gui.open-sound.id").uppercase()),
1f,
plugin.configYml.getDouble("gui.open-sound.pitch").toFloat()
)
menu.open(player)
}
}

View File

@@ -1,16 +1,14 @@
package com.willfp.reforges.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.CommandHandler
import com.willfp.eco.core.command.impl.PluginCommand
import org.bukkit.command.CommandSender
class CommandReforges(plugin: EcoPlugin) : PluginCommand(plugin, "reforges", "reforges.command.reforges", false) {
override fun getHandler(): CommandHandler {
return CommandHandler { sender, _ ->
sender.sendMessage(
plugin.langYml.getMessage("invalid-command")
)
}
override fun onExecute(sender: CommandSender, args: List<String>) {
sender.sendMessage(
plugin.langYml.getMessage("invalid-command")
)
}
init {

View File

@@ -1,14 +1,15 @@
package com.willfp.reforges.commands
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.command.CommandHandler
import com.willfp.eco.core.command.impl.Subcommand
import com.willfp.eco.util.StringUtils
import org.bukkit.command.CommandSender
class CommandReload(plugin: EcoPlugin) : Subcommand(plugin, "reload", "reforges.command.reload", false) {
override fun getHandler(): CommandHandler {
return CommandHandler { sender, _ ->
plugin.reload()
sender.sendMessage(plugin.langYml.getMessage("reloaded"))
}
override fun onExecute(sender: CommandSender, args: List<String>) {
sender.sendMessage(
plugin.langYml.getMessage("reloaded", StringUtils.FormatOption.WITHOUT_PLACEHOLDERS)
.replace("%time%", plugin.reloadWithTime().toString())
)
}
}

View File

@@ -1,5 +0,0 @@
package com.willfp.reforges.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
data class ConfiguredCondition(val condition: Condition, val config: JSONConfig)

View File

@@ -1,48 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.attribute.Attribute
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.EntityRegainHealthEvent
class ConditionAboveHealthPercent: Condition("above_health_percent") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: EntityRegainHealthEvent) {
val player = event.entity
if (player !is Player) {
return
}
ReforgeLookup.updateReforges(player)
}
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: EntityDamageEvent) {
val player = event.entity
if (player !is Player) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
val maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH)?.value ?: return false
val health = player.health
return health / maxHealth * 100 >= config.getDouble("percent")
}
}

View File

@@ -1,30 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.entity.FoodLevelChangeEvent
class ConditionAboveHungerPercent : Condition("above_hunger_percent") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: FoodLevelChangeEvent) {
val player = event.entity
if (player !is Player) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return (player.foodLevel / 20) * 100 >= config.getDouble("percent")
}
}

View File

@@ -1,26 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerExpChangeEvent
class ConditionAboveXPLevel : Condition("above_xp_level") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerExpChangeEvent) {
val player = event.player
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.level >= config.getInt("level")
}
}

View File

@@ -1,29 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerMoveEvent
class ConditionAboveY: Condition("above_y") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerMoveEvent) {
val player = event.player
if (event.from.y == event.to.y) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.location.y >= config.getDouble("y")
}
}

View File

@@ -1,48 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.attribute.Attribute
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.EntityRegainHealthEvent
class ConditionBelowHealthPercent: Condition("below_health_percent") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: EntityRegainHealthEvent) {
val player = event.entity
if (player !is Player) {
return
}
ReforgeLookup.updateReforges(player)
}
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: EntityDamageEvent) {
val player = event.entity
if (player !is Player) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
val maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH)?.value ?: return false
val health = player.health
return health / maxHealth * 100 <= config.getDouble("percent")
}
}

View File

@@ -1,30 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.entity.FoodLevelChangeEvent
class ConditionBelowHungerPercent : Condition("below_hunger_percent") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: FoodLevelChangeEvent) {
val player = event.entity
if (player !is Player) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return (player.foodLevel / 20) * 100 <= config.getDouble("percent")
}
}

View File

@@ -1,26 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerExpChangeEvent
class ConditionBelowXPLevel: Condition("below_xp_level") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerExpChangeEvent) {
val player = event.player
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.level < config.getInt("level")
}
}

View File

@@ -1,29 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerMoveEvent
class ConditionBelowY: Condition("below_y") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerMoveEvent) {
val player = event.player
if (event.from.y == event.to.y) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.location.y < config.getDouble("y")
}
}

View File

@@ -1,12 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import org.bukkit.entity.Player
class ConditionHasPermission : Condition("is_sneaking") {
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.hasPermission(config.getString("permission"))
}
}

View File

@@ -1,25 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerMoveEvent
class ConditionInAir: Condition("in_air") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerMoveEvent) {
val player = event.player
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.location.block.isEmpty
}
}

View File

@@ -1,33 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerMoveEvent
class ConditionInBiome: Condition("in_biome") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerMoveEvent) {
val player = event.player
if (event.from.world?.getBiome(event.from) == event.to.world?.getBiome(event.to)) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return config.getStrings("biomes").contains(player.world.getBiome(
player.location.blockX,
player.location.blockY,
player.location.blockZ
).name.lowercase())
}
}

View File

@@ -1,29 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerMoveEvent
class ConditionInWater: Condition("in_water") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerMoveEvent) {
val player = event.player
if (event.from.world?.getBlockAt(event.from)?.type == event.to.world?.getBlockAt(event.to)?.type) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.isInWater
}
}

View File

@@ -1,29 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerMoveEvent
class ConditionInWorld: Condition("in_world") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerMoveEvent) {
val player = event.player
if (event.from.world == event.to.world) {
return
}
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.world.name.equals(config.getString("world"), ignoreCase = true)
}
}

View File

@@ -1,25 +0,0 @@
package com.willfp.reforges.conditions.conditions
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.conditions.Condition
import com.willfp.reforges.reforges.util.ReforgeLookup
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerToggleSneakEvent
class ConditionIsSneaking: Condition("is_sneaking") {
@EventHandler(
priority = EventPriority.MONITOR,
ignoreCancelled = true
)
fun handle(event: PlayerToggleSneakEvent) {
val player = event.player
ReforgeLookup.updateReforges(player)
}
override fun isConditionMet(player: Player, config: JSONConfig): Boolean {
return player.isSprinting
}
}

View File

@@ -14,7 +14,6 @@ import net.kyori.adventure.text.Component
import net.kyori.adventure.text.TextReplacementConfig
import net.kyori.adventure.text.format.TextDecoration
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer
import org.bukkit.Material
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.SkullMeta
import org.bukkit.persistence.PersistentDataType
@@ -39,24 +38,24 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
) {
val target = ReforgeTarget.getForItem(itemStack)
if (target == null && itemStack.type != Material.PLAYER_HEAD) {
val meta = itemStack.itemMeta ?: return
val stone = ReforgeUtils.getReforgeStone(meta)
if (target.isEmpty() && stone == null) {
return
}
val meta = itemStack.itemMeta ?: return
val fastItemStack = FastItemStack.wrap(itemStack)
val lore = fastItemStack.lore
val reforge = ReforgeUtils.getReforge(meta)
val stone = ReforgeUtils.getReforgeStone(meta)
if (reforge == null && stone == null && target != null) {
if (plugin.configYml.getBool("reforge.show-reforgable")) {
val addLore: MutableList<String> = ArrayList()
for (string in plugin.configYml.getStrings("reforge.reforgable-suffix")) {
for (string in plugin.configYml.getFormattedStrings("reforge.reforgable-suffix")) {
addLore.add(Display.PREFIX + string)
}
lore.addAll(addLore)
@@ -64,16 +63,22 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
}
if (stone != null) {
meta.setDisplayName(plugin.configYml.getString("reforge.stone.name").replace("%reforge%", stone.name))
if (stone.config.has("stone.texture") && stone.config.getString("stone.texture").isNotEmpty()) {
SkullUtils.setSkullTexture(
meta as SkullMeta,
stone.config.getString("stone.texture")
)
meta.setDisplayName(stone.config.getFormattedString("stone.name"))
val stoneMeta = stone.stone.itemMeta
if (stoneMeta is SkullMeta) {
val stoneTexture = SkullUtils.getSkullTexture(stoneMeta)
if (stoneTexture != null) {
try {
SkullUtils.setSkullTexture(meta as SkullMeta, stoneTexture)
} catch (e: StringIndexOutOfBoundsException) {
// Do nothing
}
}
}
itemStack.itemMeta = meta
val stoneLore = plugin.configYml.getStrings("reforge.stone.lore").map {
"${Display.PREFIX}${it.replace("%reforge%", stone.name)}"
val stoneLore = stone.config.getFormattedStrings("stone.lore").map {
"${Display.PREFIX}$it"
}.toList()
lore.addAll(0, stoneLore)
}

View File

@@ -1,5 +0,0 @@
package com.willfp.reforges.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
data class ConfiguredEffect(val effect: Effect, val config: JSONConfig)

View File

@@ -1,29 +0,0 @@
@file:JvmName("PlayerEffectStack")
package com.willfp.reforges.effects
import org.bukkit.entity.Player
import java.util.*
private val effectStack = mutableMapOf<UUID, MutableMap<Effect, Int>>()
fun Player.pushEffect(effect: Effect) {
val stack = effectStack[this.uniqueId] ?: mutableMapOf()
var amount = stack[effect] ?: 0
amount++
stack[effect] = amount
effectStack[this.uniqueId] = stack
}
fun Player.popEffect(effect: Effect) {
val stack = effectStack[this.uniqueId] ?: mutableMapOf()
var amount = stack[effect] ?: 0
amount--
stack[effect] = if (amount < 0) 0 else amount
effectStack[this.uniqueId] = stack
}
fun Player.getEffectAmount(effect: Effect): Int {
val stack = effectStack[this.uniqueId] ?: mutableMapOf()
return stack[effect] ?: 0
}

View File

@@ -1,36 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import com.willfp.reforges.effects.getEffectAmount
import org.bukkit.attribute.Attribute
import org.bukkit.attribute.AttributeModifier
import org.bukkit.entity.Player
class EffectAttackSpeedMultiplier : Effect("attack_speed_multiplier") {
override fun handleEnable(player: Player, config: JSONConfig) {
val attribute = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED) ?: return
val uuid = this.getUUID(player.getEffectAmount(this))
attribute.removeModifier(AttributeModifier(uuid, this.id, 0.0, AttributeModifier.Operation.MULTIPLY_SCALAR_1))
attribute.addModifier(
AttributeModifier(
uuid,
this.id,
config.getDouble("multiplier") - 1,
AttributeModifier.Operation.MULTIPLY_SCALAR_1
)
)
}
override fun handleDisable(player: Player) {
val attribute = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED) ?: return
attribute.removeModifier(
AttributeModifier(
this.getUUID(player.getEffectAmount(this)),
this.id,
0.0,
AttributeModifier.Operation.MULTIPLY_SCALAR_1
)
)
}
}

View File

@@ -1,21 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Player
import org.bukkit.event.entity.EntityDamageByEntityEvent
class EffectCritMultiplier : Effect("crit_multiplier") {
override fun onAnyDamage(
attacker: Player,
victim: LivingEntity,
event: EntityDamageByEntityEvent,
config: JSONConfig
) {
if (attacker.velocity.y >= 0) {
return
}
event.damage *= config.getDouble("multiplier")
}
}

View File

@@ -1,18 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Player
import org.bukkit.event.entity.EntityDamageByEntityEvent
class EffectDamageMultiplier : Effect("damage_multiplier") {
override fun onAnyDamage(
attacker: Player,
victim: LivingEntity,
event: EntityDamageByEntityEvent,
config: JSONConfig
) {
event.damage *= config.getDouble("multiplier")
}
}

View File

@@ -1,30 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.eco.util.NumberUtils
import com.willfp.reforges.effects.Effect
import org.bukkit.event.player.PlayerItemDamageEvent
import kotlin.math.ceil
class EffectDurabilityMultiplier : Effect("durability_multiplier") {
override fun onDurabilityDamage(
event: PlayerItemDamageEvent,
config: JSONConfig
) {
val multiplier = config.getDouble("multiplier")
if (multiplier == 0.0) {
event.isCancelled = true
return
}
if (multiplier < 1) {
event.damage *= ceil(1 / multiplier).toInt()
return
}
val chance = 1 - (1 / multiplier)
if (NumberUtils.randFloat(0.0, 1.0) < chance) {
event.isCancelled = true
}
}
}

View File

@@ -1,16 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import org.bukkit.entity.Player
import org.bukkit.event.entity.EntityDamageEvent
class EffectIncomingDamageMultiplier : Effect("incoming_damage_multiplier") {
override fun onDamageWearingArmor(
victim: Player,
event: EntityDamageEvent,
config: JSONConfig
) {
event.damage *= config.getDouble("multiplier")
}
}

View File

@@ -1,39 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import com.willfp.reforges.effects.getEffectAmount
import org.bukkit.attribute.Attribute
import org.bukkit.attribute.AttributeModifier
import org.bukkit.entity.Player
class EffectKnockbackMultiplier : Effect("knockback_multiplier") {
override fun handleEnable(
player: Player,
config: JSONConfig
) {
val attribute = player.getAttribute(Attribute.GENERIC_ATTACK_KNOCKBACK) ?: return
val uuid = this.getUUID(player.getEffectAmount(this))
attribute.removeModifier(AttributeModifier(uuid, this.id, 0.0, AttributeModifier.Operation.MULTIPLY_SCALAR_1))
attribute.addModifier(
AttributeModifier(
uuid,
this.id,
config.getDouble("multiplier") - 1,
AttributeModifier.Operation.MULTIPLY_SCALAR_1
)
)
}
override fun handleDisable(player: Player) {
val attribute = player.getAttribute(Attribute.GENERIC_ATTACK_KNOCKBACK) ?: return
attribute.removeModifier(
AttributeModifier(
this.getUUID(player.getEffectAmount(this)),
this.id,
0.0,
AttributeModifier.Operation.MULTIPLY_SCALAR_1
)
)
}
}

View File

@@ -1,39 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import com.willfp.reforges.effects.getEffectAmount
import org.bukkit.attribute.Attribute
import org.bukkit.attribute.AttributeModifier
import org.bukkit.entity.Player
class EffectMovementSpeedMultiplier : Effect("movement_speed_multiplier") {
override fun handleEnable(
player: Player,
config: JSONConfig
) {
val attribute = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED) ?: return
val uuid = this.getUUID(player.getEffectAmount(this))
attribute.removeModifier(AttributeModifier(uuid, this.id, 0.0, AttributeModifier.Operation.MULTIPLY_SCALAR_1))
attribute.addModifier(
AttributeModifier(
uuid,
this.id,
config.getDouble("multiplier") - 1,
AttributeModifier.Operation.MULTIPLY_SCALAR_1
)
)
}
override fun handleDisable(player: Player) {
val attribute = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED) ?: return
attribute.removeModifier(
AttributeModifier(
this.getUUID(player.getEffectAmount(this)),
this.id,
0.0,
AttributeModifier.Operation.MULTIPLY_SCALAR_1
)
)
}
}

View File

@@ -1,21 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import com.willfp.reforges.vault.EconomyHandler
import org.bukkit.block.Block
import org.bukkit.entity.Player
import org.bukkit.event.block.BlockBreakEvent
class EffectRewardBlockBreak : Effect("reward_block_break") {
override fun onBlockBreak(
player: Player,
block: Block,
event: BlockBreakEvent,
config: JSONConfig
) {
if (EconomyHandler.isEnabled()) {
EconomyHandler.getInstance().depositPlayer(player, config.getDouble("amount"))
}
}
}

View File

@@ -1,19 +0,0 @@
package com.willfp.reforges.effects.effects
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.eco.core.events.EntityDeathByEntityEvent
import com.willfp.reforges.effects.Effect
import com.willfp.reforges.vault.EconomyHandler
import org.bukkit.entity.LivingEntity
import org.bukkit.entity.Player
class EffectRewardKill : Effect("reward_kill") {
override fun onKill(killer: Player,
victim: LivingEntity,
event: EntityDeathByEntityEvent,
config: JSONConfig) {
if (EconomyHandler.isEnabled()) {
EconomyHandler.getInstance().depositPlayer(killer, config.getDouble("amount"))
}
}
}

View File

@@ -64,8 +64,8 @@ object ReforgeGUI {
previous.type = Material.getMaterial(
plugin.configYml.getString("gui.invalid-item.material").uppercase()
)!!
meta.setDisplayName(plugin.configYml.getString("gui.invalid-item.name"))
meta.lore = plugin.configYml.getStrings("gui.invalid-item.lore").map {
meta.setDisplayName(plugin.configYml.getFormattedString("gui.invalid-item.name"))
meta.lore = plugin.configYml.getFormattedStrings("gui.invalid-item.lore").map {
it.replace("%cost%", NumberUtils.format(cost))
.replace("%xpcost%", NumberUtils.format(xpCost.toDouble()))
}
@@ -74,8 +74,8 @@ object ReforgeGUI {
previous.type = Material.getMaterial(
plugin.configYml.getString("gui.allow.material").uppercase()
)!!
meta.setDisplayName(plugin.configYml.getString("gui.allow.name"))
meta.lore = plugin.configYml.getStrings("gui.allow.lore").map {
meta.setDisplayName(plugin.configYml.getFormattedString("gui.allow.name"))
meta.lore = plugin.configYml.getFormattedStrings("gui.allow.lore").map {
it.replace("%cost%", NumberUtils.format(cost))
.replace("%xpcost%", NumberUtils.format(xpCost.toDouble()))
}
@@ -84,8 +84,8 @@ object ReforgeGUI {
previous.type = Material.getMaterial(
plugin.configYml.getString("gui.allow-stone.material").uppercase()
)!!
meta.setDisplayName(plugin.configYml.getString("gui.allow-stone.name"))
meta.lore = plugin.configYml.getStrings("gui.allow-stone.lore").map {
meta.setDisplayName(plugin.configYml.getFormattedString("gui.allow-stone.name"))
meta.lore = plugin.configYml.getFormattedStrings("gui.allow-stone.lore").map {
it.replace("%cost%", NumberUtils.format(cost))
.replace("%xpcost%", NumberUtils.format(xpCost.toDouble()))
.replace("%stone%", ReforgeUtils.getReforgeStone(menu.getCaptiveItems(player)[1]).name)
@@ -95,8 +95,8 @@ object ReforgeGUI {
previous.type = Material.getMaterial(
plugin.configYml.getString("gui.no-item.material").uppercase()
)!!
meta.setDisplayName(plugin.configYml.getString("gui.no-item.name"))
meta.lore = plugin.configYml.getStrings("gui.no-item.lore").map {
meta.setDisplayName(plugin.configYml.getFormattedString("gui.no-item.name"))
meta.lore = plugin.configYml.getFormattedStrings("gui.no-item.lore").map {
it.replace("%cost%", NumberUtils.format(cost))
.replace("%xpcost%", NumberUtils.format(xpCost.toDouble()))
}
@@ -122,7 +122,7 @@ object ReforgeGUI {
Material.getMaterial(plugin.configYml.getString("gui.close.material", false).toUpperCase())!!
menu = Menu.builder(plugin.configYml.getInt("gui.rows")).apply {
setTitle(plugin.langYml.getString("menu.title"))
setTitle(plugin.langYml.getFormattedString("menu.title"))
setMask(FillerMask(MaskMaterials(*maskMaterials), *maskPattern))
modfiy { builder ->
val slot = Slot.builder(
@@ -173,7 +173,7 @@ object ReforgeGUI {
plugin.configYml.getInt("gui.close.location.column"),
Slot.builder(
ItemStackBuilder(closeMaterial)
.setDisplayName(plugin.langYml.getString("menu.close"))
.setDisplayName(plugin.langYml.getFormattedString("menu.close"))
.build()
).onLeftClick { event, _, _ ->
event.whoClicked.closeInventory()

View File

@@ -1,17 +0,0 @@
package com.willfp.reforges.integrations.aureliumskills
import com.willfp.eco.core.integrations.Integration
import com.willfp.reforges.effects.Effect
object AureliumSkillsIntegration : Integration {
private lateinit var ADD_STAT: Effect
@JvmStatic
fun load() {
ADD_STAT = EffectAddStat()
}
override fun getPluginName(): String {
return "AureliumSkills"
}
}

View File

@@ -1,29 +0,0 @@
package com.willfp.reforges.integrations.aureliumskills
import com.archyx.aureliumskills.api.AureliumAPI
import com.archyx.aureliumskills.stats.Stats
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.reforges.effects.Effect
import com.willfp.reforges.effects.getEffectAmount
import org.bukkit.entity.Player
class EffectAddStat : Effect("add_stat") {
override fun handleEnable(
player: Player,
config: JSONConfig
) {
AureliumAPI.addStatModifier(
player,
this.getNamespacedKey(player.getEffectAmount(this)).key,
Stats.valueOf(config.getString("stat", false)),
config.getDouble("amount")
)
}
override fun handleDisable(player: Player) {
AureliumAPI.removeStatModifier(
player,
this.getNamespacedKey(player.getEffectAmount(this)).key,
)
}
}

View File

@@ -1,17 +0,0 @@
package com.willfp.reforges.integrations.ecoskills
import com.willfp.eco.core.integrations.Integration
import com.willfp.reforges.effects.Effect
object EcoSkillsIntegration : Integration {
private lateinit var ADD_STAT: Effect
@JvmStatic
fun load() {
ADD_STAT = EffectAddStat()
}
override fun getPluginName(): String {
return "EcoSkills"
}
}

View File

@@ -1,39 +0,0 @@
package com.willfp.reforges.integrations.ecoskills
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.ecoskills.api.EcoSkillsAPI
import com.willfp.ecoskills.api.modifier.PlayerStatModifier
import com.willfp.ecoskills.stats.Stats
import com.willfp.reforges.effects.Effect
import com.willfp.reforges.effects.getEffectAmount
import org.bukkit.Bukkit
import org.bukkit.entity.Player
class EffectAddStat : Effect("add_stat") {
private val api = EcoSkillsAPI.getInstance()
override fun handleEnable(
player: Player,
config: JSONConfig
) {
api.addStatModifier(
player,
PlayerStatModifier(
this.getNamespacedKey(player.getEffectAmount(this)),
Stats.getByID(config.getString("stat", false)) ?: Stats.WISDOM,
config.getInt("amount")
)
)
}
override fun handleDisable(player: Player) {
api.removeStatModifier(
player,
PlayerStatModifier(
this.getNamespacedKey(player.getEffectAmount(this)),
Stats.STRENGTH,
0
)
)
}
}

View File

@@ -1,38 +0,0 @@
package com.willfp.reforges.integrations.ultimateskills
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.eco.util.NumberUtils
import com.willfp.reforges.ReforgesPlugin
import com.willfp.reforges.effects.Effect
import mc.ultimatecore.skills.HyperSkills
import mc.ultimatecore.skills.objects.abilities.Ability
import org.bukkit.entity.Player
import org.bukkit.persistence.PersistentDataType
class EffectAddAbility : Effect("add_ultimateskills_ability") {
override fun handleEnable(
player: Player,
config: JSONConfig
) {
HyperSkills.getInstance().api.addAbility(
player.uniqueId,
Ability.valueOf(config.getString("ability", false)),
config.getDouble("amount")
)
player.persistentDataContainer.set(
ReforgesPlugin.getInstance().namespacedKeyFactory.create("addAbility"), PersistentDataType.STRING,
NumberUtils.format(config.getDouble("amount")) + "::" + config.getString("ability", false)
)
}
override fun handleDisable(player: Player) {
player.persistentDataContainer.get(ReforgesPlugin.getInstance().namespacedKeyFactory.create("addAbility"), PersistentDataType.STRING)
?.let {
HyperSkills.getInstance().api.removeAbility(
player.uniqueId,
Ability.valueOf(it.split("::")[1]),
it.split("::")[0].toDouble()
)
}
}
}

View File

@@ -1,37 +0,0 @@
package com.willfp.reforges.integrations.ultimateskills
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.eco.util.NumberUtils
import com.willfp.reforges.ReforgesPlugin
import com.willfp.reforges.effects.Effect
import mc.ultimatecore.skills.HyperSkills
import mc.ultimatecore.skills.objects.perks.Perk
import org.bukkit.entity.Player
import org.bukkit.persistence.PersistentDataType
class EffectAddPerk : Effect("add_ultimateskills_perk") {
override fun handleEnable(
player: Player,
config: JSONConfig
) {
HyperSkills.getInstance().api.addPerk(
player.uniqueId,
Perk.valueOf(config.getString("perk", false)),
config.getDouble("amount")
)
player.persistentDataContainer.set(ReforgesPlugin.getInstance().namespacedKeyFactory.create("addPerk"), PersistentDataType.STRING,
NumberUtils.format(config.getDouble("amount")) + "::" + config.getString("perk", false)
)
}
override fun handleDisable(player: Player) {
player.persistentDataContainer.get(ReforgesPlugin.getInstance().namespacedKeyFactory.create("addPerk"), PersistentDataType.STRING)
?.let {
HyperSkills.getInstance().api.removePerk(
player.uniqueId,
Perk.valueOf(it.split("::")[1]),
it.split("::")[0].toDouble()
)
}
}
}

View File

@@ -1,19 +0,0 @@
package com.willfp.reforges.integrations.ultimateskills
import com.willfp.eco.core.integrations.Integration
import com.willfp.reforges.effects.Effect
object UltimateSkillsIntegration : Integration {
private lateinit var ADD_PERK: Effect
private lateinit var ADD_ABILITY: Effect
@JvmStatic
fun load() {
ADD_PERK = EffectAddPerk()
ADD_ABILITY = EffectAddAbility()
}
override fun getPluginName(): String {
return "UltimateSkills"
}
}

View File

@@ -1,52 +1,48 @@
package com.willfp.reforges.reforges
import com.willfp.eco.core.config.interfaces.JSONConfig
import com.willfp.eco.core.config.interfaces.Config
import com.willfp.eco.core.display.Display
import com.willfp.eco.core.items.CustomItem
import com.willfp.eco.core.items.builder.SkullBuilder
import com.willfp.eco.core.items.Items
import com.willfp.eco.core.items.builder.ItemStackBuilder
import com.willfp.eco.core.recipe.Recipes
import com.willfp.libreforge.Holder
import com.willfp.libreforge.conditions.Conditions
import com.willfp.libreforge.effects.Effects
import com.willfp.reforges.ReforgesPlugin
import com.willfp.reforges.conditions.Conditions
import com.willfp.reforges.conditions.ConfiguredCondition
import com.willfp.reforges.effects.ConfiguredEffect
import com.willfp.reforges.effects.Effects
import com.willfp.reforges.reforges.meta.ReforgeTarget
import com.willfp.reforges.reforges.util.ReforgeUtils
import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack
import java.util.*
@Suppress("DEPRECATION")
class Reforge(
internal val config: JSONConfig,
private val plugin: ReforgesPlugin
) {
internal val config: Config,
plugin: ReforgesPlugin
) : Holder {
val id = config.getString("id")
val name = config.getString("name")
val name = config.getFormattedString("name")
val description: List<String> = config.getStrings("description")
val description: List<String> = config.getFormattedStrings("description")
val targets = config.getStrings("targets").map { ReforgeTarget.getByName(it) }.toSet()
val effects = config.getSubsections("effects").map {
val effect = Effects.getByID(it.getString("id")) ?: return@map null
ConfiguredEffect(effect, it)
}.filterNotNull().toSet()
override val effects = config.getSubsections("effects").mapNotNull {
Effects.compile(it, "Reforge ID $id")
}.toSet()
val conditions = config.getSubsections("conditions").map {
val condition = Conditions.getByID(it.getString("id")) ?: return@map null
ConfiguredCondition(condition, it)
}.filterNotNull().toSet()
override val conditions = config.getSubsections("conditions").mapNotNull {
Conditions.compile(it, "Reforge ID $id")
}.toSet()
val requiresStone = config.getBool("stone.enabled")
val stone: ItemStack = SkullBuilder().apply {
val stone: ItemStack = ItemStackBuilder(Items.lookup(config.getString("stone.item")).item).apply {
if (config.getBool("stone.enabled")) {
setSkullTexture(config.getString("stone.texture"))
setDisplayName(plugin.configYml.getString("reforge.stone.name").replace("%reforge%", name))
setDisplayName(config.getFormattedString("stone.name").replace("%reforge%", name))
addLoreLines(
plugin.configYml.getStrings("stone.lore").map { "${Display.PREFIX}${it.replace("%reforge%", name)}" })
config.getFormattedStrings("stone.lore").map { "${Display.PREFIX}${it.replace("%reforge%", name)}" })
}
}.build()
@@ -59,31 +55,21 @@ class Reforge(
Display.display(stone)
CustomItem(
plugin.namespacedKeyFactory.create("stone_" + this.id),
{ test -> ReforgeUtils.getReforgeStone(test) == this },
stone
).register()
if (config.getBool("stone.enabled")) {
CustomItem(
plugin.namespacedKeyFactory.create("stone_" + this.id),
{ test -> ReforgeUtils.getReforgeStone(test) == this },
stone
).register()
if (config.getBool("stone.craftable") && config.getBool("stone.enabled")) {
Recipes.createAndRegisterRecipe(
plugin,
"stone_" + this.id,
stone,
config.getStrings("stone.recipe", false)
)
}
}
fun handleActivation(player: Player) {
for ((effect, config) in this.effects) {
effect.handleEnabling(player, config)
}
}
fun handleDeactivation(player: Player) {
for ((effect, _) in this.effects) {
effect.handleDisabling(player)
if (config.getBool("stone.craftable")) {
Recipes.createAndRegisterRecipe(
plugin,
"stone_" + this.id,
stone,
config.getStrings("stone.recipe", false)
)
}
}
}

View File

@@ -1,388 +0,0 @@
package com.willfp.reforges.reforges.util
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.events.EntityDeathByEntityEvent
import com.willfp.eco.core.events.PlayerJumpEvent
import com.willfp.eco.core.integrations.antigrief.AntigriefManager
import com.willfp.eco.core.integrations.mcmmo.McmmoManager
import com.willfp.eco.util.NumberUtils
import com.willfp.reforges.events.EffectActivateEvent
import org.bukkit.entity.*
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.block.BlockBreakEvent
import org.bukkit.event.entity.EntityDamageByEntityEvent
import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.ProjectileHitEvent
import org.bukkit.event.entity.ProjectileLaunchEvent
import org.bukkit.event.player.PlayerItemDamageEvent
class WatcherTriggers(
private val plugin: EcoPlugin
) : Listener {
@EventHandler(ignoreCancelled = true)
fun onBlockBreak(event: BlockBreakEvent) {
if (McmmoManager.isFake(event)) {
return
}
val player = event.player
val block = event.block
if (!AntigriefManager.canBreakBlock(player, block)) {
return
}
for (reforge in ReforgeLookup.provideReforges(player)) {
for ((key, value) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (value.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(player, reforge, key)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
key.onBlockBreak(player, block, event, value)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onArrowDamage(event: EntityDamageByEntityEvent) {
if (McmmoManager.isFake(event)) {
return
}
val arrow = event.damager
val victim = event.entity
if (arrow !is Arrow) {
return
}
if (victim !is LivingEntity) {
return
}
val shooter = arrow.shooter
if (shooter !is Player) {
return
}
if (!AntigriefManager.canInjure(shooter, victim)) {
return
}
if (event.isCancelled) {
return
}
for (reforge in ReforgeLookup.provideReforges(shooter)) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(shooter, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onArrowDamage(shooter, victim, arrow, event, config)
effect.onAnyDamage(shooter, victim, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onTridentDamage(event: EntityDamageByEntityEvent) {
if (McmmoManager.isFake(event)) {
return
}
val trident = event.damager
val victim = event.entity
if (trident !is Trident) {
return
}
if (victim !is LivingEntity) {
return
}
val shooter = trident.shooter
if (shooter !is Player) {
return
}
val item = trident.item
if (!AntigriefManager.canInjure(shooter, victim)) {
return
}
if (event.isCancelled) {
return
}
val tridentReforge = ReforgeUtils.getReforge(item)
val add = if (tridentReforge == null) emptyList() else listOf(tridentReforge)
for (reforge in ReforgeLookup.provideReforges(shooter) union add) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(shooter, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onTridentDamage(shooter, victim, trident, event, config)
effect.onAnyDamage(shooter, victim, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onJump(event: PlayerJumpEvent) {
if (McmmoManager.isFake(event)) {
return
}
val player = event.player
for (reforge in ReforgeLookup.provideReforges(player)) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(player, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onJump(player, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onMeleeAttack(event: EntityDamageByEntityEvent) {
if (McmmoManager.isFake(event)) {
return
}
val attacker = event.damager
if (attacker !is Player) {
return
}
val victim = event.entity
if (victim !is LivingEntity) {
return
}
if (event.isCancelled) {
return
}
if (event.cause == EntityDamageEvent.DamageCause.THORNS) {
return
}
if (!AntigriefManager.canInjure(attacker, victim)) {
return
}
for (reforge in ReforgeLookup.provideReforges(attacker)) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(attacker, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onMeleeAttack(attacker, victim, event, config)
effect.onAnyDamage(attacker, victim, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onKill(event: EntityDeathByEntityEvent) {
if (McmmoManager.isFake(event)) {
return
}
var killer: Any? = null
if (event.killer is Player) {
killer = event.killer
} else if (event.killer is Projectile) {
if ((event.killer as Projectile).shooter is Player) {
killer = (event.killer as Projectile).shooter
}
}
if (killer !is Player) {
return
}
val victim = event.victim
if (!AntigriefManager.canInjure(killer, victim)) {
return
}
val trident = if (event.killer is Trident) (event.killer as Trident).item else null
val tridentReforge = if (trident == null) null else ReforgeUtils.getReforge(trident)
val add = if (tridentReforge == null) emptyList() else listOf(tridentReforge)
for (reforge in ReforgeLookup.provideReforges(killer) union add) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(killer, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
(effect as Watcher).onKill(killer, victim, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onProjectileLaunch(event: ProjectileLaunchEvent) {
if (McmmoManager.isFake(event)) {
return
}
val shooter = event.entity.shooter
if (shooter !is Player) {
return
}
for (reforge in ReforgeLookup.provideReforges(shooter)) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(shooter, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onProjectileLaunch(shooter, event.entity, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onFallDamage(event: EntityDamageEvent) {
if (McmmoManager.isFake(event)) {
return
}
if (event.cause != EntityDamageEvent.DamageCause.FALL) {
return
}
val victim = event.entity
if (victim !is Player) {
return
}
for (reforge in ReforgeLookup.provideReforges(victim)) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(victim, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onFallDamage(victim, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onProjectileHit(event: ProjectileHitEvent) {
if (McmmoManager.isFake(event)) {
return
}
val projectile = event.entity
val shooter = projectile.shooter
if (shooter !is Player) {
return
}
val trident = if (projectile is Trident) projectile.item else null
val tridentReforge = if (trident == null) null else ReforgeUtils.getReforge(trident)
val add = if (tridentReforge == null) emptyList() else listOf(tridentReforge)
for (reforge in ReforgeLookup.provideReforges(shooter) union add) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(shooter, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onProjectileHit(shooter, event, config)
}
}
}
}
@EventHandler(ignoreCancelled = true)
fun onDurabilityDamage(event: PlayerItemDamageEvent) {
if (McmmoManager.isFake(event)) {
return
}
val item = event.item
val reforge = ReforgeUtils.getReforge(item) ?: return
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(event.player, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onDurabilityDamage(event, config)
}
}
}
@EventHandler(ignoreCancelled = true)
fun onDamageWearingArmor(event: EntityDamageEvent) {
if (McmmoManager.isFake(event)) {
return
}
val victim = event.entity
if (victim !is Player) {
return
}
for (reforge in ReforgeLookup.provideReforges(victim)) {
for ((effect, config) in reforge.effects) {
if (NumberUtils.randFloat(0.0, 100.0) > (config.getDoubleOrNull("chance") ?: 100.0)) {
continue
}
val aEvent = EffectActivateEvent(victim, reforge, effect)
this.plugin.server.pluginManager.callEvent(aEvent)
if (!aEvent.isCancelled) {
effect.onDamageWearingArmor(victim, event, config)
}
}
}
}
}

View File

@@ -135,9 +135,16 @@ reforge:
display-in-lore: true
display-in-name: true # Requires paper to be installed on the server
stone:
name: "%reforge%&f Reforge Stone"
lore:
- "&7Place on the right of the"
- "&7reforge menu to apply the"
- "%reforge%&7 reforge!"
cooldown:
in-actionbar: true
sound:
enabled: true
sound: "BLOCK_NOTE_BLOCK_PLING"
pitch: 0.5
cannot-afford:
in-actionbar: true
sound:
enabled: true
sound: "BLOCK_NOTE_BLOCK_PLING"
pitch: 0.5

View File

@@ -3,7 +3,7 @@ messages:
no-permission: "&cYou don't have permission to do this!"
not-player: "&cThis command must be run by a player"
invalid-command: "&cUnknown subcommand!"
reloaded: "Reloaded! (Restart if you're removed reforges!)"
reloaded: "Reloaded! (Restart if you're removed reforges!) Took %time%ms"
insufficient-money: "&cYou don't have enough money for this!"
insufficient-xp: "&cYou don't have enough xp levels for this!"
applied-reforge: "Applied %reforge%&r reforge!"
@@ -12,6 +12,8 @@ messages:
needs-stone: "&cYou must specify a reforge stone"
invalid-stone: "&cInvalid reforge!"
give-success: "Gave &a%reforge%&r reforge stone to &a%recipient%"
on-cooldown: "&cThis reforge is on cooldown! &fTime left: &a%seconds% seconds"
cannot-afford: "&cYou can't afford to do this! &fCost: &a$$%cost%"
menu:
title: "Reforge Item"

View File

@@ -14,8 +14,9 @@ softdepend:
- Talismans
- AureliumSkills
- PlayerPoints
- Jobs
libraries:
- 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21'
- 'org.jetbrains.kotlin:kotlin-stdlib:1.6.0'
commands:
reforges:

View File

@@ -1,473 +0,0 @@
{
"reforges": [
{
"id": "acute",
"name": "<gradient:#4776E6>Acute</gradient:#8E54E9>",
"description": [
"&a+2% &fTriple Damage Chance"
],
"targets": [
"axe"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 3,
"chance": 2
}
],
"conditions": []
},
{
"id": "aerobic",
"name": "<gradient:#B993D6>Aerobic</gradient:#8CA6DB>",
"description": [
"&a+9% &fDamage when shot in air"
],
"targets": [
"bow"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 1.09
}
],
"conditions": [
{
"id": "in_air"
}
]
},
{
"id": "durable",
"name": "<gradient:#0EA3C3>Durable</gradient:#0BCBC8>",
"description": [
"&a+15% &fMore durability"
],
"targets": [
"all"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "durability_multiplier",
"multiplier": 1.15
}
],
"conditions": [
]
},
{
"id": "dynamic",
"name": "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>",
"description": [
"&a+5% &fDamage",
"&a+10% &fCrit Damage"
],
"targets": [
"melee"
],
"stone": {
"enabled": true,
"texture": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmM0YTY1YzY4OWIyZDM2NDA5MTAwYTYwYzJhYjhkM2QwYTY3Y2U5NGVlYTNjMWY3YWM5NzRmZDg5MzU2OGI1ZCJ9fX0=",
"craftable": true,
"recipe": [
"air",
"ecoitems:blank_reforge_stone ? air",
"air",
"iron_block",
"daylight_sensor",
"iron_block",
"air",
"phantom_membrane",
"air"
]
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 1.05
},
{
"id": "crit_multiplier",
"multiplier": 1.10
}
],
"conditions": [
]
},
{
"id": "evasive",
"name": "<gradient:#EFEFBB>Evasive</gradient:#D4D3DD>",
"description": [
"&a+2% &fIgnore Damage Chance"
],
"targets": [
"armor"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "incoming_damage_multiplier",
"multiplier": 0,
"chance": 2
}
],
"conditions": [
]
},
{
"id": "gravitated",
"name": "<gradient:#1e3c72>Gravitated</gradient:#2a5298>",
"description": [
"&a+8% &fCritical Damage"
],
"targets": [
"melee"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "crit_multiplier",
"multiplier": 1.08
}
],
"conditions": [
]
},
{
"id": "light",
"name": "<gradient:#1c92d2>Light</gradient:#f2fcfe>",
"description": [
"&c-5% &fDamage",
"&c-5% &fKnockback",
"&a+10% &fAttack Speed"
],
"targets": [
"melee"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 0.95
},
{
"id": "knockback_multiplier",
"multiplier": 0.95
},
{
"id": "attack_speed_multiplier",
"multiplier": 1.1
}
],
"conditions": [
]
},
{
"id": "nautical",
"name": "<gradient:#373B44>Nautical</gradient:#4286f4>",
"description": [
"&a+20% &fDamage in water"
],
"targets": [
"melee",
"bow",
"trident"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 1.2
}
],
"conditions": [
{
"id": "in_water"
}
]
},
{
"id": "pointy",
"name": "<gradient:#076585>Pointy</gradient:#ffffff>",
"description": [
"&a+10% &fDamage"
],
"targets": [
"trident"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 1.1
}
],
"conditions": [
]
},
{
"id": "prospecting",
"name": "<gradient:#00B4DB>Prospecting</gradient:#0083B0>",
"description": [
"&a+5% &fChance to get &e\u00242&f for mining a block"
],
"targets": [
"pickaxe"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "reward_block_break",
"amount": 2,
"chance": 5
}
],
"conditions": [
]
},
{
"id": "reinforced",
"name": "<gradient:#FBD786>Reinforced</gradient:#f7797d>",
"description": [
"&a+4% &fDamage Resistance"
],
"targets": [
"armor"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "incoming_damage_multiplier",
"multiplier": 0.96
}
],
"conditions": [
]
},
{
"id": "rich",
"name": "<gradient:#DBDBDB>Rich</gradient:#F2F2F2>",
"description": [
"&a+\u002450 &fFor each mob kill"
],
"targets": [
"trident",
"bow"
],
"stone": {
"enabled": true,
"texture": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2RjNTdjNzVhZGYzOWVjNmYwZTA5MTYwNDlkZDk2NzFlOThhOGExZTYwMDEwNGU4NGU2NDVjOTg4OTUwYmQ3In19fQ==",
"craftable": true,
"recipe": [
"gold_block",
"trident",
"gold_block",
"air",
"ecoitems:blank_reforge_stone ? obsidian",
"air",
"gold_block",
"bow",
"gold_block"
]
},
"effects": [
{
"id": "reward_kill",
"amount": 50
}
],
"conditions": [
]
},
{
"id": "sharp",
"name": "<gradient:#f12711>Sharp</gradient:#f5af19>",
"description": [
"&a+3% &fDamage"
],
"targets": [
"melee"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 1.03
}
],
"conditions": [
]
},
{
"id": "streamlined",
"name": "<gradient:#74ebd5>Streamlined</gradient:#ACB6E5>",
"description": [
"&a+4% &fDamage"
],
"targets": [
"bow"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 1.04
}
],
"conditions": [
]
},
{
"id": "strong",
"name": "<gradient:#ED213A>Strong</gradient:#93291E>",
"description": [
"&a+2% &fDamage",
"&a+10% &fKnockback"
],
"targets": [
"melee"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "damage_multiplier",
"multiplier": 1.02
},
{
"id": "knockback_multiplier",
"multiplier": 1.1
}
],
"conditions": [
]
},
{
"id": "thin",
"name": "<gradient:#D1913C>Thin</gradient:#FFD194>",
"description": [
"&c-5% &fDamage Resistance",
"&a+2.5% &fMovement Speed"
],
"targets": [
"armor"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "incoming_damage_multiplier",
"multiplier": 1.05
},
{
"id": "movement_speed_multiplier",
"multiplier": 1.025
}
],
"conditions": [
]
},
{
"id": "tough",
"name": "<gradient:#a73737>Tough</gradient:#7a2828>",
"description": [
"&c+8% &fDamage Resistance",
"&a-5% &fMovement Speed"
],
"targets": [
"armor"
],
"stone": {
"enabled": false,
"texture": "",
"craftable": false,
"recipe": []
},
"effects": [
{
"id": "incoming_damage_multiplier",
"multiplier": 0.92
},
{
"id": "movement_speed_multiplier",
"multiplier": 0.95
}
],
"conditions": [
]
}
]
}

View File

@@ -0,0 +1,385 @@
reforges:
- id: acute
name: "<gradient:#4776E6>Acute</gradient:#8E54E9>"
description:
- "&a+2% &fTriple Damage Chance"
targets:
- axe
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 3
chance: 2
triggers:
- melee_attack
conditions: []
- id: aerobic
name: "<gradient:#B993D6>Aerobic</gradient:#8CA6DB>"
description:
- "&a+9% &fDamage when shot in air"
targets:
- bow
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 1.09
triggers:
- bow_attack
conditions:
- id: in_air
args:
in_air: true
- id: dynamic
name: "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>"
description:
- "&a+5% &fDamage"
- "&a+10% &fCrit Damage"
targets:
- melee
stone:
enabled: true
name: "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>&f Reforge Stone"
lore:
- "&7Place on the right of the"
- "&7reforge menu to apply the"
- "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>&7 reforge!"
item: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmM0YTY1YzY4OWIyZDM2NDA5MTAwYTYwYzJhYjhkM2QwYTY3Y2U5NGVlYTNjMWY3YWM5NzRmZDg5MzU2OGI1ZCJ9fX0=
craftable: true
recipe:
- air
- ecoitems:blank_reforge_stone ? air
- air
- iron_block
- daylight_sensor
- iron_block
- air
- phantom_membrane
- air
effects:
- id: damage_multiplier
args:
multiplier: 1.05
triggers:
- melee_attack
- id: crit_multiplier
args:
multiplier: 1.1
triggers:
- melee_attack
conditions: []
- id: evasive
name: "<gradient:#EFEFBB>Evasive</gradient:#D4D3DD>"
description:
- "&a+2% &fIgnore Damage Chance"
targets:
- armor
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 0
chance: 2
triggers:
- take_damage
conditions: []
- id: gravitated
name: "<gradient:#1e3c72>Gravitated</gradient:#2a5298>"
description:
- "&a+8% &fCritical Damage"
targets:
- melee
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: crit_multiplier
args:
multiplier: 1.08
triggers:
- melee_attack
conditions: []
- id: light
name: "<gradient:#1c92d2>Light</gradient:#f2fcfe>"
description:
- "&c-5% &fDamage"
- "&c-5% &fKnockback"
- "&a+10% &fAttack Speed"
targets:
- melee
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 0.95
triggers:
- melee_attack
- id: knockback_multiplier
args:
multiplier: 0.95
- id: attack_speed_multiplier
args:
multiplier: 1.1
conditions: []
- id: nautical
name: "<gradient:#373B44>Nautical</gradient:#4286f4>"
description:
- "&a+20% &fDamage in water"
targets:
- melee
- bow
- trident
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 1.2
triggers:
- melee_attack
- bow_attack
- trident_attack
conditions:
- id: in_water
args:
in_water: true
- id: pointy
name: "<gradient:#076585>Pointy</gradient:#ffffff>"
description:
- "&a+10% &fDamage"
targets:
- trident
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 1.1
triggers:
- trident_attack
conditions: []
- id: prospecting
name: "<gradient:#00B4DB>Prospecting</gradient:#0083B0>"
description:
- "&a+5% &fChance to get &e$$2&f for mining a block"
targets:
- pickaxe
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: give_money
args:
amount: 2
chance: 5
triggers:
- mine_block
conditions: []
- id: reinforced
name: "<gradient:#FBD786>Reinforced</gradient:#f7797d>"
description:
- "&a+4% &fDamage Resistance"
targets:
- armor
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 0.96
triggers:
- take_damage
conditions: []
- id: rich
name: "<gradient:#DBDBDB>Rich</gradient:#F2F2F2>"
description:
- "&a+$$50 &fFor each mob kill"
targets:
- trident
- bow
stone:
enabled: true
name: "<gradient:#DBDBDB>Rich</gradient:#F2F2F2>&f Reforge Stone"
lore:
- "&7Place on the right of the"
- "&7reforge menu to apply the"
- "<gradient:#DBDBDB>Rich</gradient:#F2F2F2>&7 reforge!"
item: player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2RjNTdjNzVhZGYzOWVjNmYwZTA5MTYwNDlkZDk2NzFlOThhOGExZTYwMDEwNGU4NGU2NDVjOTg4OTUwYmQ3In19fQ==
craftable: true
recipe:
- gold_block
- trident
- gold_block
- air
- ecoitems:blank_reforge_stone ? obsidian
- air
- gold_block
- bow
- gold_block
effects:
- id: give_money
args:
amount: 50
triggers:
- kill
conditions: []
- id: sharp
name: "<gradient:#f12711>Sharp</gradient:#f5af19>"
description:
- "&a+3% &fDamage"
targets:
- melee
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 1.03
triggers:
- melee_attack
conditions: []
- id: streamlined
name: "<gradient:#74ebd5>Streamlined</gradient:#ACB6E5>"
description:
- "&a+4% &fDamage"
targets:
- bow
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 1.04
triggers:
- bow_attack
conditions: []
- id: strong
name: "<gradient:#ED213A>Strong</gradient:#93291E>"
description:
- "&a+2% &fDamage"
- "&a+10% &fKnockback"
targets:
- melee
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 1.02
triggers:
- melee_attack
- id: knockback_multiplier
args:
multiplier: 1.1
conditions: []
- id: thin
name: "<gradient:#D1913C>Thin</gradient:#FFD194>"
description:
- "&c-5% &fDamage Resistance"
- "&a+2.5% &fMovement Speed"
targets:
- armor
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 1.05
triggers:
- take_damage
- id: movement_speed_multiplier
args:
multiplier: 1.025
conditions: []
- id: tough
name: "<gradient:#a73737>Tough</gradient:#7a2828>"
description:
- "&c+8% &fDamage Resistance"
- "&a-5% &fMovement Speed"
targets:
- armor
stone:
enabled: false
name: ''
lore: []
item: ''
craftable: false
recipe: []
effects:
- id: damage_multiplier
args:
multiplier: 0.92
triggers:
- take_damage
- id: movement_speed_multiplier
args:
multiplier: 0.95
conditions: []

View File

@@ -1,2 +1,2 @@
version = 3.7.0
version = 4.26.0
plugin-name = Reforges

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

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

Binary file not shown.

Binary file not shown.