|
33 | 33 | #include "mc/world/item/BucketItem.h" |
34 | 34 | #include "mc/world/item/ItemInstance.h" |
35 | 35 | #include "mc/world/item/ItemStack.h" |
| 36 | +#include "mc/world/item/PotionItem.h" |
36 | 37 | #include "mc/world/level/BedrockSpawner.h" |
37 | 38 | #include "mc/world/level/BlockSource.h" |
38 | 39 | #include "mc/world/level/ChangeDimensionRequest.h" |
@@ -223,30 +224,30 @@ LL_TYPE_INSTANCE_HOOK( |
223 | 224 | IF_LISTENED_END(EVENT_TYPES::onInventoryChange); |
224 | 225 | origin(container, slot, oldItem, newItem, forceBalanced); |
225 | 226 | } |
226 | | -//fixme: this hook is not working |
227 | | -// LL_TYPE_INSTANCE_HOOK( |
228 | | -// AttackBlockHook, |
229 | | -// HookPriority::Normal, |
230 | | -// Block, |
231 | | -// &Block::attack, |
232 | | -// bool, |
233 | | -// Player* player, |
234 | | -// BlockPos const& pos |
| 227 | +// fixme: this hook is not working |
| 228 | +// LL_TYPE_INSTANCE_HOOK( |
| 229 | +// AttackBlockHook, |
| 230 | +// HookPriority::Normal, |
| 231 | +// Block, |
| 232 | +// &Block::attack, |
| 233 | +// bool, |
| 234 | +// Player* player, |
| 235 | +// BlockPos const& pos |
235 | 236 | //) { |
236 | | -// IF_LISTENED(EVENT_TYPES::onAttackBlock) { |
237 | | -// ItemStack const& item = player->getSelectedItem(); |
238 | | -// if (!CallEvent( |
239 | | -// EVENT_TYPES::onAttackBlock, |
240 | | -// PlayerClass::newPlayer(player), |
241 | | -// BlockClass::newBlock(pos, player->getDimensionId()), |
242 | | -// !item.isNull() ? ItemClass::newItem(&const_cast<ItemStack&>(item)) : Local<Value>() |
243 | | -// )) { |
244 | | -// return false; |
245 | | -// } |
246 | | -// } |
247 | | -// IF_LISTENED_END(EVENT_TYPES::onAttackBlock); |
248 | | -// return origin(player, pos); |
249 | | -// } |
| 237 | +// IF_LISTENED(EVENT_TYPES::onAttackBlock) { |
| 238 | +// ItemStack const& item = player->getSelectedItem(); |
| 239 | +// if (!CallEvent( |
| 240 | +// EVENT_TYPES::onAttackBlock, |
| 241 | +// PlayerClass::newPlayer(player), |
| 242 | +// BlockClass::newBlock(pos, player->getDimensionId()), |
| 243 | +// !item.isNull() ? ItemClass::newItem(&const_cast<ItemStack&>(item)) : Local<Value>() |
| 244 | +// )) { |
| 245 | +// return false; |
| 246 | +// } |
| 247 | +// } |
| 248 | +// IF_LISTENED_END(EVENT_TYPES::onAttackBlock); |
| 249 | +// return origin(player, pos); |
| 250 | +// } |
250 | 251 |
|
251 | 252 | LL_TYPE_INSTANCE_HOOK( |
252 | 253 | UseFrameHook1, |
@@ -306,26 +307,42 @@ LL_TYPE_INSTANCE_HOOK(EatHook1, HookPriority::Normal, Player, &Player::eat, void |
306 | 307 | IF_LISTENED_END(EVENT_TYPES::onAte); |
307 | 308 | origin(instance); |
308 | 309 | } |
309 | | -//fixme: this hook is not working |
310 | | -// LL_TYPE_INSTANCE_HOOK( |
311 | | -// EatHook2, |
312 | | -// HookPriority::Normal, |
313 | | -// ItemStack, |
314 | | -// &ItemStack::useTimeDepleted, |
315 | | -// ::ItemUseMethod, |
316 | | -// Level* level, |
317 | | -// Player* player |
318 | | -//) { |
319 | | -// IF_LISTENED(EVENT_TYPES::onAte) { |
320 | | -// if (isPotionItem() || getTypeName() == "minecraft:milk_bucket") { |
321 | | -// if (!CallEvent(EVENT_TYPES::onAte, PlayerClass::newPlayer(player), ItemClass::newItem(this))) { |
322 | | -// return ItemUseMethod::Unknown; |
323 | | -// } |
324 | | -// } |
325 | | -// } |
326 | | -// IF_LISTENED_END(EVENT_TYPES::onAte); |
327 | | -// return origin(level, player); |
328 | | -// } |
| 310 | +LL_TYPE_INSTANCE_HOOK( |
| 311 | + EatHook2, |
| 312 | + HookPriority::Normal, |
| 313 | + PotionItem, |
| 314 | + &PotionItem::$useTimeDepleted, |
| 315 | + ::ItemUseMethod, |
| 316 | + ::ItemStack& inoutInstance, |
| 317 | + Level* level, |
| 318 | + Player* player |
| 319 | +) { |
| 320 | + IF_LISTENED(EVENT_TYPES::onAte) { |
| 321 | + if (!CallEvent(EVENT_TYPES::onAte, PlayerClass::newPlayer(player), ItemClass::newItem(&inoutInstance))) { |
| 322 | + return ItemUseMethod::Unknown; |
| 323 | + } |
| 324 | + } |
| 325 | + IF_LISTENED_END(EVENT_TYPES::onAte); |
| 326 | + return origin(inoutInstance, level, player); |
| 327 | +} |
| 328 | +LL_TYPE_INSTANCE_HOOK( |
| 329 | + EatHook3, |
| 330 | + HookPriority::Normal, |
| 331 | + Item, |
| 332 | + (uintptr_t)BucketItem::$vftable()[79], |
| 333 | + ::ItemUseMethod, |
| 334 | + ::ItemStack& inoutInstance, |
| 335 | + Level* level, |
| 336 | + Player* player |
| 337 | +) { |
| 338 | + IF_LISTENED(EVENT_TYPES::onAte) { |
| 339 | + if (!CallEvent(EVENT_TYPES::onAte, PlayerClass::newPlayer(player), ItemClass::newItem(&inoutInstance))) { |
| 340 | + return ItemUseMethod::Unknown; |
| 341 | + } |
| 342 | + } |
| 343 | + IF_LISTENED_END(EVENT_TYPES::onAte); |
| 344 | + return origin(inoutInstance, level, player); |
| 345 | +} |
329 | 346 |
|
330 | 347 | LL_TYPE_INSTANCE_HOOK( |
331 | 348 | ChangeDimensionHook, |
@@ -665,7 +682,8 @@ void UseFrameEvent() { |
665 | 682 | } |
666 | 683 | void EatEvent() { |
667 | 684 | EatHook1::hook(); |
668 | | - // EatHook2::hook(); |
| 685 | + EatHook2::hook(); |
| 686 | + EatHook3::hook(); |
669 | 687 | } |
670 | 688 | void ChangeDimensionEvent() { ChangeDimensionHook::hook(); }; |
671 | 689 | void OpenContainerScreenEvent() { OpenContainerScreenHook::hook(); } |
|
0 commit comments