@@ -285,54 +285,18 @@ LL_TYPE_INSTANCE_HOOK(
285285 return origin (player, pos);
286286}
287287
288- LL_TYPE_INSTANCE_HOOK (EatHook1 , HookPriority::Normal, Player, &Player::eat , void , ItemStack const & instance ) {
288+ LL_TYPE_INSTANCE_HOOK (EatHook , HookPriority::Normal, Player, &Player::completeUsingItem , void ) {
289289 IF_LISTENED (EVENT_TYPES::onAte) {
290- if (!CallEvent (
291- EVENT_TYPES::onAte,
292- PlayerClass::newPlayer (this ),
293- ItemClass::newItem (&const_cast <ItemStack&>(instance))
294- )) {
295- return ;
296- }
297- }
298- IF_LISTENED_END (EVENT_TYPES::onAte);
299- origin (instance);
300- }
301- LL_TYPE_INSTANCE_HOOK (
302- EatHook2,
303- HookPriority::Normal,
304- PotionItem,
305- &PotionItem::$useTimeDepleted,
306- ::ItemUseMethod,
307- ::ItemStack& inoutInstance,
308- Level* level,
309- Player* player
310- ) {
311- IF_LISTENED (EVENT_TYPES::onAte) {
312- if (!CallEvent (EVENT_TYPES::onAte, PlayerClass::newPlayer (player), ItemClass::newItem (&inoutInstance))) {
313- return ItemUseMethod::Unknown;
314- }
315- }
316- IF_LISTENED_END (EVENT_TYPES::onAte);
317- return origin (inoutInstance, level, player);
318- }
319- LL_TYPE_INSTANCE_HOOK (
320- EatHook3,
321- HookPriority::Normal,
322- Item,
323- (uintptr_t )BucketItem::$vftable()[79 ],
324- ::ItemUseMethod,
325- ::ItemStack& inoutInstance,
326- Level* level,
327- Player* player
328- ) {
329- IF_LISTENED (EVENT_TYPES::onAte) {
330- if (!CallEvent (EVENT_TYPES::onAte, PlayerClass::newPlayer (player), ItemClass::newItem (&inoutInstance))) {
331- return ItemUseMethod::Unknown;
332- }
290+ const std::set<std::string> item_names{" minecraft:potion" , " minecraft:milk_bucket" , " minecraft:medicine" };
291+ auto checked = mItemInUse ->mItem ->getItem ()->isFood () || item_names.contains (mItemInUse ->mItem ->getTypeName ());
292+ if (checked
293+ && !CallEvent (EVENT_TYPES::onAte, PlayerClass::newPlayer (this ), ItemClass::newItem (&*mItemInUse ->mItem )))
294+ stopUsingItem ();
295+ else origin ();
296+ return ;
333297 }
334298 IF_LISTENED_END (EVENT_TYPES::onAte);
335- return origin (inoutInstance, level, player );
299+ origin ();
336300}
337301
338302LL_TYPE_INSTANCE_HOOK (
@@ -676,11 +640,7 @@ void UseFrameEvent() {
676640 UseFrameHook1::hook ();
677641 UseFrameHook2::hook ();
678642}
679- void EatEvent () {
680- EatHook1::hook ();
681- EatHook2::hook ();
682- EatHook3::hook ();
683- }
643+ void EatEvent () { EatHook::hook (); }
684644void ChangeDimensionEvent () { ChangeDimensionHook::hook (); };
685645void OpenContainerScreenEvent () { OpenContainerScreenHook::hook (); }
686646void UseRespawnAnchorEvent () { UseRespawnAnchorHook::hook (); }
0 commit comments