Files
mc/server/entity/register.go
T
TarnaWijaya 26ed99fda6
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
up3
2026-07-09 08:33:57 +08:00

64 lines
2.2 KiB
Go

package entity
import (
"github.com/df-mc/dragonfly/server/item"
"github.com/df-mc/dragonfly/server/item/enchantment"
"github.com/df-mc/dragonfly/server/item/potion"
"github.com/df-mc/dragonfly/server/world"
)
// DefaultRegistry is a world.EntityRegistry that registers all default entities
// implemented by Dragonfly.
var DefaultRegistry = conf.New([]world.EntityType{
AreaEffectCloudType,
ArrowType,
BottleOfEnchantingType,
EggType,
EnderPearlType,
ExperienceOrbType,
FallingBlockType,
FireworkType,
ItemType,
LightningType,
LingeringPotionType,
SnowballType,
SplashPotionType,
TNTType,
TextType,
})
var conf = world.EntityRegistryConfig{
TNT: NewTNT,
Egg: NewEgg,
Snowball: NewSnowball,
BottleOfEnchanting: NewBottleOfEnchanting,
EnderPearl: NewEnderPearl,
FallingBlock: NewFallingBlock,
Lightning: NewLightning,
Firework: func(opts world.EntitySpawnOpts, firework world.Item, owner world.Entity, sidewaysVelocityMultiplier, upwardsAcceleration float64, attached bool) *world.EntityHandle {
return newFirework(opts, firework.(item.Firework), owner, sidewaysVelocityMultiplier, upwardsAcceleration, attached)
},
Item: func(opts world.EntitySpawnOpts, it any) *world.EntityHandle {
return NewItem(opts, it.(item.Stack))
},
LingeringPotion: func(opts world.EntitySpawnOpts, t any, owner world.Entity) *world.EntityHandle {
return NewLingeringPotion(opts, t.(potion.Potion), owner)
},
SplashPotion: func(opts world.EntitySpawnOpts, t any, owner world.Entity) *world.EntityHandle {
return NewSplashPotion(opts, t.(potion.Potion), owner)
},
Arrow: func(opts world.EntitySpawnOpts, arrow world.ArrowSpawnConfig) *world.EntityHandle {
tip := arrow.Tip.(potion.Potion)
conf := arrowConf
conf.Damage, conf.Potion, conf.Owner = arrow.Damage, tip, arrow.Owner.H()
conf.KnockBackForceAddend = float64(arrow.PunchLevel) * enchantment.Punch.KnockBackMultiplier()
conf.DisablePickup = arrow.DisablePickup
if arrow.ObtainArrowOnPickup {
conf.PickupItem = item.NewStack(item.Arrow{Tip: tip}, 1)
}
conf.Critical = arrow.Critical
conf.PiercingLevel = arrow.PiercingLevel
return opts.New(ArrowType, conf)
},
}