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  }