private boolean isEnchantmentValid(Enchantment ench) { if(!ench.canApply(itemToEnchant)) return false; for(EnchantmentData data : enchants) { Enchantment otherEnch = data.enchantment; if (!ench.isCompatibleWith(otherEnch)) return false; } return true; }
@Override boolean canFire(ItemStack stack, EntityPlayer player) { int infinity = EnchantmentHelper.getEnchantmentLevel(Enchantments.INFINITY, stack); return player.capabilities.isCreativeMode || ManaItemHandler.requestManaExactForTool(stack, player, ARROW_COST / (infinity + 1), false); }
@Override public void onWornTick(ItemStack stack, EntityLivingBase entity) { super.onWornTick(stack, entity); if(!entity.world.isRemote) { boolean lastOnGround = entity.onGround; entity.onGround = true; EnchantmentFrostWalker.freezeNearby(entity, entity.world, new BlockPos(entity), 8); entity.onGround = lastOnGround; } }
short enchantId = enchant.getShort("id"); short enchantLvl = enchant.getShort("lvl"); Enchantment ench = Enchantment.getEnchantmentByID(enchantId); if(!hasEnchantAlready(ench) && isEnchantmentValid(ench)) { this.enchants.add(new EnchantmentData(ench, enchantLvl)); world.playSound(null, pos, ModSounds.ding, SoundCategory.BLOCKS, 1F, 1F); addedEnch = true; for(EnchantmentData data : enchants) { manaRequired += (int) (5000F * ((15 - Math.min(15, data.enchantment.getRarity().getWeight())) * 1.05F) * ((3F + data.enchantmentLevel * data.enchantmentLevel) * 0.25F) * (0.9F + enchants.size() * 0.05F) * (data.enchantment.isTreasureEnchantment() ? 1.25F : 1F)); if(stageTicks >= 100) { for(EnchantmentData data : enchants) if(EnchantmentHelper.getEnchantmentLevel(data.enchantment, itemToEnchant) == 0) itemToEnchant.addEnchantment(data.enchantment, data.enchantmentLevel);
@Override public ItemStack getCraftingResult(InventoryCrafting var1) { ItemStack out = output.copy(); for (int i = 0; i < var1.getSizeInventory(); i++) { ItemStack stack = var1.getStackInSlot(i); if (!stack.isEmpty() && stack.getItem() instanceof ItemArmor && stack.hasTagCompound()) { EnchantmentHelper.setEnchantments(EnchantmentHelper.getEnchantments(stack), out); if(Botania.thaumcraftLoaded) HelmRevealingRecipe.copyTCData(stack, out); break; } } return out; } }
@Override public void readPacketNBT(NBTTagCompound cmp) { mana = cmp.getInteger(TAG_MANA); manaRequired = cmp.getInteger(TAG_MANA_REQUIRED); stage = State.values()[cmp.getInteger(TAG_STAGE)]; stageTicks = cmp.getInteger(TAG_STAGE_TICKS); stage3EndTicks = cmp.getInteger(TAG_STAGE_3_END_TICKS); NBTTagCompound itemCmp = cmp.getCompoundTag(TAG_ITEM); itemToEnchant = new ItemStack(itemCmp); enchants.clear(); String enchStr = cmp.getString(TAG_ENCHANTS); if(!enchStr.isEmpty()) { String[] enchTokens = enchStr.split(","); for(String token : enchTokens) { String[] entryTokens = token.split("="); Enchantment ench = Enchantment.getEnchantmentByLocation(entryTokens[0]); int lvl = Integer.parseInt(entryTokens[1]); enchants.add(new EnchantmentData(ench, lvl)); } } }
public void onWanded(EntityPlayer player, ItemStack wand) { if(stage != State.IDLE || itemToEnchant.isEmpty() || !itemToEnchant.isItemEnchantable()) return; List<EntityItem> items = world.getEntitiesWithinAABB(EntityItem.class, new AxisAlignedBB(pos.getX() - 2, pos.getY(), pos.getZ() - 2, pos.getX() + 3, pos.getY() + 1, pos.getZ() + 3)); int count = items.size(); if(count > 0 && !world.isRemote) { for(EntityItem entity : items) { ItemStack item = entity.getItem(); if(item.getItem() == Items.ENCHANTED_BOOK) { NBTTagList enchants = ItemEnchantedBook.getEnchantments(item); if(enchants.tagCount() > 0) { NBTTagCompound enchant = enchants.getCompoundTagAt(0); short id = enchant.getShort("id"); if(isEnchantmentValid(Enchantment.getEnchantmentByID(id))) { advanceStage(); return; } } } } } }
@Override public boolean canApplyEnchantment(ItemStack stack, Enchantment enchantment) { return enchantment.type.canEnchantItem(Items.IRON_PICKAXE) || enchantment.type.canEnchantItem(Items.IRON_SHOVEL); }
@Override public void onEntityDamaged(EntityLivingBase user, Entity target, int level) { super.onEntityDamaged(user, target, level); //Cannot damage players until https://github.com/MinecraftForge/MinecraftForge/pull/4052 } }
boolean canFire(ItemStack stack, EntityPlayer player) { return player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantments.INFINITY, stack) > 0 || PlayerHelper.hasAmmo(player, AMMO_FUNC); }
public static int getToolPriority(ItemStack stack) { if(stack.isEmpty()) return 0; Item item = stack.getItem(); if(!(item instanceof ItemTool)) return 0; ItemTool tool = (ItemTool) item; ToolMaterial material = tool.toolMaterial; int materialLevel = 0; if(material == BotaniaAPI.manasteelToolMaterial) materialLevel = 10; if(material == BotaniaAPI.elementiumToolMaterial) materialLevel = 11; if(material == BotaniaAPI.terrasteelToolMaterial) materialLevel = 20; int modifier = 0; if(item == ModItems.terraPick) modifier = ItemTerraPick.getLevel(stack); int efficiency = EnchantmentHelper.getEnchantmentLevel(Enchantments.EFFICIENCY, stack); return materialLevel * 100 + modifier * 10 + efficiency; }
@Override public boolean isInfinite(ItemStack stack, ItemStack bow, EntityPlayer player) { return EnchantmentHelper.getEnchantmentLevel(net.minecraft.init.Enchantments.INFINITY, bow) > 0; } }
@Override public int getMaxEnergyStored(ItemStack container) { int enchant = EnchantmentHelper.getEnchantmentLevel(CoreEnchantments.holding, container); return maxEnergy + maxEnergy * enchant / 2; }
@Override public int getMaxEnergyStored(ItemStack container) { int enchant = EnchantmentHelper.getEnchantmentLevel(CoreEnchantments.holding, container); return maxEnergy + maxEnergy * enchant / 2; }
@Override public boolean itemInteractionForEntity(@Nonnull ItemStack itemstack, EntityPlayer player, EntityLivingBase entity, EnumHand hand) { if(entity.world.isRemote) return false; if(entity instanceof IShearable) { IShearable target = (IShearable)entity; if(target.isShearable(itemstack, entity.world, new BlockPos(entity))) { List<ItemStack> drops = target.onSheared(itemstack, entity.world, new BlockPos(entity), EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, itemstack)); for(ItemStack stack : drops) { entity.entityDropItem(stack, 1.0F); } ToolCommons.damageItem(itemstack, 1, player, MANA_PER_DAMAGE); } return true; } return false; }
@Override public boolean onBlockStartBreak(@Nonnull ItemStack itemstack, @Nonnull BlockPos pos, EntityPlayer player) { if (player.world.isRemote) return false; Block block = player.world.getBlockState(pos).getBlock(); if(block instanceof IShearable) { IShearable target = (IShearable)block; if(target.isShearable(itemstack, player.world, pos)) { List<ItemStack> drops = target.onSheared(itemstack, player.world, pos, EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, itemstack)); Random rand = new Random(); for(ItemStack stack : drops) { float f = 0.7F; double d = rand.nextFloat() * f + (1D - f) * 0.5; double d1 = rand.nextFloat() * f + (1D - f) * 0.5; double d2 = rand.nextFloat() * f + (1D - f) * 0.5; EntityItem entityitem = new EntityItem(player.world, pos.getX() + d, pos.getY() + d1, pos.getZ() + d2, stack); entityitem.setPickupDelay(10); player.world.spawnEntity(entityitem); } ToolCommons.damageItem(itemstack, 1, player, MANA_PER_DAMAGE); player.addStat(StatList.getBlockStats(block), 1); return true; } } return false; }
@Override public void onUsingTick(ItemStack stack, EntityLivingBase living, int count) { if(living.world.isRemote) return; if(count != getMaxItemUseDuration(stack) && count % 5 == 0) { int range = 12; List sheep = living.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(living.posX - range, living.posY - range, living.posZ - range, living.posX + range, living.posY + range, living.posZ + range), Predicates.instanceOf(IShearable.class)); if(sheep.size() > 0) { for(IShearable target : (List<IShearable>) sheep) { Entity entity = (Entity) target; if(target.isShearable(stack, entity.world, new BlockPos(entity))) { List<ItemStack> drops = target.onSheared(stack, entity.world, new BlockPos(entity), EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack)); for(ItemStack drop : drops) { entity.entityDropItem(drop, 1.0F); } ToolCommons.damageItem(stack, 1, living, MANA_PER_DAMAGE); break; } } } } }
return; int fortune = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, stack); boolean silk = EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, stack) > 0; boolean thor = ItemThorRing.getThorRing(player) != null; boolean doX = thor || side.getXOffset() == 0;
int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.POWER, stack); int k = EnchantmentHelper.getEnchantmentLevel(Enchantments.PUNCH, stack); if (EnchantmentHelper.getEnchantmentLevel(Enchantments.FLAME, stack) > 0)
@SubscribeEvent public void onEntityDrops(LivingDropsEvent event) { if(event.isRecentlyHit() && event.getSource().getTrueSource() != null && event.getSource().getTrueSource() instanceof EntityPlayer) { ItemStack weapon = ((EntityPlayer) event.getSource().getTrueSource()).getHeldItemMainhand(); if(!weapon.isEmpty() && weapon.getItem() == this) { Random rand = event.getEntityLiving().world.rand; int looting = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, weapon); if(event.getEntityLiving() instanceof AbstractSkeleton && rand.nextInt(26) <= 3 + looting) addDrop(event, new ItemStack(Items.SKULL, 1, event.getEntityLiving() instanceof EntityWitherSkeleton ? 1 : 0)); else if(event.getEntityLiving() instanceof EntityZombie && !(event.getEntityLiving() instanceof EntityPigZombie) && rand.nextInt(26) <= 2 + 2 * looting) addDrop(event, new ItemStack(Items.SKULL, 1, 2)); else if(event.getEntityLiving() instanceof EntityCreeper && rand.nextInt(26) <= 2 + 2 * looting) addDrop(event, new ItemStack(Items.SKULL, 1, 4)); else if(event.getEntityLiving() instanceof EntityPlayer && rand.nextInt(11) <= 1 + looting) { ItemStack stack = new ItemStack(Items.SKULL, 1, 3); ItemNBTHelper.setString(stack, "SkullOwner", event.getEntityLiving().getName()); addDrop(event, stack); } else if(event.getEntityLiving() instanceof EntityDoppleganger && rand.nextInt(13) < 1 + looting) addDrop(event, new ItemStack(ModItems.gaiaHead)); } } }