diff --git a/Changelog.txt b/Changelog.txt
index 9dc8c1b07..39315d370 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -7,6 +7,9 @@ Key:
! Change
- Removal
+Version 2.1.43
+ Fixed a bug that would result in players being told they they failed to salvage enchantments when in reality they succeeded.
+
Version 2.1.42
Fixed McMMOPlayerNotFoundException being thrown instead of null
(API) UserManager.getPlayer() returns null again (oopsie)
diff --git a/pom.xml b/pom.xml
index 38a666d14..0c066e297 100755
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.gmail.nossr50.mcMMO
mcMMO
- 2.1.42
+ 2.1.43-SNAPSHOT
mcMMO
https://github.com/mcMMO-Dev/mcMMO
diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java
index 70dfa97c5..10d75d569 100644
--- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java
@@ -65,11 +65,13 @@ public class BlockListener implements Listener {
if(is.getAmount() <= 0)
continue;
+ //TODO: Ignore this abomination its rewritten in 2.2
if(!Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.MINING, is.getType())
&& !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.HERBALISM, is.getType())
&& !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.WOODCUTTING, is.getType()))
continue;
+ //TODO: Should just store the amount of drops in the metadata itself and use a loop
if(event.getBlock().getState().getMetadata(mcMMO.doubleDrops).size() > 0)
{
event.getBlock().getState().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is);
diff --git a/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java b/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java
index 5227f824c..d343e77c1 100644
--- a/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java
+++ b/src/main/java/com/gmail/nossr50/skills/salvage/SalvageManager.java
@@ -204,7 +204,7 @@ public class SalvageManager extends SkillManager {
EnchantmentStorageMeta enchantMeta = (EnchantmentStorageMeta) book.getItemMeta();
boolean downgraded = false;
- boolean arcaneFailure = false;
+ int arcaneFailureCount = 0;
for (Entry enchant : enchants.entrySet()) {
if (!Salvage.arcaneSalvageEnchantLoss
@@ -217,36 +217,28 @@ public class SalvageManager extends SkillManager {
&& RandomChanceUtil.checkRandomChanceExecutionSuccess(new RandomChanceSkillStatic(getExtractPartialEnchantChance(), getPlayer(), SubSkillType.SALVAGE_ARCANE_SALVAGE))) {
enchantMeta.addStoredEnchant(enchant.getKey(), enchant.getValue() - 1, true);
downgraded = true;
- }
- else {
- arcaneFailure = true;
- downgraded = true;
+ } else {
+ arcaneFailureCount++;
}
}
- if(!arcaneFailure)
+ if(failedAllEnchants(arcaneFailureCount, enchants.entrySet().size()))
{
- Map newEnchants = enchantMeta.getStoredEnchants();
-
- if (downgraded || newEnchants.size() < enchants.size()) {
- NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcanePartial");
- }
- else {
- NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcanePartial");
- }
-
- book.setItemMeta(enchantMeta);
- } else {
- if(enchantMeta.getStoredEnchants().size() > 0)
- {
- NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcaneFailed");
- }
+ NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcaneFailed");
return null;
+ } else if(downgraded)
+ {
+ NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Salvage.Skills.ArcanePartial");
}
+ book.setItemMeta(enchantMeta);
return book;
}
+ private boolean failedAllEnchants(int arcaneFailureCount, int size) {
+ return arcaneFailureCount == size;
+ }
+
/**
* Check if the player has tried to use an Anvil before.
* @param actualize