9
0
mirror of https://github.com/Auxilor/EcoArmor.git synced 2025-12-26 18:39:24 +00:00

Updated libreforge

This commit is contained in:
Auxilor
2021-11-20 12:10:14 +00:00
parent 5393b8deb9
commit 0ca9304cb1
16 changed files with 315 additions and 283 deletions

View File

@@ -1,3 +1,13 @@
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
}
}
plugins {
id 'java-library'
id 'com.github.johnrengelman.shadow' version '7.0.0'
@@ -11,6 +21,7 @@ dependencies {
allprojects {
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'maven-publish'
apply plugin: 'com.github.johnrengelman.shadow'
@@ -51,7 +62,7 @@ allprojects {
dependencies {
compileOnly 'com.willfp:eco:6.13.10'
compileOnly 'com.willfp:libreforge:0.1.2'
compileOnly 'com.willfp:libreforge:0.3.0'
compileOnly 'org.jetbrains:annotations:23.0.0'
@@ -60,6 +71,8 @@ allprojects {
testCompileOnly 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.5.31'
}
tasks.withType(JavaCompile) {

View File

@@ -2,7 +2,7 @@ group 'com.willfp'
version rootProject.version
dependencies {
compileOnly 'org.spigotmc:spigot-api:1.16.4-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT'
}
publishing {

View File

@@ -8,18 +8,22 @@ import com.willfp.ecoarmor.commands.CommandEcoarmor;
import com.willfp.ecoarmor.config.EcoArmorJson;
import com.willfp.ecoarmor.display.ArmorDisplay;
import com.willfp.ecoarmor.sets.ArmorSets;
import com.willfp.ecoarmor.sets.util.ArmorUtils;
import com.willfp.ecoarmor.sets.util.EffectiveDurabilityListener;
import com.willfp.ecoarmor.sets.util.PreventSkullPlaceListener;
import com.willfp.ecoarmor.upgrades.Tiers;
import com.willfp.ecoarmor.upgrades.listeners.AdvancementShardListener;
import com.willfp.ecoarmor.upgrades.listeners.CrystalListener;
import com.willfp.ecoarmor.util.DiscoverRecipeListener;
import com.willfp.libreforge.api.LibReforge;
import com.willfp.ecoarmor.util.EffectListener;
import com.willfp.libreforge.Holder;
import com.willfp.libreforge.LibReforge;
import lombok.Getter;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@SuppressWarnings("unused")
@@ -31,7 +35,7 @@ public class EcoArmorPlugin extends EcoPlugin {
private static EcoArmorPlugin instance;
/**
* tiers.json.
* ecoarmor.json.
*/
@Getter
private final EcoArmorJson ecoArmorJson;
@@ -46,6 +50,14 @@ public class EcoArmorPlugin extends EcoPlugin {
this.ecoArmorJson = new EcoArmorJson(this);
LibReforge.init(this);
LibReforge.registerHolderProvider(player -> {
Holder active = ArmorUtils.getActiveSet(player);
if (active == null) {
return Collections.emptyList();
} else {
return Collections.singletonList(active);
}
});
}
@Override
@@ -53,6 +65,11 @@ public class EcoArmorPlugin extends EcoPlugin {
LibReforge.enable(this);
}
@Override
protected void handleDisable() {
LibReforge.disable(this);
}
@Override
protected void handleReload() {
this.getLogger().info(Tiers.values().size() + " Tiers Loaded");
@@ -73,7 +90,8 @@ public class EcoArmorPlugin extends EcoPlugin {
new AdvancementShardListener(this),
new EffectiveDurabilityListener(this),
new DiscoverRecipeListener(this),
new PreventSkullPlaceListener()
new PreventSkullPlaceListener(),
new EffectListener()
);
}

View File

@@ -1,107 +0,0 @@
package com.willfp.ecoarmor.display;
import com.willfp.eco.core.EcoPlugin;
import com.willfp.eco.core.display.DisplayModule;
import com.willfp.eco.core.display.DisplayPriority;
import com.willfp.eco.core.fast.FastItemStack;
import com.willfp.eco.util.SkullUtils;
import com.willfp.ecoarmor.sets.ArmorSet;
import com.willfp.ecoarmor.sets.meta.ArmorSlot;
import com.willfp.ecoarmor.sets.util.ArmorUtils;
import com.willfp.ecoarmor.upgrades.Tier;
import org.bukkit.Bukkit;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.inventory.meta.SkullMeta;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class ArmorDisplay extends DisplayModule {
/**
* Create armor display.
*
* @param plugin Instance of EcoArmor.
*/
public ArmorDisplay(@NotNull final EcoPlugin plugin) {
super(plugin, DisplayPriority.LOWEST);
}
@Override
public void display(@NotNull final ItemStack itemStack,
@NotNull final Object... args) {
ItemMeta meta = itemStack.getItemMeta();
if (meta == null) {
return;
}
FastItemStack fis = FastItemStack.wrap(itemStack);
ArmorSet set = ArmorUtils.getSetOnItem(meta);
if (set == null) {
Tier crystalTier = ArmorUtils.getCrystalTier(meta);
if (crystalTier != null) {
List<String> lore = fis.getLore();
lore.addAll(FastItemStack.wrap(crystalTier.getCrystal()).getLore());
fis.setLore(lore);
}
ArmorSet shardSet = ArmorUtils.getShardSet(meta);
if (shardSet != null) {
List<String> lore = fis.getLore();
lore.addAll(FastItemStack.wrap(shardSet.getAdvancementShardItem()).getLore());
itemStack.setItemMeta(shardSet.getAdvancementShardItem().getItemMeta());
FastItemStack.wrap(itemStack).setLore(lore);
}
return;
}
ArmorSlot slot = ArmorSlot.getSlot(itemStack);
if (slot == null) {
return;
}
ItemStack slotStack;
if (ArmorUtils.isAdvanced(meta)) {
slotStack = set.getAdvancedItemStack(slot);
} else {
slotStack = set.getItemStack(slot);
}
ItemMeta slotMeta = slotStack.getItemMeta();
assert slotMeta != null;
Tier tier = ArmorUtils.getTier(meta);
List<String> lore = new ArrayList<>();
for (String s : FastItemStack.wrap(slotStack).getLore()) {
s = s.replace("%tier%", tier.getDisplayName());
lore.add(s);
}
if (meta.hasLore()) {
lore.addAll(fis.getLore());
}
meta.setDisplayName(slotMeta.getDisplayName());
if (meta instanceof SkullMeta && slotMeta instanceof SkullMeta) {
if (set.getSkullBase64() != null) {
SkullUtils.setSkullTexture((SkullMeta) meta, set.getSkullBase64());
}
}
if (meta instanceof LeatherArmorMeta && slotMeta instanceof LeatherArmorMeta) {
((LeatherArmorMeta) meta).setColor(((LeatherArmorMeta) slotMeta).getColor());
}
itemStack.setItemMeta(meta);
FastItemStack.wrap(itemStack).setLore(lore);
}
}

View File

@@ -15,13 +15,11 @@ import com.willfp.ecoarmor.sets.meta.ArmorSlot;
import com.willfp.ecoarmor.sets.util.ArmorUtils;
import com.willfp.ecoarmor.upgrades.Tier;
import com.willfp.ecoarmor.upgrades.Tiers;
import com.willfp.libreforge.api.conditions.Condition;
import com.willfp.libreforge.api.conditions.Conditions;
import com.willfp.libreforge.api.conditions.ConfiguredCondition;
import com.willfp.libreforge.api.effects.ConfiguredEffect;
import com.willfp.libreforge.api.effects.Effect;
import com.willfp.libreforge.api.effects.Effects;
import com.willfp.libreforge.api.provider.Holder;
import com.willfp.libreforge.Holder;
import com.willfp.libreforge.conditions.Conditions;
import com.willfp.libreforge.conditions.ConfiguredCondition;
import com.willfp.libreforge.effects.ConfiguredEffect;
import com.willfp.libreforge.effects.Effects;
import lombok.AccessLevel;
import lombok.Getter;
import org.bukkit.Bukkit;
@@ -32,7 +30,6 @@ import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.potion.PotionEffectType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -48,7 +45,7 @@ import java.util.stream.Collectors;
/*
TODO: Split off ArmorSet between two separate armorset objects (one advanced, one not)
*/
public class ArmorSet implements Holder {
public class ArmorSet {
/**
* Instance of EcoArmor.
*/
@@ -68,34 +65,16 @@ public class ArmorSet implements Holder {
private final String name;
/**
* Conditions and their values.
* The advanced holder.
*/
@Getter
private final Set<ConfiguredCondition> conditions = new HashSet<>();
private final Holder advancedHoler;
/**
* Effects and their strengths.
* The regular holder.
*/
@Getter
private final Set<ConfiguredEffect> effects = new HashSet<>();
/**
* Effects and their strengths on advanced armor.
*/
@Getter
private final Set<ConfiguredEffect> advancedEffects = new HashSet<>();
/**
* Potion effects to be applied on equip.
*/
@Getter
private final Map<PotionEffectType, Integer> potionEffects = new HashMap<>();
/**
* Potion effects to be applied on equipping advanced.
*/
@Getter
private final Map<PotionEffectType, Integer> advancedPotionEffects = new HashMap<>();
private final Holder regularHolder;
/**
* The base64 texture of a skull used as a helmet.
@@ -134,32 +113,32 @@ public class ArmorSet implements Holder {
this.plugin = plugin;
this.name = config.getString("name");
Set<ConfiguredCondition> conditions = new HashSet<>();
for (JSONConfig cfg : this.getConfig().getSubsections("conditions")) {
Condition effect = Conditions.INSTANCE.getByID(cfg.getString("id"));
conditions.add(new ConfiguredCondition(effect, cfg.getSubsection("args")));
ConfiguredCondition conf = Conditions.compile(cfg, "Armor Set " + this.name);
if (conf != null) {
conditions.add(conf);
}
}
Set<ConfiguredEffect> effects = new HashSet<>();
for (JSONConfig cfg : this.getConfig().getSubsections("effects")) {
Effect effect = Effects.INSTANCE.getByID(cfg.getString("id"));
effects.add(new ConfiguredEffect(effect, cfg.getSubsection("args")));
ConfiguredEffect conf = Effects.compile(cfg, "Armor Set " + this.name);
if (conf != null) {
effects.add(conf);
}
}
Set<ConfiguredEffect> advancedEffects = new HashSet<>();
for (JSONConfig cfg : this.getConfig().getSubsections("advancedEffects")) {
Effect effect = Effects.INSTANCE.getByID(cfg.getString("id"));
advancedEffects.add(new ConfiguredEffect(effect, cfg.getSubsection("args")));
ConfiguredEffect conf = Effects.compile(cfg, "Armor Set " + this.name + " (Advanced)");
if (conf != null) {
effects.add(conf);
}
}
for (JSONConfig cfg : this.getConfig().getSubsections("potionEffects")) {
PotionEffectType effect = PotionEffectType.getByName(cfg.getString("id").toUpperCase());
int level = cfg.getInt("level");
potionEffects.put(effect, level);
}
for (JSONConfig cfg : this.getConfig().getSubsections("advancedPotionEffects")) {
PotionEffectType effect = PotionEffectType.getByName(cfg.getString("id").toUpperCase());
int level = cfg.getInt("level");
advancedPotionEffects.put(effect, level);
}
this.regularHolder = new RegularHolder(conditions, effects);
this.advancedHoler = new AdvancedHolder(conditions, advancedEffects);
ArmorSets.addNewSet(this);

View File

@@ -0,0 +1,4 @@
package com.willfp.ecoarmor.sets;
public class ArmorSetHolder {
}

View File

@@ -6,6 +6,7 @@ import com.willfp.ecoarmor.sets.ArmorSets;
import com.willfp.ecoarmor.sets.meta.ArmorSlot;
import com.willfp.ecoarmor.upgrades.Tier;
import com.willfp.ecoarmor.upgrades.Tiers;
import com.willfp.libreforge.Holder;
import lombok.experimental.UtilityClass;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
@@ -63,6 +64,24 @@ public class ArmorUtils {
return ArmorSets.getByName(setName);
}
/**
* Get active holder for a player.
*
* @param player The player to check.
* @return The holder, or null if not found.
*/
@Nullable
public Holder getActiveSet(@NotNull final Player player) {
ArmorSet armorSet = getSetOnPlayer(player);
boolean advanced = isWearingAdvanced(player);
if (armorSet != null) {
return advanced ? armorSet.getAdvancedHoler() : armorSet.getRegularHolder();
} else {
return null;
}
}
/**
* Get armor set that player is wearing.
*

View File

@@ -0,0 +1,76 @@
package com.willfp.ecoarmor.display
import com.willfp.eco.core.EcoPlugin
import com.willfp.eco.core.display.DisplayModule
import com.willfp.eco.core.display.DisplayPriority
import com.willfp.eco.core.fast.FastItemStack
import com.willfp.eco.util.SkullUtils
import com.willfp.ecoarmor.sets.meta.ArmorSlot
import com.willfp.ecoarmor.sets.util.ArmorUtils
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.meta.LeatherArmorMeta
import org.bukkit.inventory.meta.SkullMeta
class ArmorDisplay(plugin: EcoPlugin) : DisplayModule(plugin, DisplayPriority.LOWEST) {
override fun display(
itemStack: ItemStack,
vararg args: Any
) {
val meta = itemStack.itemMeta ?: return
val fis = FastItemStack.wrap(itemStack)
val set = ArmorUtils.getSetOnItem(meta)
if (set == null) {
val crystalTier = ArmorUtils.getCrystalTier(meta)
if (crystalTier != null) {
val lore = fis.lore
lore.addAll(FastItemStack.wrap(crystalTier.crystal).lore)
fis.setLore(lore)
}
val shardSet = ArmorUtils.getShardSet(meta)
if (shardSet != null) {
val lore = fis.lore
lore.addAll(FastItemStack.wrap(shardSet.advancementShardItem).lore)
itemStack.itemMeta = shardSet.advancementShardItem.itemMeta
FastItemStack.wrap(itemStack).setLore(lore)
}
return
}
val slot = ArmorSlot.getSlot(itemStack) ?: return
val slotStack: ItemStack = if (ArmorUtils.isAdvanced(meta)) {
set.getAdvancedItemStack(slot)
} else {
set.getItemStack(slot)
}
val slotMeta = slotStack.itemMeta ?: return
val tier = ArmorUtils.getTier(meta)!!
val lore = (FastItemStack.wrap(slotStack).lore).map { it.replace("%tier%", tier.displayName) }.toMutableList()
if (meta.hasLore()) {
lore.addAll(fis.lore)
}
meta.setDisplayName(slotMeta.displayName)
if (meta is SkullMeta && slotMeta is SkullMeta) {
if (set.skullBase64 != null) {
SkullUtils.setSkullTexture(meta, set.skullBase64!!)
}
}
if (meta is LeatherArmorMeta && slotMeta is LeatherArmorMeta) {
meta.setColor(slotMeta.color)
}
itemStack.itemMeta = meta
FastItemStack.wrap(itemStack).lore = lore
}
}

View File

@@ -0,0 +1,9 @@
package com.willfp.ecoarmor.sets
import com.willfp.libreforge.Holder
import com.willfp.libreforge.conditions.ConfiguredCondition
import com.willfp.libreforge.effects.ConfiguredEffect
class AdvancedHolder(override val conditions: Set<ConfiguredCondition>, override val effects: Set<ConfiguredEffect>) :
Holder {
}

View File

@@ -0,0 +1,9 @@
package com.willfp.ecoarmor.sets
import com.willfp.libreforge.Holder
import com.willfp.libreforge.conditions.ConfiguredCondition
import com.willfp.libreforge.effects.ConfiguredEffect
class RegularHolder(override val conditions: Set<ConfiguredCondition>, override val effects: Set<ConfiguredEffect>) :
Holder {
}

View File

@@ -0,0 +1,15 @@
package com.willfp.ecoarmor.util
import com.willfp.eco.core.events.ArmorChangeEvent
import com.willfp.libreforge.updateEffects
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
class EffectListener: Listener {
@EventHandler
fun armorEquipListener(event: ArmorChangeEvent) {
val player = event.player
player.updateEffects()
}
}

View File

@@ -8,62 +8,9 @@ discover-recipes: true # If all recipes should be automatically discovered.
advancement-shard-material: prismarine_shard # The material for advancement shards.
upgrade-crystal-material: end_crystal # The material for upgrade crystals.
# Effects are passive abilities that happen when wearing a full set with the effect present.
effects:
attack-speed-multiplier:
# Changes attack speed by some multiplier
cooldown:
in-actionbar: true
sound:
enabled: true
bonus-hearts:
# Extra hearts given to a player
enabled: true
bow-damage-multiplier:
# Changes bow damage by some multiplier
enabled: true
damage-multiplier:
# Changes damage from any form by some multiplier
enabled: true
damage-taken-multiplier:
# Changes incoming damage by some multiplier
enabled: true
durability-multiplier:
# Changes durability for **all items in inventory** by some multiplier
enabled: true
evade-chance:
# Chance of avoiding attack, as a percentage
enabled: true
experience-multiplier:
# Changes experience gained by some multiplier
enabled: true
fall-damage-multiplier:
# Changes fall damage by some multiplier
enabled: true
flight:
# Allows flight
enabled: true
melee-damage-multiplier:
# Changes melee damage by some multiplier
enabled: true
regeneration-multiplier:
# Changes regeneration by some multiplier
enabled: true
speed-multiplier:
# Changes movement speed by some multiplier
enabled: true
trident-damage-multiplier:
# Changes trident damage by some multiplier
enabled: true
warp-chance:
# Chance to warp behind your opponent after damaging them, as a percentage
enabled: true
hunger-loss-multiplier:
# Modify hunger loss by some multiplier
enabled: true
boss-damage-multiplier:
# Modify boss damage by some multiplier
enabled: true
knockback-multiplier:
# Modify knockback by some multiplier
enabled: true
telekinesis:
# Drops and xp go straight to your inventory
enabled: true
sound: "BLOCK_NOTE_BLOCK_PLING"
pitch: 0.5

View File

@@ -5,18 +5,28 @@
"conditions": [],
"effects": [
{
"id": "damage-multiplier",
"args": 1.25
"id": "damage_multiplier",
"args": {
"multiplier": 1.25
},
"triggers": [
"melee_attack",
"bow_attack",
"trident_attack"
]
}
],
"advancedEffects": [
{
"id": "damage-taken-multiplier",
"args": 0.9
"id": "damage_multiplier",
"args": {
"multiplier": 0.9
},
"triggers": [
"take_damage"
]
}
],
"potionEffects": [],
"advancedPotionEffects": [],
"advancedLore": [
"",
"<gradient:f12711>&lADVANCED BONUS</gradient:f5af19>",
@@ -246,26 +256,54 @@
"conditions": [],
"effects": [
{
"id": "boss-damage-multiplier",
"args": 1.5
"id": "damage_multiplier",
"args": {
"multiplier": 1.5
},
"triggers": [
"melee_attack",
"bow_attack",
"trident_attack"
],
"filters": {
"onlyBosses": true
}
},
{
"id": "damage-taken-multiplier",
"args": 0.9
"id": "damage_multiplier",
"args": {
"multiplier": 0.9
},
"triggers": [
"take_damage"
]
}
],
"advancedEffects": [
{
"id": "damage-taken-multiplier",
"args": 0.8
"id": "damage_multiplier",
"args": {
"multiplier": 0.8
},
"triggers": [
"take_damage"
]
},
{
"id": "boss-damage-multiplier",
"args": 2
"id": "damage_multiplier",
"args": {
"multiplier": 2
},
"triggers": [
"melee_attack",
"bow_attack",
"trident_attack"
],
"filters": {
"onlyBosses": true
}
}
],
"potionEffects": [],
"advancedPotionEffects": [],
"advancedLore": [
"",
"<gradient:f12711>&lADVANCED BONUS</gradient:f5af19>",
@@ -525,34 +563,36 @@
"conditions": [],
"effects": [
{
"id": "bonus-hearts",
"args": 10.0
"id": "bonus_health",
"args": {
"health": 20
}
},
{
"id": "melee-damage-multiplier",
"args": 0.9
"id": "damage_multiplier",
"args": {
"multiplier": 0.9
},
"triggers": [
"melee_attack"
]
}
],
"advancedEffects": [
{
"id": "bonus-hearts",
"args": 20.0
"id": "bonus_health",
"args": {
"health": 40
}
},
{
"id": "hunger-loss-multiplier",
"args": 0.5
}
],
"potionEffects": [
{
"id": "regeneration",
"level": 1.0
}
],
"advancedPotionEffects": [
{
"id": "regeneration",
"level": 1.0
"id": "hunger_multiplier",
"args": {
"multiplier": 0.5
},
"triggers": [
"lose_hunger"
]
}
],
"advancedLore": [
@@ -819,26 +859,51 @@
"conditions": [],
"effects": [
{
"id": "melee-damage-multiplier",
"args": 0.85
"id": "damage_multiplier",
"args": {
"multiplier": 0.85
},
"triggers": [
"melee_attack"
]
},
{
"id": "trident-damage-multiplier",
"args": 2.5
"id": "damage_multiplier",
"args": {
"multiplier": 2.5
},
"triggers": [
"trident_attack"
]
},
{
"id": "bow-damage-multiplier",
"args": 1.5
"id": "damage_multiplier",
"args": {
"multiplier": 1.5
},
"triggers": [
"bow_attack"
]
}
],
"advancedEffects": [
{
"id": "bow-damage-multiplier",
"args": 1.75
"id": "damage_multiplier",
"args": {
"multiplier": 3.5
},
"triggers": [
"trident_attack"
]
},
{
"id": "trident-damage-multiplier",
"args": 3.5
"id": "damage_multiplier",
"args": {
"multiplier": 1.75
},
"triggers": [
"bow_attack"
]
}
],
"potionEffects": [],

View File

@@ -9,4 +9,5 @@ messages:
needs-item: "&cYou must specify an item!"
invalid-item: "&cInvalid item!"
give-success: "Gave &a%item%&r to &a%recipient%"
open-editor: "Open the editor here: &a%url%"
open-editor: "Open the editor here: &a%url%"
on-cooldown: "&cThis effect is on cooldown! &fTime left: &a%seconds% seconds"

View File

@@ -7,20 +7,8 @@ website: willfp.com
load: STARTUP
depend:
- eco
- ProtocolLib
softdepend:
- WorldGuard
- GriefPrevention
- Towny
- FactionsUUID
- Lands
- Kingdoms
- NoCheatPlus
- AAC
- Matrix
- Spartan
- PlaceholderAPI
- EcoEnchants
libraries:
- org.jetbrains.kotlin:kotlin-stdlib:1.5.21
commands:
ecoarmor:

View File

@@ -3,7 +3,3 @@ rootProject.name = 'EcoArmor'
// Core
include ':eco-core'
include ':eco-core:core-plugin'
// Extensions
include ':eco-extensions'
include ':eco-extensions:mcmmo'