| 
					
				 | 
			
			
				@@ -28,8 +28,13 @@ import org.bukkit.entity.Player; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.bukkit.inventory.ItemStack; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.bukkit.inventory.PlayerInventory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Arrays; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map.Entry; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Objects; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Optional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class RepairManager extends SkillManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private boolean placedAnvil; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -128,6 +133,35 @@ public class RepairManager extends SkillManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // toRemove should be refreshed before the event call. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         toRemove = inventory.getItem(inventory.first(repairMaterial)).clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Check if we allow enchanted materials to be used to repair objects. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // (Servers may provide enchanted items that don't follow their intended use) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!mcMMO.p.getAdvancedConfig().getAllowEnchantedRepairMaterials()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // See if our proposed item is even enchanted in the first place. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (toRemove.getEnchantments().size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // Lots of array sorting to find a potential non-enchanted candidate item. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Optional<ItemStack> possibleMaterial = Arrays.stream(inventory.getContents()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .filter(Objects::nonNull) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .filter(p -> p.getType() == repairMaterial) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .filter(p -> p.getEnchantments().isEmpty()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        .findFirst(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // Fail out with "you need material" if we don't find a suitable alternative. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (possibleMaterial.isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String prettyName = repairable.getRepairMaterialPrettyName() == null ? StringUtils.getPrettyItemString(repairMaterial) : repairable.getRepairMaterialPrettyName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String materialsNeeded = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE_FAILED, "Skills.NeedMore.Extra", prettyName, materialsNeeded); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // Update our toRemove item to our suggested possible material. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                toRemove = possibleMaterial.get().clone(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // Call event 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (EventUtils.callRepairCheckEvent(player, (short) (startDurability - newDurability), toRemove, item).isCancelled()) { 
			 |