Adds an option for toggling whether reforging removing enchantments
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good

This commit is contained in:
2023-01-30 12:34:34 +01:00
parent faff982585
commit cb70874093
5 changed files with 75 additions and 33 deletions

View File

@@ -133,14 +133,19 @@ public class ReforgeSession implements Runnable {
itemToReforge.setType(Material.ANVIL);
}
// Add random enchantments
//See if a random roll (0-99) is less than extraEnchantmentChance, and add a random enchantment
int roll = random.nextInt(100);
if (!(roll < config.getExtraEnchantmentChance() &&
itemToReforge.getEnchantments().keySet().size() < config.getMaxEnchantments())) {
// Abort if randomness isn't on our side, or if max enchantments has been reached
return;
if (roll < config.getExtraEnchantmentChance() &&
itemToReforge.getEnchantments().keySet().size() < config.getMaxEnchantments() &&
!ItemHelper.isAnvil(itemToReforge.getType(), false)) {
addRandomEnchantment();
}
}
/**
* Adds a random enchantment to the currently reforged item
*/
private void addRandomEnchantment() {
//Find usable enchantments first
List<Enchantment> usableEnchantments = new ArrayList<>();
for (String enchantmentName : enchantments) {
@@ -176,19 +181,11 @@ public class ReforgeSession implements Runnable {
* The method to run when a blacksmith fails re-forging an item
*/
private void failReforge() {
// Remove or downgrade existing enchantments
for (Enchantment enchantment : itemToReforge.getEnchantments().keySet()) {
if (random.nextBoolean()) {
itemToReforge.removeEnchantment(enchantment);
} else {
if (itemToReforge.getEnchantmentLevel(enchantment) > 1) {
itemToReforge.removeEnchantment(enchantment);
itemToReforge.addEnchantment(enchantment, 1);
}
}
if (config.getFailRemovesEnchantments()) {
removeOrDowngradeEnchantments();
}
// Damage the item
//Damage the item
short currentItemDurability = ItemHelper.getDurability(itemToReforge);
short newDurability = (short) (currentItemDurability + (currentItemDurability * random.nextInt(8)));
short maxDurability = itemToReforge.getType().getMaxDurability();
@@ -200,6 +197,22 @@ public class ReforgeSession implements Runnable {
updateDamage(itemToReforge, maxDurability - newDurability);
}
/**
* Removes or downgrades all enchantments for the currently reforged item
*/
private void removeOrDowngradeEnchantments() {
//Remove or downgrade existing enchantments
for (Enchantment enchantment : itemToReforge.getEnchantments().keySet()) {
//Completely remove the enchantment, downgrade it, or keep it if lucky and already level 1
if (random.nextBoolean()) {
itemToReforge.removeEnchantment(enchantment);
} else if (itemToReforge.getEnchantmentLevel(enchantment) > 1) {
itemToReforge.removeEnchantment(enchantment);
itemToReforge.addEnchantment(enchantment, 1);
}
}
}
/**
* Updates the damage done to an item
*