Example usage for net.minecraftforge.event AnvilUpdateEvent getName

List of usage examples for net.minecraftforge.event AnvilUpdateEvent getName

Introduction

In this page you can find the example usage for net.minecraftforge.event AnvilUpdateEvent getName.

Prototype

public String getName() 

Source Link

Usage

From source file:vazkii.quark.misc.feature.AncientTomes.java

License:Creative Commons License

@SubscribeEvent
public void onAnvilUpdate(AnvilUpdateEvent event) {
    ItemStack left = event.getLeft();//from w  ww.  j av a 2s.  com
    ItemStack right = event.getRight();

    if (!left.isEmpty() && !right.isEmpty()) {
        if (left.getItem() == Items.ENCHANTED_BOOK && right.getItem() == ancient_tome)
            handleTome(left, right, event);
        else if (right.getItem() == Items.ENCHANTED_BOOK && left.getItem() == ancient_tome)
            handleTome(right, left, event);

        else if (right.getItem() == Items.ENCHANTED_BOOK) {
            Map<Enchantment, Integer> enchants = EnchantmentHelper.getEnchantments(right);
            Map<Enchantment, Integer> currentEnchants = EnchantmentHelper.getEnchantments(left);
            boolean hasOverLevel = false;
            boolean hasMatching = false;
            for (Map.Entry<Enchantment, Integer> entry : enchants.entrySet()) {
                Enchantment ench = entry.getKey();
                if (ench == null)
                    continue;

                int level = entry.getValue();
                if (level > ench.getMaxLevel()) {
                    hasOverLevel = true;
                    if (ench.canApply(left)) {
                        hasMatching = true;
                        //remove incompatible enchantments
                        for (Iterator<Enchantment> iterator = currentEnchants.keySet().iterator(); iterator
                                .hasNext();) {
                            Enchantment enchCompare = iterator.next();
                            if (enchCompare == ench)
                                continue;

                            if (!enchCompare.isCompatibleWith(ench)) {
                                iterator.remove();
                            }
                        }
                        currentEnchants.put(ench, level);
                    }
                } else if (ench.canApply(left)) {
                    boolean compatible = true;
                    //don't apply incompatible enchantments
                    for (Enchantment enchCompare : currentEnchants.keySet()) {
                        if (enchCompare == ench)
                            continue;

                        if (enchCompare != null && !enchCompare.isCompatibleWith(ench)) {
                            compatible = false;
                            break;
                        }
                    }
                    if (compatible) {
                        currentEnchants.put(ench, level);
                    }
                }
            }
            if (hasOverLevel) {
                if (hasMatching) {
                    ItemStack out = left.copy();
                    EnchantmentHelper.setEnchantments(currentEnchants, out);
                    String name = event.getName();
                    int cost = applyTomeCost;
                    if (name != null && !name.isEmpty()) {
                        out.setStackDisplayName(name);
                        cost++;
                    }
                    event.setOutput(out);
                    event.setCost(cost);
                } else {
                    event.setCanceled(true);
                }
            }
        }
    }
}