]> git.lizzy.rs Git - hydra-dragonfire.git/blob - convert.go
Initial commit
[hydra-dragonfire.git] / convert.go
1 // generated by mkconvert.lua, DO NOT EDIT
2 package main
3
4 import (
5         "github.com/Shopify/go-lua"
6         "github.com/anon55555/mt"
7 )
8
9 func luaPushHotbarParam(l *lua.State, val mt.HotbarParam) {
10         switch val {
11         case mt.HotbarSize:
12                 l.PushString("size")
13         case mt.HotbarImg:
14                 l.PushString("img")
15         case mt.HotbarSelImg:
16                 l.PushString("sel_img")
17         }
18 }
19
20 func luaPushChatMsgType(l *lua.State, val mt.ChatMsgType) {
21         switch val {
22         case mt.RawMsg:
23                 l.PushString("raw")
24         case mt.NormalMsg:
25                 l.PushString("normal")
26         case mt.AnnounceMsg:
27                 l.PushString("announce")
28         case mt.SysMsg:
29                 l.PushString("sys")
30         }
31 }
32
33 func luaPushHUDType(l *lua.State, val mt.HUDType) {
34         switch val {
35         case mt.ImgHUD:
36                 l.PushString("img")
37         case mt.TextHUD:
38                 l.PushString("text")
39         case mt.StatbarHUD:
40                 l.PushString("statbar")
41         case mt.InvHUD:
42                 l.PushString("inv")
43         case mt.WaypointHUD:
44                 l.PushString("waypoint")
45         case mt.ImgWaypointHUD:
46                 l.PushString("img_waypoint")
47         }
48 }
49
50 func luaPushPlayerListUpdateType(l *lua.State, val mt.PlayerListUpdateType) {
51         switch val {
52         case mt.InitPlayers:
53                 l.PushString("init")
54         case mt.AddPlayers:
55                 l.PushString("add")
56         case mt.RemovePlayers:
57                 l.PushString("remove")
58         }
59 }
60
61 func luaPushHUDField(l *lua.State, val mt.HUDField) {
62         switch val {
63         case mt.HUDPos:
64                 l.PushString("pos")
65         case mt.HUDName:
66                 l.PushString("name")
67         case mt.HUDScale:
68                 l.PushString("scale")
69         case mt.HUDText:
70                 l.PushString("text")
71         case mt.HUDNumber:
72                 l.PushString("number")
73         case mt.HUDItem:
74                 l.PushString("item")
75         case mt.HUDDir:
76                 l.PushString("dir")
77         case mt.HUDAlign:
78                 l.PushString("align")
79         case mt.HUDOffset:
80                 l.PushString("offset")
81         case mt.HUDWorldPos:
82                 l.PushString("world_pos")
83         case mt.HUDSize:
84                 l.PushString("size")
85         case mt.HUDZIndex:
86                 l.PushString("z_index")
87         case mt.HUDText2:
88                 l.PushString("text_2")
89         }
90 }
91
92 func luaPushModChanSig(l *lua.State, val mt.ModChanSig) {
93         switch val {
94         case mt.JoinOK:
95                 l.PushString("join_ok")
96         case mt.JoinFail:
97                 l.PushString("join_fail")
98         case mt.LeaveOK:
99                 l.PushString("leave_ok")
100         case mt.LeaveFail:
101                 l.PushString("leave_fail")
102         case mt.NotRegistered:
103                 l.PushString("not_registered")
104         case mt.SetState:
105                 l.PushString("set_state")
106         }
107 }
108
109 func luaPushKickReason(l *lua.State, val mt.KickReason) {
110         switch val {
111         case mt.WrongPasswd:
112                 l.PushString("wrong_passwd")
113         case mt.UnexpectedData:
114                 l.PushString("unexpected_data")
115         case mt.SrvIsSingleplayer:
116                 l.PushString("srv_is_singleplayer")
117         case mt.UnsupportedVer:
118                 l.PushString("unsupported_ver")
119         case mt.BadNameChars:
120                 l.PushString("bad_name_chars")
121         case mt.BadName:
122                 l.PushString("bad_name")
123         case mt.TooManyClts:
124                 l.PushString("too_many_clts")
125         case mt.EmptyPasswd:
126                 l.PushString("empty_passwd")
127         case mt.AlreadyConnected:
128                 l.PushString("already_connected")
129         case mt.SrvErr:
130                 l.PushString("srv_err")
131         case mt.Custom:
132                 l.PushString("custom")
133         case mt.Shutdown:
134                 l.PushString("shutdown")
135         case mt.Crash:
136                 l.PushString("crash")
137         }
138 }
139
140 func luaPushSoundSrcType(l *lua.State, val mt.SoundSrcType) {
141         switch val {
142         case mt.NoSrc:
143                 l.PushNil()
144         case mt.PosSrc:
145                 l.PushString("pos")
146         case mt.AOSrc:
147                 l.PushString("ao")
148         }
149 }
150
151 func luaPushAnimType(l *lua.State, val mt.AnimType) {
152         switch val {
153         case mt.NoAnim:
154                 l.PushNil()
155         case mt.VerticalFrameAnim:
156                 l.PushString("vertical_frame")
157         case mt.SpriteSheetAnim:
158                 l.PushString("sprite_sheet")
159         }
160 }
161
162 func luaPushAuthMethods(l *lua.State, val mt.AuthMethods) {
163         l.NewTable()
164         if val&mt.LegacyPasswd != 0 {
165                 l.PushBoolean(true)
166                 l.SetField(-2, "legacy_passwd")
167         }
168         if val&mt.SRP != 0 {
169                 l.PushBoolean(true)
170                 l.SetField(-2, "srp")
171         }
172         if val&mt.FirstSRP != 0 {
173                 l.PushBoolean(true)
174                 l.SetField(-2, "first_srp")
175         }
176 }
177
178 func luaPushHUDFlags(l *lua.State, val mt.HUDFlags) {
179         l.NewTable()
180         if val&mt.ShowHotbar != 0 {
181                 l.PushBoolean(true)
182                 l.SetField(-2, "hotbar")
183         }
184         if val&mt.ShowHealthBar != 0 {
185                 l.PushBoolean(true)
186                 l.SetField(-2, "health_bar")
187         }
188         if val&mt.ShowCrosshair != 0 {
189                 l.PushBoolean(true)
190                 l.SetField(-2, "crosshair")
191         }
192         if val&mt.ShowWieldedItem != 0 {
193                 l.PushBoolean(true)
194                 l.SetField(-2, "wielded_item")
195         }
196         if val&mt.ShowBreathBar != 0 {
197                 l.PushBoolean(true)
198                 l.SetField(-2, "breath_bar")
199         }
200         if val&mt.ShowMinimap != 0 {
201                 l.PushBoolean(true)
202                 l.SetField(-2, "minimap")
203         }
204         if val&mt.ShowRadarMinimap != 0 {
205                 l.PushBoolean(true)
206                 l.SetField(-2, "radar_minimap")
207         }
208 }
209
210 func luaPushCSMRestrictionFlags(l *lua.State, val mt.CSMRestrictionFlags) {
211         l.NewTable()
212         if val&mt.NoCSMs != 0 {
213                 l.PushBoolean(true)
214                 l.SetField(-2, "no_csms")
215         }
216         if val&mt.NoChatMsgs != 0 {
217                 l.PushBoolean(true)
218                 l.SetField(-2, "no_chat_msgs")
219         }
220         if val&mt.NoNodeDefs != 0 {
221                 l.PushBoolean(true)
222                 l.SetField(-2, "no_node_defs")
223         }
224         if val&mt.LimitMapRange != 0 {
225                 l.PushBoolean(true)
226                 l.SetField(-2, "limit_map_range")
227         }
228         if val&mt.NoPlayerList != 0 {
229                 l.PushBoolean(true)
230                 l.SetField(-2, "no_player_list")
231         }
232 }
233
234 func luaPushTileAnim(l *lua.State, val mt.TileAnim) {
235         l.NewTable()
236         luaPushAnimType(l, val.Type)
237         l.SetField(-2, "type")
238         luaPushVec2(l, [2]float64{float64(val.NFrames[0]), float64(val.NFrames[1])})
239         l.SetField(-2, "n_frames")
240         l.PushNumber(float64(val.Duration))
241         l.SetField(-2, "duration")
242         luaPushVec2(l, [2]float64{float64(val.AspectRatio[0]), float64(val.AspectRatio[1])})
243         l.SetField(-2, "aspect_ratio")
244 }
245
246 func luaPushNode(l *lua.State, val mt.Node) {
247         l.NewTable()
248         l.PushInteger(int(val.Param0))
249         l.SetField(-2, "param0")
250         l.PushInteger(int(val.Param1))
251         l.SetField(-2, "param1")
252         l.PushInteger(int(val.Param2))
253         l.SetField(-2, "param2")
254 }
255
256 func luaPushHUD(l *lua.State, val mt.HUD) {
257         l.NewTable()
258         luaPushHUDType(l, val.Type)
259         l.SetField(-2, "type")
260         l.PushInteger(int(val.ZIndex))
261         l.SetField(-2, "z_index")
262         luaPushVec2(l, [2]float64{float64(val.Scale[0]), float64(val.Scale[1])})
263         l.SetField(-2, "scale")
264         l.PushString(string(val.Name))
265         l.SetField(-2, "name")
266         luaPushVec3(l, [3]float64{float64(val.WorldPos[0]), float64(val.WorldPos[1]), float64(val.WorldPos[2])})
267         l.SetField(-2, "world_pos")
268         l.PushString(string(val.Text))
269         l.SetField(-2, "text")
270         l.PushString(string(val.Text2))
271         l.SetField(-2, "text_2")
272         luaPushVec2(l, [2]float64{float64(val.Size[0]), float64(val.Size[1])})
273         l.SetField(-2, "size")
274         luaPushVec2(l, [2]float64{float64(val.Align[0]), float64(val.Align[1])})
275         l.SetField(-2, "align")
276         luaPushVec2(l, [2]float64{float64(val.Pos[0]), float64(val.Pos[1])})
277         l.SetField(-2, "pos")
278         l.PushInteger(int(val.Dir))
279         l.SetField(-2, "dir")
280         luaPushVec2(l, [2]float64{float64(val.Offset[0]), float64(val.Offset[1])})
281         l.SetField(-2, "offset")
282         l.PushInteger(int(val.Number))
283         l.SetField(-2, "number")
284         l.PushInteger(int(val.Item))
285         l.SetField(-2, "item")
286 }
287
288 func pktToString(pkt *mt.Pkt) string {
289         switch pkt.Cmd.(type) {
290         case *mt.ToCltPlaySound:
291                 return "play_sound"
292         case *mt.ToCltLegacyKick:
293                 return "legacy_kick"
294         case *mt.ToCltFOV:
295                 return "fov"
296         case *mt.ToCltNodeMetasChanged:
297                 return "node_metas_changed"
298         case *mt.ToCltHello:
299                 return "hello"
300         case *mt.ToCltAcceptSudoMode:
301                 return "accept_sudo_mode"
302         case *mt.ToCltPrivs:
303                 return "privs"
304         case *mt.ToCltDetachedInv:
305                 return "detached_inv"
306         case *mt.ToCltSpawnParticle:
307                 return "spawn_particle"
308         case *mt.ToCltAcceptAuth:
309                 return "accept_auth"
310         case *mt.ToCltOverrideDayNightRatio:
311                 return "override_day_night_ratio"
312         case *mt.ToCltMinimapModes:
313                 return "minimap_modes"
314         case *mt.ToCltAddHUD:
315                 return "add_hud"
316         case *mt.ToCltHP:
317                 return "hp"
318         case *mt.ToCltChangeHUD:
319                 return "change_hud"
320         case *mt.ToCltFormspecPrepend:
321                 return "formspec_prepend"
322         case *mt.ToCltSRPBytesSaltB:
323                 return "srp_bytes_salt_b"
324         case *mt.ToCltSetHotbarParam:
325                 return "set_hotbar_param"
326         case *mt.ToCltMovePlayer:
327                 return "move_player"
328         case *mt.ToCltAddParticleSpawner:
329                 return "add_particle_spawner"
330         case *mt.ToCltKick:
331                 return "kick"
332         case *mt.ToCltDelParticleSpawner:
333                 return "del_particle_spawner"
334         case *mt.ToCltModChanSig:
335                 return "mod_chan_sig"
336         case *mt.ToCltMoonParams:
337                 return "moon_params"
338         case *mt.ToCltModChanMsg:
339                 return "mod_chan_msg"
340         case *mt.ToCltSunParams:
341                 return "sun_params"
342         case *mt.ToCltInv:
343                 return "inv"
344         case *mt.ToCltRemoveNode:
345                 return "remove_node"
346         case *mt.ToCltNodeDefs:
347                 return "node_defs"
348         case *mt.ToCltMediaPush:
349                 return "media_push"
350         case *mt.ToCltLocalPlayerAnim:
351                 return "local_player_anim"
352         case *mt.ToCltFadeSound:
353                 return "fade_sound"
354         case *mt.ToCltItemDefs:
355                 return "item_defs"
356         case *mt.ToCltUpdatePlayerList:
357                 return "update_player_list"
358         case *mt.ToCltEyeOffset:
359                 return "eye_offset"
360         case *mt.ToCltMedia:
361                 return "media"
362         case *mt.ToCltDisco:
363                 return "disco"
364         case *mt.ToCltBlkData:
365                 return "blk_data"
366         case *mt.ToCltSkyParams:
367                 return "sky_params"
368         case *mt.ToCltBreath:
369                 return "breath"
370         case *mt.ToCltChatMsg:
371                 return "chat_msg"
372         case *mt.ToCltHUDFlags:
373                 return "hud_flags"
374         case *mt.ToCltAOMsgs:
375                 return "ao_msgs"
376         case *mt.ToCltRmHUD:
377                 return "rm_hud"
378         case *mt.ToCltStarParams:
379                 return "star_params"
380         case *mt.ToCltDeathScreen:
381                 return "death_screen"
382         case *mt.ToCltAORmAdd:
383                 return "ao_rm_add"
384         case *mt.ToCltAddPlayerVel:
385                 return "add_player_vel"
386         case *mt.ToCltMovement:
387                 return "movement"
388         case *mt.ToCltCloudParams:
389                 return "cloud_params"
390         case *mt.ToCltDenySudoMode:
391                 return "deny_sudo_mode"
392         case *mt.ToCltCSMRestrictionFlags:
393                 return "csm_restriction_flags"
394         case *mt.ToCltAddNode:
395                 return "add_node"
396         case *mt.ToCltStopSound:
397                 return "stop_sound"
398         case *mt.ToCltInvFormspec:
399                 return "inv_formspec"
400         case *mt.ToCltAnnounceMedia:
401                 return "announce_media"
402         case *mt.ToCltShowFormspec:
403                 return "show_formspec"
404         case *mt.ToCltTimeOfDay:
405                 return "time_of_day"
406         }
407         panic("impossible")
408         return ""
409 }
410
411 func pktToLua(l *lua.State, pkt *mt.Pkt) {
412         if pkt == nil {
413                 l.PushNil()
414                 return
415         }
416         l.NewTable()
417         l.PushString(pktToString(pkt))
418         l.SetField(-2, "_type")
419         switch val := pkt.Cmd.(type) {
420         case *mt.ToCltPlaySound:
421                 l.PushNumber(float64(val.Gain))
422                 l.SetField(-2, "gain")
423                 l.PushInteger(int(val.ID))
424                 l.SetField(-2, "id")
425                 l.PushNumber(float64(val.Pitch))
426                 l.SetField(-2, "pitch")
427                 luaPushSoundSrcType(l, val.SrcType)
428                 l.SetField(-2, "src_type")
429                 l.PushInteger(int(val.SrcAOID))
430                 l.SetField(-2, "src_aoid")
431                 l.PushNumber(float64(val.Fade))
432                 l.SetField(-2, "fade")
433                 l.PushBoolean(bool(val.Ephemeral))
434                 l.SetField(-2, "ephemeral")
435                 l.PushBoolean(bool(val.Loop))
436                 l.SetField(-2, "loop")
437                 l.PushString(string(val.Name))
438                 l.SetField(-2, "name")
439                 luaPushVec3(l, [3]float64{float64(val.Pos[0]), float64(val.Pos[1]), float64(val.Pos[2])})
440                 l.SetField(-2, "pos")
441         case *mt.ToCltLegacyKick:
442                 l.PushString(string(val.Reason))
443                 l.SetField(-2, "reason")
444         case *mt.ToCltFOV:
445                 l.PushNumber(float64(val.TransitionTime))
446                 l.SetField(-2, "transition_time")
447                 l.PushBoolean(bool(val.Multiplier))
448                 l.SetField(-2, "multiplier")
449                 l.PushNumber(float64(val.FOV))
450                 l.SetField(-2, "fov")
451         case *mt.ToCltHello:
452                 luaPushAuthMethods(l, val.AuthMethods)
453                 l.SetField(-2, "auth_methods")
454                 l.PushString(string(val.Username))
455                 l.SetField(-2, "username")
456                 l.PushInteger(int(val.Compression))
457                 l.SetField(-2, "compression")
458                 l.PushInteger(int(val.ProtoVer))
459                 l.SetField(-2, "proto_ver")
460                 l.PushInteger(int(val.SerializeVer))
461                 l.SetField(-2, "serialize_ver")
462         case *mt.ToCltPrivs:
463                 luaPushStringSet(l, val.Privs)
464                 l.SetField(-2, "privs")
465         case *mt.ToCltDetachedInv:
466                 l.PushString(string(val.Inv))
467                 l.SetField(-2, "inv")
468                 l.PushBoolean(bool(val.Keep))
469                 l.SetField(-2, "keep")
470                 l.PushInteger(int(val.Len))
471                 l.SetField(-2, "len")
472                 l.PushString(string(val.Name))
473                 l.SetField(-2, "name")
474         case *mt.ToCltSpawnParticle:
475                 l.PushBoolean(bool(val.Collide))
476                 l.SetField(-2, "collide")
477                 l.PushString(string(val.Texture))
478                 l.SetField(-2, "texture")
479                 luaPushVec3(l, [3]float64{float64(val.Pos[0]), float64(val.Pos[1]), float64(val.Pos[2])})
480                 l.SetField(-2, "pos")
481                 l.PushInteger(int(val.NodeTile))
482                 l.SetField(-2, "node_tile")
483                 l.PushBoolean(bool(val.Vertical))
484                 l.SetField(-2, "vertical")
485                 l.PushInteger(int(val.Glow))
486                 l.SetField(-2, "glow")
487                 l.PushInteger(int(val.NodeParam2))
488                 l.SetField(-2, "node_param2")
489                 l.PushInteger(int(val.NodeParam0))
490                 l.SetField(-2, "node_param0")
491                 l.PushBoolean(bool(val.AOCollision))
492                 l.SetField(-2, "ao_collision")
493                 l.PushNumber(float64(val.Size))
494                 l.SetField(-2, "size")
495                 l.PushNumber(float64(val.ExpirationTime))
496                 l.SetField(-2, "expiration_time")
497                 l.PushBoolean(bool(val.CollisionRm))
498                 l.SetField(-2, "collision_rm")
499                 luaPushTileAnim(l, val.AnimParams)
500                 l.SetField(-2, "anim_params")
501                 luaPushVec3(l, [3]float64{float64(val.Acc[0]), float64(val.Acc[1]), float64(val.Acc[2])})
502                 l.SetField(-2, "acc")
503                 luaPushVec3(l, [3]float64{float64(val.Vel[0]), float64(val.Vel[1]), float64(val.Vel[2])})
504                 l.SetField(-2, "vel")
505         case *mt.ToCltAcceptAuth:
506                 l.PushNumber(float64(val.MapSeed))
507                 l.SetField(-2, "map_seed")
508                 luaPushAuthMethods(l, val.SudoAuthMethods)
509                 l.SetField(-2, "sudo_auth_methods")
510                 l.PushNumber(float64(val.SendInterval))
511                 l.SetField(-2, "send_interval")
512                 luaPushVec3(l, [3]float64{float64(val.PlayerPos[0]), float64(val.PlayerPos[1]), float64(val.PlayerPos[2])})
513                 l.SetField(-2, "player_pos")
514         case *mt.ToCltOverrideDayNightRatio:
515                 l.PushInteger(int(val.Ratio))
516                 l.SetField(-2, "ratio")
517                 l.PushBoolean(bool(val.Override))
518                 l.SetField(-2, "override")
519         case *mt.ToCltAddHUD:
520                 luaPushHUD(l, val.HUD)
521                 l.SetField(-2, "hud")
522                 l.PushInteger(int(val.ID))
523                 l.SetField(-2, "id")
524         case *mt.ToCltHP:
525                 l.PushInteger(int(val.HP))
526                 l.SetField(-2, "hp")
527         case *mt.ToCltChangeHUD:
528                 if val.Field == mt.HUDWorldPos {
529                         luaPushVec3(l, [3]float64{float64(val.WorldPos[0]), float64(val.WorldPos[1]), float64(val.WorldPos[2])})
530                         l.SetField(-2, "world_pos")
531                 }
532                 if val.Field == mt.HUDText2 {
533                         l.PushString(string(val.Text2))
534                         l.SetField(-2, "text_2")
535                 }
536                 if val.Field == mt.HUDItem {
537                         l.PushInteger(int(val.Item))
538                         l.SetField(-2, "item")
539                 }
540                 if val.Field == mt.HUDZIndex {
541                         l.PushInteger(int(val.ZIndex))
542                         l.SetField(-2, "z_index")
543                 }
544                 if val.Field == mt.HUDPos {
545                         luaPushVec2(l, [2]float64{float64(val.Pos[0]), float64(val.Pos[1])})
546                         l.SetField(-2, "pos")
547                 }
548                 if val.Field == mt.HUDSize {
549                         luaPushVec2(l, [2]float64{float64(val.Size[0]), float64(val.Size[1])})
550                         l.SetField(-2, "size")
551                 }
552                 if val.Field == mt.HUDName {
553                         l.PushString(string(val.Name))
554                         l.SetField(-2, "name")
555                 }
556                 if val.Field == mt.HUDDir {
557                         l.PushInteger(int(val.Dir))
558                         l.SetField(-2, "dir")
559                 }
560                 if val.Field == mt.HUDAlign {
561                         luaPushVec2(l, [2]float64{float64(val.Align[0]), float64(val.Align[1])})
562                         l.SetField(-2, "align")
563                 }
564                 if val.Field == mt.HUDNumber {
565                         l.PushInteger(int(val.Number))
566                         l.SetField(-2, "number")
567                 }
568                 if val.Field == mt.HUDText {
569                         l.PushString(string(val.Text))
570                         l.SetField(-2, "text")
571                 }
572                 if val.Field == mt.HUDOffset {
573                         luaPushVec2(l, [2]float64{float64(val.Offset[0]), float64(val.Offset[1])})
574                         l.SetField(-2, "offset")
575                 }
576                 luaPushHUDField(l, val.Field)
577                 l.SetField(-2, "field")
578                 l.PushInteger(int(val.ID))
579                 l.SetField(-2, "id")
580         case *mt.ToCltFormspecPrepend:
581                 l.PushString(string(val.Prepend))
582                 l.SetField(-2, "prepend")
583         case *mt.ToCltSRPBytesSaltB:
584                 l.PushString(string(val.B))
585                 l.SetField(-2, "b")
586                 l.PushString(string(val.Salt))
587                 l.SetField(-2, "salt")
588         case *mt.ToCltSetHotbarParam:
589                 luaPushHotbarParam(l, val.Param)
590                 l.SetField(-2, "param")
591                 l.PushInteger(int(val.Size))
592                 l.SetField(-2, "size")
593                 l.PushString(string(val.Img))
594                 l.SetField(-2, "img")
595         case *mt.ToCltMovePlayer:
596                 l.PushNumber(float64(val.Yaw))
597                 l.SetField(-2, "yaw")
598                 l.PushNumber(float64(val.Pitch))
599                 l.SetField(-2, "pitch")
600                 luaPushVec3(l, [3]float64{float64(val.Pos[0]), float64(val.Pos[1]), float64(val.Pos[2])})
601                 l.SetField(-2, "pos")
602         case *mt.ToCltAddParticleSpawner:
603                 luaPushBox3(l, [2][3]float64{{float64(val.Acc[0][0]), float64(val.Acc[0][1]), float64(val.Acc[0][2])}, {float64(val.Acc[1][0]), float64(val.Acc[1][1]), float64(val.Acc[1][2])}})
604                 l.SetField(-2, "acc")
605                 l.PushInteger(int(val.ID))
606                 l.SetField(-2, "id")
607                 l.PushString(string(val.Texture))
608                 l.SetField(-2, "texture")
609                 l.PushBoolean(bool(val.Vertical))
610                 l.SetField(-2, "vertical")
611                 luaPushBox1(l, [2]float64{float64(val.ExpirationTime[0]), float64(val.ExpirationTime[1])})
612                 l.SetField(-2, "expiration_time")
613                 luaPushTileAnim(l, val.AnimParams)
614                 l.SetField(-2, "anim_params")
615                 l.PushBoolean(bool(val.AOCollision))
616                 l.SetField(-2, "ao_collision")
617                 luaPushBox3(l, [2][3]float64{{float64(val.Pos[0][0]), float64(val.Pos[0][1]), float64(val.Pos[0][2])}, {float64(val.Pos[1][0]), float64(val.Pos[1][1]), float64(val.Pos[1][2])}})
618                 l.SetField(-2, "pos")
619                 l.PushInteger(int(val.Glow))
620                 l.SetField(-2, "glow")
621                 l.PushInteger(int(val.NodeParam0))
622                 l.SetField(-2, "node_param0")
623                 luaPushBox3(l, [2][3]float64{{float64(val.Vel[0][0]), float64(val.Vel[0][1]), float64(val.Vel[0][2])}, {float64(val.Vel[1][0]), float64(val.Vel[1][1]), float64(val.Vel[1][2])}})
624                 l.SetField(-2, "vel")
625                 l.PushBoolean(bool(val.Collide))
626                 l.SetField(-2, "collide")
627                 luaPushBox1(l, [2]float64{float64(val.Size[0]), float64(val.Size[1])})
628                 l.SetField(-2, "size")
629                 l.PushInteger(int(val.NodeParam2))
630                 l.SetField(-2, "node_param2")
631                 l.PushNumber(float64(val.Duration))
632                 l.SetField(-2, "duration")
633                 l.PushInteger(int(val.NodeTile))
634                 l.SetField(-2, "node_tile")
635                 l.PushInteger(int(val.Amount))
636                 l.SetField(-2, "amount")
637                 l.PushBoolean(bool(val.CollisionRm))
638                 l.SetField(-2, "collision_rm")
639         case *mt.ToCltKick:
640                 luaPushKickReason(l, val.Reason)
641                 l.SetField(-2, "reason")
642                 if dr := val.Reason; dr == mt.Custom || dr == mt.Shutdown || dr == mt.Crash {
643                         l.PushString(string(val.Custom))
644                         l.SetField(-2, "custom")
645                 }
646                 if dr := val.Reason; dr == mt.Shutdown || dr == mt.Crash {
647                         l.PushBoolean(bool(val.Reconnect))
648                         l.SetField(-2, "reconnect")
649                 }
650         case *mt.ToCltDelParticleSpawner:
651                 l.PushInteger(int(val.ID))
652                 l.SetField(-2, "id")
653         case *mt.ToCltModChanSig:
654                 l.PushString(string(val.Channel))
655                 l.SetField(-2, "channel")
656                 luaPushModChanSig(l, val.Signal)
657                 l.SetField(-2, "signal")
658         case *mt.ToCltMoonParams:
659                 l.PushNumber(float64(val.Size))
660                 l.SetField(-2, "size")
661                 l.PushString(string(val.ToneMap))
662                 l.SetField(-2, "tone_map")
663                 l.PushString(string(val.Texture))
664                 l.SetField(-2, "texture")
665                 l.PushBoolean(bool(val.Visible))
666                 l.SetField(-2, "visible")
667         case *mt.ToCltModChanMsg:
668                 l.PushString(string(val.Channel))
669                 l.SetField(-2, "channel")
670                 l.PushString(string(val.Sender))
671                 l.SetField(-2, "sender")
672                 l.PushString(string(val.Msg))
673                 l.SetField(-2, "msg")
674         case *mt.ToCltSunParams:
675                 l.PushString(string(val.Texture))
676                 l.SetField(-2, "texture")
677                 l.PushBoolean(bool(val.Visible))
678                 l.SetField(-2, "visible")
679                 l.PushNumber(float64(val.Size))
680                 l.SetField(-2, "size")
681                 l.PushString(string(val.ToneMap))
682                 l.SetField(-2, "tone_map")
683                 l.PushBoolean(bool(val.Rising))
684                 l.SetField(-2, "rising")
685                 l.PushString(string(val.Rise))
686                 l.SetField(-2, "rise")
687         case *mt.ToCltInv:
688                 l.PushString(string(val.Inv))
689                 l.SetField(-2, "inv")
690         case *mt.ToCltRemoveNode:
691                 luaPushVec3(l, [3]float64{float64(val.Pos[0]), float64(val.Pos[1]), float64(val.Pos[2])})
692                 l.SetField(-2, "pos")
693         case *mt.ToCltMediaPush:
694                 l.PushString(string(val.SHA1[:]))
695                 l.SetField(-2, "sha1")
696                 l.PushString(string(val.Data))
697                 l.SetField(-2, "data")
698                 l.PushBoolean(bool(val.ShouldCache))
699                 l.SetField(-2, "should_cache")
700                 l.PushString(string(val.Filename))
701                 l.SetField(-2, "filename")
702         case *mt.ToCltLocalPlayerAnim:
703                 luaPushBox1(l, [2]float64{float64(val.Walk[0]), float64(val.Walk[1])})
704                 l.SetField(-2, "walk")
705                 luaPushBox1(l, [2]float64{float64(val.Idle[0]), float64(val.Idle[1])})
706                 l.SetField(-2, "idle")
707                 l.PushNumber(float64(val.Speed))
708                 l.SetField(-2, "speed")
709                 luaPushBox1(l, [2]float64{float64(val.Dig[0]), float64(val.Dig[1])})
710                 l.SetField(-2, "dig")
711                 luaPushBox1(l, [2]float64{float64(val.WalkDig[0]), float64(val.WalkDig[1])})
712                 l.SetField(-2, "walk_dig")
713         case *mt.ToCltFadeSound:
714                 l.PushNumber(float64(val.Step))
715                 l.SetField(-2, "step")
716                 l.PushInteger(int(val.ID))
717                 l.SetField(-2, "id")
718                 l.PushNumber(float64(val.Gain))
719                 l.SetField(-2, "gain")
720         case *mt.ToCltUpdatePlayerList:
721                 luaPushPlayerListUpdateType(l, val.Type)
722                 l.SetField(-2, "type")
723                 luaPushStringList(l, val.Players)
724                 l.SetField(-2, "players")
725         case *mt.ToCltEyeOffset:
726                 luaPushVec3(l, [3]float64{float64(val.First[0]), float64(val.First[1]), float64(val.First[2])})
727                 l.SetField(-2, "first")
728                 luaPushVec3(l, [3]float64{float64(val.Third[0]), float64(val.Third[1]), float64(val.Third[2])})
729                 l.SetField(-2, "third")
730         case *mt.ToCltBlkData:
731                 luaPushVec3(l, [3]float64{float64(val.Blkpos[0]), float64(val.Blkpos[1]), float64(val.Blkpos[2])})
732                 l.SetField(-2, "blkpos")
733         case *mt.ToCltSkyParams:
734                 luaPushColor(l, val.SunFogTint)
735                 l.SetField(-2, "sun_fog_tint")
736                 l.PushString(string(val.FogTintType))
737                 l.SetField(-2, "fog_tint_type")
738                 if val.Type == "regular" {
739                         luaPushColor(l, val.DawnHorizon)
740                         l.SetField(-2, "dawn_horizon")
741                 }
742                 if val.Type == "regular" {
743                         luaPushColor(l, val.DaySky)
744                         l.SetField(-2, "day_sky")
745                 }
746                 l.PushBoolean(bool(val.Clouds))
747                 l.SetField(-2, "clouds")
748                 l.PushString(string(val.Type))
749                 l.SetField(-2, "type")
750                 luaPushColor(l, val.BgColor)
751                 l.SetField(-2, "bg_color")
752                 if val.Type == "regular" {
753                         luaPushColor(l, val.DawnSky)
754                         l.SetField(-2, "dawn_sky")
755                 }
756                 if val.Type == "regular" {
757                         luaPushColor(l, val.NightHorizon)
758                         l.SetField(-2, "night_horizon")
759                 }
760                 if val.Type == "regular" {
761                         luaPushColor(l, val.NightSky)
762                         l.SetField(-2, "night_sky")
763                 }
764                 if val.Type == "regular" {
765                         luaPushColor(l, val.DayHorizon)
766                         l.SetField(-2, "day_horizon")
767                 }
768                 if val.Type == "skybox" {
769                         luaPushTextureList(l, val.Textures)
770                         l.SetField(-2, "textures")
771                 }
772                 luaPushColor(l, val.MoonFogTint)
773                 l.SetField(-2, "moon_fog_tint")
774                 if val.Type == "regular" {
775                         luaPushColor(l, val.Indoor)
776                         l.SetField(-2, "indoor")
777                 }
778         case *mt.ToCltBreath:
779                 l.PushInteger(int(val.Breath))
780                 l.SetField(-2, "breath")
781         case *mt.ToCltChatMsg:
782                 luaPushChatMsgType(l, val.Type)
783                 l.SetField(-2, "type")
784                 l.PushString(string(val.Sender))
785                 l.SetField(-2, "sender")
786                 l.PushNumber(float64(val.Timestamp))
787                 l.SetField(-2, "timestamp")
788                 l.PushString(string(val.Text))
789                 l.SetField(-2, "text")
790         case *mt.ToCltHUDFlags:
791                 luaPushHUDFlags(l, val.Flags)
792                 l.SetField(-2, "flags")
793                 luaPushHUDFlags(l, val.Mask)
794                 l.SetField(-2, "mask")
795         case *mt.ToCltRmHUD:
796                 l.PushInteger(int(val.ID))
797                 l.SetField(-2, "id")
798         case *mt.ToCltStarParams:
799                 l.PushInteger(int(val.Count))
800                 l.SetField(-2, "count")
801                 l.PushNumber(float64(val.Size))
802                 l.SetField(-2, "size")
803                 luaPushColor(l, val.Color)
804                 l.SetField(-2, "color")
805                 l.PushBoolean(bool(val.Visible))
806                 l.SetField(-2, "visible")
807         case *mt.ToCltDeathScreen:
808                 l.PushBoolean(bool(val.PointCam))
809                 l.SetField(-2, "point_cam")
810                 luaPushVec3(l, [3]float64{float64(val.PointAt[0]), float64(val.PointAt[1]), float64(val.PointAt[2])})
811                 l.SetField(-2, "point_at")
812         case *mt.ToCltAddPlayerVel:
813                 luaPushVec3(l, [3]float64{float64(val.Vel[0]), float64(val.Vel[1]), float64(val.Vel[2])})
814                 l.SetField(-2, "vel")
815         case *mt.ToCltMovement:
816                 l.PushNumber(float64(val.JumpSpeed))
817                 l.SetField(-2, "jump_speed")
818                 l.PushNumber(float64(val.FastAccel))
819                 l.SetField(-2, "fast_accel")
820                 l.PushNumber(float64(val.FastSpeed))
821                 l.SetField(-2, "fast_speed")
822                 l.PushNumber(float64(val.Sink))
823                 l.SetField(-2, "sink")
824                 l.PushNumber(float64(val.AirAccel))
825                 l.SetField(-2, "air_accel")
826                 l.PushNumber(float64(val.Gravity))
827                 l.SetField(-2, "gravity")
828                 l.PushNumber(float64(val.CrouchSpeed))
829                 l.SetField(-2, "crouch_speed")
830                 l.PushNumber(float64(val.Smoothing))
831                 l.SetField(-2, "smoothing")
832                 l.PushNumber(float64(val.WalkSpeed))
833                 l.SetField(-2, "walk_speed")
834                 l.PushNumber(float64(val.Fluidity))
835                 l.SetField(-2, "fluidity")
836                 l.PushNumber(float64(val.ClimbSpeed))
837                 l.SetField(-2, "climb_speed")
838                 l.PushNumber(float64(val.DefaultAccel))
839                 l.SetField(-2, "default_accel")
840         case *mt.ToCltCloudParams:
841                 luaPushColor(l, val.AmbientColor)
842                 l.SetField(-2, "ambient_color")
843                 l.PushNumber(float64(val.Density))
844                 l.SetField(-2, "density")
845                 luaPushColor(l, val.DiffuseColor)
846                 l.SetField(-2, "diffuse_color")
847                 l.PushNumber(float64(val.Height))
848                 l.SetField(-2, "height")
849                 luaPushVec2(l, [2]float64{float64(val.Speed[0]), float64(val.Speed[1])})
850                 l.SetField(-2, "speed")
851                 l.PushNumber(float64(val.Thickness))
852                 l.SetField(-2, "thickness")
853         case *mt.ToCltCSMRestrictionFlags:
854                 luaPushCSMRestrictionFlags(l, val.Flags)
855                 l.SetField(-2, "flags")
856                 l.PushInteger(int(val.MapRange))
857                 l.SetField(-2, "map_range")
858         case *mt.ToCltAddNode:
859                 luaPushNode(l, val.Node)
860                 l.SetField(-2, "node")
861                 l.PushBoolean(bool(val.KeepMeta))
862                 l.SetField(-2, "keep_meta")
863                 luaPushVec3(l, [3]float64{float64(val.Pos[0]), float64(val.Pos[1]), float64(val.Pos[2])})
864                 l.SetField(-2, "pos")
865         case *mt.ToCltStopSound:
866                 l.PushInteger(int(val.ID))
867                 l.SetField(-2, "id")
868         case *mt.ToCltInvFormspec:
869                 l.PushString(string(val.Formspec))
870                 l.SetField(-2, "formspec")
871         case *mt.ToCltShowFormspec:
872                 l.PushString(string(val.Formspec))
873                 l.SetField(-2, "formspec")
874                 l.PushString(string(val.Formname))
875                 l.SetField(-2, "formname")
876         case *mt.ToCltTimeOfDay:
877                 l.PushNumber(float64(val.Speed))
878                 l.SetField(-2, "speed")
879                 l.PushInteger(int(val.Time))
880                 l.SetField(-2, "time")
881         }
882 }