github.com/df-mc/dragonfly@v0.9.13/server/entity/register.go (about) 1 package entity 2 3 import ( 4 "github.com/df-mc/dragonfly/server/block/cube" 5 "github.com/df-mc/dragonfly/server/item" 6 "github.com/df-mc/dragonfly/server/item/enchantment" 7 "github.com/df-mc/dragonfly/server/item/potion" 8 "github.com/df-mc/dragonfly/server/world" 9 "github.com/go-gl/mathgl/mgl64" 10 "time" 11 ) 12 13 // DefaultRegistry is a world.EntityRegistry that registers all default entities 14 // implemented by Dragonfly. 15 var DefaultRegistry = conf.New([]world.EntityType{ 16 AreaEffectCloudType{}, 17 ArrowType{}, 18 BottleOfEnchantingType{}, 19 EggType{}, 20 EnderPearlType{}, 21 ExperienceOrbType{}, 22 FallingBlockType{}, 23 FireworkType{}, 24 ItemType{}, 25 LightningType{}, 26 LingeringPotionType{}, 27 SnowballType{}, 28 SplashPotionType{}, 29 TNTType{}, 30 TextType{}, 31 }) 32 33 var conf = world.EntityRegistryConfig{ 34 Item: func(it any, pos, vel mgl64.Vec3) world.Entity { 35 i := NewItem(it.(item.Stack), pos) 36 i.vel = vel 37 return i 38 }, 39 FallingBlock: func(bl world.Block, pos mgl64.Vec3) world.Entity { 40 return NewFallingBlock(bl, pos) 41 }, 42 TNT: func(pos mgl64.Vec3, fuse time.Duration) world.Entity { 43 return NewTNT(pos, fuse) 44 }, 45 BottleOfEnchanting: func(pos, vel mgl64.Vec3, owner world.Entity) world.Entity { 46 b := NewBottleOfEnchanting(pos, owner) 47 b.vel = vel 48 return b 49 }, 50 Arrow: func(pos, vel mgl64.Vec3, rot cube.Rotation, damage float64, owner world.Entity, critical, disallowPickup, obtainArrowOnPickup bool, punchLevel int, tip any) world.Entity { 51 a := NewTippedArrowWithDamage(pos, rot, damage, owner, tip.(potion.Potion)) 52 b := a.conf.Behaviour.(*ProjectileBehaviour) 53 b.conf.KnockBackForceAddend = float64(punchLevel) * (enchantment.Punch{}).KnockBackMultiplier() 54 b.conf.DisablePickup = disallowPickup 55 if obtainArrowOnPickup { 56 b.conf.PickupItem = item.NewStack(item.Arrow{Tip: tip.(potion.Potion)}, 1) 57 } 58 b.conf.Critical = critical 59 a.vel = vel 60 return a 61 }, 62 Egg: func(pos, vel mgl64.Vec3, owner world.Entity) world.Entity { 63 e := NewEgg(pos, owner) 64 e.vel = vel 65 return e 66 }, 67 EnderPearl: func(pos, vel mgl64.Vec3, owner world.Entity) world.Entity { 68 e := NewEnderPearl(pos, owner) 69 e.vel = vel 70 return e 71 }, 72 Firework: func(pos mgl64.Vec3, rot cube.Rotation, attached bool, firework world.Item, owner world.Entity) world.Entity { 73 return NewFireworkAttached(pos, rot, firework.(item.Firework), owner, attached) 74 }, 75 LingeringPotion: func(pos, vel mgl64.Vec3, t any, owner world.Entity) world.Entity { 76 p := NewLingeringPotion(pos, owner, t.(potion.Potion)) 77 p.vel = vel 78 return p 79 }, 80 Snowball: func(pos, vel mgl64.Vec3, owner world.Entity) world.Entity { 81 s := NewSnowball(pos, owner) 82 s.vel = vel 83 return s 84 }, 85 SplashPotion: func(pos, vel mgl64.Vec3, t any, owner world.Entity) world.Entity { 86 p := NewSplashPotion(pos, owner, t.(potion.Potion)) 87 p.vel = vel 88 return p 89 }, 90 Lightning: func(pos mgl64.Vec3) world.Entity { 91 return NewLightning(pos) 92 }, 93 }