Beispiel #1
0
        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);
        }
Beispiel #2
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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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.
        }
Beispiel #5
0
 public Enchant(EnchantingType enchanting, byte level = 1) : this((byte)enchanting, level)
 {
 }