64 lines
2.2 KiB
Go
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)
|
||
|
|
},
|
||
|
|
}
|