-
Notifications
You must be signed in to change notification settings - Fork 150
/
ender_pearl.go
55 lines (43 loc) · 1.09 KB
/
ender_pearl.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package item
import (
"github.com/df-mc/dragonfly/server/world"
"github.com/df-mc/dragonfly/server/world/sound"
"github.com/go-gl/mathgl/mgl64"
"time"
)
// EnderPearl is a smooth, greenish-blue item used to teleport and to make an eye of ender.
type EnderPearl struct{}
// Use ...
func (e EnderPearl) Use(w *world.World, user User, ctx *UseContext) bool {
pearl, ok := world.EntityByName("minecraft:ender_pearl")
if !ok {
return false
}
p, ok := pearl.(interface {
New(pos, vel mgl64.Vec3, yaw, pitch float64) world.Entity
})
if !ok {
return false
}
yaw, pitch := user.Rotation()
entity := p.New(eyePosition(user), directionVector(user).Mul(1.5), yaw, pitch)
if o, ok := entity.(owned); ok {
o.Own(user)
}
ctx.SubtractFromCount(1)
w.PlaySound(user.Position(), sound.ItemThrow{})
w.AddEntity(entity)
return true
}
// Cooldown ...
func (EnderPearl) Cooldown() time.Duration {
return time.Second
}
// MaxCount ...
func (EnderPearl) MaxCount() int {
return 16
}
// EncodeItem ...
func (EnderPearl) EncodeItem() (name string, meta int16) {
return "minecraft:ender_pearl", 0
}