1use std::os::raw::c_void;
13
14pub const ABI_MAJOR: u32 = 0;
17pub const ABI_MINOR: u32 = 31;
18pub const ABI_VERSION: u32 = ABI_MAJOR * 10_000 + ABI_MINOR;
20
21#[repr(C)]
26#[derive(Copy, Clone)]
27pub struct YogStr {
28 pub ptr: *const u8,
29 pub len: u32,
30}
31
32impl YogStr {
33 pub const EMPTY: Self = Self {
34 ptr: std::ptr::null(),
35 len: 0,
36 };
37
38 #[inline]
39 pub fn from_str(s: &str) -> Self {
40 Self {
41 ptr: s.as_ptr(),
42 len: s.len() as u32,
43 }
44 }
45
46 #[inline]
47 pub fn is_empty(self) -> bool {
48 self.len == 0 || self.ptr.is_null()
49 }
50
51 #[inline]
54 pub unsafe fn as_str<'a>(self) -> &'a str {
55 if self.ptr.is_null() || self.len == 0 {
56 return "";
57 }
58 std::str::from_utf8_unchecked(std::slice::from_raw_parts(self.ptr, self.len as usize))
59 }
60}
61
62#[repr(C)]
66#[derive(Copy, Clone)]
67pub struct YogOwnedStr {
68 pub ptr: *mut u8,
69 pub len: u32,
70}
71
72impl YogOwnedStr {
73 pub const NONE: Self = Self {
74 ptr: std::ptr::null_mut(),
75 len: 0,
76 };
77
78 pub fn from_string(s: String) -> Self {
80 let len = s.len() as u32;
81 let ptr = Box::into_raw(s.into_bytes().into_boxed_slice()) as *mut u8;
82 Self { ptr, len }
83 }
84
85 #[inline]
86 pub fn is_none(self) -> bool {
87 self.ptr.is_null()
88 }
89}
90
91#[repr(C)]
93#[derive(Copy, Clone)]
94pub struct YogBlockPos {
95 pub x: i32,
96 pub y: i32,
97 pub z: i32,
98}
99
100#[repr(C)]
102#[derive(Copy, Clone)]
103pub struct YogVec3 {
104 pub x: f64,
105 pub y: f64,
106 pub z: f64,
107}
108
109#[repr(C)]
112pub struct YogBlockBreakEvent {
113 pub player: YogStr,
114 pub block: YogStr,
115 pub pos: YogBlockPos,
116 pub dimension: YogStr,
118}
119
120#[repr(C)]
121pub struct YogChatEvent {
122 pub player: YogStr,
123 pub message: YogStr,
124 pub dimension: YogStr,
125}
126
127#[repr(C)]
129pub struct YogPlayerEvent {
130 pub player: YogStr,
131 pub uuid: YogStr,
132 pub dimension: YogStr,
133}
134
135#[repr(C)]
136pub struct YogUseItemEvent {
137 pub player: YogStr,
138 pub item: YogStr,
139 pub sneaking: bool,
141 pub dimension: YogStr,
142}
143
144#[repr(C)]
145pub struct YogUseBlockEvent {
146 pub player: YogStr,
147 pub block: YogStr,
148 pub pos: YogBlockPos,
149 pub dimension: YogStr,
150}
151
152#[repr(C)]
153pub struct YogAttackEntityEvent {
154 pub player: YogStr,
155 pub target_type: YogStr,
156 pub target_uuid: YogStr,
157 pub dimension: YogStr,
158}
159
160#[repr(C)]
161pub struct YogEntityDamageEvent {
162 pub entity_type: YogStr,
163 pub uuid: YogStr,
164 pub amount: f32,
165 pub source: YogStr,
166 pub dimension: YogStr,
167}
168
169#[repr(C)]
170pub struct YogEntityDeathEvent {
171 pub entity_type: YogStr,
172 pub uuid: YogStr,
173 pub source: YogStr,
174 pub dimension: YogStr,
175}
176
177#[repr(C)]
178pub struct YogEntitySpawnEvent {
179 pub entity_type: YogStr,
180 pub uuid: YogStr,
181 pub dimension: YogStr,
182}
183
184#[repr(C)]
187pub struct YogPlayerDeathEvent {
188 pub player: YogStr,
189 pub uuid: YogStr,
190 pub source: YogStr,
192 pub dimension: YogStr,
193}
194
195#[repr(C)]
197pub struct YogPlayerRespawnEvent {
198 pub player: YogStr,
199 pub uuid: YogStr,
200 pub at_anchor: bool,
202 pub dimension: YogStr,
204}
205
206#[repr(C)]
208pub struct YogAdvancementEvent {
209 pub player: YogStr,
210 pub uuid: YogStr,
211 pub advancement: YogStr,
213 pub dimension: YogStr,
214}
215
216#[repr(C)]
219pub struct YogEntityInteractEvent {
220 pub player: YogStr,
221 pub player_uuid: YogStr,
222 pub entity_type: YogStr,
223 pub entity_uuid: YogStr,
224 pub hand: YogStr,
226 pub dimension: YogStr,
227}
228
229#[repr(C)]
231pub struct YogCraftEvent {
232 pub player: YogStr,
233 pub player_uuid: YogStr,
234 pub result_item: YogStr,
235 pub result_count: u32,
236 pub dimension: YogStr,
237}
238
239#[repr(C)]
242pub struct YogExplosionEvent {
243 pub dimension: YogStr,
244 pub x: f64,
245 pub y: f64,
246 pub z: f64,
247 pub power: f32,
248 pub cause_uuid: YogStr,
250}
251
252#[repr(C)]
256pub struct YogItemPickupEvent {
257 pub player: YogStr,
258 pub player_uuid: YogStr,
259 pub item_id: YogStr,
261 pub item_count: u32,
262 pub entity_uuid: YogStr,
264 pub dimension: YogStr,
265}
266
267#[repr(C)]
269pub struct YogPlayerMoveEvent {
270 pub player: YogStr,
271 pub player_uuid: YogStr,
272 pub x: f64,
273 pub y: f64,
274 pub z: f64,
275 pub yaw: f32,
276 pub pitch: f32,
277 pub dimension: YogStr,
278}
279
280#[repr(C)]
284pub struct YogContainerOpenEvent {
285 pub player: YogStr,
286 pub player_uuid: YogStr,
287 pub container_type: YogStr,
288 pub dimension: YogStr,
289}
290
291#[repr(C)]
293pub struct YogContainerCloseEvent {
294 pub player: YogStr,
295 pub player_uuid: YogStr,
296 pub dimension: YogStr,
297}
298
299#[repr(C)]
302pub struct YogProjectileHitEvent {
303 pub projectile_type: YogStr,
305 pub projectile_uuid: YogStr,
306 pub shooter_uuid: YogStr,
308 pub hit_type: YogStr,
310 pub hit_entity_uuid: YogStr,
312 pub x: f64,
313 pub y: f64,
314 pub z: f64,
315 pub dimension: YogStr,
316}
317
318#[repr(C)]
320pub struct YogPlaceBlockEvent {
321 pub player: YogStr,
322 pub block: YogStr,
323 pub pos: YogBlockPos,
324 pub dimension: YogStr,
325}
326
327#[repr(C)]
328pub struct YogPacketEvent {
329 pub channel: YogStr,
330 pub player: YogStr, pub payload: *const u8,
332 pub payload_len: u32,
333}
334
335#[repr(C)]
336pub struct YogCommandEvent {
337 pub name: YogStr,
338 pub args: YogStr,
339 pub source: YogStr,
340 pub uuid: YogStr,
341 pub dimension: YogStr,
343}
344
345#[repr(C)]
347pub struct YogStartupGrantDef {
348 pub id: YogStr,
349 pub items: YogStr, pub book: YogStr, pub command: YogStr, }
353
354#[repr(C)]
357pub struct YogItemDef {
358 pub id: YogStr,
359 pub max_stack: u32,
360 pub name: YogStr, pub tooltip: YogStr, pub max_damage: u32,
363 pub fire_resistant: bool,
364 pub fuel_ticks: u32,
365 pub food_nutrition: u32, pub food_saturation: f32,
367 pub food_always_eat: bool,
368}
369
370#[repr(C)]
371pub struct YogBlockDef {
372 pub id: YogStr,
373 pub hardness: f32,
374 pub resistance: f32,
375 pub name: YogStr,
376 pub light_level: u8,
377 pub sound: YogStr, pub requires_tool: bool,
379 pub no_collision: bool,
380 pub slipperiness: f32,
381 pub shape: [f32; 6],
383 pub connects: bool,
386 pub connect_groups: YogStr,
389 pub inventory_id: YogStr,
393}
394
395#[repr(C)]
397pub struct YogInventoryDef {
398 pub id: YogStr,
399 pub slot_count: u32,
400 pub layout: YogStr,
403 pub include_player_inventory: bool,
404 pub player_inv_x: f32,
405 pub player_inv_y: f32,
406 pub background_texture: YogStr,
408 pub title: YogStr,
409}
410
411#[repr(C)]
415#[derive(Copy, Clone)]
416pub struct YogKeyPressEvent {
417 pub key_code: i32,
419 pub scan_code: i32,
420 pub action: i32,
422 pub modifiers: i32,
424}
425
426pub type YogBlockBreakFn =
438 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogBlockBreakEvent, u8) -> bool;
439pub type YogChatFn =
440 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogChatEvent, u8) -> bool;
441pub type YogPlayerFn =
442 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogPlayerEvent, u8) -> bool;
443pub type YogUseItemFn =
444 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogUseItemEvent, u8) -> bool;
445pub type YogUseBlockFn =
446 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogUseBlockEvent, u8) -> bool;
447pub type YogAttackEntityFn =
448 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogAttackEntityEvent, u8) -> bool;
449pub type YogEntityDamageFn =
450 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogEntityDamageEvent, u8) -> bool;
451pub type YogEntityDeathFn =
452 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogEntityDeathEvent, u8) -> bool;
453pub type YogEntitySpawnFn =
454 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogEntitySpawnEvent, u8) -> bool;
455pub type YogPlaceBlockFn =
456 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogPlaceBlockEvent, u8) -> bool;
457pub type YogPlayerDeathFn =
458 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogPlayerDeathEvent, u8) -> bool;
459pub type YogPlayerRespawnFn =
460 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogPlayerRespawnEvent, u8) -> bool;
461pub type YogAdvancementFn =
462 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogAdvancementEvent, u8) -> bool;
463pub type YogEntityInteractFn =
464 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogEntityInteractEvent, u8) -> bool;
465pub type YogCraftFn =
466 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogCraftEvent, u8) -> bool;
467pub type YogExplosionFn =
468 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogExplosionEvent, u8) -> bool;
469pub type YogItemPickupFn =
470 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogItemPickupEvent, u8) -> bool;
471pub type YogPlayerMoveFn =
472 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogPlayerMoveEvent, u8) -> bool;
473pub type YogContainerOpenFn =
474 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogContainerOpenEvent, u8) -> bool;
475pub type YogContainerCloseFn =
476 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogContainerCloseEvent, u8) -> bool;
477pub type YogProjectileHitFn =
478 unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogProjectileHitEvent, u8) -> bool;
479
480pub type YogPacketFn = unsafe extern "C" fn(*mut c_void, *const YogServer, *const YogPacketEvent);
482pub type YogServerFn = unsafe extern "C" fn(*mut c_void, *const YogServer);
484pub type YogCommandFn = unsafe extern "C" fn(
486 ud: *mut c_void,
487 srv: *const YogServer,
488 ev: *const YogCommandEvent,
489 reply_buf: *mut u8,
490 reply_cap: u32,
491 reply_len: *mut u32,
492);
493pub type YogScheduledFn = unsafe extern "C" fn(*mut c_void, *const YogServer);
495
496pub type YogClientFn = unsafe extern "C" fn(ud: *mut c_void);
500pub type YogUIEventFn = unsafe extern "C" fn(ud: *mut c_void, ui_id: YogStr, event_id: YogStr);
503pub type YogHudRenderFn = unsafe extern "C" fn(ud: *mut c_void, gfx: *const YogGfxApi);
504pub type YogWorldRenderFn = unsafe extern "C" fn(ud: *mut c_void, gfx: *const YogGfxApi);
507pub type YogKeyPressFn = unsafe extern "C" fn(ud: *mut c_void, ev: *const YogKeyPressEvent) -> bool;
509pub type YogScreenFn = unsafe extern "C" fn(ud: *mut c_void, screen_class: YogStr) -> bool;
512
513#[repr(C)]
529#[derive(Copy, Clone)]
530pub struct YogGfxApi {
531 pub screen_w: i32,
534 pub screen_h: i32,
536 pub delta_tick: f32,
538 pub scale_factor: f32,
541 pub view_proj: [f32; 16],
544 pub camera_pos: [f32; 3],
546 pub player_pos: [f32; 3],
549 pub _pad1: f32,
550
551 pub buf_create: unsafe extern "C" fn() -> u32,
554 pub buf_delete: unsafe extern "C" fn(handle: u32),
556 pub buf_data: unsafe extern "C" fn(handle: u32, bytes: *const u8, len: u32, dynamic: bool),
559 pub buf_subdata: unsafe extern "C" fn(handle: u32, offset: u32, bytes: *const u8, len: u32),
561
562 pub vao_create: unsafe extern "C" fn() -> u32,
565 pub vao_delete: unsafe extern "C" fn(handle: u32),
567 pub vao_attrib: unsafe extern "C" fn(
570 vao: u32,
571 vbo: u32,
572 index: u32,
573 components: u8,
574 dtype: u8,
575 normalized: bool,
576 stride: u32,
577 offset: u32,
578 ),
579 pub vao_set_ebo: unsafe extern "C" fn(vao: u32, ebo: u32),
581
582 pub prog_create: unsafe extern "C" fn(vert: YogStr, frag: YogStr, out: *mut u32) -> bool,
586 pub prog_delete: unsafe extern "C" fn(handle: u32),
588 pub prog_uniform_1i: unsafe extern "C" fn(prog: u32, name: YogStr, v: i32),
589 pub prog_uniform_1f: unsafe extern "C" fn(prog: u32, name: YogStr, v: f32),
590 pub prog_uniform_2f: unsafe extern "C" fn(prog: u32, name: YogStr, x: f32, y: f32),
591 pub prog_uniform_3f: unsafe extern "C" fn(prog: u32, name: YogStr, x: f32, y: f32, z: f32),
592 pub prog_uniform_4f:
593 unsafe extern "C" fn(prog: u32, name: YogStr, x: f32, y: f32, z: f32, w: f32),
594 pub prog_uniform_mat4: unsafe extern "C" fn(prog: u32, name: YogStr, col_major: *const f32),
596
597 pub tex_create: unsafe extern "C" fn(w: u32, h: u32, rgba: *const u8, linear: bool) -> u32,
601 pub tex_delete: unsafe extern "C" fn(handle: u32),
603 pub tex_bind: unsafe extern "C" fn(unit: u32, handle: u32),
605 pub tex_from_mc: unsafe extern "C" fn(id: YogStr) -> u32,
609
610 pub draw_arrays: unsafe extern "C" fn(vao: u32, prog: u32, mode: u8, first: u32, count: u32),
614 pub draw_elements:
617 unsafe extern "C" fn(vao: u32, ebo: u32, prog: u32, mode: u8, count: u32, u32_idx: bool),
618
619 pub set_blend: unsafe extern "C" fn(enabled: bool, src: u32, dst: u32),
622 pub set_depth: unsafe extern "C" fn(test: bool, write: bool),
624 pub set_scissor: unsafe extern "C" fn(x: i32, y: i32, w: i32, h: i32),
626 pub clear_scissor: unsafe extern "C" fn(),
628 pub set_viewport: unsafe extern "C" fn(x: i32, y: i32, w: i32, h: i32),
630
631 pub draw2d_rect: unsafe extern "C" fn(x1: f32, y1: f32, x2: f32, y2: f32, color: u32),
634 pub draw2d_gradient:
636 unsafe extern "C" fn(x1: f32, y1: f32, x2: f32, y2: f32, top: u32, bottom: u32),
637 pub draw2d_text: unsafe extern "C" fn(text: YogStr, x: f32, y: f32, color: u32, shadow: bool),
639 pub draw2d_mc_tex: unsafe extern "C" fn(
642 id: YogStr,
643 x: f32,
644 y: f32,
645 u0: f32,
646 v0: f32,
647 w: f32,
648 h: f32,
649 tw: f32,
650 th: f32,
651 ),
652
653 pub draw2d_item: unsafe extern "C" fn(id: YogStr, x: f32, y: f32, size: f32),
659}
660
661unsafe impl Send for YogGfxApi {}
662unsafe impl Sync for YogGfxApi {}
663
664#[repr(C)]
674pub struct YogServer {
675 pub ctx: *mut c_void,
676 pub abi_version: u32,
677 pub size: u32,
680
681 pub free_str: unsafe extern "C" fn(ptr: *mut u8, len: u32),
683
684 pub broadcast: unsafe extern "C" fn(ctx: *mut c_void, msg: YogStr),
686
687 pub get_block:
689 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, pos: YogBlockPos) -> YogOwnedStr,
690 pub set_block: unsafe extern "C" fn(
691 ctx: *mut c_void,
692 dim: YogStr,
693 pos: YogBlockPos,
694 block: YogStr,
695 ) -> bool,
696 pub world_time: unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, out: *mut i64) -> bool,
697 pub set_time: unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, time: i64) -> bool,
698 pub is_raining: unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr) -> bool,
699 pub set_weather:
700 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, raining: bool, dur: i32) -> bool,
701
702 pub give_item:
704 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, item: YogStr, count: u32) -> bool,
705 pub player_teleport:
706 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, pos: YogVec3) -> bool,
707 pub send_to_player: unsafe extern "C" fn(
708 ctx: *mut c_void,
709 player: YogStr,
710 channel: YogStr,
711 data: *const u8,
712 len: u32,
713 ) -> bool,
714 pub send_to_server:
715 unsafe extern "C" fn(ctx: *mut c_void, channel: YogStr, data: *const u8, len: u32) -> bool,
716 pub kick_player: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, reason: YogStr) -> bool,
717 pub set_gamemode: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, mode: YogStr) -> bool,
718 pub send_title: unsafe extern "C" fn(
719 ctx: *mut c_void,
720 player: YogStr,
721 title: YogStr,
722 sub: YogStr,
723 fi: i32,
724 stay: i32,
725 fo: i32,
726 ) -> bool,
727 pub send_actionbar: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, msg: YogStr) -> bool,
728 pub play_sound: unsafe extern "C" fn(
729 ctx: *mut c_void,
730 dim: YogStr,
731 pos: YogVec3,
732 sound: YogStr,
733 vol: f32,
734 pitch: f32,
735 ) -> bool,
736 pub play_sound_player: unsafe extern "C" fn(
737 ctx: *mut c_void,
738 player: YogStr,
739 sound: YogStr,
740 vol: f32,
741 pitch: f32,
742 ) -> bool,
743
744 pub entity_teleport: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, pos: YogVec3) -> bool,
746 pub entity_position:
747 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut YogVec3) -> bool,
748 pub entity_health: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut f32) -> bool,
749 pub entity_set_health: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, hp: f32) -> bool,
750 pub entity_kill: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr) -> bool,
751 pub spawn_entity: unsafe extern "C" fn(
752 ctx: *mut c_void,
753 type_id: YogStr,
754 dim: YogStr,
755 pos: YogVec3,
756 ) -> YogOwnedStr,
757 pub entity_add_effect: unsafe extern "C" fn(
758 ctx: *mut c_void,
759 uuid: YogStr,
760 fx: YogStr,
761 dur: i32,
762 amp: u8,
763 particles: bool,
764 ) -> bool,
765 pub entity_remove_effect:
766 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, fx: YogStr) -> bool,
767 pub entity_clear_effects: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr) -> bool,
768 pub entity_velocity:
769 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut YogVec3) -> bool,
770 pub entity_set_velocity:
771 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, vel: YogVec3) -> bool,
772 pub entity_add_velocity:
773 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, vel: YogVec3) -> bool,
774
775 pub has_item_tag: unsafe extern "C" fn(ctx: *mut c_void, item: YogStr, tag: YogStr) -> bool,
777 pub has_block_tag: unsafe extern "C" fn(ctx: *mut c_void, block: YogStr, tag: YogStr) -> bool,
778 pub drop_loot:
779 unsafe extern "C" fn(ctx: *mut c_void, table: YogStr, dim: YogStr, pos: YogVec3) -> bool,
780
781 pub scoreboard_get:
783 unsafe extern "C" fn(ctx: *mut c_void, obj: YogStr, player: YogStr, out: *mut i32) -> bool,
784 pub scoreboard_set:
785 unsafe extern "C" fn(ctx: *mut c_void, obj: YogStr, player: YogStr, score: i32) -> bool,
786 pub scoreboard_add: unsafe extern "C" fn(
787 ctx: *mut c_void,
788 obj: YogStr,
789 player: YogStr,
790 delta: i32,
791 out: *mut i32,
792 ) -> bool,
793
794 pub bossbar_create: unsafe extern "C" fn(
796 ctx: *mut c_void,
797 id: YogStr,
798 title: YogStr,
799 color: YogStr,
800 style: YogStr,
801 ) -> bool,
802 pub bossbar_remove: unsafe extern "C" fn(ctx: *mut c_void, id: YogStr) -> bool,
803 pub bossbar_set_title:
804 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, title: YogStr) -> bool,
805 pub bossbar_set_progress:
806 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, progress: f32) -> bool,
807 pub bossbar_set_color:
808 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, color: YogStr) -> bool,
809 pub bossbar_add_player:
810 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, player: YogStr) -> bool,
811 pub bossbar_remove_player:
812 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, player: YogStr) -> bool,
813 pub bossbar_set_visible:
814 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, visible: bool) -> bool,
815
816 pub game_dir: unsafe extern "C" fn(ctx: *mut c_void) -> YogOwnedStr,
818
819 pub online_players: unsafe extern "C" fn(ctx: *mut c_void) -> YogOwnedStr,
822
823 pub get_block_nbt:
826 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, pos: YogBlockPos) -> YogOwnedStr,
827 pub set_block_nbt:
829 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, pos: YogBlockPos, snbt: YogStr) -> bool,
830
831 pub player_inventory: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr) -> YogOwnedStr,
834 pub player_set_slot: unsafe extern "C" fn(
836 ctx: *mut c_void,
837 player: YogStr,
838 slot: u32,
839 item_id: YogStr,
840 count: u32,
841 ) -> bool,
842
843 pub get_inventory_slot: unsafe extern "C" fn(
847 ctx: *mut c_void,
848 dim: YogStr,
849 pos: YogBlockPos,
850 slot: u32,
851 ) -> YogOwnedStr,
852 pub set_inventory_slot: unsafe extern "C" fn(
855 ctx: *mut c_void,
856 dim: YogStr,
857 pos: YogBlockPos,
858 slot: u32,
859 item_id: YogStr,
860 count: u32,
861 ) -> bool,
862
863 pub player_teleport_dim:
865 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, dim: YogStr, pos: YogVec3) -> bool,
866 pub entity_teleport_dim:
867 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, dim: YogStr, pos: YogVec3) -> bool,
868
869 pub world_entity_count:
872 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, entity_type: YogStr) -> i32,
873
874 pub entity_get_nbt: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr) -> YogOwnedStr,
877 pub entity_set_nbt: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, snbt: YogStr) -> bool,
879
880 pub spawn_particles: unsafe extern "C" fn(
885 ctx: *mut c_void,
886 dim: YogStr,
887 pos: YogVec3,
888 particle_type: YogStr,
889 count: i32,
890 dx: f64,
891 dy: f64,
892 dz: f64,
893 speed: f64,
894 ) -> bool,
895
896 pub entity_attribute_get:
901 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, attribute_id: YogStr) -> f64,
902 pub entity_attribute_set: unsafe extern "C" fn(
904 ctx: *mut c_void,
905 uuid: YogStr,
906 attribute_id: YogStr,
907 value: f64,
908 ) -> bool,
909
910 pub get_held_item_nbt: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr) -> YogOwnedStr,
914 pub set_held_item_nbt:
917 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, snbt: YogStr) -> bool,
918
919 pub get_offhand_item_nbt: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr) -> YogOwnedStr,
922 pub set_offhand_item_nbt:
925 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, snbt: YogStr) -> bool,
926 pub get_slot_item:
929 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, slot: u32) -> YogOwnedStr,
930 pub set_slot_item: unsafe extern "C" fn(
933 ctx: *mut c_void,
934 player: YogStr,
935 slot: u32,
936 item_id: YogStr,
937 count: u32,
938 snbt: YogStr,
939 ) -> bool,
940
941 pub entity_rotation:
945 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut YogVec3) -> bool,
946}
947
948unsafe impl Send for YogServer {}
950unsafe impl Sync for YogServer {}
951
952#[repr(C)]
959#[derive(Copy, Clone)]
960pub struct YogChunkWriterApi {
961 pub chunk_x: i32,
963 pub chunk_z: i32,
965 pub min_y: i32,
967 pub height: i32,
969 pub ctx: *mut c_void,
971 pub set_block:
974 unsafe extern "C" fn(ctx: *mut c_void, x: i32, y: i32, z: i32, block_id: YogStr) -> bool,
975}
976
977unsafe impl Send for YogChunkWriterApi {}
978unsafe impl Sync for YogChunkWriterApi {}
979
980pub type YogChunkGeneratorFn =
983 unsafe extern "C" fn(ud: *mut c_void, writer: *const YogChunkWriterApi);
984
985#[repr(C)]
994pub struct YogApi {
995 pub abi_version: u32,
996 pub size: u32,
998 pub ctx: *mut c_void,
1000 pub server: *const YogServer,
1002
1003 pub on_block_break: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogBlockBreakFn),
1006 pub on_chat: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogChatFn),
1007 pub on_player_join: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerFn),
1008 pub on_player_leave: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerFn),
1009 pub on_use_item: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogUseItemFn),
1010 pub on_use_block: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogUseBlockFn),
1011 pub on_attack_entity:
1012 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogAttackEntityFn),
1013 pub on_entity_damage:
1014 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntityDamageFn),
1015 pub on_entity_death:
1016 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntityDeathFn),
1017 pub on_entity_spawn:
1018 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntitySpawnFn),
1019 pub on_player_place_block:
1020 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlaceBlockFn),
1021 pub on_player_death:
1022 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerDeathFn),
1023 pub on_player_respawn:
1024 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerRespawnFn),
1025 pub on_advancement:
1026 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogAdvancementFn),
1027 pub on_entity_interact:
1029 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntityInteractFn),
1030 pub on_item_craft: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogCraftFn),
1031 pub on_explosion: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogExplosionFn),
1032 pub on_item_pickup: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogItemPickupFn),
1034 pub on_player_move: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerMoveFn),
1035 pub on_container_open:
1036 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogContainerOpenFn),
1037 pub on_container_close:
1038 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogContainerCloseFn),
1039 pub on_projectile_hit:
1040 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogProjectileHitFn),
1041 pub on_server_tick: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogServerFn),
1042 pub on_server_started: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogServerFn),
1043 pub on_server_stopping: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogServerFn),
1044
1045 pub on_packet:
1047 unsafe extern "C" fn(ctx: *mut c_void, channel: YogStr, ud: *mut c_void, h: YogPacketFn),
1048 pub on_client_packet:
1049 unsafe extern "C" fn(ctx: *mut c_void, channel: YogStr, ud: *mut c_void, h: YogPacketFn),
1050
1051 pub register_command:
1053 unsafe extern "C" fn(ctx: *mut c_void, name: YogStr, ud: *mut c_void, h: YogCommandFn),
1054 pub register_typed_command: unsafe extern "C" fn(
1055 ctx: *mut c_void,
1056 name: YogStr,
1057 schema: YogStr,
1058 ud: *mut c_void,
1059 h: YogCommandFn,
1060 ),
1061
1062 pub register_recipe_json:
1066 unsafe extern "C" fn(ctx: *mut c_void, namespace: YogStr, name: YogStr, json: YogStr),
1067
1068 pub register_item: unsafe extern "C" fn(ctx: *mut c_void, def: *const YogItemDef),
1070 pub register_block: unsafe extern "C" fn(ctx: *mut c_void, def: *const YogBlockDef),
1071
1072 pub schedule_once: unsafe extern "C" fn(
1074 ctx: *mut c_void,
1075 delay_ticks: u64,
1076 ud: *mut c_void,
1077 h: YogScheduledFn,
1078 ),
1079 pub schedule_repeating: unsafe extern "C" fn(
1080 ctx: *mut c_void,
1081 period_ticks: u64,
1082 ud: *mut c_void,
1083 h: YogScheduledFn,
1084 ),
1085
1086 pub on_client_tick: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogClientFn),
1088 pub on_hud_render: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogHudRenderFn),
1089 pub on_key_press: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogKeyPressFn),
1090 pub on_screen_open: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogScreenFn),
1091 pub on_screen_close: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogScreenFn),
1092
1093 pub on_world_render:
1098 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogWorldRenderFn),
1099
1100 pub register_startup_grant:
1102 unsafe extern "C" fn(ctx: *mut c_void, grant: *const YogStartupGrantDef),
1103
1104 pub register_book: unsafe extern "C" fn(ctx: *mut c_void, book_id: YogStr, book_json: YogStr),
1106
1107 pub register_ui: unsafe extern "C" fn(
1112 ctx: *mut c_void,
1113 ui_id: YogStr,
1114 layout_json: YogStr,
1115 ud: *mut c_void,
1116 h: YogUIEventFn,
1117 ),
1118
1119 pub on_ui_render:
1126 unsafe extern "C" fn(ctx: *mut c_void, ui_id: YogStr, ud: *mut c_void, h: YogHudRenderFn),
1127
1128 pub register_menu_entry: unsafe extern "C" fn(ctx: *mut c_void, label: YogStr, ui_id: YogStr),
1134
1135 pub mods_list: unsafe extern "C" fn(ctx: *mut c_void) -> YogOwnedStr,
1142 pub free_str: unsafe extern "C" fn(ptr: *mut u8, len: u32),
1145
1146 pub ui_open: unsafe extern "C" fn(ctx: *mut c_void, ui_id: YogStr, modal: bool, pause: bool),
1151
1152 pub register_inventory: unsafe extern "C" fn(ctx: *mut c_void, def: *const YogInventoryDef),
1155
1156 pub interop_export:
1160 unsafe extern "C" fn(ctx: *mut c_void, mod_id: YogStr, symbol: YogStr, ptr: *const c_void),
1161 pub interop_import:
1164 unsafe extern "C" fn(ctx: *mut c_void, mod_id: YogStr, symbol: YogStr) -> *const c_void,
1165
1166 pub register_dimension_json: unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, json: YogStr),
1172 pub register_chunk_generator:
1176 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, ud: *mut c_void, h: YogChunkGeneratorFn),
1177}
1178
1179unsafe impl Send for YogApi {}
1180unsafe impl Sync for YogApi {}