1use std::os::raw::c_void;
13
14pub const ABI_MAJOR: u32 = 0;
17pub const ABI_MINOR: u32 = 30;
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 pub inv_slot_count: u32,
672 pub inv_slots: [YogInvSlotRaw; MAX_INV_SLOTS],
673}
674
675pub const MAX_INV_SLOTS: usize = 64;
678
679#[repr(C)]
681#[derive(Copy, Clone)]
682pub struct YogInvSlotRaw {
683 pub item_id: YogStr,
685 pub count: u32,
686 pub x: i32,
688 pub y: i32,
689}
690
691impl YogInvSlotRaw {
692 pub const EMPTY: Self = Self {
693 item_id: YogStr::EMPTY,
694 count: 0,
695 x: 0,
696 y: 0,
697 };
698}
699
700unsafe impl Send for YogGfxApi {}
701unsafe impl Sync for YogGfxApi {}
702
703#[repr(C)]
713pub struct YogServer {
714 pub ctx: *mut c_void,
715 pub abi_version: u32,
716 pub size: u32,
719
720 pub free_str: unsafe extern "C" fn(ptr: *mut u8, len: u32),
722
723 pub broadcast: unsafe extern "C" fn(ctx: *mut c_void, msg: YogStr),
725
726 pub get_block:
728 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, pos: YogBlockPos) -> YogOwnedStr,
729 pub set_block: unsafe extern "C" fn(
730 ctx: *mut c_void,
731 dim: YogStr,
732 pos: YogBlockPos,
733 block: YogStr,
734 ) -> bool,
735 pub world_time: unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, out: *mut i64) -> bool,
736 pub set_time: unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, time: i64) -> bool,
737 pub is_raining: unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr) -> bool,
738 pub set_weather:
739 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, raining: bool, dur: i32) -> bool,
740
741 pub give_item:
743 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, item: YogStr, count: u32) -> bool,
744 pub player_teleport:
745 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, pos: YogVec3) -> bool,
746 pub send_to_player: unsafe extern "C" fn(
747 ctx: *mut c_void,
748 player: YogStr,
749 channel: YogStr,
750 data: *const u8,
751 len: u32,
752 ) -> bool,
753 pub send_to_server:
754 unsafe extern "C" fn(ctx: *mut c_void, channel: YogStr, data: *const u8, len: u32) -> bool,
755 pub kick_player: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, reason: YogStr) -> bool,
756 pub set_gamemode: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, mode: YogStr) -> bool,
757 pub send_title: unsafe extern "C" fn(
758 ctx: *mut c_void,
759 player: YogStr,
760 title: YogStr,
761 sub: YogStr,
762 fi: i32,
763 stay: i32,
764 fo: i32,
765 ) -> bool,
766 pub send_actionbar: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, msg: YogStr) -> bool,
767 pub play_sound: unsafe extern "C" fn(
768 ctx: *mut c_void,
769 dim: YogStr,
770 pos: YogVec3,
771 sound: YogStr,
772 vol: f32,
773 pitch: f32,
774 ) -> bool,
775 pub play_sound_player: unsafe extern "C" fn(
776 ctx: *mut c_void,
777 player: YogStr,
778 sound: YogStr,
779 vol: f32,
780 pitch: f32,
781 ) -> bool,
782
783 pub entity_teleport: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, pos: YogVec3) -> bool,
785 pub entity_position:
786 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut YogVec3) -> bool,
787 pub entity_health: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut f32) -> bool,
788 pub entity_set_health: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, hp: f32) -> bool,
789 pub entity_kill: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr) -> bool,
790 pub spawn_entity: unsafe extern "C" fn(
791 ctx: *mut c_void,
792 type_id: YogStr,
793 dim: YogStr,
794 pos: YogVec3,
795 ) -> YogOwnedStr,
796 pub entity_add_effect: unsafe extern "C" fn(
797 ctx: *mut c_void,
798 uuid: YogStr,
799 fx: YogStr,
800 dur: i32,
801 amp: u8,
802 particles: bool,
803 ) -> bool,
804 pub entity_remove_effect:
805 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, fx: YogStr) -> bool,
806 pub entity_clear_effects: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr) -> bool,
807 pub entity_velocity:
808 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut YogVec3) -> bool,
809 pub entity_set_velocity:
810 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, vel: YogVec3) -> bool,
811 pub entity_add_velocity:
812 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, vel: YogVec3) -> bool,
813
814 pub has_item_tag: unsafe extern "C" fn(ctx: *mut c_void, item: YogStr, tag: YogStr) -> bool,
816 pub has_block_tag: unsafe extern "C" fn(ctx: *mut c_void, block: YogStr, tag: YogStr) -> bool,
817 pub drop_loot:
818 unsafe extern "C" fn(ctx: *mut c_void, table: YogStr, dim: YogStr, pos: YogVec3) -> bool,
819
820 pub scoreboard_get:
822 unsafe extern "C" fn(ctx: *mut c_void, obj: YogStr, player: YogStr, out: *mut i32) -> bool,
823 pub scoreboard_set:
824 unsafe extern "C" fn(ctx: *mut c_void, obj: YogStr, player: YogStr, score: i32) -> bool,
825 pub scoreboard_add: unsafe extern "C" fn(
826 ctx: *mut c_void,
827 obj: YogStr,
828 player: YogStr,
829 delta: i32,
830 out: *mut i32,
831 ) -> bool,
832
833 pub bossbar_create: unsafe extern "C" fn(
835 ctx: *mut c_void,
836 id: YogStr,
837 title: YogStr,
838 color: YogStr,
839 style: YogStr,
840 ) -> bool,
841 pub bossbar_remove: unsafe extern "C" fn(ctx: *mut c_void, id: YogStr) -> bool,
842 pub bossbar_set_title:
843 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, title: YogStr) -> bool,
844 pub bossbar_set_progress:
845 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, progress: f32) -> bool,
846 pub bossbar_set_color:
847 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, color: YogStr) -> bool,
848 pub bossbar_add_player:
849 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, player: YogStr) -> bool,
850 pub bossbar_remove_player:
851 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, player: YogStr) -> bool,
852 pub bossbar_set_visible:
853 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, visible: bool) -> bool,
854
855 pub game_dir: unsafe extern "C" fn(ctx: *mut c_void) -> YogOwnedStr,
857
858 pub online_players: unsafe extern "C" fn(ctx: *mut c_void) -> YogOwnedStr,
861
862 pub get_block_nbt:
865 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, pos: YogBlockPos) -> YogOwnedStr,
866 pub set_block_nbt:
868 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, pos: YogBlockPos, snbt: YogStr) -> bool,
869
870 pub player_inventory: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr) -> YogOwnedStr,
873 pub player_set_slot: unsafe extern "C" fn(
875 ctx: *mut c_void,
876 player: YogStr,
877 slot: u32,
878 item_id: YogStr,
879 count: u32,
880 ) -> bool,
881
882 pub get_inventory_slot: unsafe extern "C" fn(
886 ctx: *mut c_void,
887 dim: YogStr,
888 pos: YogBlockPos,
889 slot: u32,
890 ) -> YogOwnedStr,
891 pub set_inventory_slot: unsafe extern "C" fn(
894 ctx: *mut c_void,
895 dim: YogStr,
896 pos: YogBlockPos,
897 slot: u32,
898 item_id: YogStr,
899 count: u32,
900 ) -> bool,
901
902 pub player_teleport_dim:
904 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, dim: YogStr, pos: YogVec3) -> bool,
905 pub entity_teleport_dim:
906 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, dim: YogStr, pos: YogVec3) -> bool,
907
908 pub world_entity_count:
911 unsafe extern "C" fn(ctx: *mut c_void, dim: YogStr, entity_type: YogStr) -> i32,
912
913 pub entity_get_nbt: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr) -> YogOwnedStr,
916 pub entity_set_nbt: unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, snbt: YogStr) -> bool,
918
919 pub spawn_particles: unsafe extern "C" fn(
924 ctx: *mut c_void,
925 dim: YogStr,
926 pos: YogVec3,
927 particle_type: YogStr,
928 count: i32,
929 dx: f64,
930 dy: f64,
931 dz: f64,
932 speed: f64,
933 ) -> bool,
934
935 pub entity_attribute_get:
940 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, attribute_id: YogStr) -> f64,
941 pub entity_attribute_set: unsafe extern "C" fn(
943 ctx: *mut c_void,
944 uuid: YogStr,
945 attribute_id: YogStr,
946 value: f64,
947 ) -> bool,
948
949 pub get_held_item_nbt: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr) -> YogOwnedStr,
953 pub set_held_item_nbt:
956 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, snbt: YogStr) -> bool,
957
958 pub get_offhand_item_nbt: unsafe extern "C" fn(ctx: *mut c_void, player: YogStr) -> YogOwnedStr,
961 pub set_offhand_item_nbt:
964 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, snbt: YogStr) -> bool,
965 pub get_slot_item:
968 unsafe extern "C" fn(ctx: *mut c_void, player: YogStr, slot: u32) -> YogOwnedStr,
969 pub set_slot_item: unsafe extern "C" fn(
972 ctx: *mut c_void,
973 player: YogStr,
974 slot: u32,
975 item_id: YogStr,
976 count: u32,
977 snbt: YogStr,
978 ) -> bool,
979
980 pub entity_rotation:
984 unsafe extern "C" fn(ctx: *mut c_void, uuid: YogStr, out: *mut YogVec3) -> bool,
985}
986
987unsafe impl Send for YogServer {}
989unsafe impl Sync for YogServer {}
990
991#[repr(C)]
998#[derive(Copy, Clone)]
999pub struct YogChunkWriterApi {
1000 pub chunk_x: i32,
1002 pub chunk_z: i32,
1004 pub min_y: i32,
1006 pub height: i32,
1008 pub ctx: *mut c_void,
1010 pub set_block:
1013 unsafe extern "C" fn(ctx: *mut c_void, x: i32, y: i32, z: i32, block_id: YogStr) -> bool,
1014}
1015
1016unsafe impl Send for YogChunkWriterApi {}
1017unsafe impl Sync for YogChunkWriterApi {}
1018
1019pub type YogChunkGeneratorFn =
1022 unsafe extern "C" fn(ud: *mut c_void, writer: *const YogChunkWriterApi);
1023
1024#[repr(C)]
1033pub struct YogApi {
1034 pub abi_version: u32,
1035 pub size: u32,
1037 pub ctx: *mut c_void,
1039 pub server: *const YogServer,
1041
1042 pub on_block_break: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogBlockBreakFn),
1045 pub on_chat: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogChatFn),
1046 pub on_player_join: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerFn),
1047 pub on_player_leave: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerFn),
1048 pub on_use_item: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogUseItemFn),
1049 pub on_use_block: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogUseBlockFn),
1050 pub on_attack_entity:
1051 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogAttackEntityFn),
1052 pub on_entity_damage:
1053 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntityDamageFn),
1054 pub on_entity_death:
1055 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntityDeathFn),
1056 pub on_entity_spawn:
1057 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntitySpawnFn),
1058 pub on_player_place_block:
1059 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlaceBlockFn),
1060 pub on_player_death:
1061 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerDeathFn),
1062 pub on_player_respawn:
1063 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerRespawnFn),
1064 pub on_advancement:
1065 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogAdvancementFn),
1066 pub on_entity_interact:
1068 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogEntityInteractFn),
1069 pub on_item_craft: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogCraftFn),
1070 pub on_explosion: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogExplosionFn),
1071 pub on_item_pickup: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogItemPickupFn),
1073 pub on_player_move: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogPlayerMoveFn),
1074 pub on_container_open:
1075 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogContainerOpenFn),
1076 pub on_container_close:
1077 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogContainerCloseFn),
1078 pub on_projectile_hit:
1079 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogProjectileHitFn),
1080 pub on_server_tick: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogServerFn),
1081 pub on_server_started: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogServerFn),
1082 pub on_server_stopping: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogServerFn),
1083
1084 pub on_packet:
1086 unsafe extern "C" fn(ctx: *mut c_void, channel: YogStr, ud: *mut c_void, h: YogPacketFn),
1087 pub on_client_packet:
1088 unsafe extern "C" fn(ctx: *mut c_void, channel: YogStr, ud: *mut c_void, h: YogPacketFn),
1089
1090 pub register_command:
1092 unsafe extern "C" fn(ctx: *mut c_void, name: YogStr, ud: *mut c_void, h: YogCommandFn),
1093 pub register_typed_command: unsafe extern "C" fn(
1094 ctx: *mut c_void,
1095 name: YogStr,
1096 schema: YogStr,
1097 ud: *mut c_void,
1098 h: YogCommandFn,
1099 ),
1100
1101 pub register_recipe_json:
1105 unsafe extern "C" fn(ctx: *mut c_void, namespace: YogStr, name: YogStr, json: YogStr),
1106
1107 pub register_item: unsafe extern "C" fn(ctx: *mut c_void, def: *const YogItemDef),
1109 pub register_block: unsafe extern "C" fn(ctx: *mut c_void, def: *const YogBlockDef),
1110
1111 pub schedule_once: unsafe extern "C" fn(
1113 ctx: *mut c_void,
1114 delay_ticks: u64,
1115 ud: *mut c_void,
1116 h: YogScheduledFn,
1117 ),
1118 pub schedule_repeating: unsafe extern "C" fn(
1119 ctx: *mut c_void,
1120 period_ticks: u64,
1121 ud: *mut c_void,
1122 h: YogScheduledFn,
1123 ),
1124
1125 pub on_client_tick: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogClientFn),
1127 pub on_hud_render: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogHudRenderFn),
1128 pub on_key_press: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogKeyPressFn),
1129 pub on_screen_open: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogScreenFn),
1130 pub on_screen_close: unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogScreenFn),
1131
1132 pub on_world_render:
1137 unsafe extern "C" fn(ctx: *mut c_void, ud: *mut c_void, h: YogWorldRenderFn),
1138
1139 pub register_startup_grant:
1141 unsafe extern "C" fn(ctx: *mut c_void, grant: *const YogStartupGrantDef),
1142
1143 pub register_book: unsafe extern "C" fn(ctx: *mut c_void, book_id: YogStr, book_json: YogStr),
1145
1146 pub register_ui: unsafe extern "C" fn(
1151 ctx: *mut c_void,
1152 ui_id: YogStr,
1153 layout_json: YogStr,
1154 ud: *mut c_void,
1155 h: YogUIEventFn,
1156 ),
1157
1158 pub on_ui_render:
1165 unsafe extern "C" fn(ctx: *mut c_void, ui_id: YogStr, ud: *mut c_void, h: YogHudRenderFn),
1166
1167 pub register_menu_entry: unsafe extern "C" fn(ctx: *mut c_void, label: YogStr, ui_id: YogStr),
1173
1174 pub mods_list: unsafe extern "C" fn(ctx: *mut c_void) -> YogOwnedStr,
1181 pub free_str: unsafe extern "C" fn(ptr: *mut u8, len: u32),
1184
1185 pub ui_open: unsafe extern "C" fn(ctx: *mut c_void, ui_id: YogStr, modal: bool, pause: bool),
1190
1191 pub register_inventory: unsafe extern "C" fn(ctx: *mut c_void, def: *const YogInventoryDef),
1194
1195 pub interop_export:
1199 unsafe extern "C" fn(ctx: *mut c_void, mod_id: YogStr, symbol: YogStr, ptr: *const c_void),
1200 pub interop_import:
1203 unsafe extern "C" fn(ctx: *mut c_void, mod_id: YogStr, symbol: YogStr) -> *const c_void,
1204
1205 pub register_dimension_json: unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, json: YogStr),
1211 pub register_chunk_generator:
1215 unsafe extern "C" fn(ctx: *mut c_void, id: YogStr, ud: *mut c_void, h: YogChunkGeneratorFn),
1216}
1217
1218unsafe impl Send for YogApi {}
1219unsafe impl Sync for YogApi {}