Adds an option for toggling whether reforging removing enchantments
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
All checks were successful
EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
This commit is contained in:
parent
faff982585
commit
cb70874093
31
README.md
31
README.md
@ -159,21 +159,22 @@ All currently supported presets, and available filters for each preset:
|
||||
|
||||
#### Configuration values
|
||||
|
||||
| Key | Value type | Description |
|
||||
|------------------------|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| dropItem | true/false | Whether the blacksmith should drop the repaired item on the ground (instead of putting it into the player's inventory). |
|
||||
| disableCoolDown | true/false | Whether to completely disable the cool-down between repairs. |
|
||||
| disableDelay | true/false | Whether to completely disable the delay required to reforge an item. |
|
||||
| failReforgeChance | 0-100 | The chance of the blacksmith failing to repair an item. |
|
||||
| extraEnchantmentChance | 0-100 | The chance of the blacksmith adding an enchantment to an item. |
|
||||
| maxEnchantments | 0-10 | The maximum number of different enchantments a blacksmith can add. |
|
||||
| maxReforgeDelay | 0-3600 | The maximum number of seconds a player needs to wait for an item to be repaired. |
|
||||
| minReforgeDelay | 0-3600 | The minimum number of seconds a player needs to wait for an item to be repaired. |
|
||||
| reforgeCoolDown | 0-3600 | The cool-down, in seconds, a player has to wait between each time they use one specific blacksmith. |
|
||||
| reforgeAbleItems | DIAMOND_LEGGINGS,GOLD-pickaxe,bow, etc. | Specifies which items this blacksmith is able to reforge. If set to "" or null, all normally repairable items can be repaired. If set to a list of items, only the items specified can be repaired. Some presets have been included for ease of use. Use a preset by specifying "preset:sword-smith" instead of a material such as "gold-pickaxe". |
|
||||
| blacksmithTitle | text string | The title displayed as part of the message explaining that a blacksmith doesn't recognize a player's held item |
|
||||
| enchantmentBlocklist | string list | A string list of all enchantments a blacksmith should not be allowed to add to items. |
|
||||
| reforgeAnvils | true/false | Whether to allow the blacksmith to reforge anvils. If enabled, chipped and damaged anvils will be replaced with a normal anvil. |
|
||||
| Key | Value type | Description |
|
||||
|--------------------------------|-----------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| dropItem | true/false | Whether the blacksmith should drop the repaired item on the ground (instead of putting it into the player's inventory). |
|
||||
| disableCoolDown | true/false | Whether to completely disable the cool-down between repairs. |
|
||||
| disableDelay | true/false | Whether to completely disable the delay required to reforge an item. |
|
||||
| failReforgeChance | 0-100 | The chance of the blacksmith failing to repair an item (further damaging it, or just repairing it a bit), and either removing or downgrading all enchantments (if failReforgeRemovesEnchantments is true). |
|
||||
| failReforgeRemovesEnchantments | true/false | Whether a failed reforge should remove or downgrade all enchantments on the item. |
|
||||
| extraEnchantmentChance | 0-100 | The chance of the blacksmith adding an enchantment to an item. |
|
||||
| maxEnchantments | 0-10 | The maximum number of different enchantments a blacksmith can add. |
|
||||
| maxReforgeDelay | 0-3600 | The maximum number of seconds a player needs to wait for an item to be repaired. |
|
||||
| minReforgeDelay | 0-3600 | The minimum number of seconds a player needs to wait for an item to be repaired. |
|
||||
| reforgeCoolDown | 0-3600 | The cool-down, in seconds, a player has to wait between each time they use one specific blacksmith. |
|
||||
| reforgeAbleItems | DIAMOND_LEGGINGS,GOLD-pickaxe,bow, etc. | Specifies which items this blacksmith is able to reforge. If set to "" or null, all normally repairable items can be repaired. If set to a list of items, only the items specified can be repaired. Some presets have been included for ease of use. Use a preset by specifying "preset:sword-smith" instead of a material such as "gold-pickaxe". |
|
||||
| blacksmithTitle | text string | The title displayed as part of the message explaining that a blacksmith doesn't recognize a player's held item |
|
||||
| enchantmentBlocklist | string list | A string list of all enchantments a blacksmith should not be allowed to add to items. |
|
||||
| reforgeAnvils | true/false | Whether to allow the blacksmith to reforge anvils. If enabled, chipped and damaged anvils will be replaced with a normal anvil. |
|
||||
|
||||
#### Messages
|
||||
|
||||
|
@ -17,6 +17,12 @@ public enum NPCSetting {
|
||||
*/
|
||||
FAIL_CHANCE("failReforgeChance", SettingValueType.PERCENTAGE, 10, "failReforgeChance"),
|
||||
|
||||
/**
|
||||
* The setting for whether failing a reforging should downgrade/remove enchantments as well
|
||||
*/
|
||||
FAIL_REMOVE_ENCHANTMENTS("failReforgeRemovesEnchantments", SettingValueType.BOOLEAN, false,
|
||||
"failReforgeRemovesEnchantments"),
|
||||
|
||||
/**
|
||||
* The setting for the chance of an additional enchantment being added
|
||||
*/
|
||||
|
@ -258,6 +258,15 @@ public class NPCSettings {
|
||||
return asInt(NPCSetting.FAIL_CHANCE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets whether a failed reforging should remove/downgrade enchantments
|
||||
*
|
||||
* @return <p>Whether enchantments should be removed</p>
|
||||
*/
|
||||
public boolean getFailRemovesEnchantments() {
|
||||
return asBoolean(NPCSetting.FAIL_REMOVE_ENCHANTMENTS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the chance for adding an extra enchantment to an item
|
||||
*
|
||||
@ -282,7 +291,7 @@ public class NPCSettings {
|
||||
* @return <p>Whether to drop reforged items on the ground</p>
|
||||
*/
|
||||
public boolean getDropItem() {
|
||||
return ConfigHelper.asBoolean(getValue(NPCSetting.DROP_ITEM));
|
||||
return asBoolean(NPCSetting.DROP_ITEM);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -318,7 +327,7 @@ public class NPCSettings {
|
||||
* @return <p>True if this blacksmith is able to repair anvils</p>
|
||||
*/
|
||||
public boolean getRepairAnvils() {
|
||||
return ConfigHelper.asBoolean(getValue(NPCSetting.REPAIR_ANVILS));
|
||||
return asBoolean(NPCSetting.REPAIR_ANVILS);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -343,6 +352,16 @@ public class NPCSettings {
|
||||
return getValue(setting).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the boolean value of the given setting
|
||||
*
|
||||
* @param setting <p>The setting to get the value of</p>
|
||||
* @return <p>The value of the given setting as a boolean</p>
|
||||
*/
|
||||
private boolean asBoolean(NPCSetting setting) {
|
||||
return ConfigHelper.asBoolean(getValue(setting));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value of a setting, using the default if not set
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -50,6 +50,9 @@ defaults:
|
||||
|
||||
# The chance to fail reforging an item, which only repairs the item a tiny bit or not at all (0-100)
|
||||
failReforgeChance: 10 # Default = 10%
|
||||
|
||||
# Whether failed reforging should remove or downgrade the item's enchantments
|
||||
failReforgeRemovesEnchantments: false # Default = false
|
||||
|
||||
# The chance that an enchantment will be added to the reforged item (0-100)
|
||||
extraEnchantmentChance: 5 # Default = 5%
|
||||
|
Loading…
Reference in New Issue
Block a user