Does a complete list of possible enchantment combinations exist?

Discussion in 'Plugin Development' started by Father Of Time, Jul 5, 2012.

Thread Status:
Not open for further replies.
  1. Offline

    Father Of Time

    Good afternoon all,

    I have a quick question; does anyone know if a complete list of all possible enchantment combinations exist (not including "UnsafeEnchantments")? I really need this data, but I figured I would ask before creating the list myself because I manually mapped each potion to it's data value by hand (using a IDing tool I created), only to have that information released to the public 2 days after I completed the list.

    I would be extremely greatful to anyone who could get me on the right path, if not then I will have to simply make one *cries a little*.

    Thank you in advance to all who lend their experience with this matter. :D
     
  2. al the protection enchants conflict whits each other
    fortune and slik touch conflict
    al the damage increase enchants conflict
     
  3. Offline

    Father Of Time

    Although I appriciate the information, that isn't exactly what I had in mind. I am more looking for a list that is broken down into item types, like:
    1. Weapons
    2. Bows
    3. Armor
    4. Tools
    And in each group there should be each possible combination. As far as my understanding goes no item can naturally have more than three enchantments at once; so if this is correct there is a finite amount of combinations for each class of item. So in theory you don't need to figure out every possible combination for every specific item, but rather just every possible combo for "weapons", for "bows", etc. Because a helmet can have the same spectrum of enchantments as boots can, so there is no need to make each possibility for both items.

    This is a big request, one that I doubt anyone will have "on hand"; but I figured I would throw my request out there as a "hail mary" play before doing it myself. ;)
     
  4. mayby this is usefull: http://jd.bukkit.org/apidocs/index.html?org/bukkit/enchantments/EnchantmentWrapper.html
     
  5. Offline

    Father Of Time

    This would be the information I drafted my own chart from if nothing is already available; but it's not exactly what I am looking for at the moment.

    I would imagine this list would be quite long as it wouldn't just be a combination of each possible enchantment, but also their attribute level, so in the following example:

    Diamond Sword:
    Knockback 3, Sharp 1

    Would not match:

    Diamond Sword:
    Knockback 1, Sharp 1

    They would be two different entries. Although this seems like an insane amount of possible combinations (which I think it is), you would only need one map per item group, the last variable is just the Material Type of the enchanted item.

    I don't need anything code wise, just a simple excel spread sheet or something with this information that I can then convert into an enumerator.

    I hope I have managed to clarify my needs a bit more, and thank you once again for your attempts to assist me.
     
  6. Offline

    LucasEmanuel

    Why not just use wildcards for that list like:


    Code:
    Swords:
    Knockback X, Sharp X
     
    Bows:
    ArrowDamage X

    And why create a new entry for each weapon material?
     
  7. Offline

    Father Of Time

    The short answer, because this is for a shop economy system that tracks the selling price of every item sold and automatically calculates the economies "buy" price at 20% of the players selling price.

    So I need to know every possible item because a player won't sell a Knockback 5 diamond sword for the same price they would sell a Knockback 1 for; or a Diamond pick with fortune 3 woudn't sell for the same price as a hoe with fortune 3.

    The goal of this project is to do all of the hard, brain numbing information harvesting up front, then just have a simple enumerator that I can call and get the values from. This system already works for every MaterialType and potion type in the game, but I want to expand it to make it cover every enchantable item too.

    I hope this helps clarify. :D
     
  8. Offline

    nisovin

    You could probably use some of the API methods to create a simple script that would generate this list for you.
     
    Father Of Time likes this.
  9. Offline

    Father Of Time

    Thats an idea I didn't think of... I very well may take this approach; thank you nisovin.

    Now to wrap my brain around how... *smiles*

    Edit: This is what I am looking for:

    Okay, I definately think my logic is off... there is no way there is a possible 52,316,033 combinations... is there?

    Belong is a chart that I made; sadly I am at work and only had a few minutes to throw it together, so likely my logic is just flat out wrong.

    Edit: Sorry the browser messed up the table structure, and I am heading out of my office now so I don't have time to fix it... hopefully some sense can be made of this madness. :cool:

    Enchantment Type Max power Item Type Material Count Combinations
    Protection 4 Armor 4 16
    Fire Protection 4 Armor 4 16
    Feather Fall 4 Armor 4 16
    Blast Protection 4 Armor 4 16
    Projectile Protection 4 Armor 4 16
    Respiration 3 Armor 4 12
    Aqua Affinity 1 Armor 4 4 Armor combos 50331648
    Sharpness 5 Weapon 5 25
    Smite 5 Weapon 5 25
    Bane of Arthropods 5 Weapon 5 25
    Knockback 2 Weapon 5 10
    Fire Aspect 2 Weapon 5 10 Weapon combos 1562500
    Looting 3 Tool 5 15
    Efficiency 5 Tool 5 25
    Silk Touch 1 Tool 5 5
    Unbreaking 3 Tool 5 15
    Fortune 3 Tool 5 15 Tool combos 421875
    Power 5 Bow 1 5
    Punch 2 Bow 1 2
    Flame 1 Bow 1 1
    Infinity 1 Bow 1 1 Bow combos 10
    Total combos 52316033

    Material Types
    Wood
    Leather
    Stone
    Iron
    Diamond
    Gold

    I know this also includes duplicates ( knockback 3 & sharpness 2, aswell as Sharpness 2 & knockback 3)... Can anyone lend me their mathmatically sound mind and assist me with getting a realisic number of possible combinations so that I can determine whether or not creating an enumerator to represent the possible creations is feasible or not (which I am leaning towards not atm).

    Also, if you have a more logical method of determining this information other than simply mapping it our manually like I am I would love to hear it.

    Thank you once again to anyone who is able to assist with this matter. :D

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 26, 2016
  10. Offline

    LucasEmanuel

    Well could we take a look at your script? :)
     
  11. Offline

    Father Of Time

    I do apologize but this plug-in is not publicly available; it's one of twelve private plug-ins that we manage for the MCApocalypse server.
     
  12. Offline

    LucasEmanuel

    I dont have any interest in your plugin so dont worry :) I just wanted to take a look on how you got those numbers above :)
     
  13. Offline

    Father Of Time

    It was done via an excel spreadsheet, but the numbers were incorrect after further inspection.

    However the above numbers are now irrelivant as I ended up making a tool that catalogs them as they are crafted via an enchanting table as appose to attempting to manually create the list upfront. At this point I don't know if it will suffice but because the workload on my behalf will be significantly less using this new approach I figured... what the hell, lets see if it works. ;)
     
  14. Offline

    LucasEmanuel

    Log each new enchantmentcombination to a yaml file and after a time hopefully it would be complete :)
     
  15. Offline

    Father Of Time

    I ended up taking a different approach using TreeMaps and enumerators.

    I first check to see if the item being enchanted matches any items that already exist in the tree (using equals comparator between the crafted items enchantments collection and the collection in my tree) and if none are equal (meaning this enchantment has not been recorded) then record it. I dont have to worry about getting duplicates like:

    Fire Aspect 3, Knockback 1
    Knockback 1, Fire Aspect 3

    Because as long as the two collections are of the same length and both contain identical entries (regardless of order) their equals comparator returns true.

    Also, because the system uses the TreeMap they will always be sorted in alphebetical order, making the naming convention easier to understand. The code is something like:

    DS:FA1:KN3:UN5

    Which would represent the following:

    A diamond sword with Fire Apect 1, Knockback 3 and Unbreaking 5

    Even if the item that was originally mapped didn't have the attributes in this specific order the system will re-order them.

    Honestly, I have noooo idea how well this will work ( I havent had a chance to test it, I'm at work), but I took about 5 attempts at writting this, and this is the only one that i've found so far that is small and efficient, and offers desired results (in theory).

    I personally dispise yml, I don't believe I've used it in a single project to date. :D
     
  16. Offline

    LucasEmanuel

    Well i was hoping that once it would of been completed you would share that yaml-file with the community for everyones benefit ;)

    Or if i ever would have time and feel like it i might create a small script to do all that work and output it to a yaml file :)
     
  17. Offline

    Father Of Time

    I would be more than happy to share the information, but sadly I think people would run into the same problem I did when starting this project; the data would be fairly useless in it's current format to anyone but me, and the effort of reformatting the master list to something that was usable would likely be as much effort as just creating your own method to obtain the data.

    But yes, if I ever finish mapping the data I will be more than happy to share; however, our math leads us to believe that there are around 58,000 combos (including duplicates), so I dont think the list will be done anytime soon. ;)

    edit: not to mention, how will I know when I am ever done... lol. This truly has been a fun project to wrap my head around purely because of the large quantity of variables that had to be taken into account.
     
  18. Offline

    McLuke500

  19. Offline

    Father Of Time

    Thank you for the assistance, but sadly that is just a list of the types of enchantments; some of the other things that need to be taken into account are:

    1) what material type is the enchantment on ( sword, armor, etc).
    2) what material is the enchantment made of ( iron, diamond, etc.)
    3) what enchantment does it have
    4) what level is the enchantment
    5) how many enchantments does it have
    6) what enchantments conflict with each other (for isntance, you cant have 2 protections on one peice of armor)
    7) What enchantments specific items can have (for instance, you can't have blast protection on a shovel)

    When you mix and match all of those variables the total quantity of possible combinations sky rockets, for instance...

    1) a stone pick with unbreaking
    2) a stone pick with unbreaking 2
    3) a stone pick with unbreaking1 and efficiency 2
    4) an iron pick with efficiency 3
    5) a diamond pick with unbreaking1 and efficiency 2

    etc, etc. if you begin to truly mix and match every possible comination the total number is quite large.
     
  20. Offline

    md_5

    Spent a couple of minutes on this problem, but in reality no answer actually helps what you want to do (price all the items, unless you want to spend weeks manually pricing)
    Instead of trying to gather a list of all combinations that you can give a base price to, why not take every plausible enchantment/level, give it a value, and then add its value to the base value of the itemstack.
    Lets say there are roughly 30 enchantments in Minecraft and each has, say 5 possible legitimate levels, thats only 150 different prices. From there on, you can simply get a price for the itemstack by adding the values of the enchantments, and the stack itself.

    List of all enchanted materials (659 items):
    Show Spoiler
    Code:
    IRON_SPADE with DURABILITY I
    IRON_SPADE with DURABILITY II
    IRON_SPADE with DURABILITY III
    IRON_SPADE with LOOT_BONUS_BLOCKS I
    IRON_SPADE with LOOT_BONUS_BLOCKS II
    IRON_SPADE with LOOT_BONUS_BLOCKS III
    IRON_SPADE with DIG_SPEED I
    IRON_SPADE with DIG_SPEED II
    IRON_SPADE with DIG_SPEED III
    IRON_SPADE with DIG_SPEED IV
    IRON_SPADE with DIG_SPEED V
    IRON_SPADE with SILK_TOUCH I
    IRON_PICKAXE with DURABILITY I
    IRON_PICKAXE with DURABILITY II
    IRON_PICKAXE with DURABILITY III
    IRON_PICKAXE with LOOT_BONUS_BLOCKS I
    IRON_PICKAXE with LOOT_BONUS_BLOCKS II
    IRON_PICKAXE with LOOT_BONUS_BLOCKS III
    IRON_PICKAXE with DIG_SPEED I
    IRON_PICKAXE with DIG_SPEED II
    IRON_PICKAXE with DIG_SPEED III
    IRON_PICKAXE with DIG_SPEED IV
    IRON_PICKAXE with DIG_SPEED V
    IRON_PICKAXE with SILK_TOUCH I
    IRON_AXE with DURABILITY I
    IRON_AXE with DURABILITY II
    IRON_AXE with DURABILITY III
    IRON_AXE with LOOT_BONUS_BLOCKS I
    IRON_AXE with LOOT_BONUS_BLOCKS II
    IRON_AXE with LOOT_BONUS_BLOCKS III
    IRON_AXE with DIG_SPEED I
    IRON_AXE with DIG_SPEED II
    IRON_AXE with DIG_SPEED III
    IRON_AXE with DIG_SPEED IV
    IRON_AXE with DIG_SPEED V
    IRON_AXE with SILK_TOUCH I
    BOW with ARROW_INFINITE I
    BOW with ARROW_FIRE I
    BOW with ARROW_KNOCKBACK I
    BOW with ARROW_KNOCKBACK II
    BOW with ARROW_DAMAGE I
    BOW with ARROW_DAMAGE II
    BOW with ARROW_DAMAGE III
    BOW with ARROW_DAMAGE IV
    BOW with ARROW_DAMAGE V
    IRON_SWORD with DAMAGE_UNDEAD I
    IRON_SWORD with DAMAGE_UNDEAD II
    IRON_SWORD with DAMAGE_UNDEAD III
    IRON_SWORD with DAMAGE_UNDEAD IV
    IRON_SWORD with DAMAGE_UNDEAD V
    IRON_SWORD with DAMAGE_ALL I
    IRON_SWORD with DAMAGE_ALL II
    IRON_SWORD with DAMAGE_ALL III
    IRON_SWORD with DAMAGE_ALL IV
    IRON_SWORD with DAMAGE_ALL V
    IRON_SWORD with KNOCKBACK I
    IRON_SWORD with KNOCKBACK II
    IRON_SWORD with DAMAGE_ARTHROPODS I
    IRON_SWORD with DAMAGE_ARTHROPODS II
    IRON_SWORD with DAMAGE_ARTHROPODS III
    IRON_SWORD with DAMAGE_ARTHROPODS IV
    IRON_SWORD with DAMAGE_ARTHROPODS V
    IRON_SWORD with LOOT_BONUS_MOBS I
    IRON_SWORD with LOOT_BONUS_MOBS II
    IRON_SWORD with LOOT_BONUS_MOBS III
    IRON_SWORD with FIRE_ASPECT I
    IRON_SWORD with FIRE_ASPECT II
    WOOD_SWORD with DAMAGE_UNDEAD I
    WOOD_SWORD with DAMAGE_UNDEAD II
    WOOD_SWORD with DAMAGE_UNDEAD III
    WOOD_SWORD with DAMAGE_UNDEAD IV
    WOOD_SWORD with DAMAGE_UNDEAD V
    WOOD_SWORD with DAMAGE_ALL I
    WOOD_SWORD with DAMAGE_ALL II
    WOOD_SWORD with DAMAGE_ALL III
    WOOD_SWORD with DAMAGE_ALL IV
    WOOD_SWORD with DAMAGE_ALL V
    WOOD_SWORD with KNOCKBACK I
    WOOD_SWORD with KNOCKBACK II
    WOOD_SWORD with DAMAGE_ARTHROPODS I
    WOOD_SWORD with DAMAGE_ARTHROPODS II
    WOOD_SWORD with DAMAGE_ARTHROPODS III
    WOOD_SWORD with DAMAGE_ARTHROPODS IV
    WOOD_SWORD with DAMAGE_ARTHROPODS V
    WOOD_SWORD with LOOT_BONUS_MOBS I
    WOOD_SWORD with LOOT_BONUS_MOBS II
    WOOD_SWORD with LOOT_BONUS_MOBS III
    WOOD_SWORD with FIRE_ASPECT I
    WOOD_SWORD with FIRE_ASPECT II
    WOOD_SPADE with DURABILITY I
    WOOD_SPADE with DURABILITY II
    WOOD_SPADE with DURABILITY III
    WOOD_SPADE with LOOT_BONUS_BLOCKS I
    WOOD_SPADE with LOOT_BONUS_BLOCKS II
    WOOD_SPADE with LOOT_BONUS_BLOCKS III
    WOOD_SPADE with DIG_SPEED I
    WOOD_SPADE with DIG_SPEED II
    WOOD_SPADE with DIG_SPEED III
    WOOD_SPADE with DIG_SPEED IV
    WOOD_SPADE with DIG_SPEED V
    WOOD_SPADE with SILK_TOUCH I
    WOOD_PICKAXE with DURABILITY I
    WOOD_PICKAXE with DURABILITY II
    WOOD_PICKAXE with DURABILITY III
    WOOD_PICKAXE with LOOT_BONUS_BLOCKS I
    WOOD_PICKAXE with LOOT_BONUS_BLOCKS II
    WOOD_PICKAXE with LOOT_BONUS_BLOCKS III
    WOOD_PICKAXE with DIG_SPEED I
    WOOD_PICKAXE with DIG_SPEED II
    WOOD_PICKAXE with DIG_SPEED III
    WOOD_PICKAXE with DIG_SPEED IV
    WOOD_PICKAXE with DIG_SPEED V
    WOOD_PICKAXE with SILK_TOUCH I
    WOOD_AXE with DURABILITY I
    WOOD_AXE with DURABILITY II
    WOOD_AXE with DURABILITY III
    WOOD_AXE with LOOT_BONUS_BLOCKS I
    WOOD_AXE with LOOT_BONUS_BLOCKS II
    WOOD_AXE with LOOT_BONUS_BLOCKS III
    WOOD_AXE with DIG_SPEED I
    WOOD_AXE with DIG_SPEED II
    WOOD_AXE with DIG_SPEED III
    WOOD_AXE with DIG_SPEED IV
    WOOD_AXE with DIG_SPEED V
    WOOD_AXE with SILK_TOUCH I
    STONE_SWORD with DAMAGE_UNDEAD I
    STONE_SWORD with DAMAGE_UNDEAD II
    STONE_SWORD with DAMAGE_UNDEAD III
    STONE_SWORD with DAMAGE_UNDEAD IV
    STONE_SWORD with DAMAGE_UNDEAD V
    STONE_SWORD with DAMAGE_ALL I
    STONE_SWORD with DAMAGE_ALL II
    STONE_SWORD with DAMAGE_ALL III
    STONE_SWORD with DAMAGE_ALL IV
    STONE_SWORD with DAMAGE_ALL V
    STONE_SWORD with KNOCKBACK I
    STONE_SWORD with KNOCKBACK II
    STONE_SWORD with DAMAGE_ARTHROPODS I
    STONE_SWORD with DAMAGE_ARTHROPODS II
    STONE_SWORD with DAMAGE_ARTHROPODS III
    STONE_SWORD with DAMAGE_ARTHROPODS IV
    STONE_SWORD with DAMAGE_ARTHROPODS V
    STONE_SWORD with LOOT_BONUS_MOBS I
    STONE_SWORD with LOOT_BONUS_MOBS II
    STONE_SWORD with LOOT_BONUS_MOBS III
    STONE_SWORD with FIRE_ASPECT I
    STONE_SWORD with FIRE_ASPECT II
    STONE_SPADE with DURABILITY I
    STONE_SPADE with DURABILITY II
    STONE_SPADE with DURABILITY III
    STONE_SPADE with LOOT_BONUS_BLOCKS I
    STONE_SPADE with LOOT_BONUS_BLOCKS II
    STONE_SPADE with LOOT_BONUS_BLOCKS III
    STONE_SPADE with DIG_SPEED I
    STONE_SPADE with DIG_SPEED II
    STONE_SPADE with DIG_SPEED III
    STONE_SPADE with DIG_SPEED IV
    STONE_SPADE with DIG_SPEED V
    STONE_SPADE with SILK_TOUCH I
    STONE_PICKAXE with DURABILITY I
    STONE_PICKAXE with DURABILITY II
    STONE_PICKAXE with DURABILITY III
    STONE_PICKAXE with LOOT_BONUS_BLOCKS I
    STONE_PICKAXE with LOOT_BONUS_BLOCKS II
    STONE_PICKAXE with LOOT_BONUS_BLOCKS III
    STONE_PICKAXE with DIG_SPEED I
    STONE_PICKAXE with DIG_SPEED II
    STONE_PICKAXE with DIG_SPEED III
    STONE_PICKAXE with DIG_SPEED IV
    STONE_PICKAXE with DIG_SPEED V
    STONE_PICKAXE with SILK_TOUCH I
    STONE_AXE with DURABILITY I
    STONE_AXE with DURABILITY II
    STONE_AXE with DURABILITY III
    STONE_AXE with LOOT_BONUS_BLOCKS I
    STONE_AXE with LOOT_BONUS_BLOCKS II
    STONE_AXE with LOOT_BONUS_BLOCKS III
    STONE_AXE with DIG_SPEED I
    STONE_AXE with DIG_SPEED II
    STONE_AXE with DIG_SPEED III
    STONE_AXE with DIG_SPEED IV
    STONE_AXE with DIG_SPEED V
    STONE_AXE with SILK_TOUCH I
    DIAMOND_SWORD with DAMAGE_UNDEAD I
    DIAMOND_SWORD with DAMAGE_UNDEAD II
    DIAMOND_SWORD with DAMAGE_UNDEAD III
    DIAMOND_SWORD with DAMAGE_UNDEAD IV
    DIAMOND_SWORD with DAMAGE_UNDEAD V
    DIAMOND_SWORD with DAMAGE_ALL I
    DIAMOND_SWORD with DAMAGE_ALL II
    DIAMOND_SWORD with DAMAGE_ALL III
    DIAMOND_SWORD with DAMAGE_ALL IV
    DIAMOND_SWORD with DAMAGE_ALL V
    DIAMOND_SWORD with KNOCKBACK I
    DIAMOND_SWORD with KNOCKBACK II
    DIAMOND_SWORD with DAMAGE_ARTHROPODS I
    DIAMOND_SWORD with DAMAGE_ARTHROPODS II
    DIAMOND_SWORD with DAMAGE_ARTHROPODS III
    DIAMOND_SWORD with DAMAGE_ARTHROPODS IV
    DIAMOND_SWORD with DAMAGE_ARTHROPODS V
    DIAMOND_SWORD with LOOT_BONUS_MOBS I
    DIAMOND_SWORD with LOOT_BONUS_MOBS II
    DIAMOND_SWORD with LOOT_BONUS_MOBS III
    DIAMOND_SWORD with FIRE_ASPECT I
    DIAMOND_SWORD with FIRE_ASPECT II
    DIAMOND_SPADE with DURABILITY I
    DIAMOND_SPADE with DURABILITY II
    DIAMOND_SPADE with DURABILITY III
    DIAMOND_SPADE with LOOT_BONUS_BLOCKS I
    DIAMOND_SPADE with LOOT_BONUS_BLOCKS II
    DIAMOND_SPADE with LOOT_BONUS_BLOCKS III
    DIAMOND_SPADE with DIG_SPEED I
    DIAMOND_SPADE with DIG_SPEED II
    DIAMOND_SPADE with DIG_SPEED III
    DIAMOND_SPADE with DIG_SPEED IV
    DIAMOND_SPADE with DIG_SPEED V
    DIAMOND_SPADE with SILK_TOUCH I
    DIAMOND_PICKAXE with DURABILITY I
    DIAMOND_PICKAXE with DURABILITY II
    DIAMOND_PICKAXE with DURABILITY III
    DIAMOND_PICKAXE with LOOT_BONUS_BLOCKS I
    DIAMOND_PICKAXE with LOOT_BONUS_BLOCKS II
    DIAMOND_PICKAXE with LOOT_BONUS_BLOCKS III
    DIAMOND_PICKAXE with DIG_SPEED I
    DIAMOND_PICKAXE with DIG_SPEED II
    DIAMOND_PICKAXE with DIG_SPEED III
    DIAMOND_PICKAXE with DIG_SPEED IV
    DIAMOND_PICKAXE with DIG_SPEED V
    DIAMOND_PICKAXE with SILK_TOUCH I
    DIAMOND_AXE with DURABILITY I
    DIAMOND_AXE with DURABILITY II
    DIAMOND_AXE with DURABILITY III
    DIAMOND_AXE with LOOT_BONUS_BLOCKS I
    DIAMOND_AXE with LOOT_BONUS_BLOCKS II
    DIAMOND_AXE with LOOT_BONUS_BLOCKS III
    DIAMOND_AXE with DIG_SPEED I
    DIAMOND_AXE with DIG_SPEED II
    DIAMOND_AXE with DIG_SPEED III
    DIAMOND_AXE with DIG_SPEED IV
    DIAMOND_AXE with DIG_SPEED V
    DIAMOND_AXE with SILK_TOUCH I
    GOLD_SWORD with DAMAGE_UNDEAD I
    GOLD_SWORD with DAMAGE_UNDEAD II
    GOLD_SWORD with DAMAGE_UNDEAD III
    GOLD_SWORD with DAMAGE_UNDEAD IV
    GOLD_SWORD with DAMAGE_UNDEAD V
    GOLD_SWORD with DAMAGE_ALL I
    GOLD_SWORD with DAMAGE_ALL II
    GOLD_SWORD with DAMAGE_ALL III
    GOLD_SWORD with DAMAGE_ALL IV
    GOLD_SWORD with DAMAGE_ALL V
    GOLD_SWORD with KNOCKBACK I
    GOLD_SWORD with KNOCKBACK II
    GOLD_SWORD with DAMAGE_ARTHROPODS I
    GOLD_SWORD with DAMAGE_ARTHROPODS II
    GOLD_SWORD with DAMAGE_ARTHROPODS III
    GOLD_SWORD with DAMAGE_ARTHROPODS IV
    GOLD_SWORD with DAMAGE_ARTHROPODS V
    GOLD_SWORD with LOOT_BONUS_MOBS I
    GOLD_SWORD with LOOT_BONUS_MOBS II
    GOLD_SWORD with LOOT_BONUS_MOBS III
    GOLD_SWORD with FIRE_ASPECT I
    GOLD_SWORD with FIRE_ASPECT II
    GOLD_SPADE with DURABILITY I
    GOLD_SPADE with DURABILITY II
    GOLD_SPADE with DURABILITY III
    GOLD_SPADE with LOOT_BONUS_BLOCKS I
    GOLD_SPADE with LOOT_BONUS_BLOCKS II
    GOLD_SPADE with LOOT_BONUS_BLOCKS III
    GOLD_SPADE with DIG_SPEED I
    GOLD_SPADE with DIG_SPEED II
    GOLD_SPADE with DIG_SPEED III
    GOLD_SPADE with DIG_SPEED IV
    GOLD_SPADE with DIG_SPEED V
    GOLD_SPADE with SILK_TOUCH I
    GOLD_PICKAXE with DURABILITY I
    GOLD_PICKAXE with DURABILITY II
    GOLD_PICKAXE with DURABILITY III
    GOLD_PICKAXE with LOOT_BONUS_BLOCKS I
    GOLD_PICKAXE with LOOT_BONUS_BLOCKS II
    GOLD_PICKAXE with LOOT_BONUS_BLOCKS III
    GOLD_PICKAXE with DIG_SPEED I
    GOLD_PICKAXE with DIG_SPEED II
    GOLD_PICKAXE with DIG_SPEED III
    GOLD_PICKAXE with DIG_SPEED IV
    GOLD_PICKAXE with DIG_SPEED V
    GOLD_PICKAXE with SILK_TOUCH I
    GOLD_AXE with DURABILITY I
    GOLD_AXE with DURABILITY II
    GOLD_AXE with DURABILITY III
    GOLD_AXE with LOOT_BONUS_BLOCKS I
    GOLD_AXE with LOOT_BONUS_BLOCKS II
    GOLD_AXE with LOOT_BONUS_BLOCKS III
    GOLD_AXE with DIG_SPEED I
    GOLD_AXE with DIG_SPEED II
    GOLD_AXE with DIG_SPEED III
    GOLD_AXE with DIG_SPEED IV
    GOLD_AXE with DIG_SPEED V
    GOLD_AXE with SILK_TOUCH I
    LEATHER_HELMET with PROTECTION_ENVIRONMENTAL I
    LEATHER_HELMET with PROTECTION_ENVIRONMENTAL II
    LEATHER_HELMET with PROTECTION_ENVIRONMENTAL III
    LEATHER_HELMET with PROTECTION_ENVIRONMENTAL IV
    LEATHER_HELMET with PROTECTION_FIRE I
    LEATHER_HELMET with PROTECTION_FIRE II
    LEATHER_HELMET with PROTECTION_FIRE III
    LEATHER_HELMET with PROTECTION_FIRE IV
    LEATHER_HELMET with PROTECTION_EXPLOSIONS I
    LEATHER_HELMET with PROTECTION_EXPLOSIONS II
    LEATHER_HELMET with PROTECTION_EXPLOSIONS III
    LEATHER_HELMET with PROTECTION_EXPLOSIONS IV
    LEATHER_HELMET with PROTECTION_PROJECTILE I
    LEATHER_HELMET with PROTECTION_PROJECTILE II
    LEATHER_HELMET with PROTECTION_PROJECTILE III
    LEATHER_HELMET with PROTECTION_PROJECTILE IV
    LEATHER_HELMET with OXYGEN I
    LEATHER_HELMET with OXYGEN II
    LEATHER_HELMET with OXYGEN III
    LEATHER_HELMET with WATER_WORKER I
    LEATHER_CHESTPLATE with PROTECTION_ENVIRONMENTAL I
    LEATHER_CHESTPLATE with PROTECTION_ENVIRONMENTAL II
    LEATHER_CHESTPLATE with PROTECTION_ENVIRONMENTAL III
    LEATHER_CHESTPLATE with PROTECTION_ENVIRONMENTAL IV
    LEATHER_CHESTPLATE with PROTECTION_FIRE I
    LEATHER_CHESTPLATE with PROTECTION_FIRE II
    LEATHER_CHESTPLATE with PROTECTION_FIRE III
    LEATHER_CHESTPLATE with PROTECTION_FIRE IV
    LEATHER_CHESTPLATE with PROTECTION_EXPLOSIONS I
    LEATHER_CHESTPLATE with PROTECTION_EXPLOSIONS II
    LEATHER_CHESTPLATE with PROTECTION_EXPLOSIONS III
    LEATHER_CHESTPLATE with PROTECTION_EXPLOSIONS IV
    LEATHER_CHESTPLATE with PROTECTION_PROJECTILE I
    LEATHER_CHESTPLATE with PROTECTION_PROJECTILE II
    LEATHER_CHESTPLATE with PROTECTION_PROJECTILE III
    LEATHER_CHESTPLATE with PROTECTION_PROJECTILE IV
    LEATHER_LEGGINGS with PROTECTION_ENVIRONMENTAL I
    LEATHER_LEGGINGS with PROTECTION_ENVIRONMENTAL II
    LEATHER_LEGGINGS with PROTECTION_ENVIRONMENTAL III
    LEATHER_LEGGINGS with PROTECTION_ENVIRONMENTAL IV
    LEATHER_LEGGINGS with PROTECTION_FIRE I
    LEATHER_LEGGINGS with PROTECTION_FIRE II
    LEATHER_LEGGINGS with PROTECTION_FIRE III
    LEATHER_LEGGINGS with PROTECTION_FIRE IV
    LEATHER_LEGGINGS with PROTECTION_EXPLOSIONS I
    LEATHER_LEGGINGS with PROTECTION_EXPLOSIONS II
    LEATHER_LEGGINGS with PROTECTION_EXPLOSIONS III
    LEATHER_LEGGINGS with PROTECTION_EXPLOSIONS IV
    LEATHER_LEGGINGS with PROTECTION_PROJECTILE I
    LEATHER_LEGGINGS with PROTECTION_PROJECTILE II
    LEATHER_LEGGINGS with PROTECTION_PROJECTILE III
    LEATHER_LEGGINGS with PROTECTION_PROJECTILE IV
    LEATHER_BOOTS with PROTECTION_ENVIRONMENTAL I
    LEATHER_BOOTS with PROTECTION_ENVIRONMENTAL II
    LEATHER_BOOTS with PROTECTION_ENVIRONMENTAL III
    LEATHER_BOOTS with PROTECTION_ENVIRONMENTAL IV
    LEATHER_BOOTS with PROTECTION_FIRE I
    LEATHER_BOOTS with PROTECTION_FIRE II
    LEATHER_BOOTS with PROTECTION_FIRE III
    LEATHER_BOOTS with PROTECTION_FIRE IV
    LEATHER_BOOTS with PROTECTION_FALL I
    LEATHER_BOOTS with PROTECTION_FALL II
    LEATHER_BOOTS with PROTECTION_FALL III
    LEATHER_BOOTS with PROTECTION_FALL IV
    LEATHER_BOOTS with PROTECTION_EXPLOSIONS I
    LEATHER_BOOTS with PROTECTION_EXPLOSIONS II
    LEATHER_BOOTS with PROTECTION_EXPLOSIONS III
    LEATHER_BOOTS with PROTECTION_EXPLOSIONS IV
    LEATHER_BOOTS with PROTECTION_PROJECTILE I
    LEATHER_BOOTS with PROTECTION_PROJECTILE II
    LEATHER_BOOTS with PROTECTION_PROJECTILE III
    LEATHER_BOOTS with PROTECTION_PROJECTILE IV
    CHAINMAIL_HELMET with PROTECTION_ENVIRONMENTAL I
    CHAINMAIL_HELMET with PROTECTION_ENVIRONMENTAL II
    CHAINMAIL_HELMET with PROTECTION_ENVIRONMENTAL III
    CHAINMAIL_HELMET with PROTECTION_ENVIRONMENTAL IV
    CHAINMAIL_HELMET with PROTECTION_FIRE I
    CHAINMAIL_HELMET with PROTECTION_FIRE II
    CHAINMAIL_HELMET with PROTECTION_FIRE III
    CHAINMAIL_HELMET with PROTECTION_FIRE IV
    CHAINMAIL_HELMET with PROTECTION_EXPLOSIONS I
    CHAINMAIL_HELMET with PROTECTION_EXPLOSIONS II
    CHAINMAIL_HELMET with PROTECTION_EXPLOSIONS III
    CHAINMAIL_HELMET with PROTECTION_EXPLOSIONS IV
    CHAINMAIL_HELMET with PROTECTION_PROJECTILE I
    CHAINMAIL_HELMET with PROTECTION_PROJECTILE II
    CHAINMAIL_HELMET with PROTECTION_PROJECTILE III
    CHAINMAIL_HELMET with PROTECTION_PROJECTILE IV
    CHAINMAIL_HELMET with OXYGEN I
    CHAINMAIL_HELMET with OXYGEN II
    CHAINMAIL_HELMET with OXYGEN III
    CHAINMAIL_HELMET with WATER_WORKER I
    CHAINMAIL_CHESTPLATE with PROTECTION_ENVIRONMENTAL I
    CHAINMAIL_CHESTPLATE with PROTECTION_ENVIRONMENTAL II
    CHAINMAIL_CHESTPLATE with PROTECTION_ENVIRONMENTAL III
    CHAINMAIL_CHESTPLATE with PROTECTION_ENVIRONMENTAL IV
    CHAINMAIL_CHESTPLATE with PROTECTION_FIRE I
    CHAINMAIL_CHESTPLATE with PROTECTION_FIRE II
    CHAINMAIL_CHESTPLATE with PROTECTION_FIRE III
    CHAINMAIL_CHESTPLATE with PROTECTION_FIRE IV
    CHAINMAIL_CHESTPLATE with PROTECTION_EXPLOSIONS I
    CHAINMAIL_CHESTPLATE with PROTECTION_EXPLOSIONS II
    CHAINMAIL_CHESTPLATE with PROTECTION_EXPLOSIONS III
    CHAINMAIL_CHESTPLATE with PROTECTION_EXPLOSIONS IV
    CHAINMAIL_CHESTPLATE with PROTECTION_PROJECTILE I
    CHAINMAIL_CHESTPLATE with PROTECTION_PROJECTILE II
    CHAINMAIL_CHESTPLATE with PROTECTION_PROJECTILE III
    CHAINMAIL_CHESTPLATE with PROTECTION_PROJECTILE IV
    CHAINMAIL_LEGGINGS with PROTECTION_ENVIRONMENTAL I
    CHAINMAIL_LEGGINGS with PROTECTION_ENVIRONMENTAL II
    CHAINMAIL_LEGGINGS with PROTECTION_ENVIRONMENTAL III
    CHAINMAIL_LEGGINGS with PROTECTION_ENVIRONMENTAL IV
    CHAINMAIL_LEGGINGS with PROTECTION_FIRE I
    CHAINMAIL_LEGGINGS with PROTECTION_FIRE II
    CHAINMAIL_LEGGINGS with PROTECTION_FIRE III
    CHAINMAIL_LEGGINGS with PROTECTION_FIRE IV
    CHAINMAIL_LEGGINGS with PROTECTION_EXPLOSIONS I
    CHAINMAIL_LEGGINGS with PROTECTION_EXPLOSIONS II
    CHAINMAIL_LEGGINGS with PROTECTION_EXPLOSIONS III
    CHAINMAIL_LEGGINGS with PROTECTION_EXPLOSIONS IV
    CHAINMAIL_LEGGINGS with PROTECTION_PROJECTILE I
    CHAINMAIL_LEGGINGS with PROTECTION_PROJECTILE II
    CHAINMAIL_LEGGINGS with PROTECTION_PROJECTILE III
    CHAINMAIL_LEGGINGS with PROTECTION_PROJECTILE IV
    CHAINMAIL_BOOTS with PROTECTION_ENVIRONMENTAL I
    CHAINMAIL_BOOTS with PROTECTION_ENVIRONMENTAL II
    CHAINMAIL_BOOTS with PROTECTION_ENVIRONMENTAL III
    CHAINMAIL_BOOTS with PROTECTION_ENVIRONMENTAL IV
    CHAINMAIL_BOOTS with PROTECTION_FIRE I
    CHAINMAIL_BOOTS with PROTECTION_FIRE II
    CHAINMAIL_BOOTS with PROTECTION_FIRE III
    CHAINMAIL_BOOTS with PROTECTION_FIRE IV
    CHAINMAIL_BOOTS with PROTECTION_FALL I
    CHAINMAIL_BOOTS with PROTECTION_FALL II
    CHAINMAIL_BOOTS with PROTECTION_FALL III
    CHAINMAIL_BOOTS with PROTECTION_FALL IV
    CHAINMAIL_BOOTS with PROTECTION_EXPLOSIONS I
    CHAINMAIL_BOOTS with PROTECTION_EXPLOSIONS II
    CHAINMAIL_BOOTS with PROTECTION_EXPLOSIONS III
    CHAINMAIL_BOOTS with PROTECTION_EXPLOSIONS IV
    CHAINMAIL_BOOTS with PROTECTION_PROJECTILE I
    CHAINMAIL_BOOTS with PROTECTION_PROJECTILE II
    CHAINMAIL_BOOTS with PROTECTION_PROJECTILE III
    CHAINMAIL_BOOTS with PROTECTION_PROJECTILE IV
    IRON_HELMET with PROTECTION_ENVIRONMENTAL I
    IRON_HELMET with PROTECTION_ENVIRONMENTAL II
    IRON_HELMET with PROTECTION_ENVIRONMENTAL III
    IRON_HELMET with PROTECTION_ENVIRONMENTAL IV
    IRON_HELMET with PROTECTION_FIRE I
    IRON_HELMET with PROTECTION_FIRE II
    IRON_HELMET with PROTECTION_FIRE III
    IRON_HELMET with PROTECTION_FIRE IV
    IRON_HELMET with PROTECTION_EXPLOSIONS I
    IRON_HELMET with PROTECTION_EXPLOSIONS II
    IRON_HELMET with PROTECTION_EXPLOSIONS III
    IRON_HELMET with PROTECTION_EXPLOSIONS IV
    IRON_HELMET with PROTECTION_PROJECTILE I
    IRON_HELMET with PROTECTION_PROJECTILE II
    IRON_HELMET with PROTECTION_PROJECTILE III
    IRON_HELMET with PROTECTION_PROJECTILE IV
    IRON_HELMET with OXYGEN I
    IRON_HELMET with OXYGEN II
    IRON_HELMET with OXYGEN III
    IRON_HELMET with WATER_WORKER I
    IRON_CHESTPLATE with PROTECTION_ENVIRONMENTAL I
    IRON_CHESTPLATE with PROTECTION_ENVIRONMENTAL II
    IRON_CHESTPLATE with PROTECTION_ENVIRONMENTAL III
    IRON_CHESTPLATE with PROTECTION_ENVIRONMENTAL IV
    IRON_CHESTPLATE with PROTECTION_FIRE I
    IRON_CHESTPLATE with PROTECTION_FIRE II
    IRON_CHESTPLATE with PROTECTION_FIRE III
    IRON_CHESTPLATE with PROTECTION_FIRE IV
    IRON_CHESTPLATE with PROTECTION_EXPLOSIONS I
    IRON_CHESTPLATE with PROTECTION_EXPLOSIONS II
    IRON_CHESTPLATE with PROTECTION_EXPLOSIONS III
    IRON_CHESTPLATE with PROTECTION_EXPLOSIONS IV
    IRON_CHESTPLATE with PROTECTION_PROJECTILE I
    IRON_CHESTPLATE with PROTECTION_PROJECTILE II
    IRON_CHESTPLATE with PROTECTION_PROJECTILE III
    IRON_CHESTPLATE with PROTECTION_PROJECTILE IV
    IRON_LEGGINGS with PROTECTION_ENVIRONMENTAL I
    IRON_LEGGINGS with PROTECTION_ENVIRONMENTAL II
    IRON_LEGGINGS with PROTECTION_ENVIRONMENTAL III
    IRON_LEGGINGS with PROTECTION_ENVIRONMENTAL IV
    IRON_LEGGINGS with PROTECTION_FIRE I
    IRON_LEGGINGS with PROTECTION_FIRE II
    IRON_LEGGINGS with PROTECTION_FIRE III
    IRON_LEGGINGS with PROTECTION_FIRE IV
    IRON_LEGGINGS with PROTECTION_EXPLOSIONS I
    IRON_LEGGINGS with PROTECTION_EXPLOSIONS II
    IRON_LEGGINGS with PROTECTION_EXPLOSIONS III
    IRON_LEGGINGS with PROTECTION_EXPLOSIONS IV
    IRON_LEGGINGS with PROTECTION_PROJECTILE I
    IRON_LEGGINGS with PROTECTION_PROJECTILE II
    IRON_LEGGINGS with PROTECTION_PROJECTILE III
    IRON_LEGGINGS with PROTECTION_PROJECTILE IV
    IRON_BOOTS with PROTECTION_ENVIRONMENTAL I
    IRON_BOOTS with PROTECTION_ENVIRONMENTAL II
    IRON_BOOTS with PROTECTION_ENVIRONMENTAL III
    IRON_BOOTS with PROTECTION_ENVIRONMENTAL IV
    IRON_BOOTS with PROTECTION_FIRE I
    IRON_BOOTS with PROTECTION_FIRE II
    IRON_BOOTS with PROTECTION_FIRE III
    IRON_BOOTS with PROTECTION_FIRE IV
    IRON_BOOTS with PROTECTION_FALL I
    IRON_BOOTS with PROTECTION_FALL II
    IRON_BOOTS with PROTECTION_FALL III
    IRON_BOOTS with PROTECTION_FALL IV
    IRON_BOOTS with PROTECTION_EXPLOSIONS I
    IRON_BOOTS with PROTECTION_EXPLOSIONS II
    IRON_BOOTS with PROTECTION_EXPLOSIONS III
    IRON_BOOTS with PROTECTION_EXPLOSIONS IV
    IRON_BOOTS with PROTECTION_PROJECTILE I
    IRON_BOOTS with PROTECTION_PROJECTILE II
    IRON_BOOTS with PROTECTION_PROJECTILE III
    IRON_BOOTS with PROTECTION_PROJECTILE IV
    DIAMOND_HELMET with PROTECTION_ENVIRONMENTAL I
    DIAMOND_HELMET with PROTECTION_ENVIRONMENTAL II
    DIAMOND_HELMET with PROTECTION_ENVIRONMENTAL III
    DIAMOND_HELMET with PROTECTION_ENVIRONMENTAL IV
    DIAMOND_HELMET with PROTECTION_FIRE I
    DIAMOND_HELMET with PROTECTION_FIRE II
    DIAMOND_HELMET with PROTECTION_FIRE III
    DIAMOND_HELMET with PROTECTION_FIRE IV
    DIAMOND_HELMET with PROTECTION_EXPLOSIONS I
    DIAMOND_HELMET with PROTECTION_EXPLOSIONS II
    DIAMOND_HELMET with PROTECTION_EXPLOSIONS III
    DIAMOND_HELMET with PROTECTION_EXPLOSIONS IV
    DIAMOND_HELMET with PROTECTION_PROJECTILE I
    DIAMOND_HELMET with PROTECTION_PROJECTILE II
    DIAMOND_HELMET with PROTECTION_PROJECTILE III
    DIAMOND_HELMET with PROTECTION_PROJECTILE IV
    DIAMOND_HELMET with OXYGEN I
    DIAMOND_HELMET with OXYGEN II
    DIAMOND_HELMET with OXYGEN III
    DIAMOND_HELMET with WATER_WORKER I
    DIAMOND_CHESTPLATE with PROTECTION_ENVIRONMENTAL I
    DIAMOND_CHESTPLATE with PROTECTION_ENVIRONMENTAL II
    DIAMOND_CHESTPLATE with PROTECTION_ENVIRONMENTAL III
    DIAMOND_CHESTPLATE with PROTECTION_ENVIRONMENTAL IV
    DIAMOND_CHESTPLATE with PROTECTION_FIRE I
    DIAMOND_CHESTPLATE with PROTECTION_FIRE II
    DIAMOND_CHESTPLATE with PROTECTION_FIRE III
    DIAMOND_CHESTPLATE with PROTECTION_FIRE IV
    DIAMOND_CHESTPLATE with PROTECTION_EXPLOSIONS I
    DIAMOND_CHESTPLATE with PROTECTION_EXPLOSIONS II
    DIAMOND_CHESTPLATE with PROTECTION_EXPLOSIONS III
    DIAMOND_CHESTPLATE with PROTECTION_EXPLOSIONS IV
    DIAMOND_CHESTPLATE with PROTECTION_PROJECTILE I
    DIAMOND_CHESTPLATE with PROTECTION_PROJECTILE II
    DIAMOND_CHESTPLATE with PROTECTION_PROJECTILE III
    DIAMOND_CHESTPLATE with PROTECTION_PROJECTILE IV
    DIAMOND_LEGGINGS with PROTECTION_ENVIRONMENTAL I
    DIAMOND_LEGGINGS with PROTECTION_ENVIRONMENTAL II
    DIAMOND_LEGGINGS with PROTECTION_ENVIRONMENTAL III
    DIAMOND_LEGGINGS with PROTECTION_ENVIRONMENTAL IV
    DIAMOND_LEGGINGS with PROTECTION_FIRE I
    DIAMOND_LEGGINGS with PROTECTION_FIRE II
    DIAMOND_LEGGINGS with PROTECTION_FIRE III
    DIAMOND_LEGGINGS with PROTECTION_FIRE IV
    DIAMOND_LEGGINGS with PROTECTION_EXPLOSIONS I
    DIAMOND_LEGGINGS with PROTECTION_EXPLOSIONS II
    DIAMOND_LEGGINGS with PROTECTION_EXPLOSIONS III
    DIAMOND_LEGGINGS with PROTECTION_EXPLOSIONS IV
    DIAMOND_LEGGINGS with PROTECTION_PROJECTILE I
    DIAMOND_LEGGINGS with PROTECTION_PROJECTILE II
    DIAMOND_LEGGINGS with PROTECTION_PROJECTILE III
    DIAMOND_LEGGINGS with PROTECTION_PROJECTILE IV
    DIAMOND_BOOTS with PROTECTION_ENVIRONMENTAL I
    DIAMOND_BOOTS with PROTECTION_ENVIRONMENTAL II
    DIAMOND_BOOTS with PROTECTION_ENVIRONMENTAL III
    DIAMOND_BOOTS with PROTECTION_ENVIRONMENTAL IV
    DIAMOND_BOOTS with PROTECTION_FIRE I
    DIAMOND_BOOTS with PROTECTION_FIRE II
    DIAMOND_BOOTS with PROTECTION_FIRE III
    DIAMOND_BOOTS with PROTECTION_FIRE IV
    DIAMOND_BOOTS with PROTECTION_FALL I
    DIAMOND_BOOTS with PROTECTION_FALL II
    DIAMOND_BOOTS with PROTECTION_FALL III
    DIAMOND_BOOTS with PROTECTION_FALL IV
    DIAMOND_BOOTS with PROTECTION_EXPLOSIONS I
    DIAMOND_BOOTS with PROTECTION_EXPLOSIONS II
    DIAMOND_BOOTS with PROTECTION_EXPLOSIONS III
    DIAMOND_BOOTS with PROTECTION_EXPLOSIONS IV
    DIAMOND_BOOTS with PROTECTION_PROJECTILE I
    DIAMOND_BOOTS with PROTECTION_PROJECTILE II
    DIAMOND_BOOTS with PROTECTION_PROJECTILE III
    DIAMOND_BOOTS with PROTECTION_PROJECTILE IV
    GOLD_HELMET with PROTECTION_ENVIRONMENTAL I
    GOLD_HELMET with PROTECTION_ENVIRONMENTAL II
    GOLD_HELMET with PROTECTION_ENVIRONMENTAL III
    GOLD_HELMET with PROTECTION_ENVIRONMENTAL IV
    GOLD_HELMET with PROTECTION_FIRE I
    GOLD_HELMET with PROTECTION_FIRE II
    GOLD_HELMET with PROTECTION_FIRE III
    GOLD_HELMET with PROTECTION_FIRE IV
    GOLD_HELMET with PROTECTION_EXPLOSIONS I
    GOLD_HELMET with PROTECTION_EXPLOSIONS II
    GOLD_HELMET with PROTECTION_EXPLOSIONS III
    GOLD_HELMET with PROTECTION_EXPLOSIONS IV
    GOLD_HELMET with PROTECTION_PROJECTILE I
    GOLD_HELMET with PROTECTION_PROJECTILE II
    GOLD_HELMET with PROTECTION_PROJECTILE III
    GOLD_HELMET with PROTECTION_PROJECTILE IV
    GOLD_HELMET with OXYGEN I
    GOLD_HELMET with OXYGEN II
    GOLD_HELMET with OXYGEN III
    GOLD_HELMET with WATER_WORKER I
    GOLD_CHESTPLATE with PROTECTION_ENVIRONMENTAL I
    GOLD_CHESTPLATE with PROTECTION_ENVIRONMENTAL II
    GOLD_CHESTPLATE with PROTECTION_ENVIRONMENTAL III
    GOLD_CHESTPLATE with PROTECTION_ENVIRONMENTAL IV
    GOLD_CHESTPLATE with PROTECTION_FIRE I
    GOLD_CHESTPLATE with PROTECTION_FIRE II
    GOLD_CHESTPLATE with PROTECTION_FIRE III
    GOLD_CHESTPLATE with PROTECTION_FIRE IV
    GOLD_CHESTPLATE with PROTECTION_EXPLOSIONS I
    GOLD_CHESTPLATE with PROTECTION_EXPLOSIONS II
    GOLD_CHESTPLATE with PROTECTION_EXPLOSIONS III
    GOLD_CHESTPLATE with PROTECTION_EXPLOSIONS IV
    GOLD_CHESTPLATE with PROTECTION_PROJECTILE I
    GOLD_CHESTPLATE with PROTECTION_PROJECTILE II
    GOLD_CHESTPLATE with PROTECTION_PROJECTILE III
    GOLD_CHESTPLATE with PROTECTION_PROJECTILE IV
    GOLD_LEGGINGS with PROTECTION_ENVIRONMENTAL I
    GOLD_LEGGINGS with PROTECTION_ENVIRONMENTAL II
    GOLD_LEGGINGS with PROTECTION_ENVIRONMENTAL III
    GOLD_LEGGINGS with PROTECTION_ENVIRONMENTAL IV
    GOLD_LEGGINGS with PROTECTION_FIRE I
    GOLD_LEGGINGS with PROTECTION_FIRE II
    GOLD_LEGGINGS with PROTECTION_FIRE III
    GOLD_LEGGINGS with PROTECTION_FIRE IV
    GOLD_LEGGINGS with PROTECTION_EXPLOSIONS I
    GOLD_LEGGINGS with PROTECTION_EXPLOSIONS II
    GOLD_LEGGINGS with PROTECTION_EXPLOSIONS III
    GOLD_LEGGINGS with PROTECTION_EXPLOSIONS IV
    GOLD_LEGGINGS with PROTECTION_PROJECTILE I
    GOLD_LEGGINGS with PROTECTION_PROJECTILE II
    GOLD_LEGGINGS with PROTECTION_PROJECTILE III
    GOLD_LEGGINGS with PROTECTION_PROJECTILE IV
    GOLD_BOOTS with PROTECTION_ENVIRONMENTAL I
    GOLD_BOOTS with PROTECTION_ENVIRONMENTAL II
    GOLD_BOOTS with PROTECTION_ENVIRONMENTAL III
    GOLD_BOOTS with PROTECTION_ENVIRONMENTAL IV
    GOLD_BOOTS with PROTECTION_FIRE I
    GOLD_BOOTS with PROTECTION_FIRE II
    GOLD_BOOTS with PROTECTION_FIRE III
    GOLD_BOOTS with PROTECTION_FIRE IV
    GOLD_BOOTS with PROTECTION_FALL I
    GOLD_BOOTS with PROTECTION_FALL II
    GOLD_BOOTS with PROTECTION_FALL III
    GOLD_BOOTS with PROTECTION_FALL IV
    GOLD_BOOTS with PROTECTION_EXPLOSIONS I
    GOLD_BOOTS with PROTECTION_EXPLOSIONS II
    GOLD_BOOTS with PROTECTION_EXPLOSIONS III
    GOLD_BOOTS with PROTECTION_EXPLOSIONS IV
    GOLD_BOOTS with PROTECTION_PROJECTILE I
    GOLD_BOOTS with PROTECTION_PROJECTILE II
    GOLD_BOOTS with PROTECTION_PROJECTILE III
    GOLD_BOOTS with PROTECTION_PROJECTILE IV
    
     
  21. If my algorithm is correct then there are 43917 possible combinations available with no duplicates of enchantment combinations. I could print them out and post them here if someone is interested.

    EDIT: Whoops, one mistake in it. There are actually only 30693 possible combinations.

    Here we go:
    http://infinityblade.de/downloads/items.txt
    Have fun!

    Here's how I did it:
    Show Spoiler

    Main class:
    Code:
    package de.kumpelblase2.enchantementmapper;
     
    import java.util.HashSet;
    import java.util.Set;
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class EnchantementMapper extends JavaPlugin
    {
        private Set<EnchantmentEntry> entries = new HashSet<EnchantmentEntry>();
       
        public void onEnable()
        {
            Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable()
            {
                @Override
                public void run()
                {
                    map();
                }
            });
        }
       
        public void map()
        {       
            for(Material m : Material.values())
            {
                if(!canEnachant(m))
                    continue;
               
                ItemStack item = new ItemStack(m);
                for(Enchantment e : Enchantment.values())
                {
                    for(int i = 1; i <= e.getMaxLevel(); i++)
                    {
                        if(canAdd(m, e, i))
                        {
                            this.entries.add(new EnchantmentEntry(e, i));
                            System.out.print(m + " with " + e.getName() + " " + i);
                        }
                    }
                }
               
                for(Enchantment e : Enchantment.values())
                {
                    for(int i = 1; i <= e.getMaxLevel(); i++)
                    {
                        if(canAdd(m, e, i))
                        {
                            item.addEnchantment(e, i);
                            for(Enchantment ec : Enchantment.values())
                            {
                                for(int i2 = 1; i2 <= ec.getMaxLevel(); i2++)
                                {
                                    EnchantmentEntry entry = new EnchantmentEntry(e, i);
                                    entry.add(ec, i2);
                                    if(canAdd(m, ec, i2) && !e.conflictsWith(ec) && !this.entries.contains(entry) && !e.equals(ec))
                                    {
                                        this.entries.add(entry);
                                        item = new ItemStack(m);
                                        System.out.print(m + " with " + e.getName() + " " + i + ", " + ec.getName() + " " + i2);
                                    }
                                }
                            }
                        }
                    }
                }
               
                for(Enchantment e : Enchantment.values())
                {
                    for(int i = 1; i <= e.getMaxLevel(); i++)
                    {
                        if(canAdd(m, e, i))
                        {
                            item.addEnchantment(e, i);
                            for(Enchantment ec : Enchantment.values())
                            {
                                for(int i2 = 1; i2 <= ec.getMaxLevel(); i2++)
                                {
                                    if(canAdd(m, ec, i2) && !e.conflictsWith(ec) && !e.equals(ec))
                                    {
                                        item.addEnchantment(ec, i2);
                                        for(Enchantment ecc : Enchantment.values())
                                        {
                                            for(int i3 = 1; i3 <= ecc.getMaxLevel(); i3++)
                                            {
                                                EnchantmentEntry entry = new EnchantmentEntry(e, i);
                                                entry.add(ec, i2);
                                                entry.add(ecc, i3);
                                                if(canAdd(m, ecc, i3) && !e.conflictsWith(ec) && !e.conflictsWith(ecc) && !this.entries.contains(entry) && !ec.equals(ecc))
                                                {
                                                    this.entries.add(entry);
                                                    item = new ItemStack(m);
                                                    System.out.print(m + " with " + e.getName() + " " + i + ", " + ec.getName() + " " + i2 + ", " + ecc.getName() + " " + i3);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            System.out.println(this.entries.size() + " possibilities");
        }
       
        public static boolean canEnachant(Material m)
        {
            switch(m)
            {
                case DIAMOND_AXE:
                case DIAMOND_BOOTS:
                case DIAMOND_CHESTPLATE:
                case DIAMOND_HELMET:
                case DIAMOND_LEGGINGS:
                case DIAMOND_PICKAXE:
                case DIAMOND_SWORD:
                case DIAMOND_SPADE:
                case IRON_AXE:
                case IRON_BOOTS:
                case IRON_CHESTPLATE:
                case IRON_HELMET:
                case IRON_LEGGINGS:
                case IRON_PICKAXE:
                case IRON_SWORD:
                case IRON_SPADE:
                case GOLD_AXE:
                case GOLD_BOOTS:
                case GOLD_CHESTPLATE:
                case GOLD_HELMET:
                case GOLD_LEGGINGS:
                case GOLD_PICKAXE:
                case GOLD_SWORD:
                case GOLD_SPADE:
                case WOOD_AXE:
                case LEATHER_BOOTS:
                case LEATHER_CHESTPLATE:
                case LEATHER_HELMET:
                case LEATHER_LEGGINGS:
                case WOOD_PICKAXE:
                case WOOD_SWORD:
                case WOOD_SPADE:
                case STONE_AXE:
                case STONE_PICKAXE:
                case STONE_SWORD:
                case STONE_SPADE:
                case BOW:
                    return true;
            }
            return false;
        }
       
        public static boolean canAdd(Material item, Enchantment e, int level)
        {
            switch(item)
            {
                case BOW:
                {
                    if(e.equals(Enchantment.ARROW_DAMAGE))
                    {
                        return level <= 5;
                    }
                    else if(e.equals(Enchantment.ARROW_FIRE))
                    {
                        return level <= 1;
                    }
                    else if(e.equals(Enchantment.ARROW_INFINITE))
                    {
                        return level <= 1;
                    }
                    else if(e.equals(Enchantment.ARROW_KNOCKBACK))
                    {
                        return level <= 2;
                    }
                    return false;
                }
                case DIAMOND_AXE:
                case IRON_AXE:
                case STONE_AXE:
                case WOOD_AXE:
                case GOLD_AXE:
                case DIAMOND_PICKAXE:
                case IRON_PICKAXE:
                case STONE_PICKAXE:
                case WOOD_PICKAXE:
                case GOLD_PICKAXE:
                case DIAMOND_SPADE:
                case IRON_SPADE:
                case STONE_SPADE:
                case WOOD_SPADE:
                case GOLD_SPADE:
                {
                    if(e.equals(Enchantment.DIG_SPEED))
                    {
                        return level <= 5;
                    }
                    else if(e.equals(Enchantment.SILK_TOUCH))
                    {
                        return level <= 1;
                    }
                    else if(e.equals(Enchantment.DURABILITY))
                    {
                        return level <= 3;
                    }
                    else if(e.equals(Enchantment.LOOT_BONUS_BLOCKS))
                    {
                        return level <= 3;
                    }
                    return false;
                }
                case DIAMOND_SWORD:
                case STONE_SWORD:
                case WOOD_SWORD:
                case IRON_SWORD:
                case GOLD_SWORD:
                {
                    if(e.equals(Enchantment.DAMAGE_ALL))
                    {
                        return level <= 5;
                    }
                    else if(e.equals(Enchantment.DAMAGE_UNDEAD))
                    {
                        return level <= 5;
                    }
                    else if(e.equals(Enchantment.DAMAGE_ARTHROPODS))
                    {
                        return level <= 5;
                    }
                    else if(e.equals(Enchantment.KNOCKBACK))
                    {
                        return level <= 2;
                    }
                    else if(e.equals(Enchantment.FIRE_ASPECT))
                    {
                        return level <= 2;
                    }
                    else if(e.equals(Enchantment.LOOT_BONUS_MOBS))
                    {
                        return level <= 3;
                    }
                    return false;
                }
                case LEATHER_HELMET:
                case IRON_HELMET:
                case GOLD_HELMET:
                case DIAMOND_HELMET:
                {
                    if(e.equals(Enchantment.OXYGEN))
                    {
                        return level <= 3;
                    }
                    else if(e.equals(Enchantment.WATER_WORKER))
                    {
                        return level <= 1;
                    }
                    else if(e.equals(Enchantment.PROTECTION_EXPLOSIONS))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_FIRE))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_PROJECTILE))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_ENVIRONMENTAL))
                    {
                        return level <= 4;
                    }
                    return false;
                }
                case DIAMOND_CHESTPLATE:
                case DIAMOND_LEGGINGS:
                case GOLD_CHESTPLATE:
                case GOLD_LEGGINGS:
                case IRON_CHESTPLATE:
                case IRON_LEGGINGS:
                case LEATHER_CHESTPLATE:
                case LEATHER_LEGGINGS:
                {
                    if(e.equals(Enchantment.PROTECTION_EXPLOSIONS))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_FIRE))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_PROJECTILE))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_ENVIRONMENTAL))
                    {
                        return level <= 4;
                    }
                    return false;
                }
                case DIAMOND_BOOTS:
                case GOLD_BOOTS:
                case IRON_BOOTS:
                case LEATHER_BOOTS:
                {
                    if(e.equals(Enchantment.PROTECTION_FALL))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_EXPLOSIONS))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_FIRE))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_PROJECTILE))
                    {
                        return level <= 4;
                    }
                    else if(e.equals(Enchantment.PROTECTION_ENVIRONMENTAL))
                    {
                        return level <= 4;
                    }
                    return false;
                }
            }
            return false;
        }
    }
    
    second class:
    Code:
    package de.kumpelblase2.enchantementmapper;
     
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    import org.bukkit.enchantments.Enchantment;
     
    public class EnchantmentEntry
    {
        private Map<Enchantment, Integer> enchants = new HashMap<Enchantment, Integer>();
       
        public EnchantmentEntry(Enchantment o, int level)
        {
            this.enchants.put(o, level);
        }
       
        public void add(Enchantment e, int level)
        {
            this.enchants.put(e, level);
        }
       
        @Override
        public boolean equals(Object o)
        {
            if(!(o instanceof EnchantmentEntry))
                return false;
           
            EnchantmentEntry e = (EnchantmentEntry)o;
           
            if(enchants.size() != e.enchants.size())
                return false;
           
            for(Entry<Enchantment, Integer> ec : this.enchants.entrySet())
            {
                if(!e.enchants.containsKey(ec.getKey()))
                    return false;
               
                if(ec.getValue() != e.enchants.get(ec.getKey()))
                    return false;
               
                if(this.enchants.size() > 1)
                {
                    for(Entry<Enchantment, Integer> ec2 : this.enchants.entrySet())
                    {
                        if(ec2.getKey().equals(ec.getKey()))
                            continue;
                       
                        if(!e.enchants.containsKey(ec2.getKey()))
                            return false;
                       
                        if(ec2.getValue() != e.enchants.get(ec2.getKey()))
                            return false;
                       
                        if(this.enchants.size() > 2)
                        {
                            for(Entry<Enchantment, Integer> ec3 : this.enchants.entrySet())
                            {
                                if(ec3.getKey().equals(ec2.getKey()) || ec3.getKey().equals(ec.getKey()))
                                    continue;
                               
                                if(!e.enchants.containsKey(ec3.getKey()))
                                    return false;
                               
                                if(ec3.getValue() != e.enchants.get(ec3.getKey()))
                                    return false;
                            }
                        }
                    }
                }
            }
            return true;
        }
    }
    


    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 26, 2016
  22. Offline

    Father Of Time

    Thank you all for your contributions towards this problem. As kumpel has already shown he managed to crack this egg for us over the weekend, and I was able to adjust the system to "map" the items as they are created.

    I do like your idea of coming up with a base pricing formula md_5, because at this point I have it simply populating my "baseprice" variable with -1, which is a base price bypass that negates other checks until someone has the time to come along and price it.

    However, this may be a problem as an items worth in reality is not an exact representation of the accumulative worth of their enchantments; for instance, if you sold a looting 1 pick and an efficient 2 pick you wouldn't end up with the same amount of money as if you sold a single pick with Looting 1 & Efficiency 2.

    I think the way I want this to work is the price will remain at -1 until 20 sales records have been sold for an item, and once 20 items have been sold the system will automatically grab the average price and lock that in as the base price.
     
  23. Offline

    Codex Arcanum

    Another thing you could do is have a multiplier for the price based on enchants. Let us say that a gold pick is worth $100. Then let us say that Looting has a multiplier of 1.5. Then a gold pick of looting 1 has a price of $150. Then let us say that efficiency has a multiplier of 1.4. Then a gold pick of looting 1 efficiency 2 would be worth $492 (1.5 * 1.25 * 1.25 * 100). That way, as the number of enchantments increase (especially more powerful enchants), so would the value of the item. That way, since a gold pick of efficiency 5 is exponentially harder to get than a gold pick of efficiency 1 ($125), it is exponentially more expensive ($305) Obviously, these numbers need tweaking, but it seems more solid than relying on the first 20 sales, especially of more obscure enchantments (how many shovels of Looting 2, efficiency 1, aqua affinity 1 have you seen?).
     
Thread Status:
Not open for further replies.

Share This Page