mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-29 03:49:11 +00:00
Added cost exponent, and wise and dynamic reforges
This commit is contained in:
@@ -84,26 +84,31 @@ public class ReforgeGUI {
|
||||
|
||||
ReforgeStatus status = ReforgeUtils.getStatus(menu.getCaptiveItems(player));
|
||||
|
||||
double cost = plugin.getConfigYml().getDouble("reforge.cost");
|
||||
int reforges = ReforgeUtils.getReforges(previous);
|
||||
cost *= Math.pow(plugin.getConfigYml().getDouble("reforge.cost-exponent"), reforges);
|
||||
double finalCost = cost;
|
||||
|
||||
switch (status) {
|
||||
case INVALID_ITEM -> {
|
||||
previous.setType(Objects.requireNonNull(Material.getMaterial(plugin.getConfigYml().getString("gui.invalid-item.material").toUpperCase())));
|
||||
meta.setDisplayName(plugin.getConfigYml().getString("gui.invalid-item.name"));
|
||||
List<String> lore = plugin.getConfigYml().getStrings("gui.invalid-item.lore");
|
||||
lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(plugin.getConfigYml().getDouble("reforge.cost"))));
|
||||
lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(finalCost)));
|
||||
meta.setLore(lore);
|
||||
}
|
||||
case ALLOW -> {
|
||||
previous.setType(Objects.requireNonNull(Material.getMaterial(plugin.getConfigYml().getString("gui.allow.material").toUpperCase())));
|
||||
meta.setDisplayName(plugin.getConfigYml().getString("gui.allow.name"));
|
||||
List<String> lore = plugin.getConfigYml().getStrings("gui.allow.lore");
|
||||
lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(plugin.getConfigYml().getDouble("reforge.cost"))));
|
||||
lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(finalCost)));
|
||||
meta.setLore(lore);
|
||||
}
|
||||
default -> {
|
||||
previous.setType(Objects.requireNonNull(Material.getMaterial(plugin.getConfigYml().getString("gui.no-item.material").toUpperCase())));
|
||||
meta.setDisplayName(plugin.getConfigYml().getString("gui.no-item.name"));
|
||||
List<String> lore = plugin.getConfigYml().getStrings("gui.no-item.lore");
|
||||
lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(plugin.getConfigYml().getDouble("reforge.cost"))));
|
||||
lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(finalCost)));
|
||||
meta.setLore(lore);
|
||||
}
|
||||
}
|
||||
@@ -127,6 +132,8 @@ public class ReforgeGUI {
|
||||
}
|
||||
|
||||
double cost = plugin.getConfigYml().getDouble("reforge.cost");
|
||||
int reforges = ReforgeUtils.getReforges(toReforge);
|
||||
cost *= Math.pow(plugin.getConfigYml().getDouble("reforge.cost-exponent"), reforges);
|
||||
|
||||
if (!EconomyHandler.getInstance().has(player, cost)) {
|
||||
player.sendMessage(plugin.getLangYml().getMessage("insufficient-money"));
|
||||
@@ -143,6 +150,8 @@ public class ReforgeGUI {
|
||||
|
||||
player.sendMessage(plugin.getLangYml().getMessage("applied-reforge").replace("%reforge%", reforge.getName()));
|
||||
|
||||
ReforgeUtils.incrementReforges(toReforge);
|
||||
|
||||
EconomyHandler.getInstance().withdrawPlayer(player, cost);
|
||||
|
||||
ReforgeUtils.setReforge(toReforge, reforge);
|
||||
|
||||
@@ -4,8 +4,10 @@ import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.willfp.eco.core.config.updating.ConfigUpdater;
|
||||
import com.willfp.reforges.reforges.reforges.ReforgeDynamic;
|
||||
import com.willfp.reforges.reforges.reforges.ReforgeLight;
|
||||
import com.willfp.reforges.reforges.reforges.ReforgeSharp;
|
||||
import com.willfp.reforges.reforges.reforges.ReforgeWise;
|
||||
import lombok.experimental.UtilityClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -22,6 +24,8 @@ public class Reforges {
|
||||
|
||||
public static final Reforge SHARP = new ReforgeSharp();
|
||||
public static final Reforge LIGHT = new ReforgeLight();
|
||||
public static final Reforge WISE = new ReforgeWise();
|
||||
public static final Reforge DYNAMIC = new ReforgeDynamic();
|
||||
|
||||
/**
|
||||
* Get all registered {@link Reforge}s.
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.willfp.reforges.reforges.reforges;
|
||||
|
||||
import com.willfp.reforges.reforges.Reforge;
|
||||
import com.willfp.reforges.reforges.Reforges;
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ReforgeDynamic extends Reforge {
|
||||
public ReforgeDynamic() {
|
||||
super("dynamic");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReforgeTarget getTarget() {
|
||||
return ReforgeTarget.MELEE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMeleeAttack(@NotNull final LivingEntity attacker,
|
||||
@NotNull final LivingEntity victim,
|
||||
@NotNull final EntityDamageByEntityEvent event) {
|
||||
event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier"));
|
||||
|
||||
if (attacker.getVelocity().getY() < 0) {
|
||||
event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "crit-multiplier"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -28,14 +28,14 @@ public class ReforgeLight extends Reforge {
|
||||
this.speedModifier = new AttributeModifier(
|
||||
UUID.nameUUIDFromBytes("light-speed".getBytes()),
|
||||
"light-speed",
|
||||
this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier"),
|
||||
this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1,
|
||||
AttributeModifier.Operation.MULTIPLY_SCALAR_1,
|
||||
EquipmentSlot.HAND
|
||||
);
|
||||
this.kbModifier = new AttributeModifier(
|
||||
UUID.nameUUIDFromBytes("light-kb".getBytes()),
|
||||
"light-kb",
|
||||
this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "knockback-multiplier"),
|
||||
this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "knockback-multiplier") - 1,
|
||||
AttributeModifier.Operation.MULTIPLY_SCALAR_1,
|
||||
EquipmentSlot.HAND
|
||||
);
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.willfp.reforges.reforges.reforges;
|
||||
|
||||
import com.willfp.eco.core.events.NaturalExpGainEvent;
|
||||
import com.willfp.reforges.reforges.Reforge;
|
||||
import com.willfp.reforges.reforges.Reforges;
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget;
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ReforgeWise extends Reforge {
|
||||
public ReforgeWise() {
|
||||
super("wise");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReforgeTarget getTarget() {
|
||||
return ReforgeTarget.MELEE;
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onExpChange(@NotNull final NaturalExpGainEvent event) {
|
||||
Reforge reforge = ReforgeUtils.getReforge(event.getExpChangeEvent().getPlayer().getInventory().getItemInMainHand());
|
||||
|
||||
if (reforge == null || !reforge.equals(this)) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.getExpChangeEvent().setAmount((int) Math.ceil(event.getExpChangeEvent().getAmount() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")));
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,11 @@ public class ReforgeUtils {
|
||||
*/
|
||||
private static final NamespacedKey REFORGE_KEY = PLUGIN.getNamespacedKeyFactory().create("reforge");
|
||||
|
||||
/**
|
||||
* The key for storing the currently displayed stat.
|
||||
*/
|
||||
private static final NamespacedKey REFORGE_AMOUNT = PLUGIN.getNamespacedKeyFactory().create("reforge_amount");
|
||||
|
||||
/**
|
||||
* Get a random reforge for a target.
|
||||
*
|
||||
@@ -147,4 +152,48 @@ public class ReforgeUtils {
|
||||
|
||||
reforge.handleApplication(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount of reforges done to an item.
|
||||
*
|
||||
* @param item The item.
|
||||
*/
|
||||
public static int getReforges(@NotNull final ItemStack item) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
|
||||
if (meta == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||
|
||||
if (!container.has(REFORGE_AMOUNT, PersistentDataType.INTEGER)) {
|
||||
container.set(REFORGE_AMOUNT, PersistentDataType.INTEGER, 0);
|
||||
item.setItemMeta(meta);
|
||||
}
|
||||
|
||||
Integer amount = container.get(REFORGE_AMOUNT, PersistentDataType.INTEGER);
|
||||
|
||||
return amount == null ? 0 : amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the amount of reforges done to an item.
|
||||
*
|
||||
* @param item The item.
|
||||
*/
|
||||
public static void incrementReforges(@NotNull final ItemStack item) {
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
|
||||
if (meta == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
int amount = getReforges(item);
|
||||
amount++;
|
||||
|
||||
PersistentDataContainer container = meta.getPersistentDataContainer();
|
||||
container.set(REFORGE_AMOUNT, PersistentDataType.INTEGER, amount);
|
||||
item.setItemMeta(meta);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,9 @@ gui:
|
||||
pitch: 0.8
|
||||
|
||||
reforge:
|
||||
cost: 5000
|
||||
cost: 7500
|
||||
|
||||
cost-exponent: 1.15 # (Reforges done ^ cost exponent) * cost
|
||||
|
||||
line-wrap: 32
|
||||
|
||||
|
||||
11
eco-core/core-plugin/src/main/resources/reforges/dynamic.yml
Normal file
11
eco-core/core-plugin/src/main/resources/reforges/dynamic.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
#
|
||||
# Dynamic Reforge
|
||||
#
|
||||
|
||||
name: "<gradient:#AAFFA9>Sharp</gradient:#11FFBD>"
|
||||
enabled: true
|
||||
description: "Deal &a2.5%&r more damage and &a5%&r more critical damage"
|
||||
|
||||
config:
|
||||
multiplier: 1.025
|
||||
crit-multiplier: 1.05
|
||||
@@ -8,5 +8,5 @@ description: "Deal &a5%&r less damage and knockback, but attack &a3%&7&o faster.
|
||||
|
||||
config:
|
||||
multiplier: 0.95 # Damage multiplier
|
||||
speed-multiplier: 0.03
|
||||
knockback-multiplier: -0.05
|
||||
speed-multiplier: 1.03
|
||||
knockback-multiplier: 0.95
|
||||
10
eco-core/core-plugin/src/main/resources/reforges/wise.yml
Normal file
10
eco-core/core-plugin/src/main/resources/reforges/wise.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
#
|
||||
# Wise Reforge
|
||||
#
|
||||
|
||||
name: "<gradient:#f953c6>Light</gradient:#b91d73>"
|
||||
enabled: true
|
||||
description: "Gain &a7.5%&r more experience."
|
||||
|
||||
config:
|
||||
multiplier: 1.075
|
||||
Reference in New Issue
Block a user