Example usage for net.minecraftforge.event AnvilUpdateEvent setOutput

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

Introduction

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

Prototype

public void setOutput(@Nonnull ItemStack output) 

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();/* w ww. j  ava  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);
                }
            }
        }
    }
}

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  w ww  .  ja  va 2  s .c  o  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();//from   w  w  w. j a  va2s . c om
    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();/*from w ww.java2s  .  co m*/
    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);
        event.setCost(35);//from   www.j  av  a2s.c  om
    }
}

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

License:Creative Commons License

@SubscribeEvent
public void onAnvilUpdate(AnvilUpdateEvent event) {
    ItemStack left = event.getLeft();/*from   w ww . j  av  a  2 s .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);
    }
}