public static short GetEnchantingLevel(this Item tool, EnchantingType enchantingId) { if (tool == null) { return(0); } if (tool.ExtraData == null) { return(0); } NbtList enchantingsNbt; if (!tool.ExtraData.TryGet("ench", out enchantingsNbt)) { return(0); } double increase = 0; foreach (NbtCompound enchantingNbt in enchantingsNbt) { short level = enchantingNbt["lvl"].ShortValue; if (level == 0) { continue; } short id = enchantingNbt["id"].ShortValue; if (id == (int)enchantingId) { return(level); } } return(0); }
public void Enchant(Player commander, Target target, EnchantingType enchanting, int level = 1) { Player targetPlayer = target.Players.First(); Item item = targetPlayer.Inventory.GetItemInHand(); if (item is ItemAir) { return; } //EnchantingType enchanting; //if (!Enum.TryParse(enchantment.Value.Replace("_", ""), true, out enchanting)) return; var enchanings = item.GetEnchantings(); enchanings.RemoveAll(ench => ench.Id == enchanting); enchanings.Add(new Enchanting { Id = enchanting, Level = (short)level }); item.SetEnchantings(enchanings); targetPlayer.Inventory.SendSetSlot(targetPlayer.Inventory.InHandSlot); }
protected virtual double CalculateDamageReducationFromEnchantments(Entity source, Item armor, Item tool, DamageCause cause) { if (armor == null) { return(0); } if (armor.ExtraData == null) { return(0); } double reduction = 0; { var enchantings = armor.GetEnchantings(); foreach (var enchanting in enchantings) { double typeModifier = 0; EnchantingType enchantingType = enchanting.Id; switch (enchantingType) { case EnchantingType.Protection: typeModifier = 1; break; case EnchantingType.FireProtection: if (cause == DamageCause.FireTick) { typeModifier = 2; } break; case EnchantingType.BlastProtection: // Not handled right now //typeModifier = 2; break; case EnchantingType.ProjectileProtection: if (source is Arrow) { typeModifier = 2; } break; case EnchantingType.FeatherFalling: if (cause == DamageCause.Fall) { typeModifier = 3; } break; case EnchantingType.Thorns: // Refactor: Make damage to the attacker (!) break; case EnchantingType.Respiration: // HealthManager air-ticks break; case EnchantingType.DepthStrider: break; case EnchantingType.AquaAffinity: break; case EnchantingType.Sharpness: break; case EnchantingType.Smite: break; case EnchantingType.BaneOfArthropods: break; case EnchantingType.Knockback: // Need to deal with for all knockbacks break; case EnchantingType.FireAspect: // Set target on fire. Need to deal with in "take hit" perhaps? break; case EnchantingType.Looting: break; case EnchantingType.Efficiency: break; case EnchantingType.SilkTouch: break; case EnchantingType.Durability: break; case EnchantingType.Fortune: break; case EnchantingType.Power: break; case EnchantingType.Punch: break; case EnchantingType.Flame: break; case EnchantingType.Infinity: break; case EnchantingType.LuckOfTheSea: break; case EnchantingType.Lure: break; default: throw new ArgumentOutOfRangeException(); } reduction += enchanting.Level * typeModifier; } } return(reduction); }
public virtual double CalculateItemDamage(Player player, Item item, Player target) { double damage = item.GetDamage(); var enchantings = item.GetEnchantings(); double increase = 0; foreach (var enchanting in enchantings) { EnchantingType enchantingType = enchanting.Id; switch (enchantingType) { case EnchantingType.Sharpness: increase = 1 + (enchanting.Level * 0.5); break; case EnchantingType.Smite: break; case EnchantingType.BaneOfArthropods: break; case EnchantingType.Knockback: // Need to deal with for all knockbacks break; case EnchantingType.FireAspect: // Set target on fire. Need to deal with in "take hit" perhaps? break; case EnchantingType.Looting: break; case EnchantingType.Efficiency: break; case EnchantingType.SilkTouch: break; case EnchantingType.Durability: break; case EnchantingType.Fortune: break; case EnchantingType.Power: break; case EnchantingType.Punch: break; case EnchantingType.Flame: break; case EnchantingType.Infinity: break; case EnchantingType.LuckOfTheSea: break; case EnchantingType.Lure: break; default: throw new ArgumentOutOfRangeException(); } } return(damage + increase); //Item Damage. }
public Enchant(EnchantingType enchanting, byte level = 1) : this((byte)enchanting, level) { }