|
1 | 1 | mod java; |
2 | | -// mod mc; |
3 | | - |
4 | | -// use java::mc::entity::passive::WolfEntity; |
5 | | -// use java::mc::entity::player::PlayerEntity; |
6 | | -// use java::mc::entity::EntityType; |
7 | | -// use java::mc::text::Text; |
8 | | -// use java::mc::util::{ActionResult, Hand}; |
9 | | -// use java::mc::world::World; |
10 | | -use java::{mc::item::Item, Event}; |
11 | | -// use jni::JNIEnv; |
12 | | - |
13 | | -// use jni::objects::JClass; |
14 | | -// use mc::entity::passive::WolfEntity; |
15 | | -// use mc::entity::player::PlayerEntity; |
16 | | -// use mc::entity::EntityType; |
17 | | -// use mc::util::{ActionResult, Hand}; |
18 | | -// use mc::world::World; |
19 | 2 |
|
20 | | -// use rosttasse::conversion::IntoJValue; |
| 3 | +use java::{mc::item::Item, Event}; |
| 4 | +use jni::objects::{JClass as JNIClass, JObject as JNIObject}; |
| 5 | +use jni::JNIEnv; |
| 6 | +use rosttasse::prelude::IntoJValue as _; |
21 | 7 | use rosttasse::primitives::{Function, JClass}; |
| 8 | +use rosttasse::JavaClass as _; |
| 9 | + |
| 10 | +use crate::java::mc::entity::passive::WolfEntity; |
| 11 | +use crate::java::mc::entity::player::PlayerEntity; |
| 12 | +use crate::java::mc::entity::EntityType; |
| 13 | +use crate::java::mc::item::{ItemGroups, ItemSettings, Items}; |
| 14 | +use crate::java::mc::registry::RegistryKeys; |
| 15 | +use crate::java::mc::text::Text; |
| 16 | +use crate::java::mc::util::{ActionResult, Hand}; |
| 17 | +use crate::java::mc::world::World; |
| 18 | +use crate::java::ItemGroupEvents; |
22 | 19 |
|
23 | 20 | const MOD_ID: &str = "apikaprobe"; |
24 | 21 |
|
@@ -72,51 +69,51 @@ rosttasse::bind! { |
72 | 69 | // } |
73 | 70 | // } |
74 | 71 |
|
75 | | -// #[no_mangle] |
76 | | -// pub extern "system" fn Java_me_apika_apikaprobe_RustBridge_main<'local>( |
77 | | -// mut env: JNIEnv<'local>, |
78 | | -// _class: JClass<'local>, |
79 | | -// ) { |
80 | | -// let env = &mut env; |
81 | | -// |
82 | | -// let settings = ItemSettings::new(env); |
83 | | -// let item = register_item(env, "serjio", RegistryKeys::ITEM, settings); |
84 | | -// |
85 | | -// ItemGroupEvents::modify_entries_event(env, ItemGroups::REDSTONE).register(env, item); |
86 | | -// } |
87 | | -// |
88 | | -// #[no_mangle] |
89 | | -// pub extern "system" fn Java_me_apika_apikaprobe_SerjioItem_use<'local>( |
90 | | -// mut env: JNIEnv<'local>, |
91 | | -// _class: JClass<'local>, |
92 | | -// world: JObject<'local>, |
93 | | -// user: JObject<'local>, |
94 | | -// hand: JObject<'local>, |
95 | | -// ) -> JObject<'local> { |
96 | | -// let env = &mut env; |
97 | | -// |
98 | | -// let world = World::from_instance(world.into()); |
99 | | -// let user = PlayerEntity::from_instance(user.into()); |
100 | | -// let _hand = Hand::from_instance(hand.into()); |
101 | | -// |
102 | | -// // Ensure we don't spawn the lightning only on the client. |
103 | | -// // This is to prevent desync. |
104 | | -// if world.is_client.get(env) { |
105 | | -// return ActionResult::PASS.get_raw(env).l().unwrap(); |
106 | | -// } |
107 | | -// |
108 | | -// let player_pos = user.get_block_pos(env).to_center_pos(env); |
109 | | -// let pos = user |
110 | | -// .get_rotation_vector(env) |
111 | | -// .scale(env, 5.0) |
112 | | -// .add_vec(env, player_pos); |
113 | | -// |
114 | | -// let wolf = WolfEntity::new(env, EntityType::WOLF, world); |
115 | | -// |
116 | | -// wolf.set_position(env, pos); |
117 | | -// let name = Text::of(env, "Serjio".to_string()); |
118 | | -// wolf.set_custom_name(env, name); |
119 | | -// world.spawn_entity(env, wolf.cast()); |
120 | | -// |
121 | | -// ActionResult::SUCCESS.into_jvalue(env).l().unwrap() |
122 | | -// } |
| 72 | +#[no_mangle] |
| 73 | +pub extern "system" fn Java_me_apika_apikaprobe_RustBridge_main<'local>( |
| 74 | + mut env: JNIEnv<'local>, |
| 75 | + _class: JNIClass<'local>, |
| 76 | +) { |
| 77 | + let env = &mut env; |
| 78 | + |
| 79 | + let item = |
| 80 | + Items::register::<SerjioItem>(RegistryKeys::ITEM.get(env), ItemSettings::default(env), env); |
| 81 | + |
| 82 | + ItemGroupEvents::modify_entries_event(ItemGroups::REDSTONE, env).register(item, env); |
| 83 | +} |
| 84 | + |
| 85 | +#[no_mangle] |
| 86 | +pub extern "system" fn Java_me_apika_apikaprobe_SerjioItem_use<'local>( |
| 87 | + mut env: JNIEnv<'local>, |
| 88 | + _class: JNIClass<'local>, |
| 89 | + world: JNIObject<'local>, |
| 90 | + user: JNIObject<'local>, |
| 91 | + hand: JNIObject<'local>, |
| 92 | +) -> JNIObject<'local> { |
| 93 | + let env = &mut env; |
| 94 | + |
| 95 | + let world = World::from_raw(world.into()); |
| 96 | + let user = PlayerEntity::from_raw(user.into()); |
| 97 | + let _hand = Hand::from_raw(hand.into()); |
| 98 | + |
| 99 | + // Ensure we don't spawn the lightning only on the client. |
| 100 | + // This is to prevent desync. |
| 101 | + if world.is_client.get(env) { |
| 102 | + return ActionResult::PASS.get_raw(env).l().unwrap(); |
| 103 | + } |
| 104 | + |
| 105 | + let player_pos = user.get_block_pos(env).to_center_pos(env); |
| 106 | + let pos = user |
| 107 | + .get_rotation_vector(env) |
| 108 | + .scale(5.0, env) |
| 109 | + .add_vec(player_pos, env); |
| 110 | + |
| 111 | + let wolf = WolfEntity::new(EntityType::WOLF, world, env); |
| 112 | + |
| 113 | + wolf.set_position(pos, env); |
| 114 | + let name = Text::of("Serjio".to_string(), env); |
| 115 | + wolf.set_custom_name(name, env); |
| 116 | + world.spawn_entity(wolf.cast(), env); |
| 117 | + |
| 118 | + ActionResult::SUCCESS.into_jvalue(env).l().unwrap() |
| 119 | +} |
0 commit comments