diff --git a/Minecraft.Client/PlayerConnection.cpp b/Minecraft.Client/PlayerConnection.cpp index e4dc4144..6e8c9605 100644 --- a/Minecraft.Client/PlayerConnection.cpp +++ b/Minecraft.Client/PlayerConnection.cpp @@ -690,6 +690,7 @@ void PlayerConnection::handleUseItem(shared_ptr packet) ServerLevel *level = server->getLevel(player->dimension); shared_ptr item = player->inventory->getSelected(); bool informClient = false; + bool blockHandled = false; int x = packet->getX(); int y = packet->getY(); int z = packet->getZ(); @@ -776,8 +777,7 @@ void PlayerConnection::handleUseItem(shared_ptr packet) int savedItemId = item ? item->id : 0; int savedItemCount = item ? item->count : 0; #endif - - player->gameMode->useItemOn(player, level, item, x, y, z, face, packet->getClickX(), packet->getClickY(), packet->getClickZ()); + player->gameMode->useItemOn(player, level, item, x, y, z, face, packet->getClickX(), packet->getClickY(), packet->getClickZ(), false, &blockHandled); #if defined(_WINDOWS64) && defined(MINECRAFT_SERVER_BUILD) if (validFace) @@ -897,7 +897,8 @@ skipUseItemOn: } //Migrate QuickEquip packet here instead - if (item != nullptr && (item->getItem()->getBaseItemType() == Item::eBaseItemType_helmet + if (item != nullptr && !blockHandled + && (item->getItem()->getBaseItemType() == Item::eBaseItemType_helmet || item->getItem()->getBaseItemType() == Item::eBaseItemType_chestplate || item->getItem()->getBaseItemType() == Item::eBaseItemType_leggings || item->getItem()->getBaseItemType() == Item::eBaseItemType_boots)) { diff --git a/Minecraft.Client/ServerPlayerGameMode.cpp b/Minecraft.Client/ServerPlayerGameMode.cpp index 28a2a836..d8c39a26 100644 --- a/Minecraft.Client/ServerPlayerGameMode.cpp +++ b/Minecraft.Client/ServerPlayerGameMode.cpp @@ -421,6 +421,7 @@ bool ServerPlayerGameMode::useItemOn(shared_ptr player, Level *level, sh if (Tile::tiles[t]->use(level, x, y, z, player, face, clickX, clickY, clickZ)) { if(m_gameRules != nullptr) m_gameRules->onUseTile(t,x,y,z); + *pbUsedItem = true; return true; } }