Skip to content

Commit a80f2dc

Browse files
committed
Expand Dragonfly event coverage
1 parent ed6d23c commit a80f2dc

21 files changed

+7680
-1261
lines changed

plugin/adapters/handlers/player.go

Lines changed: 238 additions & 0 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

@@ -26,6 +32,104 @@ func (h *PlayerHandler) HandleChat(ctx *player.Context, message *string) {
2632
h.manager.EmitChat(ctx, ctx.Val(), message)
2733
}
2834

35+
func (h *PlayerHandler) HandleMove(ctx *player.Context, newPos mgl64.Vec3, newRot cube.Rotation) {
36+
if h.manager == nil {
37+
return
38+
}
39+
h.manager.EmitPlayerMove(ctx, ctx.Val(), newPos, newRot)
40+
}
41+
42+
func (h *PlayerHandler) HandleJump(p *player.Player) {
43+
if h.manager == nil {
44+
return
45+
}
46+
h.manager.EmitPlayerJump(p)
47+
}
48+
49+
func (h *PlayerHandler) HandleTeleport(ctx *player.Context, pos mgl64.Vec3) {
50+
if h.manager == nil {
51+
return
52+
}
53+
h.manager.EmitPlayerTeleport(ctx, ctx.Val(), pos)
54+
}
55+
56+
func (h *PlayerHandler) HandleChangeWorld(p *player.Player, before, after *world.World) {
57+
if h.manager == nil {
58+
return
59+
}
60+
h.manager.EmitPlayerChangeWorld(p, before, after)
61+
}
62+
63+
func (h *PlayerHandler) HandleToggleSprint(ctx *player.Context, after bool) {
64+
if h.manager == nil {
65+
return
66+
}
67+
h.manager.EmitPlayerToggleSprint(ctx, ctx.Val(), after)
68+
}
69+
70+
func (h *PlayerHandler) HandleToggleSneak(ctx *player.Context, after bool) {
71+
if h.manager == nil {
72+
return
73+
}
74+
h.manager.EmitPlayerToggleSneak(ctx, ctx.Val(), after)
75+
}
76+
77+
func (h *PlayerHandler) HandleFoodLoss(ctx *player.Context, from int, to *int) {
78+
if h.manager == nil {
79+
return
80+
}
81+
h.manager.EmitPlayerFoodLoss(ctx, ctx.Val(), from, to)
82+
}
83+
84+
func (h *PlayerHandler) HandleHeal(ctx *player.Context, health *float64, src world.HealingSource) {
85+
if h.manager == nil {
86+
return
87+
}
88+
h.manager.EmitPlayerHeal(ctx, ctx.Val(), health, src)
89+
}
90+
91+
func (h *PlayerHandler) HandleHurt(ctx *player.Context, damage *float64, immune bool, attackImmunity *time.Duration, src world.DamageSource) {
92+
if h.manager == nil {
93+
return
94+
}
95+
h.manager.EmitPlayerHurt(ctx, ctx.Val(), damage, immune, attackImmunity, src)
96+
}
97+
98+
func (h *PlayerHandler) HandleDeath(p *player.Player, src world.DamageSource, keepInv *bool) {
99+
if h.manager == nil {
100+
return
101+
}
102+
h.manager.EmitPlayerDeath(p, src, keepInv)
103+
}
104+
105+
func (h *PlayerHandler) HandleRespawn(p *player.Player, pos *mgl64.Vec3, w **world.World) {
106+
if h.manager == nil {
107+
return
108+
}
109+
h.manager.EmitPlayerRespawn(p, pos, w)
110+
}
111+
112+
func (h *PlayerHandler) HandleSkinChange(ctx *player.Context, skin *skin.Skin) {
113+
if h.manager == nil {
114+
return
115+
}
116+
h.manager.EmitPlayerSkinChange(ctx, ctx.Val(), skin)
117+
}
118+
119+
func (h *PlayerHandler) HandleFireExtinguish(ctx *player.Context, pos cube.Pos) {
120+
if h.manager == nil {
121+
return
122+
}
123+
h.manager.EmitPlayerFireExtinguish(ctx, ctx.Val(), pos)
124+
}
125+
126+
func (h *PlayerHandler) HandleStartBreak(ctx *player.Context, pos cube.Pos) {
127+
if h.manager == nil {
128+
return
129+
}
130+
h.manager.EmitPlayerStartBreak(ctx, ctx.Val(), pos)
131+
}
132+
29133
func (h *PlayerHandler) HandleCommandExecution(ctx *player.Context, command cmd.Command, args []string) {
30134
if h.manager == nil {
31135
return
@@ -48,3 +152,137 @@ func (h *PlayerHandler) HandleQuit(p *player.Player) {
48152
}
49153
h.manager.EmitPlayerQuit(p)
50154
}
155+
156+
func (h *PlayerHandler) HandleBlockPlace(ctx *player.Context, pos cube.Pos, b world.Block) {
157+
if h.manager == nil {
158+
return
159+
}
160+
h.manager.EmitPlayerBlockPlace(ctx, ctx.Val(), pos, b)
161+
}
162+
163+
func (h *PlayerHandler) HandleBlockPick(ctx *player.Context, pos cube.Pos, b world.Block) {
164+
if h.manager == nil {
165+
return
166+
}
167+
h.manager.EmitPlayerBlockPick(ctx, ctx.Val(), pos, b)
168+
}
169+
170+
func (h *PlayerHandler) HandleItemUse(ctx *player.Context) {
171+
if h.manager == nil {
172+
return
173+
}
174+
h.manager.EmitPlayerItemUse(ctx, ctx.Val())
175+
}
176+
177+
func (h *PlayerHandler) HandleItemUseOnBlock(ctx *player.Context, pos cube.Pos, face cube.Face, clickPos mgl64.Vec3) {
178+
if h.manager == nil {
179+
return
180+
}
181+
p := ctx.Val()
182+
if p == nil {
183+
return
184+
}
185+
var block world.Block
186+
if tx := p.Tx(); tx != nil {
187+
block = tx.Block(pos)
188+
}
189+
h.manager.EmitPlayerItemUseOnBlock(ctx, p, pos, face, clickPos, block)
190+
}
191+
192+
func (h *PlayerHandler) HandleItemUseOnEntity(ctx *player.Context, e world.Entity) {
193+
if h.manager == nil {
194+
return
195+
}
196+
h.manager.EmitPlayerItemUseOnEntity(ctx, ctx.Val(), e)
197+
}
198+
199+
func (h *PlayerHandler) HandleItemRelease(ctx *player.Context, it item.Stack, dur time.Duration) {
200+
if h.manager == nil {
201+
return
202+
}
203+
h.manager.EmitPlayerItemRelease(ctx, ctx.Val(), it, dur)
204+
}
205+
206+
func (h *PlayerHandler) HandleItemConsume(ctx *player.Context, it item.Stack) {
207+
if h.manager == nil {
208+
return
209+
}
210+
h.manager.EmitPlayerItemConsume(ctx, ctx.Val(), it)
211+
}
212+
213+
func (h *PlayerHandler) HandleAttackEntity(ctx *player.Context, e world.Entity, force, height *float64, critical *bool) {
214+
if h.manager == nil {
215+
return
216+
}
217+
h.manager.EmitPlayerAttackEntity(ctx, ctx.Val(), e, force, height, critical)
218+
}
219+
220+
func (h *PlayerHandler) HandleExperienceGain(ctx *player.Context, amount *int) {
221+
if h.manager == nil {
222+
return
223+
}
224+
h.manager.EmitPlayerExperienceGain(ctx, ctx.Val(), amount)
225+
}
226+
227+
func (h *PlayerHandler) HandlePunchAir(ctx *player.Context) {
228+
if h.manager == nil {
229+
return
230+
}
231+
h.manager.EmitPlayerPunchAir(ctx, ctx.Val())
232+
}
233+
234+
func (h *PlayerHandler) HandleSignEdit(ctx *player.Context, pos cube.Pos, frontSide bool, oldText, newText string) {
235+
if h.manager == nil {
236+
return
237+
}
238+
h.manager.EmitPlayerSignEdit(ctx, ctx.Val(), pos, frontSide, oldText, newText)
239+
}
240+
241+
func (h *PlayerHandler) HandleLecternPageTurn(ctx *player.Context, pos cube.Pos, oldPage int, newPage *int) {
242+
if h.manager == nil {
243+
return
244+
}
245+
h.manager.EmitPlayerLecternPageTurn(ctx, ctx.Val(), pos, oldPage, newPage)
246+
}
247+
248+
func (h *PlayerHandler) HandleItemDamage(ctx *player.Context, it item.Stack, damage int) {
249+
if h.manager == nil {
250+
return
251+
}
252+
h.manager.EmitPlayerItemDamage(ctx, ctx.Val(), it, damage)
253+
}
254+
255+
func (h *PlayerHandler) HandleItemPickup(ctx *player.Context, it *item.Stack) {
256+
if h.manager == nil {
257+
return
258+
}
259+
h.manager.EmitPlayerItemPickup(ctx, ctx.Val(), it)
260+
}
261+
262+
func (h *PlayerHandler) HandleHeldSlotChange(ctx *player.Context, from, to int) {
263+
if h.manager == nil {
264+
return
265+
}
266+
h.manager.EmitPlayerHeldSlotChange(ctx, ctx.Val(), from, to)
267+
}
268+
269+
func (h *PlayerHandler) HandleItemDrop(ctx *player.Context, it item.Stack) {
270+
if h.manager == nil {
271+
return
272+
}
273+
h.manager.EmitPlayerItemDrop(ctx, ctx.Val(), it)
274+
}
275+
276+
func (h *PlayerHandler) HandleTransfer(ctx *player.Context, addr *net.UDPAddr) {
277+
if h.manager == nil {
278+
return
279+
}
280+
h.manager.EmitPlayerTransfer(ctx, ctx.Val(), addr)
281+
}
282+
283+
func (h *PlayerHandler) HandleDiagnostics(p *player.Player, d session.Diagnostics) {
284+
if h.manager == nil {
285+
return
286+
}
287+
h.manager.EmitPlayerDiagnostics(p, d)
288+
}

plugin/adapters/handlers/world.go

Lines changed: 84 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,103 @@
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 {
22+
if h.manager == nil {
23+
return
24+
}
25+
h.manager.EmitWorldClose(tx)
26+
}
27+
28+
func (h *WorldHandler) HandleLiquidFlow(ctx *world.Context, from, into cube.Pos, liquid world.Liquid, replaced world.Block) {
29+
if h.manager == nil {
2630
return
2731
}
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-
},
32+
h.manager.EmitWorldLiquidFlow(ctx, from, into, liquid, replaced)
33+
}
34+
35+
func (h *WorldHandler) HandleLiquidDecay(ctx *world.Context, pos cube.Pos, before, after world.Liquid) {
36+
if h.manager == nil {
37+
return
38+
}
39+
h.manager.EmitWorldLiquidDecay(ctx, pos, before, after)
40+
}
41+
42+
func (h *WorldHandler) HandleLiquidHarden(ctx *world.Context, pos cube.Pos, liquidHardened, otherLiquid, newBlock world.Block) {
43+
if h.manager == nil {
44+
return
45+
}
46+
h.manager.EmitWorldLiquidHarden(ctx, pos, liquidHardened, otherLiquid, newBlock)
47+
}
48+
49+
func (h *WorldHandler) HandleSound(ctx *world.Context, s world.Sound, pos mgl64.Vec3) {
50+
if h.manager == nil {
51+
return
52+
}
53+
h.manager.EmitWorldSound(ctx, s, pos)
54+
}
55+
56+
func (h *WorldHandler) HandleFireSpread(ctx *world.Context, from, to cube.Pos) {
57+
if h.manager == nil {
58+
return
59+
}
60+
h.manager.EmitWorldFireSpread(ctx, from, to)
61+
}
62+
63+
func (h *WorldHandler) HandleBlockBurn(ctx *world.Context, pos cube.Pos) {
64+
if h.manager == nil {
65+
return
66+
}
67+
h.manager.EmitWorldBlockBurn(ctx, pos)
68+
}
69+
70+
func (h *WorldHandler) HandleCropTrample(ctx *world.Context, pos cube.Pos) {
71+
if h.manager == nil {
72+
return
73+
}
74+
h.manager.EmitWorldCropTrample(ctx, pos)
75+
}
76+
77+
func (h *WorldHandler) HandleLeavesDecay(ctx *world.Context, pos cube.Pos) {
78+
if h.manager == nil {
79+
return
80+
}
81+
h.manager.EmitWorldLeavesDecay(ctx, pos)
82+
}
83+
84+
func (h *WorldHandler) HandleEntitySpawn(tx *world.Tx, e world.Entity) {
85+
if h.manager == nil {
86+
return
87+
}
88+
h.manager.EmitWorldEntitySpawn(tx, e)
89+
}
90+
91+
func (h *WorldHandler) HandleEntityDespawn(tx *world.Tx, e world.Entity) {
92+
if h.manager == nil {
93+
return
94+
}
95+
h.manager.EmitWorldEntityDespawn(tx, e)
96+
}
97+
98+
func (h *WorldHandler) HandleExplosion(ctx *world.Context, position mgl64.Vec3, entities *[]world.Entity, blocks *[]cube.Pos, itemDropChance *float64, spawnFire *bool) {
99+
if h.manager == nil {
100+
return
34101
}
35-
h.broadcaster.BroadcastEvent(evt)
102+
h.manager.EmitWorldExplosion(ctx, position, entities, blocks, itemDropChance, spawnFire)
36103
}

0 commit comments

Comments
 (0)