Example usage for net.minecraftforge.event AnvilUpdateEvent setCost

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

Introduction

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

Prototype

public void setCost(int cost) 

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();/* ww w .j a  va 2 s. co m*/
    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);
                }
            }
        }
    }
}

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

License:Creative Commons License

private void handleTome(ItemStack book, ItemStack tome, AnvilUpdateEvent event) {
    Map<Enchantment, Integer> enchantsBook = EnchantmentHelper.getEnchantments(book);
    Map<Enchantment, Integer> enchantsTome = EnchantmentHelper.getEnchantments(tome);
    for (Map.Entry<Enchantment, Integer> entry : enchantsTome.entrySet()) {
        if (enchantsBook.getOrDefault(entry.getKey(), 0).equals(entry.getValue())) {
            enchantsBook.put(entry.getKey(), entry.getValue() + 1);
        } else {//from  ww w. j av a 2  s  .co  m
            return;
        }
    }
    ItemStack output = ProxyRegistry.newStack(Items.ENCHANTED_BOOK);
    for (Map.Entry<Enchantment, Integer> entry : enchantsBook.entrySet()) {
        ItemEnchantedBook.addEnchantment(output, new EnchantmentData(entry.getKey(), entry.getValue()));
    }
    event.setOutput(output);
    event.setCost(mergeTomeCost);
}

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

License:Creative Commons License

@SubscribeEvent
public void onAnvilUpdate(AnvilUpdateEvent event) {
    ItemStack left = event.getLeft();/*w ww  .j  a v  a 2 s . co  m*/
    ItemStack right = event.getRight();

    if (!left.isEmpty() && !right.isEmpty() && left.isItemEnchanted() && right.getItem() == rune) {
        ItemStack out = left.copy();
        ItemNBTHelper.setBoolean(out, TAG_RUNE_ATTACHED, true);
        ItemNBTHelper.setInt(out, TAG_RUNE_COLOR, right.getItemDamage());
        event.setOutput(out);
        event.setCost(applyCost);
    }
}

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

License:Creative Commons License

@SubscribeEvent
public void onAnvilUpdate(AnvilUpdateEvent event) {
    ItemStack left = event.getLeft();/* w  ww  . j  a va 2s. c  om*/
    ItemStack right = event.getRight();

    if (left != null && right != null) {
        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);
            if (enchants.size() == 1) {
                Enchantment ench = enchants.keySet().iterator().next();
                int level = enchants.get(ench);

                if (level > ench.getMaxLevel() && ench.canApply(left)) {
                    ItemStack out = left.copy();

                    Map<Enchantment, Integer> currentEnchants = EnchantmentHelper.getEnchantments(out);
                    currentEnchants.put(ench, level);
                    EnchantmentHelper.setEnchantments(currentEnchants, out);

                    event.setOutput(out);
                    event.setCost(35);
                }
            }
        }
    }
}

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

License:Creative Commons License

private void handleTome(ItemStack book, ItemStack tome, AnvilUpdateEvent event) {
    Map<Enchantment, Integer> enchantsLeft = EnchantmentHelper.getEnchantments(book);
    Map<Enchantment, Integer> enchantsRight = EnchantmentHelper.getEnchantments(tome);

    if (enchantsLeft.equals(enchantsRight)) {
        Enchantment ench = enchantsRight.keySet().iterator().next();
        ItemStack output = new ItemStack(Items.ENCHANTED_BOOK);
        ((ItemEnchantedBook) output.getItem()).addEnchantment(output,
                new EnchantmentData(ench, enchantsRight.get(ench) + 1));
        event.setOutput(output);/*from   w  ww.  ja va2  s. c  o  m*/
        event.setCost(35);
    }
}

From source file:vazkii.quark.world.feature.ColorRunes.java

License:Creative Commons License

@SubscribeEvent
public void onAnvilUpdate(AnvilUpdateEvent event) {
    ItemStack left = event.getLeft();//from  www.j  ava  2s.  c o  m
    ItemStack right = event.getRight();

    if (left != null && right != null && left.isItemEnchanted() && right.getItem() == rune) {
        ItemStack out = left.copy();
        ItemNBTHelper.setBoolean(out, TAG_RUNE_ATTACHED, true);
        ItemNBTHelper.setInt(out, TAG_RUNE_COLOR, right.getItemDamage());
        event.setOutput(out);
        event.setCost(15);
    }
}