9
0
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:
Auxilor
2021-08-12 18:03:41 +01:00
parent b9676a9fbd
commit d382dd5470
10 changed files with 154 additions and 8 deletions

View File

@@ -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);

View File

@@ -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.

View File

@@ -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"));
}
}
}

View File

@@ -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
);

View File

@@ -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")));
}
}

View File

@@ -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);
}
}

View File

@@ -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

View 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

View File

@@ -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

View 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