Skip to content

Commit cad29ef

Browse files
Implement all dragonfly events (#8)
* Expand Dragonfly event coverage * Consolidate event emitters * Support player/world mutation responses
1 parent 98168d7 commit cad29ef

21 files changed

Lines changed: 8743 additions & 1406 deletions

plugin/adapters/handlers/player.go

Lines changed: 141 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@ package handlers
22

33
import (
44
"fmt"
5+
"net"
6+
"time"
57

68
"github.com/df-mc/dragonfly/server/block/cube"
79
"github.com/df-mc/dragonfly/server/cmd"
810
"github.com/df-mc/dragonfly/server/item"
911
"github.com/df-mc/dragonfly/server/player"
12+
"github.com/df-mc/dragonfly/server/player/skin"
13+
"github.com/df-mc/dragonfly/server/session"
14+
"github.com/df-mc/dragonfly/server/world"
15+
"github.com/go-gl/mathgl/mgl64"
1016
"github.com/secmc/plugin/plugin/ports"
1117
)
1218

@@ -20,31 +26,155 @@ func NewPlayerHandler(manager ports.EventManager) player.Handler {
2026
}
2127

2228
func (h *PlayerHandler) HandleChat(ctx *player.Context, message *string) {
23-
if h.manager == nil {
24-
return
25-
}
2629
h.manager.EmitChat(ctx, ctx.Val(), message)
2730
}
2831

32+
func (h *PlayerHandler) HandleMove(ctx *player.Context, newPos mgl64.Vec3, newRot cube.Rotation) {
33+
h.manager.EmitPlayerMove(ctx, ctx.Val(), newPos, newRot)
34+
}
35+
36+
func (h *PlayerHandler) HandleJump(p *player.Player) {
37+
h.manager.EmitPlayerJump(p)
38+
}
39+
40+
func (h *PlayerHandler) HandleTeleport(ctx *player.Context, pos mgl64.Vec3) {
41+
h.manager.EmitPlayerTeleport(ctx, ctx.Val(), pos)
42+
}
43+
44+
func (h *PlayerHandler) HandleChangeWorld(p *player.Player, before, after *world.World) {
45+
h.manager.EmitPlayerChangeWorld(p, before, after)
46+
}
47+
48+
func (h *PlayerHandler) HandleToggleSprint(ctx *player.Context, after bool) {
49+
h.manager.EmitPlayerToggleSprint(ctx, ctx.Val(), after)
50+
}
51+
52+
func (h *PlayerHandler) HandleToggleSneak(ctx *player.Context, after bool) {
53+
h.manager.EmitPlayerToggleSneak(ctx, ctx.Val(), after)
54+
}
55+
56+
func (h *PlayerHandler) HandleFoodLoss(ctx *player.Context, from int, to *int) {
57+
h.manager.EmitPlayerFoodLoss(ctx, ctx.Val(), from, to)
58+
}
59+
60+
func (h *PlayerHandler) HandleHeal(ctx *player.Context, health *float64, src world.HealingSource) {
61+
h.manager.EmitPlayerHeal(ctx, ctx.Val(), health, src)
62+
}
63+
64+
func (h *PlayerHandler) HandleHurt(ctx *player.Context, damage *float64, immune bool, attackImmunity *time.Duration, src world.DamageSource) {
65+
h.manager.EmitPlayerHurt(ctx, ctx.Val(), damage, immune, attackImmunity, src)
66+
}
67+
68+
func (h *PlayerHandler) HandleDeath(p *player.Player, src world.DamageSource, keepInv *bool) {
69+
h.manager.EmitPlayerDeath(p, src, keepInv)
70+
}
71+
72+
func (h *PlayerHandler) HandleRespawn(p *player.Player, pos *mgl64.Vec3, w **world.World) {
73+
h.manager.EmitPlayerRespawn(p, pos, w)
74+
}
75+
76+
func (h *PlayerHandler) HandleSkinChange(ctx *player.Context, skin *skin.Skin) {
77+
h.manager.EmitPlayerSkinChange(ctx, ctx.Val(), skin)
78+
}
79+
80+
func (h *PlayerHandler) HandleFireExtinguish(ctx *player.Context, pos cube.Pos) {
81+
h.manager.EmitPlayerFireExtinguish(ctx, ctx.Val(), pos)
82+
}
83+
84+
func (h *PlayerHandler) HandleStartBreak(ctx *player.Context, pos cube.Pos) {
85+
h.manager.EmitPlayerStartBreak(ctx, ctx.Val(), pos)
86+
}
87+
2988
func (h *PlayerHandler) HandleCommandExecution(ctx *player.Context, command cmd.Command, args []string) {
30-
if h.manager == nil {
31-
return
32-
}
3389
h.manager.EmitCommand(ctx, ctx.Val(), command.Name(), args)
3490
}
3591

3692
func (h *PlayerHandler) HandleBlockBreak(ctx *player.Context, pos cube.Pos, drops *[]item.Stack, xp *int) {
37-
if h.manager == nil {
38-
return
39-
}
4093
p := ctx.Val()
4194
worldDim := fmt.Sprint(p.Tx().World().Dimension())
4295
h.manager.EmitBlockBreak(ctx, p, pos, drops, xp, worldDim)
4396
}
4497

4598
func (h *PlayerHandler) HandleQuit(p *player.Player) {
46-
if h.manager == nil {
99+
h.manager.EmitPlayerQuit(p)
100+
}
101+
102+
func (h *PlayerHandler) HandleBlockPlace(ctx *player.Context, pos cube.Pos, b world.Block) {
103+
h.manager.EmitPlayerBlockPlace(ctx, ctx.Val(), pos, b)
104+
}
105+
106+
func (h *PlayerHandler) HandleBlockPick(ctx *player.Context, pos cube.Pos, b world.Block) {
107+
h.manager.EmitPlayerBlockPick(ctx, ctx.Val(), pos, b)
108+
}
109+
110+
func (h *PlayerHandler) HandleItemUse(ctx *player.Context) {
111+
h.manager.EmitPlayerItemUse(ctx, ctx.Val())
112+
}
113+
114+
func (h *PlayerHandler) HandleItemUseOnBlock(ctx *player.Context, pos cube.Pos, face cube.Face, clickPos mgl64.Vec3) {
115+
p := ctx.Val()
116+
if p == nil {
47117
return
48118
}
49-
h.manager.EmitPlayerQuit(p)
119+
var block world.Block
120+
if tx := p.Tx(); tx != nil {
121+
block = tx.Block(pos)
122+
}
123+
h.manager.EmitPlayerItemUseOnBlock(ctx, p, pos, face, clickPos, block)
124+
}
125+
126+
func (h *PlayerHandler) HandleItemUseOnEntity(ctx *player.Context, e world.Entity) {
127+
h.manager.EmitPlayerItemUseOnEntity(ctx, ctx.Val(), e)
128+
}
129+
130+
func (h *PlayerHandler) HandleItemRelease(ctx *player.Context, it item.Stack, dur time.Duration) {
131+
h.manager.EmitPlayerItemRelease(ctx, ctx.Val(), it, dur)
132+
}
133+
134+
func (h *PlayerHandler) HandleItemConsume(ctx *player.Context, it item.Stack) {
135+
h.manager.EmitPlayerItemConsume(ctx, ctx.Val(), it)
136+
}
137+
138+
func (h *PlayerHandler) HandleAttackEntity(ctx *player.Context, e world.Entity, force, height *float64, critical *bool) {
139+
h.manager.EmitPlayerAttackEntity(ctx, ctx.Val(), e, force, height, critical)
140+
}
141+
142+
func (h *PlayerHandler) HandleExperienceGain(ctx *player.Context, amount *int) {
143+
h.manager.EmitPlayerExperienceGain(ctx, ctx.Val(), amount)
144+
}
145+
146+
func (h *PlayerHandler) HandlePunchAir(ctx *player.Context) {
147+
h.manager.EmitPlayerPunchAir(ctx, ctx.Val())
148+
}
149+
150+
func (h *PlayerHandler) HandleSignEdit(ctx *player.Context, pos cube.Pos, frontSide bool, oldText, newText string) {
151+
h.manager.EmitPlayerSignEdit(ctx, ctx.Val(), pos, frontSide, oldText, newText)
152+
}
153+
154+
func (h *PlayerHandler) HandleLecternPageTurn(ctx *player.Context, pos cube.Pos, oldPage int, newPage *int) {
155+
h.manager.EmitPlayerLecternPageTurn(ctx, ctx.Val(), pos, oldPage, newPage)
156+
}
157+
158+
func (h *PlayerHandler) HandleItemDamage(ctx *player.Context, it item.Stack, damage int) {
159+
h.manager.EmitPlayerItemDamage(ctx, ctx.Val(), it, damage)
160+
}
161+
162+
func (h *PlayerHandler) HandleItemPickup(ctx *player.Context, it *item.Stack) {
163+
h.manager.EmitPlayerItemPickup(ctx, ctx.Val(), it)
164+
}
165+
166+
func (h *PlayerHandler) HandleHeldSlotChange(ctx *player.Context, from, to int) {
167+
h.manager.EmitPlayerHeldSlotChange(ctx, ctx.Val(), from, to)
168+
}
169+
170+
func (h *PlayerHandler) HandleItemDrop(ctx *player.Context, it item.Stack) {
171+
h.manager.EmitPlayerItemDrop(ctx, ctx.Val(), it)
172+
}
173+
174+
func (h *PlayerHandler) HandleTransfer(ctx *player.Context, addr *net.UDPAddr) {
175+
h.manager.EmitPlayerTransfer(ctx, ctx.Val(), addr)
176+
}
177+
178+
func (h *PlayerHandler) HandleDiagnostics(p *player.Player, d session.Diagnostics) {
179+
h.manager.EmitPlayerDiagnostics(p, d)
50180
}

plugin/adapters/handlers/world.go

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,67 @@
11
package handlers
22

33
import (
4+
"github.com/df-mc/dragonfly/server/block/cube"
45
"github.com/df-mc/dragonfly/server/world"
5-
pb "github.com/secmc/plugin/proto/generated"
6+
"github.com/go-gl/mathgl/mgl64"
7+
"github.com/secmc/plugin/plugin/ports"
68
)
79

810
var _ world.Handler = (*WorldHandler)(nil)
911

10-
type EventBroadcaster interface {
11-
BroadcastEvent(evt *pb.EventEnvelope)
12-
GenerateEventID() string
13-
}
14-
1512
type WorldHandler struct {
1613
world.NopHandler
17-
broadcaster EventBroadcaster
14+
manager ports.EventManager
1815
}
1916

20-
func NewWorldHandler(broadcaster EventBroadcaster) world.Handler {
21-
return &WorldHandler{broadcaster: broadcaster}
17+
func NewWorldHandler(manager ports.EventManager) world.Handler {
18+
return &WorldHandler{manager: manager}
2219
}
2320

2421
func (h *WorldHandler) HandleClose(tx *world.Tx) {
25-
if h.broadcaster == nil || tx == nil {
26-
return
27-
}
28-
evt := &pb.EventEnvelope{
29-
EventId: h.broadcaster.GenerateEventID(),
30-
Type: pb.EventType_WORLD_CLOSE,
31-
Payload: &pb.EventEnvelope_WorldClose{
32-
WorldClose: &pb.WorldCloseEvent{},
33-
},
34-
}
35-
h.broadcaster.BroadcastEvent(evt)
22+
h.manager.EmitWorldClose(tx)
23+
}
24+
25+
func (h *WorldHandler) HandleLiquidFlow(ctx *world.Context, from, into cube.Pos, liquid world.Liquid, replaced world.Block) {
26+
h.manager.EmitWorldLiquidFlow(ctx, from, into, liquid, replaced)
27+
}
28+
29+
func (h *WorldHandler) HandleLiquidDecay(ctx *world.Context, pos cube.Pos, before, after world.Liquid) {
30+
h.manager.EmitWorldLiquidDecay(ctx, pos, before, after)
31+
}
32+
33+
func (h *WorldHandler) HandleLiquidHarden(ctx *world.Context, pos cube.Pos, liquidHardened, otherLiquid, newBlock world.Block) {
34+
h.manager.EmitWorldLiquidHarden(ctx, pos, liquidHardened, otherLiquid, newBlock)
35+
}
36+
37+
func (h *WorldHandler) HandleSound(ctx *world.Context, s world.Sound, pos mgl64.Vec3) {
38+
h.manager.EmitWorldSound(ctx, s, pos)
39+
}
40+
41+
func (h *WorldHandler) HandleFireSpread(ctx *world.Context, from, to cube.Pos) {
42+
h.manager.EmitWorldFireSpread(ctx, from, to)
43+
}
44+
45+
func (h *WorldHandler) HandleBlockBurn(ctx *world.Context, pos cube.Pos) {
46+
h.manager.EmitWorldBlockBurn(ctx, pos)
47+
}
48+
49+
func (h *WorldHandler) HandleCropTrample(ctx *world.Context, pos cube.Pos) {
50+
h.manager.EmitWorldCropTrample(ctx, pos)
51+
}
52+
53+
func (h *WorldHandler) HandleLeavesDecay(ctx *world.Context, pos cube.Pos) {
54+
h.manager.EmitWorldLeavesDecay(ctx, pos)
55+
}
56+
57+
func (h *WorldHandler) HandleEntitySpawn(tx *world.Tx, e world.Entity) {
58+
h.manager.EmitWorldEntitySpawn(tx, e)
59+
}
60+
61+
func (h *WorldHandler) HandleEntityDespawn(tx *world.Tx, e world.Entity) {
62+
h.manager.EmitWorldEntityDespawn(tx, e)
63+
}
64+
65+
func (h *WorldHandler) HandleExplosion(ctx *world.Context, position mgl64.Vec3, entities *[]world.Entity, blocks *[]cube.Pos, itemDropChance *float64, spawnFire *bool) {
66+
h.manager.EmitWorldExplosion(ctx, position, entities, blocks, itemDropChance, spawnFire)
3667
}

0 commit comments

Comments
 (0)